Skip to content

gugglegum/demosite

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Демонстрационный сайт на PHP

Скриншоты для нетерпеливых: https://yadi.sk/d/NRTFA5ZYoWLFP

Screenshot #1 Screenshot #2 Screenshot #3 Screenshot #4 Screenshot #5

Пример простого сайта на PHP, созданный в обучающих целях. Данный сайт призван быть хорошим примером для начинающих PHP-разработчиков. В нём собраны лучшие практики разработки, которые должны сразу приучить к хорошему. Прежде всего, сайт написан с использованием ООП и знакомит новичка с наследованием, инкапсуляцией, работой с исключениями. Примеров полиморфизма, правда, нет. Код сайта оформлен в соответствии со стандартами PSR-1 и PSR-2. Комментарии к коду оформлены в соответствии со стандартом PHPDoc (в будущем PSR-5). Сайт написан с применением концепции MVC, позволяющей уменьшить ненужную зависимость логики приложения от внешнего представления. Правда суть буквы "M" (Model) сведена лишь к существованию отдельного класса для работы с базой данных, нет классов моделей как таковых. В данном сайте намеренно не использовано никаких фреймворков, чтобы помочь новичку разобраться в основах программирования на PHP. Предполагается, что знание этих основ позже поможет ему лучше понять как использовать фреймворки.

В данном сайте реализована поддержка ЧПУ с роутером запросов и генерацией URL по имени маршрута и параметрам. Для взаимодействия с базой данных (MySQL) применяется простой класс-наследник от стандартного класса mysqli. Для загрузки классов применяется упрощённый автозагрузчик PSR-4 (с одним корнем). Многие вещи в данном сайте намеренно упрощены для лучшего понимания на начальном этапе.

Данный сайт содержит главную страницу, 4 раздела и по несколько страниц в каждом разделе. При этом основные разделы отображаются в виде меню сверху, а страницы в текущем разделе в виде бокового меню слева. Текущий раздел и выбранная страница выделяются цветом. Первый раздел является каталогом пицц, их список, цены и описание берутся из базы данных. Картинки берутся с сайта местной службы доставки еды. Остальные разделы являются простыми текстовыми страницами, тексты которых берутся из PHP-шаблонов в каталоге app/views. Сами тексты и картинки в них взяты из Википедии.

Установка

Для работы сайта требуется PHP версии не ниже 5.4, лучше 5.6. Работа на PHP 7 ещё не проверялась.

  1. Создайте директорию проекта: mkdir demosite и перейдите в неё.
  2. Склонируйте данный проект к себе в созданную директорию: git clone git@github.com:gugglegum/demosite.git .
  3. Создайте базу данных MySQL и загрузите в неё дамп из файла mysqldump.sql.
  4. Скопируйте файл config.php в config.local.php и отредактируйте последний в соответствии со своими нуждами, прописав там параметры подключения к созданной базе данных. Неизменённые параметры можно удалить, они возьмутся из config.php. Загружаются оба конфига, но локальный имеет приоритет. Исходный файл config.php изменять не надо.
  5. Настройте на своём веб-сервере виртуальный хост таким образом, чтобы корнем сайта (DocumentRoot) являлся каталог www в проекте, а запросы к несуществующим в каталоге www файлам перенаправлялись на index.php.

Если вы запускаете сайт на локальной машине и вам нужны, например, сообщения об ошибках, то вам нужно включить режим разработчика. Для этого создайте в корне проекта файл init.local.php со следующим содержанием:

<?php
define('APPLICATION_ENV', 'development');

Реврайтинг URL

Для корректной работы ЧПУ на данном сайте необходим механизм реврайтинга URL, который заключается в переопределении соответствия между запрашиваемым URL и файлом на диске. По умолчанию между URL и файлом на диске есть прямая связь: часть адреса после имени домена и до символа "?" или "#" (если есть) добавляется к DocumentRoot текущего хоста и если по получившемуся пути найден файл, то он отправляется в качестве ответа, если нет, то выдаётся ошибка 404. При реврайтинге, среди прочего, у нас есть возможность определить правило, которое звучит так: если запрашиваемый URL не существует, то вызвать index.php. А уже index.php определит какой URL изначально был запрошен и либо выдаст нужную страницу, либо выдаст свою собственную страницу с ошибкой 404. Однако настройка реврайтинга в разных веб-серверах различна. Приведу описание для 2-х хорошо известных мне.

Веб-сервер Apache

Реврайтинг URL в Apache реализуется при помощи подключаемого модуля "mod_rewrite". Модуль mod_rewrite включён в базовый дистрибутив Apache, но отключен по умолчанию. Для его включения, как правило, достаточно раскомментировать строчку LoadModule rewrite_module modules/mod_rewrite.s и перезапустить Apache. Также вам потребуется вручную создать файл www/.htaccess со следующим содержимым:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !^favicon\.ico$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php [L,QSA]

Если после этого при запросе любой страницы, кроме главной, вы всё равно получаете ошибку 404, то скорее всего веб-сервер игнорирует файл .htaccess. Проверьте значение опции AllowOverride. В целях безопасности она обычно стоит в значении None, необходимо переопределить её в значение All, хотя бы для директории с сайтом.

Веб-сервер nginx

Поддержка реврайтинга URL в nginx включена изначально. Однако nginx не поддерживает файлы .htaccess, поэтому правила реврайтинга необходимо описать внутри конфига виртуального хоста. Приведу полностью пример такого конфига:

    server {
        listen       80;
        server_name  demosite.dev;

        set $project_root D:/Users/Pavel/Workspace/demosite;

        root $project_root/www;

        location / {
            try_files $uri @index-php;
            gzip            on;
            gzip_types      text/css application/javascript;
            expires         2w;
        }

        location ~ \.php$ {
            include                 fastcgi_params;
            fastcgi_pass            127.0.0.1:9000;
            fastcgi_index           index.php;
            fastcgi_param           SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        }

        location @index-php {
            rewrite                 ^/(.*)$ /index.php last;
        }
    }

Я думаю, вы догадаетесь что здесь надо подправить, чтобы всё заработало.

Локальное доменное имя

Если у вас нет доменного имени для вашего сайта, то можете выбрать любое, например, "demosite.dev", прописав его в своём локальном файле /etc/hosts. В Windows этот файл находится в %SystemRoot%\System32\drivers\etc\hosts. Отредактируйте его, добавив в него всего одну строчку:

127.0.0.1 demosite.dev

Теперь при попытке обращения браузером на сайт http://demosite.dev, ваш браузер будет обращаться к вашему локальному веб-серверу, сидящему на 80-м порту. В некоторых случаях, если вы пробовали заходить по этому адресу до того, как прописали его в /etc/hosts, может потребоваться перезапуск браузера. Если вы пользуетесь браузером Chrome и вместо открытия вашего сайта открывается поиск Google, то просто добавьте к адресу на конце слэш: http://demosite.dev/.

About

A simple example of creating a PHP web-site with database, router and MVC concept, but without frameworks

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published