Phar Tutorial – PHP Archive

Da ich mich heute endlich mal mit einem neuen Feature aus PHP 5.3 beschäftigen konnte, will ich meine Erkenntnisse Niemandem vorenthalten. Das neue Feature nennt sich Phar und ich bin mir sicher, dass wir davon noch viel in Zukunft hören werden. Jetzt gibt es aber erst einmal eine kleine Einführung.

Phar ist eine Zusammenführung der beiden Wörter PHP und Archiv und ähnelt dem .jar-Format von Java (jar = Java Archiv). In einem Phar-Archiv können prinzipiell alle Datei-Fromate verpackt werden und so lassen sich beispielsweise komplette PHP-Anwendungen in einer Datei archivieren, damit sie leichter verbreitet werden kann.
Ein neues Archiv lässt sich mit den folgenden Code-Zeilen anlegen:

$dir = __DIR__.'/';
$archive = new Phar($dir.'myphar.phar.gz');

Wir legen also ein neues Archiv mit dem Namen myphar.phar.gz an, das Gzip komprimiert ist (zu erkennen an der Endung .gz).
Die Phar-Klasse steht natürlich nur dann zur Verfügung, wenn die Extension auch in der php.ini aktiviert wurde.
Als nächstes müssen wir dem Archiv noch Daten zuführen. Dazu legen wir ein neues Verzeichnis test an mit einer Datei hello.php und dem Inhalt

echo 'hello world';

Jetzt können wir folgenden Befehl verwenden, um alle Daten aus dem Test-Verzeichnis in das Archiv zu speichern:

$archive->buildFromDirectory($dir.'test');
$archive->stopBuffering();

Mit der Methode stopBuffering() werden die Daten dann auf die Festplatte geschrieben.

Wir brauchen also nur knapp 4 Zeilen Code, um ein ganzes Archiv anzulegen, aber wie bekommt man die Dateien jetzt wieder heraus? Dazu gibt es mehrere Möglichkeiten. Welche man benutzt, hängt davon ab, was man mit dem Inhalt machen möchte. Zunächst öffnen wir das Phar-Archiv:

$dir = __DIR__.'/';
$archive = new Phar($dir.'myphar.phar.gz');

Jetzt können wir entweder den ganzen Inhalt zur Laufzeit auslesen, oder aber wieder in ein normales Verzeichnis entpacken.

// Alle Dateien auslesen
foreach($archive as $file)
{
	$ext = strrchr($file->getBasename(), '.');
	// PHP-Dateien können per include einfach eingebunden werden.
	if($ext == '.php')
	{
		include $file->getPathname();
	}
}
 
// Alle Dateien in ein normales Verzeichnis entpacken
$archive->extractTo($dir.'myphar');

Wenn man genau weiß, welche PHP-Datei man haben will, kann man diese auch direkt inkludieren, ohne das Archiv zu öffnen. Dazu muss man nur ein „phar://“ vor den Pfad stellen:

$dir = __DIR__.'/';
include 'phar://'.$dir.'myphar.phar.gz/hellp.php';

So, das sind erst eommal die Grundfunktionen, die man von Phar kennen sollte. Aber man merkt schnell, dass Phar ziemlich einfach zu handhaben ist, weil alles schön in Klassen verpackt ist.
Und noch ein letzter Tipp: Phar baut zum größten Teil auf die SPL Klassen SplFileInfo und DirectoryIterator. Die sollte man sich daher mal genauer anschauen.

SQL Injections Ade: PHP IDS

Nachdem mein Browsergame Yumee letzte Woche wahrscheinlich Opfer einer SQL-Injection geworden ist (fragt mich nicht wie das ging), habe ich kurzer Hand entschieden, die Library PHP IDS einzusetzen.

Kurz zu Einleitung: IDS kommen ursprünglich aus der Netzwerktechnik und überwachen dort Netzwerke auf mögliche Angriffe. Und genau das tut auch die PHP IDS. Wir lassen alle eingehenden Variablen (GET, POST und COOKIE), bevor die Anwendungen damit arbeitet, einmal überprüfen. Wenn die IDS nicht anschlägt, geht der Aufruf durch, ansonsten beenden wir Anwendung einfach.

