Страница, ультрасимплистический фреймворк PHP MVC
Смотрите детские проекты этого проекта: https://github.com/h3rb/papi и https://github.com/h3rb/pagemin
Демонстрация настройки нового приложения «страница» на предварительно настроенной Apache2 обслуживает домен
Приведенная выше демонстрация показывает, как:
Copyright (C) 2015-2017, H. Elwood Gilliland III Все права защищены.
Перераспределение и использование в исходных и бинарных формах, с изменением или без них разрешены при условии, что следующие условия выполняются:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
Это программное обеспечение предоставляется владельцами авторского права и участниками «как есть», и любые явные или подразумеваемые гарантии, включая, но не ограничиваясь, подразумеваемые гарантии товарной пригодности и пригодности для определенной цели, отказаны. Ни в коем случае владелец авторского права не несет ответственности за любые прямые, косвенные, случайные, особые, примерные или косвенные убытки (включая, но не ограничиваясь, закупку заместительных товаров или услуг; потеря использования, данные или прибыль; или перерыв в бизнесе), однако, вызвано и по какой -либо теории, будь то в контракте, строгое лику Советуют о возможности такого ущерба.
Структура страницы очень простой, но имеет очень мало документов. Просто прочитайте index.php и копайте оттуда, чтобы увидеть, как работают логины. Страница регистрации еще не сделана, но вход в систему доступен для учетной записи администратора по умолчанию.
С этого момента вы можете сделать что угодно. Страница специально хороша для разработки минимальных веб-приложений на основе PHP-> PDO. Все, что вам нужно установить страницу, - это поместить его в папку и дважды проверить его .htaccess и один настройку пути, и вы золотые. Развертывание нескольких страниц может делиться одной и той же базой данных аутентификации. Зачем в конце концов использовать какую -нибудь гигантскую структуру? Все, что вам нужно, прямо здесь, чтобы начать создавать инструменты совместной работы для команд или публичных веб -сервисов, таких как блоги, пользовательские социальные сети, что угодно!
Обратите внимание, что все, что вам действительно нужно, появляется в папке "Core", все остальное - это просто реализация поверх этого ядра. All Core предоставляет объект страницы, обертка PDO и некоторые действительно основные полезные функции, все остальное реализовано в основной папке или в одном из других подразделов. Если вы все понимаете в /core /, все остальное можно удалить (за исключением, может быть, папка кэша). Чтобы вернуться к минимуму, просто вырежьте «ядро» с помощью резака для печенья. В настоящее время есть версия, которая доступна, называемая Pagemin http://github.com/h3rb/pagemin
Пейдж был написан для PHP5, но отлично работает в PHP7, так как она использует минимальный набор функций языка PHP. Единственное, что вам придется следить за использованием Ampersand (&), поскольку некоторые клоловые и демонстрационные страницы могут использовать его в виде & $ p, но вы можете просто заменить его на $ p. Проект был запущен в 2008 году, но тогда не было названия «страница». Он был возрожден, переориентирован и переименован в 2014 году, когда он стал «семенем» для внутренних систем интрасети 3D -печати. Я использую его для создания инструментов для LostAstronaut.com, и в качестве основного «агара» для других веб-сайтов лампы, где я хочу много пользовательских бэк-функций. Он также использовался на WAMP.
Используется:
С этой структурой до сих пор я сделал несколько полностью функционирующих и используемых корпоративных систем. Я создал безопасную корпоративную интранет, онлайн-систему управления общим контентом на основе базы данных и инструмент редактирования для отдела дизайна, веб-сайт интегрированных метрик продуктов, завершенный с обработкой данных, и несколькими приложениями для утилиты. Его легко развернуть, а затем начать развиваться, как только вы узнаете основы. Работает наиболее надежно только на стеке ламп. Реализации WAMP могут работать с некоторыми модификациями, но без гаурантов. Был развернут в экземплярах AWS и может быть уменьшена до минимального следа, если вы удалите функциональность выборки, которая упакована с ним.
Вы можете просто засунуть страницу в папку и прикрепить ее к базе данных. Вы можете повторить этот процесс, если хотите создать несколько наборов функциональности.
Предоставляет основы:
Философия:
Пример типичного файла PHP-вида «страница»:
include " core/Page.php " ;
$ p = new Page ;
$ p -> title = " My wickid page " ;
if ( Session:: is_logged_in () ) // Checks to see if user is logged in or not...
$ p -> HTML ( " Hey I'm logged in!!!! YAY! " );
else $ p -> HTML ( " not logged in.. :( " );
$ p -> Render (); // Puts page to screen.Пример типичного «автоматизированного PHP из сценария» PHP -файла:
include " core/automation.php " ; // Does everything Page does except create the Page class.. no Auth either.
//... load models and do stuff to db ...Чтобы настроить полную гранулированную регистрацию (сохраненный в Cache/logs/last-log.txt):
global $ plog_level ; $ plog_level = 1 ; // must appear before Page.php is included
include ' core/Page.php ' ;Пример того, как сделать новую модель:
Как прикрепить к таблице базы данных, используя модель:
global $ database ;
$ my_model = new tableName ( $ database );См. Файлы в Core/ PDO/ чтобы узнать, как все работает.
Установка и использование jQuery
Page поддерживает любую версию jQuery и имеет некоторые основные функции, которые позволяют программно развернуть jQuery. В отличие от других фреймворков или организационных методов кода, вы захотите разбить свой плагин jQuery в папки CSS/ и JS/ JS/ размещение CSS и изображений в файлах CSS/ и JavaScript в JS/ чтобы вы могли использовать $ page-> js () $ page-> css (), чтобы загрузить их. Используйте $ page-> jq (), чтобы прикрепить строки в области Document ready () и использовать $ page-> js (), чтобы добавить к глобальному JavaScript страницы.
include ' core/Page.php ' ;
$ p = new Page ();
$ p -> JS ( ' somejsfile.js ' );
$ p -> JS ( ' http://cdn.url.com ' );
$ p -> JQuery (); // Loads Jquery automatically
$ p -> JQ ( '
$("#docisready").on("click" ... );
' );
$ p -> JS ( ' var myGlobal=1; setInterval(function(){alert( ' foo');}, 1000 );');Кроме того, вы захотите знать, что если вы загрузите свой собственный собственный jQuery, либо измените последовательность загрузки в Core/Page.php в версию по вашему выбору в месте по вашему выбору, либо загрузите ее с помощью другого метода и сообщите, что она уже установлена, чтобы не установить его дважды, выполняя: сделав:: Делая: выполнять:
$page->jq_loaded=TRUE;
Встроенное «живое редактирование» общих данных общих данных
(Методы в классе Core Page, но часть неточной функциональности)
Страница использовалась для редактирования данных базы данных-в качестве фронтальной базы данных для корпоративной интрасети-и позволяет вам и другим редактировать данные на лету. Вы даже можете использовать встроенные функции, такие как автоматическое блокировка и блокировка строк для защиты данных от редактирования Sniping. Поддержка блокировки строк находится в Shreds/AutoLocks.php
Все эти виджеты привязаны к Ajax.*. PHP -файлы и имеют пару незначительных недостатков. Они написаны для работы, но за счет сети (это не кеш или задерживает исходящие сообщения). Кроме того, если вы быстро оставите страницу после изменения чего -либо, запрос может не завершить. Итак, если вы собираетесь покинуть страницу, подождите не менее 1-2 секунды в зависимости от вашей текущей задержки сети.
Кроме того, вам нужно использовать ACL для защиты пользователей вашей базы данных от редактирования того, что им не разрешено. Вы можете использовать ACLS с помощью таблицы или поля гранулярности, в виде редактирования имен или редактирования-tablename-lieldname. Класс ACL определяется в shreds/acl.php, и эти «теги ACL» проверяются в некоторых из файлов AJAX.*. PHP. Они должны храниться в профиле пользователя. Специальные ACLS "Admin" и "SU" позволяют вам обойти эту безопасность! Будьте осторожны.
Вы должны использовать jQuery и плагины поддержки, которые им требуются, и вы должны активировать эти функции, используя $ page-> bind_loadplugins ();
После активации вы используете параметры $ page-> bind* для изменения вашей основной глобальной базы данных. Вы должны прочитать их в Core/page.php
$ p = new Page ();
$ p -> Bind_LoadPlugins (); // Automatically loads jQuery and the required jQuery plugins.
$ p -> BindString (...);вид/
Содержит все, что вы хотите прямо назвать «представление» - не включены автоматически, вызовыте: включить «view/myview.php»
автоматизация/
Содержит все, что вы не возражаете в веб -папке (в противном случае, используйте папку с названием/автономной линии), как правило, в виде сценариев Bash и/или PHP, которые используют точку входа Core/Automation.php.
кэш/
Содержит файлы журнала (из функции PLOG) и кэширование для любых плагинов, которые вы можете использовать, или что -либо еще, что вы хотите кэшировать.
Убедитесь, что это можно писать и все его подразделения ...
основной/
Содержит ядро страницы страницы. Core/page.php - это тот, который вы хотите включать все время. Core/Automation.php предназначен для автономных сценариев, которые необходимо получить доступ к вашим моделям. Core/utility.php - это то, где я держу все полезные вспомогательные функции.
Core/PDO/
Содержит функциональность, связанную с PDO. Тот, который вам нужно расширить, - это модель. Вы должны прочитать их, чтобы почувствовать варианты и интерфейс.
CSS/
Содержит ваш main.css и другие файлы CSS для плагинов или специальных областей вашего сайта. Вы можете включить эти файлы, как это:
$ p -> CSS ( ' main.css ' ); // Includes css/main.css
$ p -> CSS ( ' myplugin/plugin.css ' ); // Includes css/myplugin/plugin.css. двигатели/
Эта папка содержит все, что более «похожее на двигатель», и файлы автоматически включаются, поэтому они должны, за исключением .htaccess, заканчиваться в .php и быть допустимым кодом (без синтаксических ошибок).
формы/
Содержит специализированные файлы для класса DataForm, обычно называемые как form_name.txt, используемый для непосредственной карты классической веб -формы поля в базе данных для ввода и редактирования данных.
Примеры/
Содержит несколько примеров и примечаний.
глобальный/
Эта папка содержит все, что является «глобальным», и файлы автоматически включаются, поэтому они должны, за исключением .htaccess, заканчиваться в .php и быть допустимым кодом (без синтаксических ошибок). Как правило, вы просто вызываете глобальную директиву и настраиваете дефолты, хотя вы можете сделать ее «умнее» в любом случае.
HTML/
Содержит фрагменты HTML, которые можно загрузить в страницу -> html по ссылке на файл, пример $ p-> html ('myfile.html') автоматически обнаруживается в HTML/
JS/
Поместите здесь свои файлы JavaScript. Когда вы $p->JS('somefile.js') он будет смотреть здесь, и также распознает URL-адреса CDN.
phtml/
Все, что вы хотите оценить, и включает в себя HTML смешанного режима. Не совсем рекомендуемая функция, но я добавил ее, если вы хотите сделать такие вещи.
схемы/
Какие бы схемы базы данных вы использовали для создания вашего сайта, можно хранить здесь, но это небезопасно. Удалите эту папку, если хотите.
настройки/
Содержит файлы конфигурации. Все файлы в этой папке загружаются автоматически и должны заканчиваться .php и содержать действительный код PHP.
UI/
Содержит файлы фрагментов пользовательского интерфейса, которые используют базовый класс пользовательского интерфейса в core/ui.php - я в итоге сделал свой в shreds/ вместо этого, но вы можете использовать это, если хотите. Все файлы в этой папке загружаются автоматически и должны заканчиваться .php и содержать действительный код PHP.
модель/
Содержит файлы конфигурации. Все файлы в этой папке загружаются автоматически и должны заканчиваться .php и содержать действительный код PHP.
клочки/
Содержит автоматические модули, фрагменты, функции, что угодно. Я использую его, чтобы обернуть плагины jQuery (или другие части JavaScript) в PHP для предварительной обработки, когда я не хочу справляться с этим по-другому. Например, я реализовал функциональность, связанную с Muuri.js таким образом, чтобы вы могли использовать ее в конечной точке, а не в фрагменте включения HTML/ папки или включенный файл JS.
модули/
Файлы, которые вы хотите включить вручную. Подобно поставщику/ папке в торте. include 'module/whatever.php'
я/
Ваши изображения! Все они ссылаются в файлах .html, например. Или вы можете ссылаться на них с i/
Документы/
Документация, которую вы хотите сделать на своем сайте или для других людей. Если здесь есть .sql, удалите его после того, как вы его используете.
Вам нужно будет истекать срок действия A2enmod, включая переписать McRypt и, возможно, некоторые другие.
Для удобства я включил здесь руководство, чтобы провести вас через настройку Ubuntu/PHP/Apache2. Это хорошо работает на экземплярах AWS EC2. После этого может потребоваться перезагрузка машины.
Если вы устанавливаете php7.1 с FPM, на Ubuntu 16.04 LTS, вы бы сделали это до любого из вышеперечисленного:
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install -y unzip apache2 php7.1 php7.1-cli php7.1-common libapache2-mod-php7.1 php7.1-mysql php7.1-fpm php7.1-curl php7.1-gd php7.1-bz2 php7.1-mcrypt php7.1-json php7.1-tidy php7.1-imagick php7.1-mbstring php-redis php-memcached
sudo a2enmod expires include rewrite mcrypt
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.1-fpm
sudo service apache2 restart
По умолчанию admin username: пароль администратора для администратора: одно пространство '' (измените после входа в систему)
Fatal error: Call to a member function Select() on a non-object in /var/www/core/PDO/model.php on line 104
Это означает, что ваша база данных не настроена должным образом. Либо его не существует, либо просто недоступно.
Страница скелета на сайте, в том числе встроенная аут, была записана в менее строгой версии MySQL, чем та, которая будет установлена по умолчанию. Вы увидите ошибки при записи в базу данных, если это так.
Чтобы отключить некоторые из этих ограничений, SSH приведите свой сервер как root и создайте этот файл: /etc/mysql/conf.d/disable_strict_mode.cnf
Откройте файл и введите эти две строки:
[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Заполните операцию, перезапустив MySQL.
sudo service mysql restart
Чтобы полностью запустить проект с нуля, используя только основную функциональность
Производительность и журнал
Вы никогда не должны разрешать настройки $ plog_level = 1 на производственном сервере.
Вы не должны держать свои схемы в своей общедоступной веб-папке, это включает в себя предварительно упакованную Page_authdb.sql, по очевидным причинам.
Владение данными
Обратите внимание, что вы должны проверить все запросы, связанные с базой данных для владения и видимости. В конце концов, как только у меня будет время реализовать основной модуль, страница будет обрабатывать некоторые из них для вас в отношении владения данными, но вы должны выполнить необходимое упрочнение и проверку данных, которые будут получены и хранятся из базы данных. Зная это, многие из ajax.?.php Вы должны реализовать свою собственную систему владения базы данных (групповые и индивидуальные, государственные и частные разрешения).
Скрытие частного исходного кода
Пейдж опирается на функцию файла Apache2 .htaccess (или общая специфичность конфигурации внутри Vhost или HTTPD или порты, или в любом месте. Это сделано, чтобы допустить, чтобы страница была вставлена в другие проекты, или для ее размещения в нескольких местах на одном веб -сервере. Страница вне коробки может быть помещена в папку, и почти все файлы будут скрыты, кроме как в основной папке. Даже новые подпапки, которые вы создаете, не будут общедоступными, если вы не создаете файл .htaccess , который разрешает это.
Если вы используете Nginx или что -то, кроме Apache, вы можете пропустить следующие два абзаца и следовать инструкциям.
Тем не менее, некоторые люди, кажется, думают, что это плохая идея. Пока вы осторожны с тем, какой код вы добавляете на страницу, вы сможете создать безопасный веб -сайт. В прошлом это было сделано для PHP путем тестирования в верхней части каждого включенного файла, независимо от того, загружался ли ресурс удаленным браузером или был включен в файл (например, Zend, Zend). Пейдж не делает этого, потому что вся папка недоступна, а также, если им удалось запустить один из файлов «класса», ничего не произойдет. Несмотря на это, некоторые люди, кажется, считают, что хакеры могут каким -то образом обмануть Apache2 в игнорируя файлы .htaccess. Пейдж и его возможности загрузки не позволяют этому. Кроме того, Page не требует eval() для чего -либо, потому что она не использует те же методы для реализации MVC, что и другие структуры (например, Codeigniter, Zend).
Если вы считаете, что обоснование того, что помещение кода в открытую, но непубликованную папку-это плохая идея, то для вас может стать более безопасным, перемещая ее в автономную папку и разоблачив только общедоступные конечные точки PHP (файлы, которые вы хотите, чтобы люди просматривали) в папке вашего веб-сервера. Я лично не вижу выгоды, за исключением того, что для вас невозможно испортить и не иметь файлов .htaccess , которые вам нужны. Одним из побочных эффектов этого является то, что если у вас есть несколько сайтов, построенных на странице, и вы хотите поддерживать одно ядро, вы можете использовать этот же метод для этого.
Чтобы оставить страницу вне положения и в автономной веб-папке:
Возможно, вам придется отрегулировать первые несколько строк вашего фактического ядра/page.php, чтобы отразить эту разницу в пути, где вы видите include_all и include_once, связанные с ядром, но это должно быть хорошо, поскольку на данный момент он относится к включенному файлу core/Page.php .
Если вы вручную включили какие -либо модули, вам придется добавить /path/to/page/folder/
Однажды я буду в дальнейшем внедрить Pown, что облегчит посев базы данных и функции миграции схемы, чтобы облегчить жизнь. Вы сможете создать целое описание базы данных в специализированном текстовом файле (он будет выглядеть как объявления классов в C ++ / Java) и преобразовать его в дерево JSON (которое вы также можете прочитать из файла), а затем подавать его в конструктор класса COWN, и попытаться развернуть базу или перенести его, используя в $orm->Deploy() Старый тип сначала)
Мысли
По мере того, как я использую страницу все больше и больше, я нахожу ее пристрастием. Страница имеет эквивалент в мире Nodejs: ExpressJS. Несмотря на это, эти старые руки все еще типиют PHP намного быстрее. Я использую PHP для внутренних инструментов на LostAstronaut.com довольно эффективно, потому что он относительно похож на C ++, в котором я записал свой двигатель Windows Game. Я также работаю над некоторыми другими веб -сайтами, которые будут его использовать. По -прежнему нет ничего, что кажется более мощным, чем способность отображать пользовательский JavaScript с помощью PHP, даже если это синтаксический кошмар.