Всем доброго времени суток. Сегодня мы начнем наши первые шаги по созданию движка RS-MINI на котором мы будем собирать небольшой интернет-магазин. Первое с чего нам стоит начать, это организовать одну точку входа. Что эта за точка такая, и для чего она нужна читайте ниже.
Точкой входа является главный index.php. Реализуется данная точка с помощью файла .htaccess. Мы уже однажды говорили про этот файл, так что углубляться что он умеет я не буду.
Для чего нужна одна точка входа? Ответ прост: так проще прослеживать работу скрипта, контролировать его и отлаживать. Что бы человек не вбил в адресную строку, мы всегда попадем на index.php. Давайте я приведу упрощенный более менее понятный пример.
Представьте ситуацию когда мы имеем банковское хранилище с 5-тю дверями. Для того что бы обеспечить безопасность хранилища нам придется поставить пять охранников по одному к каждой двери (и это повезет если можно обойтись только простой охраной).
А теперь представьте то же хранилище, но уже с одной дверью. Согласитесь охранять такое банковское хранилище куда проще.
Как уже говорил реализацию перенаправления берет на себя файл .htaccess. Давайте я сразу приведу его код: (данный файл должен лежать в корне сайта)
# стандартные настройки
# кодировка сервера
AddDefaultCharset utf-8
# запрещаем показывать содержимое директорий если там нет файла index.php[html][htm]
Options -Indexes
# базовый URL для преобразований
RewriteBase /
# включаем реврайт
RewriteEngine on
# правило редиректа с зеркала
# если к сайту обращаются через www.
RewriteCond %{HTTP_HOST} ^www.mini\.test\.ru
# редиректим на домен без www.
RewriteRule ^(.*)$ http://mini.test.ru/$1 [R=301,L]
# перенаправление на, физически существующую, папку или файл
# если в адресную строку вбит путь к файлу, то открываем этот файл
RewriteCond %{REQUEST_FILENAME} !-f
# если в адресную строку вбит путь к папке, то открываем эту папку
RewriteCond %{REQUEST_FILENAME} !-d
# передаем управление точки входа системы RS-MINI
RewriteRule ^.*$ index.php
Да, кстати, сразу хочу сказать, что домен, на котором у меня лежит собираемая система, называется mini.test.ru. В статьях будет фигурировать именно этот домен, так что во избежания проблем настаиваю, что бы Ваш локальный домен назывался точно так же.
Так же в конце каждой статьи я буду выкладывать полный архив собираемой системы, и если Ваш домен будет mini.test.ru то Вам будет достаточно просто скопировать все что я Вам дам на свой локальный сервер, и у Вас сразу все заработает.
Ладно, я отвлекся. Подобно настроенный .htaccess позволяет перенаправлять любые данный введенные в адресную строку на один и тот же файл — index.php.
Давайте теперь создадим эту точку входа. Вот код: (данный файл должен лежать в корне сайта)
<?php
/*
* @package RS-MINI
* @copyright (c) 2015 Alexey Glumov aka Rio-Shaman (support@rio-shaman.ru)
* @license GNU General Public License version 2; see LICENSE.txt
*
*/
define('RS-MINI', TRUE); // константа безопасности
ini_set('display_errors', 1); // показывать ли ошибки на экране
error_reporting(E_ALL | E_STRICT); // ур-нь ошибок
mb_internal_encoding("UTF-8"); // кодировка
date_default_timezone_set('Europe/Moscow'); // временая зона
define('SHORT_DIR_RSMINI', '/rs-mini'); // короткий путь к движку (от корня пользовательской папки)
define('SHORT_DIR_PROJECT', '/project'); // короткий путь к проекту (от корня пользовательской папки)
define('DIR_RSMINI', __DIR__ . SHORT_DIR_RSMINI); // каталог где лежит система (полный путь)
define('DIR_PROJECT', __DIR__ . SHORT_DIR_PROJECT); // каталог где лежит проект (полный путь)
echo "Привет мир!";
Что мы тут имеем?
Ну для начала я объявил константу RS-MINI. У всех остальных файлов будет проверка на наличие этой константы, что позволит нам не беспокоится о том, что кто-то попытается вызвать что-то кроме точки входа.
Далее идут 4-и строчки настоек сервера. А именно:
Следующие 4-и строки, объявляют константы с путями до системных папок. Например для записи файлов через менеджер файлов (который мы обязательно будем писать) нам понадобится полный путь к папке с этими файлами. А для того что бы отобразить ссылки на эти файлы, достаточно будет короткого пути.
Ну и последняя строчка, это тест, на работоспособность
Теперь, если все правильно настроено, при вызове, например, вот такого адреса:
http://mini.test.ru/test-url/
Мы попадет на index.php и увидим наше «привет мир!»
В общем-то что бы мы не ввели (кроме физически существующих папок или файлов) после .ru мы попадем на наше тестовое сообщение.
В самом низу статьи Вы можете скачать то, что у меня получилось. Только будьте осторожны, в архиве очень много пустых папок, поэтому качайте лучше стандартным браузерским менеджером.
На сегодня все, до скорых встреч!
Это я подозреваю для винды. Но насколько я помню (могу конечно ошибаться), даже такой корявый путь как у винды не мешает корректно записывать и обращаться к файлам.
Я бы например так реализовал index.php
А так, да, можно было бы использовать и Ваш подход.
Не используйте функцию count()
Например: