PHP Blogger

Startseite Schreib mir ne Mail! RSS Abo Webnews

Eine Website in einer einzigen Datei?

Diesen Mai hatte Dean Edwards eine wirklich coole Idee: Eine komplette Website in einer einzigen HTML-Datei!

Er nennt das ganze miniWeb - die Geschichte hat nur ein paar Haken:

  • Was ist mit Bildern und Styles?
  • Was ist mit dynamischen Komponenten?
  • Was ist mit Inhalten aus einer Datenbank?

Fragen über Fragen. Und eine Idee: Kann man sowas mit PHP realisieren? Macht das Sinn? Wie siehts mit der Performance und anderen Pferdefüssen aus?

Die Grundidee ist, einen kompletten Verzeichnisbaum mit allen Dateien in einer einzigen Datei zu verpacken. Über einen Parameter, den man der Datei beim Aufruf übergibt, kann man einzelne Dateien direkt ansprechen. Das heisst dann im Einzelnen:

  • Prüfen ob die Datei im angebenen Verzeichnis existiert
  • Wenn ja, Datei auspacken
  • Wenn es eine PHP Datei ist, Code ausführen
  • HTTP-Header für ContentLength und -Type senden
  • Datei an Browser senden

Ohne Probleme geht das ganze bei kleinen Verzeichnisbäumen von statten. Problematisch wirds erst, wenn man größere Dateien ein- und auspacken möchte. Dabei sollte man tunlichst nicht alle Dateien auspacken, die Gewünschte auslesen und dann wieder alles löschen - um eine Performance-Katastrophe zu vermeiden, ist es ratsam, dass nur die Dateien entpackt und ausgelesen werden, die auch benötigt werden.

Da es wahrscheinlich ist, dass die PHP-Mutterdatei ziemlich fett wird (unter Umständen mehrere Megabyte), ist es natürlich interessant zu schauen, wie es um die Performance des PHP Interpreters bestellt ist.

Herausgestellt hat sich folgendes: Sind die Nutzdaten innerhalb der PHP Tags serialisiert abgelegt, kommt es ab etwa 10 MB zum Super-Gau. Sind die Nutzdaten ausserhalb der PHP Tags gelagert, sieht es schon besser aus - in ersten Tests konnte ich bis zu 80 MB relativ performant transportieren.

2 Probleme bleiben noch: Während statische HTML Dateien, Bilder und Stylesheets recht problemlos ausgeliefert werden, müssen PHP Dateien erst noch interpretiert und ausgeführt werden. Und zum Schluss ist die Frage, was mit dynamischen Daten passiert.

Um aus PHP HTML Code zu machen, muss es interpretiert werden - dafür bieten sich 2 Methoden an:

  • Interpretieren mit der eval-Funktion
  • Includen über die Require- oder Include-Funktionen

Die eval-Methode funktioniert sofort, fürs Includen ist etwas Vorarbeit notwendig: Man muss einen entsprechenden Stream-Wrapper bereitstellen.

Und wenn man schon bei einem vernünftigen Stream-Wrapper ist, sollte Schreiben auch kein Problem sein. Dann kann man entweder direkt in die Datei reinschreiben oder simuliert eine Art RAM-Disk mit Hilfe von /tmp.

Und wofür jetzt der ganze Aufriss? Um in einer einzigen Datei eine komplette Website abzubilden? Sicherlicht nicht.

Was mir spontan einfällt, wäre ein Applikations-Installer. Eine Art setup.php, die einen Setup-Assistenten bereitstellt! Der es ermöglicht, das Applikationsverzeichnis zu installieren, Datenbanken einzuspielen, Verzeichnisse und Konfigurationen anzulegen.

Bisher müssen Applikationsentwickler immer noch selbst Setups programmieren bereitstellen - das heisst also: Zeit für ein schickes Setup-Interface, das modulfähig und damit einfach erweiter- und anpassbar ist!

Any Ideas oder Fragen? In den nächsten Tagen stelle ich einen ersten Test-Kandidaten bereit. Stay tuned.

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks

Vitali, Köln meint dazu:

25. Dezember 2007 um 15:52

Hab dich über die Site von Dean Edwards gefunden - die Idee ist schön, ich hab was davon gehört, konnte aber den Artikel nicht übersetzen:) Danke für eine so schöne Erklärung was MiniWeb in der Tat ist!

RSS für Kommentare zu diesem Artikel · TrackBack URI

Schreib Deine Meinung