Facebook
Twitter
Google+
Kommentare
0

Was ist phar und wie nutze ich es?

Phar ist ein Applikations-Archiv-Format genauso wie Jar es für Java ist. Ein Phar-Archiv enthält Dateien und Ordnerstrukturen, und diese Dateien können dann genutzt werden ohne die Phar-Datei zu entpacken. Man kann so seine ganze Applikation oder auch Frameworks in Phar-Dateien packen und verteilen. Phar ist seit 5.2 als PECL Erweiterung verfügbar, seit 5.3 ist es fest eingebaut.

Die Tatsache dass es dann nur noch eine Datei ist hat mehrere Vorteile. Einerseits ist der Upload auf einen FTP schneller, aber auch beispielsweise der Download ist einfacher, anstatt einer zip/tar.gz Datei die danach noch entpackt werden muss lädt man einfach die Phar-Datei und kann loslegen. Viele kleine Dateien bedeuten auch viele Dateisystem-Zugriffe, und wie wir alle wissen ist die Festplatte langsam, Phar bringt also Performance. Wenn man bereits einen Byte-Code-Cache aktiviert hat ist der Performance-Vorteil nur noch gering, aber vorhanden.

Wenn ich beispielsweise in einer phar-Datei meine komplette Applikation habe, starte ich diese folgendermaßen:

php application.phar

Wenn ein Phar-File auf diese Weise gestartet wird, wird das sogenannte Stub-File aufgerufen, quasi der Einstiegspunkt. Das Stub-File ist eine normale PHP-Datei innerhalb des Phar-Archives.

Alternativ kann ich auch aus einem PHP-Script heraus ein Phar-Archiv inkludieren:

<!--?php<br /-->include 'library.phar';

oder aber einzelne Dateien:

<!--?php<br /-->include 'phar://library.phar/App/Class.php';

Phar bietet noch eine Menge weiterer Features, dazu zählt zum Beispiel die Möglichkeit der Signierung, einer Versionierung, Komprimierung, dem Ablegen von Meta-Daten und Manifest-Daten und vielem mehr.

Wie genau man selbst ein Phar-Archiv erstellen kann liest man sich am besten im PHP Manual zum Thema Phar durch. Im aktuellen Zend Studio gibt es dafür eine Export-Möglichkeit.

Ich selbst habe noch keine praktischen Erfahrungen sammeln können die über ein paar kleine Tests hinausgehen. Ich warte nach wie vor darauf dass z.B. das Zend Framework als Phar-Archiv verfügbar wird, vielleicht ja mit Version 2.0? Es gab schon einige Bemühungen auf Benutzerseite, aber es scheint sich nicht durchzusetzen, ich weiß nicht genau warum nicht.

Wo Licht ist, ist auch Schatten, beispielsweise scheint die komplette Phar-Datei in den Speicher geladen zu werden, auch wenn nur eine Datei benötigt wird. Alles bereits im Arbeitsspeicher zu haben kann ein Vorteil sein, bei wenigen Zugriffen auf Phar-Inhalte ist es aber (etwas) unnötiger Speicherverbrauch. Bei einem Test hatte beispielsweise das Zend Framework auf der Festplatte als komprimiertes Phar-Archiv 4MB, nach dem inkludieren wurden 20MB RAM verbraten.

Man muss natürlich aufpassen dass danach der Autoloader und die require_once() Aufrufe nicht ins Leere laufen. Man lädt die erstellte zf.phar dann so:

require_once dirname(__FILE__).'/zf.phar';
set_include_path('phar://zf.phar');

Nachdem der include-Path so angepasst wurde sollte alles funktionieren.

flattr this!

Über den Autor

PHP Gangsta

Der zweitgrößte deutsche, eher praxisorientierte PHP-Blog von Michael Kliewe veröffentlicht seit Mitte 2009 Artikel für Fortgeschrittene.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen