Das neue PHP-Release: Hat sich das Warten gelohnt?

PHP 5.3, Teil 4
Kommentare

Kaum ein PHP-Release hat so lange auf sich warten lassen wie die Version 5.3. Hat sich das lange Warten gelohnt und wann sollte man umsteigen? Wir sehen uns die wichtigsten Neuerungen in PHP 5.3 an und ich zeige Ihnen, was man damit machen kann.

Das aus der Java-Welt bekannte JAR-Format kombiniert eine ZIP-Datei mit zusätzlichen Metainformationen über die darin enthaltenen Dateien und erlaubt es so, ganze Anwendungen zusammengepackt in einer Datei auszuliefern. Seit der Version 5.3 hat auch PHP ein eigenes ausführbares Archivformat, das in Anlehnung an das Java-Format Phar (PHP Archive) genannt wird. Ein Phar-Archiv ist ausführbarer PHP-Code, der um ein (eventuell komprimiertes) Archiv ergänzt ist.

Es gibt dabei zwei unterschiedliche Phar-Implementierungen: Eine als PHP-Code, sodass ein Phar-Archiv auf jedem PHP-System ausführbar ist und zusätzlich gibt es auch eine C-Implementierung in Form der PHP Extension phar, die standardmäßig Bestandteil jeder PHP 5.3-Installation ist. Ein Phar-Archiv lässt sich mit wenigen Zeilen PHP-Code erzeugen, sofern die PHP-Konfigurationseinstellung phar.readonly in der php.ini deaktiviert ist. Standardmäßig ist diese Einstellung aktiviert, um den schreibenden Zugriff auf Phar-Archive zu verhindern. Der folgende Zweizeiler erzeugt aus dem Inhalt des Verzeichnisses test ein Phar-Archiv test.phar:

$phar = new Phar('test.phar');
$phar->buildFromDirectory('src');

Dieses Archiv lässt sich ebenso einfach wieder auslesen:

$phar = new Phar('test.phar', 0, 'my.phar'); foreach ($phar as $item) { var_dump($item->getFilename()); }

Dieses Programm gibt eine Liste der im Phar-Archiv enthaltenen Dateinamen aus. Die einzelnen -Elemente sind dabei Objekte der Klasse PharFileInfo, die wiederum von SPLFileInfo abgeleitet ist und deshalb alle deren Methoden hat [2]. Beim Öffnen des Archivs test.phar wird ein Alias-Name, und zwar my.phar definiert. Das ist notwendig, damit unabhängig vom eigentlichen Namen des Phar-Archivs auf die Inhalte zugegriffen werden kann:

$phar = new Phar('test.phar' , 0, 'my.phar');
print file_get_contents('phar://my.phar/test.txt');
include 'phar://my.phar/test.php';

Dank des neuen phar Streamwrappers können Dateien in einem Phar-Archiv verwendet werden, als ob sie im normalen Dateisystem abgelegt wären. Die Phar-Datei wird dabei übrigens nicht in ein temporäres Verzeichnis entpackt. Wird eine so genannte Stub-Datei in ein Phar-Archiv eingefügt, können auch ausführbare Archive erzeugt werden. Beim „Aufruf“ des Phar-Archivs wird diese Datei dann automatisch ausgeführt, was natürlich ideal zur Distribution von automatischen Installationsprogrammen ist:

Phar::mapPhar('my.phar');
print 'hello world';
__HALT_COMPILER();

Die Anweisung __HALT_COMPILER() ist besonders wichtig, damit PHP die nach dem Stub folgenden binären Daten, die das eigentliche Archiv repräsentieren, nicht als PHP-Code interpretiert. Nun können wir das ausführbare Phar-Archiv erzeugen:

$phar = new Phar('executable.phar');
$phar->buildFromDirectory('src');
$phar->setStub(file_get_contents('stub.php'));

Hier haben wir die Stub-Datei als stub.php im Dateisystem abgelegt und erzeugen das Archiv wieder aus den Inhalten des src-Unterverzeichnisses. Natürlich kann ein Phar-Archiv auch Unterverzeichnisse enthalten, und selbst damit sind die Möglichkeiten von Phar nicht erschöpft. Phar-Archive haben eine Prüfsumme und können digital signiert werden. Somit kann sichergestellt werden, dass der Inhalt eines Archivs unverändert ist und aus einer bestimmten Quelle kommt.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -