Seite, das ultra-simplistische PHP-MVC-Framework
Siehe die Kinderprojekte dieses Projekts: https://github.com/h3rb/papi und https://github.com/h3rb/pagemin
Demonstration der Einrichtung einer neuen "Seite" -Rahmenanwendung in einem vorkonfigurierten Apache2 -diente domain http://indiedev.space hier klicken
Die obige Demonstration zeigt, wie:
Copyright (C) 2015-2017, H. Elwood Gilliland III Alle Rechte vorbehalten.
Umverteilung und Verwendung in Quellen- und Binärformen mit oder ohne Modifikation sind zulässig, sofern die folgenden Bedingungen erfüllt sind:
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.
Diese Software wird von den Inhabern und Mitwirkenden des Urheberrechts "wie sie" bereitgestellt, und alle ausdrücklichen oder impliziten Garantien, einschließlich, aber nicht beschränkt auf die impliziten Garantien für Handelsfähigkeit und Eignung für einen bestimmten Zweck, werden abgelehnt. In keinem Fall haftet der Urheberrechtsinhaber oder die Mitwirkenden für direkte, indirekte, zufällige, besondere, beispielhafte oder Folgeschäden (einschließlich, aber nicht beschränkt auf die Beschaffung von Ersatzgütern oder -dienstleistungen; Verlust des Verlusts des Verwendungsverlusts, Daten oder Gewinne; Gewinne oder geschäftliche Unterbrechung). Beraten über die Möglichkeit eines solchen Schadens.
Das Seitenframework ist super einfach, hat aber nur sehr kleine Dokumente. Lesen Sie einfach index.php und graben Sie von dort aus, um zu sehen, wie sich Logins funktionieren. Die Anmeldeseite ist noch nicht hergestellt, aber für das Standardadmin -Konto ist das Anmeldung verfügbar.
Ab diesem Zeitpunkt können Sie alles tun. Die Seite ist speziell gut für die Entwicklung minimaler PHP-> PDO-basierter Webanwendungen. Alles, was Sie installieren müssen, ist, sie in einen Ordner zu setzen und die Einstellung von .htaccess und eine Pfad zu überprüfen, und Sie sind golden. Mehrere Seitenbereitstellungen können dieselbe Authentifizierungsdatenbank freigeben. Warum doch ein gigantisches Gerüst verwenden? Alles, was Sie brauchen, ist genau hier, um kollaborative Tools für Teams oder öffentliche Webservices wie Blogs, benutzerdefinierte Social -Media -Websites, was auch immer zu erstellen!
Bitte beachten Sie, dass alles, was Sie wirklich benötigen, im Ordner "Kern" angezeigt wird. Alles andere ist nur die Implementierung über diesem Kern. Alle Core bietet das Seitenobjekt, das PDO-Wrapper und einige wirklich grundsätzlich nützliche Funktionen. Alles andere wird im Hauptordner oder in einem der anderen Unterordner implementiert. Wenn Sie alles in /core /verstehen, kann alles andere entfernt werden (außer vielleicht im Cache -Ordner). Um wieder zum Minimum zurückzukehren, schneiden Sie einfach "Kern" mit einem Keksschneider aus. Es gibt eine Version davon, die jetzt Pagemin http://github.com/h3rb/pagemin erhältlich ist
Page wurde für PHP5 geschrieben, funktioniert jedoch in PHP7 gut, da es einen minimalen Satz von PHP -Sprachfunktionen verwendet. Das einzige, wonach Sie achten müssen, ist die Verwendung des Verstärkers (&), da einige Stücke und Demo -Seiten sie möglicherweise in Form von & $ P verwenden, aber Sie können es einfach durch $ P ersetzen. Das Projekt wurde 2008 gestartet, hatte aber damals nicht den Namen "Seite". Es wurde 2014 wiederbelebt, neu ausgerichtet und umbenannt, als es für das interne Intranet -System eines 3D -Druckstartups zu einem "Samen" wurde. Ich benutze es, um Tools für LostaStronaut.com und als grundlegende "Agar" für andere Lampenwebsites zu erstellen, auf denen ich viele benutzerdefinierte Back-End-Funktionen wünsche. Es wurde auch auf WAMP verwendet.
Verwendungen:
Mit diesem Rahmen habe ich bisher mehrere voll funktionsfähige und verwendete Unternehmenssysteme erstellt. Ich habe ein sicheres Corporate Intranet, ein datenbankbasiertes Online-Content-Management-System und ein Bearbeitungstool für eine Designabteilung, eine Website für integrierte Produktmetriken mit Datenverarbeitung und mehrere Dienstprogrammanwendungen erstellt. Es ist einfach, bereitzustellen und dann zu entwickeln, sobald Sie die Grundlagen kennen. Funktioniert am zuverlässigsten nur auf Lampenstapel. WAMP -Implementierungen funktionieren möglicherweise mit einigen Änderungen, aber ohne Gaurantee. Wurde in AWS -Instanzen eingesetzt und kann auf einen minimalen Fußabdruck reduziert werden, wenn Sie die damit verpackte Beispielfunktionalität entfernen.
Sie können die Seite einfach in einen Ordner kleben und an die Datenbank anhängen. Sie können diesen Vorgang wiederholen, wenn Sie mehrere Funktionssätze erstellen möchten.
Bietet die Grundlagen:
Philosophie:
Beispiel für eine typische "Seite" Controller-View-PHP-Datei:
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.Beispiel für eine typische "automatisierte PHP aus einer Skript" -PHP -Datei:
include " core/automation.php " ; // Does everything Page does except create the Page class.. no Auth either.
//... load models and do stuff to db ...So setzen Sie die volle körnige Protokollierung (in Cache/Protokolle/letztendlich.TXT gespeichert) ein:
global $ plog_level ; $ plog_level = 1 ; // must appear before Page.php is included
include ' core/Page.php ' ;Beispiel für die Erstellung eines neuen Modells:
Mit einem Modell an die Tabelle einer Datenbank anhängen:
global $ database ;
$ my_model = new tableName ( $ database );Siehe Dateien in Core/ PDO/ um zu erfahren, wie alles funktioniert.
Installieren und Verwenden von JQuery
Page unterstützt jede Version von JQuery und verfügt über einige grundlegende Funktionen, mit denen Sie JQuery programmatisch bereitstellen können. Im Gegensatz zu anderen Rahmenbedingungen oder Code-Organisationsmethoden möchten Sie Ihr JQuery-Plugin in die CSS/ und JS/ Ordner aufteilen und die CSS und Bilder in CSS/ und die JavaScript-Dateien in JS/ so platzieren, damit Sie $ page-> js () $-> css () verwenden können, um sie zu laden. Verwenden Sie $ page-> jq (), um Zeilen im Bereich Dokument Ready () zu kleben und $ page-> js () zu verwenden, um dem globalen JavaScript der Seite hinzuzufügen.
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 );');Außerdem möchten Sie sich darüber im Klaren sein, dass Sie die Ladesequenz in Core/Page/Page.Php an der Version Ihrer Wahl am Speicherort Ihrer Wahl ändern oder über eine andere Methode laden, wenn Sie Ihre eigene benutzerdefinierte JQuery laden, oder über eine andere Methode laden, dass es bereits installiert ist, um es nicht zweimal zu installieren, indem Sie es nicht zweimal installieren, indem Sie Folgendes tun:
$page->jq_loaded=TRUE;
Integrierte "Live-Bearbeitung" gemeinsame Daten Widgetry
(Methoden in der Seitenklasse, aber Teil der Nicht-Kernfunktionalität)
Page wurde verwendet, um Datenbankdaten zu bearbeiten-als Datenbank Front-End für ein Unternehmensintranet-und ermöglicht es Ihnen und anderen, Daten im laufenden Fliegen zu bearbeiten. Sie können sogar integrierte Funktionen wie automatisch absperren und Zeilensperre verwenden, um Daten vor dem Bearbeiten von Sniping zu schützen. Die Zeilenverriegelungsunterstützung erfolgt in Shreds/autolocks.php
Alle diese Widgets sind an Ajax gebunden.*. PHP -Dateien und haben einige kleinere Nachteile. Sie werden zur Arbeit geschrieben, aber auf Kosten des Netzwerks (es wird nicht ausgehende Nachrichten verzögert oder verzögert). Wenn Sie die Seite nach dem Ändern schnell schnell verlassen, kann die Anfrage möglicherweise nicht abgeschlossen. Wenn Sie also die Seite verlassen möchten, warten Sie je nach Ihrer aktuellen Netzwerklatenz mindestens 1-2 Sekunden.
Außerdem müssen Sie ACLs verwenden, um Ihre Datenbankbenutzer daran zu hindern, Dinge zu bearbeiten, die sie nicht erlaubt sind. Sie können ACLs entweder durch Tabellen- oder Feldniveau der Granularität in Form von Bearbeitungsname oder Bearbeiten-TableName-Feldname verwenden. Die ACL -Klasse ist in Shreds/ACL.Php definiert und diese ACL -Tags werden in einigen Ajax -Dateien überprüft.*. PHP -Dateien. Sie müssen im Profil des Benutzers gespeichert werden. Mit dem speziellen ACLS "Admin" und "Su" können Sie diese Sicherheit umgehen! Sei vorsichtig da draußen.
Sie müssen JQuery und die von ihnen benötigten Support-Plug-Ins verwenden, und Sie müssen diese Funktionen mit $ page-> bind_loadPlugins () aktivieren.
Sobald Sie aktiviert sind, verwenden Sie die Optionen $ Page-> Bind*, um Ihre primäre globale $-Datenbank zu ändern. Sie sollten sie in core/page.php lesen
$ p = new Page ();
$ p -> Bind_LoadPlugins (); // Automatically loads jQuery and the required jQuery plugins.
$ p -> BindString (...);Sicht/
Enthält alles, was Sie ausdrücklich als "Ansicht" aufrufen möchten - nicht automatisch enthalten, rufen Sie mit: "Ansicht/myview.php" einschließen.
Automatisierung/
Enthält alles, was Ihnen nichts im Webordner hat (ansonsten einen Ordner namens/offline) normalerweise in Form von Bash- und/oder PHP -Skripten, die den Einstiegspunkt für Core/Automation.php verwenden.
Cache/
Enthält Protokolldateien (aus der PLOG -Funktion) und das Caching für Plugins, die Sie möglicherweise verwenden, oder alles andere, was Sie für einen Zwischenspeichern möchten.
Stellen Sie sicher, dass dies schriftlich ist und alle Unterordner ...
Kern/
Enthält den Kern des Seitenrahmens. core/page.php ist die, die Sie ständig einfügen möchten. core/automatation.php ist für Offline -Skripte, die auf Ihre Modelle zugreifen müssen. Core/Utility.Php, wo ich alle nützlichen Helferfunktionen halte.
Kern/PDO/
Enthält die PDO-bezogene Funktionalität. Das, das Sie erweitern müssen, ist das Modell. Sie sollten sie lesen, um ein Gefühl für die Optionen und die Schnittstelle zu bekommen.
CSS/
Enthält Ihre main.css und andere CSS -Dateien für Plugins oder spezielle Bereiche Ihrer Website. Sie können diese Dateien wie folgt einfügen:
$ p -> CSS ( ' main.css ' ); // Includes css/main.css
$ p -> CSS ( ' myplugin/plugin.css ' ); // Includes css/myplugin/plugin.css. Motoren/
Dieser Ordner enthält alles, was "eng.
Formen/
Enthält spezielle Dateien für die Dataform -Klasse, die normalerweise wie Form_name.txt bezeichnet wird, verwendet, um ein klassisches Webformular in einer Datenbank für die Dateneingabe und Bearbeitung direkt auf Felder zuzuordnen.
Beispiele/
Enthält einige Beispiele und Notizen.
global/
Dieser Ordner enthält alles, was "global" ist, und die Dateien werden automatisch enthalten, sodass sie mit Ausnahme von .htaccess in .php enden sollten und gültiger Code sein (keine Syntaxfehler). Im Allgemeinen rufen Sie nur die globale Richtlinie an und stellen Standardeinstellungen ein, obwohl Sie sie auf die gewünschte Weise "intelligenter" machen können.
html/
Enthält HTML -Snippets, die durch Dateireferenz in die -> HTML einer Seite geladen werden können
JS/
Stellen Sie Ihre JavaScript -Dateien hier ein. Wenn Sie $p->JS('somefile.js') hier aussehen und CDN-URLs erkennt.
phtml/
Alles, was Sie bewerten möchten, und HTML mit gemischtem Mode sollte hier sein. Nicht wirklich eine empfohlene Funktion, aber ich habe es hinzugefügt, wenn Sie so etwas machen möchten.
Schemas/
Welche Datenbankschemata, die Sie zur Erstellung Ihrer Website verwendet haben, können hier gespeichert werden, aber es ist unsicher. Löschen Sie diesen Ordner, wenn Sie möchten.
Einstellungen/
Enthält Konfigurationsdateien. Alle Dateien in diesem Ordner werden automatisch geladen und sollten in .php enden und einen gültigen PHP -Code enthalten.
ui/
Enthält UI -Snippet -Dateien, die die UI -Basisklasse in core/ui.php verwenden - ich habe meine in shreds/ Stattdessen hergestellt, aber Sie können dies verwenden, wenn Sie möchten. Alle Dateien in diesem Ordner werden automatisch geladen und sollten in .php enden und einen gültigen PHP -Code enthalten.
Modell/
Enthält Konfigurationsdateien. Alle Dateien in diesem Ordner werden automatisch geladen und sollten in .php enden und einen gültigen PHP -Code enthalten.
Stücke/
Enthält automatisch beladene Module, Ausschnitte, Funktionen, was auch immer. Ich verwende es, um JQuery-Plug-Ins (oder andere JavaScript-Stücke) in PHP zum Vorverarbeitung zu wickeln, wenn ich es nicht anders umgehen möchte. Zum Beispiel habe ich auf diese Weise Muuri.js -Funktionen implementiert, damit Sie sie in einem Endpunkt und nicht in einem HTML/ Ordner -Einschluss -Seite -Fragment oder einer enthaltenen JS -Datei verwenden können.
Module/
Dateien, die Sie manuell einfügen möchten. Ähnlich wie der Verkäufer/ Ordner im Kuchen. include 'module/whatever.php'
ich/
Ihre Bilder! Diese werden beispielsweise in den .html -Dateien verwiesen. Oder Sie können sie mit i/ verweisen
docs/
Dokumentation, die Sie auf Ihrer Website oder anderen Personen zur Verfügung stellen möchten. Wenn es hier eine .sql gibt, löschen Sie es, nachdem Sie es verwendet haben.
Sie müssen abgelaufen, um McRypt umzuschreiben und möglicherweise einige andere.
Für den Einfachheit halber habe ich hier ein Leitfaden aufgenommen, um Sie durch Ubuntu/PHP/Apache2 -Setup zu führen. Dies funktioniert gut in AWS EC2 -Instanzen. Danach kann ein Maschinen -Neustart erforderlich sein.
Wenn Sie Php7.1 mit FPM auf Ubuntu 16.04 LTS installieren, hätten Sie dies vor einem der oben genannten getan:
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
Standard -Administrator -Benutzername: Administrator Passwort für Admin: Ein einzelner Speicherplatz '' (ändern Sie nach dem Anmelden)
Fatal error: Call to a member function Select() on a non-object in /var/www/core/PDO/model.php on line 104
Dies bedeutet, dass Ihre Datenbank nicht ordnungsgemäß eingerichtet ist. Entweder existiert es nicht oder es ist einfach nicht verfügbar.
Die Skelettseite der Beispielstelle wird mit dem integrierten Auth in eine weniger strenge Version von MySQL geschrieben, die standardmäßig installiert wird. Wenn dies der Fall ist, sehen Sie Fehler beim Schreiben in die Datenbank.
Um einige dieser Einschränkungen auszuschalten, werden SSH als Root auf Ihren Server eingehen und diese Datei erstellen: /etc/mysql/conf.d/disable_strict_mode.cnf
Öffnen Sie die Datei und geben Sie diese beiden Zeilen ein:
[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Vervollständigen Sie den Betrieb, indem Sie MySQL neu starten.
sudo service mysql restart
Ein Projekt mit nur der Kernfunktionalität vollständig von vorne zu starten
Leistung und Protokollierung
Sie sollten niemals $ plog_level = 1 Einstellungen auf einem Produktionsserver zulassen.
Sie sollten Ihre Schemas nicht in Ihrem öffentlichen Webordner aufbewahren, dies umfasst aus offensichtlichen Gründen die vorverpackte Seite_authdb.sql.
Eigentum an Daten
Beachten Sie, dass Sie alle Datenbankanfragen für Eigentum und Sehbarkeit prüfen müssen. Sobald ich Zeit für die Implementierung des Kernmodul -Kurzes habe, wird Page einige davon für Sie bezüglich des Eigentums über Daten behandelt. Es liegt jedoch an Ihnen, die erforderliche Härtung und Validierung von Daten aus der Datenbank abzurufen und zu speichern. Wenn Sie dies wissen, können viele der ajax.?.php nicht nach Eigentum über Daten suchen, da die Seite ursprünglich für ein transparentes, intern verwendetes Tool geschrieben wurde. Sie sollten Ihr eigenes Datenbank -Eigentümersystem (Gruppen- und Einzel-, öffentliche und private Berechtigungen) implementieren.
Privaten Quellcode verstecken
Die Seite stützt sich auf die Funktion .htaccess -Datei von Apache2 (oder allgemeine Konfigurationsspezifität in Vhost oder HTTPD oder Ports oder je nachdem, was Sie verwenden), um spezielle Berechtigungen und Parameter jedes Webordners und seiner Unterordner festzulegen. Dies geschieht, damit die Seite in andere Projekte eingefügt werden kann oder um an mehreren Stellen auf demselben Webserver zu platzieren. Die Seite aus dem Feld kann in einem Ordner platziert werden und fast alle Dateien werden außer im Hauptordner versteckt. Selbst neue Unterordner, die Sie erstellen, sind nicht öffentlich zugänglich, es sei denn, Sie erstellen eine .htaccess -Datei, die sie zulässt.
Wenn Sie Nginx oder etwas anderes als Apache verwenden, können Sie die nächsten beiden Absätze überspringen und die Anweisungen befolgen.
Einige Leute scheinen jedoch zu glauben, dass dies eine schlechte Idee ist. Solange Sie vorsichtig sind, welche Art von Code Sie auf Seite hinzufügen, sollten Sie in der Lage sein, eine sichere Website zu erstellen. In der Vergangenheit wurde dies für PHP durchgeführt, indem oben in der gesamten enthaltenen Datei getestet wurde, unabhängig davon, ob die Ressource von einem Remote -Browser geladen wurde oder nicht, oder in einer Datei aufgenommen wurde (z. B. Codesigniter, z. Page tut dies nicht, da der gesamte Ordner unzugänglich ist und auch wenn sie es schaffen, eine der "Klassen" -Dateien auszuführen, würde nichts von Bedeutung passieren. Unabhängig davon scheinen einige Leute zu glauben, dass Hacker Apache2 irgendwie zum Narren2 narren können, um .htaccess -Dateien zu ignorieren. Page und seine Upload -Funktionen erlauben dies nicht. Außerdem muss eval() für irgendetwas verwendet werden, da es nicht die gleichen Methoden verwendet, um MVC wie andere Frameworks zu implementieren (zum Beispiel Codesigniter, Zend).
Wenn Sie der Meinung sind, dass das Einfügen von Code in einen exponierten, aber nicht öffentlich zugänglichen Ordner eine schlechte Idee ist, kann die Seite für Ihre Seite sicherer gestaltet werden, indem Sie ihn in einen Offline-Ordner verschieben und nur öffentliche PHP-Endpunkte (Dateien, in denen Sie die Personen durchsuchen möchten) in Ihrem Webserverordner aufdecken. Ich persönlich sehe den Nutzen nicht, außer dass es Ihnen unmöglich macht, durcheinander zu kommen und nicht die .htaccess -Dateien zu haben, die Sie benötigen. Ein Nebeneffekt dabei ist, dass Sie dieselbe Methode verwenden können, wenn Sie mehrere Websites auf der Seite integrieren und einen einzelnen Kern beibehalten möchten.
So halten Sie die Seite außerhalb des SCOPE und in einem Offline-Webordner:
Möglicherweise müssen Sie die ersten Zeilen Ihres tatsächlichen Core/page.php -Zeilens anpassen, um diesen Pfadunterschied widerzuspiegeln, in dem Sie inclupt_all und include_once im Zusammenhang mit dem Kern sehen, aber es sollte in Ordnung sein, da es zu diesem Zeitpunkt relativ zur enthaltenen core/Page.php -Datei ist.
Wenn Sie Module manuell aufgenommen haben, müssen Sie /path/to/page/folder/
Eines Tages werde ich Pown weiter implementieren, was die Saatgut- und Schema -Migrationsfunktionen erleichtert, um das Leben zu erleichtern. Sie können eine gesamte Beschreibung einer Datenbank in einer speziellen Textdatei erstellen (sie sieht wie Klassenerklärungen in C ++ / Java aus) und konvertiert dies in einen JSON-Baum (was Sie auch aus einer Datei lesen können) und füttern Sie dann zu einem in den Bordklassenkonstruktor versuchten, wobei die Migrationsnackation eingesetzt werden, wobei die Migr-Säulen mit $orm->Deploy() . Erste)
Gedanken
Da ich Seite immer mehr benutze, finde ich es süchtig. Page hat ein Äquivalent in der Welt der NodeJs: ExpressJs. Unabhängig davon tippen diese alten Hände immer noch viel schneller. Ich verwende PHP für interne Tools bei LostaStronaut.com ganz effektiv, da es dem C ++ relativ ähnlich ist, in dem ich meine Windows Game -Engine geschrieben habe. Ich arbeite auch an einigen anderen Websites, die es verwenden. Es gibt immer noch nichts, was sich leistungsfähiger anfühlt, als in der Lage zu sein, benutzerdefinierte JavaScript mit PHP zu rendern, auch wenn es sich um einen Syntax -Albtraum handelt.