PHP IDS hat neben seiner Hauptfunktion allerdings noch weitere Features. So lässt sich beispielsweise der HTML Pruifier anbinden, der eingehende Strings nach bösen HTML-Code durchsucht (z.B. <script> oder onclick). Außerdem gibt es verschiedene Logging-Möglichkeiten + automatische E-Mail-Benachrichtigung.
Einziger Nachteil: Es geht ein wenig Performance verloren, wobei das kaum zu merken ist.

Joomla! vs. TYPO3

Der Kampf zweier Open Source CMS

Runde 1: Popularität – Wo bekommt man mehr Hilfe?

Blau: Joomla!, Rot: TYPO3
Diese Statistiken kommen aus Google Trends und zeigen eindeutig, dass Joomla wesentlich mehr Aufsehen genießt als sein Konkurrent. Ein weiterer Punkt für Joomla ist die Community, dessen Forum mit über 1 Millionen Beiträgen großen Support verspricht.
Neuer Stand: 1-0 für Joomla

Runde 2: Funktionalität – Welcher der beiden CMS kann mehr?
Hier hat TYPO3 einen entscheidenden Vorteil: In Joomla ist derzeit die Verteilung von Berechtigungen für Administratoren sehr begrenzt, was für viele bereits ein Ausschlusskriterium ist. Ansonsten bieten beide CMS ungefähr die selben Funktionalitäten, außer das bei Joomla bereits vieles vorinstalliert ist, was bei TYPO3 erst noch stundenlang konfiguriert oder durch Extensions nachinstalliert werden muss.
Neuer Stand: 1-1 Ausgleich

Runde 3: Erweiterbarkeit – Welche Möglichkeiten gibt es außerhalb des Standards?
In dieser Runde schenkt sich keiner etwas. Für beide CMS stehen unzählige kosntelose Erweiterungen bereit und auch für Eigenentwicklungen gibt es einigen Lesestoff zur Unterstützung. Dafür bietet TYPO3 dank Typoscript die wohl größte Konfigurationsmöglichkeit.
Neuer Stand: 1-2 für TYPO3 (für Typoscript)

Runde 4: Programmierung – Welcher Code ist sauberer?
Der TYPO3-Code ist inzwischen schon über 10 Jahre alt und sieht auch dementsprechen aus. Das meiste ist mittlerweile auf Klassen aufgebaut, aber die Struktur ist größtenteils sehr unsauber und kompliziert.
Bei Joomla hingegen wurde die komplette Anwendung mittels MVC-Pattern umgesetzt, was viel Struktur in den Code bringt. Auch sonst ist der Code viel modener und besser zu lesen. Hier ist das Zukunftpotenzial wesentlich höher.
Neuer Stand: 2-2 Ausgleich

Runde 5: Komplexität – Was ist einfacher zu bedienen?
Um mit TYPO3 wirklich gute Webseiten zu bauen, wird einiges an Einarbeitung verlangt. Es gibt einige ziemlich dicke Bücher, die sich mit dem Thema beschäftigen und selbst wenn man damit durch ist, braucht man noch einiges an praktischer Erfahrung, bevor man wirklich durchgestiegen ist. Während der Einrichtung sollte man immer die Typoscript-Referenz zu Rate ziehen, denn die Konfigurierbarkeit ist wirklich enorm.
Auch bei Joomla wird man sich nicht sofort zurecht finden, allerdings muss man für die Bedienung der Administratoberfläche kein Buch gelesen haben. Es reicht ein gutes Tutorial und schon kann man loslegen. Eine einfache Webseite lässt sich sogar komplett ohne Programmierkenntnisse entwerfen!
Endstand: 3-2 für Joomla

Ein knappes Finale, dennoch ist Joomla mein klarer Favorit wegen der super einfachen Bedienung. Joomla ist außerdem wesentlich zukunftssicherer als das veraltete TYPO3. Trotzdem lässt sich nicht immer jede Website mit Joomla am besten umsetzten. Man sollte genau darauf achten, was das CMS wirklich leisten muss.
Und noch eine Anmerkung: Für Joomla 1.6 (Release vorrausichtlich 2010) wird die Rechtevergabe für Admins komplett überarbeitet. Also ein Ausschlusskriterium weniger.