phpundmysql.de

300px-PHP-logo.svg

PHP 5.6 unter Windows: Erste Schritte

Es hat fast schon Tradition, dass wir zu anstehenden PHP Versionen eine Installationsanleitung mit Beispielen zu den neuen oder veränderten Features schreiben. Mit der Veröffentlichung der letzten Beta werfen wir einen ersten Blick auf PHP 5.6.

1. Apache installieren

Für den Test setzen wir einen neuen Apache Webserver mit einem Snapshot von PHP 5.6 auf. Die Installation läuft nicht anders als bei den Vorgängerversionen, beschrieben haben wir das bereits in „PHP 5.5 und Apache unter Windows installieren„. Die letzte Apache Version findet sich unter http://www.apachelounge.com/download/ (Version 2.4.9 zur Erstellung dieses Beitrags). Zur Auswahl stehen je eine Version für 32 und 64 Bit, alle mit Visual Studio 2012 (VC11) kompiliert. Nach dem Download der passenden Version findet sich in dem Archiv ein Ordner namens Apache24, dessen Inhalt wir nach c:\wap extrahieren (Der Name wap unseres Ordners steht in Analogie zum bekannten WAMP für Windows-Apache-PHP, da wir MySQL auslassen). Unsere Ordnerstruktur sieht bisher wie folgt aus:

C:
+- wap
  +- apache
    +- der ganze apache kram wie bin, conf, etc...

Voraussetzung für einen laufenden Webserver ist in diesem Fall, dass „Visual C++ Redistributable für Visual Studio 2012“ als Laufzeitumgebung installiert ist. Sofern die fehlt, bekommt ihr sie unter http://www.microsoft.com/de-de/download/details.aspx?id=30679.

Die Konfiguration des Webservers heben wir uns noch für einen Moment auf: sobald wir PHP heruntergeladen und integriert haben, müssen wir die Config-Dateien eh noch einmal anfassen.

2. PHP installieren

Bei noch nicht veröffentlichten PHP Versionen stehen uns mehrere Alternativen zur Installation zur Verfügung: Zum einen können wir auf die Betaversionen zurückgreifen. Oder aber wir verwenden einen Snapshot. Der Unterschied besteht in der Häufigkeit und der Stabilität der Versionen: Betaversionen gibt es in der Regel 3-4. Sie kommen im Abstand von ein paar Wochen während der Entwicklung, sind stabil genug, um sie der PHP Community zum Probieren hinzuwerfen, und werden auf php.net angekündigt. Archive für Windows werden unter http://windows.php.net/qa/ bereitgestellt. Snapshots finden sich unter http://windows.php.net/downloads/snaps/php-5.6/. Täglich kommen mehrere hinzu. Bei deren Verwendung kann es zu Instabilitäten kommen. Dafür hat man den tagesaktuellen Entwicklungsstand.

Wir verwenden einen Snapshot. Passend zu unserem vorher installierten Apache Webserver brauchen wir die “Thread Safe VC11 x64″ , die den Dateiname php-5.6-ts-windows-vc11-x64-rfb991bd.zip trägt. Ein Blick in das Oberverzeichnis lohnt sich, um die aktuellste Version zu finden. Wir erzeugen unter c:\wap einen neuen Ordner namens php und extrahieren den gesamten Inhalt des eben herunter geladenen Archivs dorthin. Bei der Gelegenheit erzeugen wir noch zwei weitere Verzeichnisse: htdocs für unsere Testskripte und tmp für temporäre Dateien wie Sessions etc unter c:\wap. Alles in allem haben wir folgende Verzeichnisstuktur erzeugt:

C:
+- wap
  +- apache
    +- der ganze apache kram wie bin, conf, etc...
  +- htdocs (noch leer)
  +- php
    +- der ganze php kram wie ext, extras und logs
  +- tmp (noch leer)

3. Die Konfiguration von Apache und PHP

So weit so gut. Wir haben alle Dateien, die wir benötigen und müssen uns nun noch durch die Konfigurationsdateien wühlen. Wie bei den vorigen Anleitungen auch, achten wir darauf, eine portable Installation zu erzeugen, die auch noch lauffähig ist, wenn wir sie an einen anderen Ort auf der Festplatte kopieren oder auf dem USB-Stick mitnehmen. Dazu müssen wir die Pfade in den Konfigurationsdateien relativ angeben.

Beginnen wir mit der Datei c:\wap\php\php.ini. Wir erzeugen die Datei als Kopie von der php.ini-development im selben Verzeichnis. Zur Konfiguration der Extensions suchen wir zuerst nach „extension_dir„. Nicht wundern, es wird mehrere Vorkommen des Suchstrings in der Datei geben. Alle Vorkommen sind im Initialzustand auskommentiert, zu erkennen an dem Semikolon (;) am Zeilenanfang. Wir brauchen nur einen Eintrag, der mit dem Kommentar „; On Windows:“ in der Zeile darüber. Aus
; extension_dir = "ext"
machen wir
extension_dir = "..\..\php\ext"
Nicht übersehen: wir haben das Semikolon am Anfang entfernt, damit die Zeile auch geparst und nicht als Kommentar verworfen wird! Das Verzeichnis ist relativ zu der Apache-Konfigurationsdatei httpd.conf angegeben. Danach aktivieren wir einige grundlegende Extensions, indem wir auch dort das Semikolon am Zeilenanfang entfernen. Dazu suchen wir einen Block von etwa 20 Zeilen, die alle mit ;extension= beginnen. Für einen minimalen Start empfehlen wir curl, gd2, mbstring, mysqli, sockets und xmlrpc.
Abschließend definieren wir das Verzeichnis für temporäre Dateien sowohl für upload_tmp_dir als auch session.save_path und geben das bisher leere tmp-Verzeichnis mit "..\tmp" an. Auch hier sind an beiden Stellen eventuell vorhandene Semikola zu entfernen.

Die Konfiguration des Apache Webservers wird in der Datei C:\wap\apache\conf\httpd.conf vorgenommen. Die unterschiedlichen anzupassenden Stellen sucht ihr am besten in eurem Texteditor (suchen nach den unterstrichenden Begriffen) und weist die neuen Werte entsprechend der folgenden Liste zu (kursiv markiert):

  • ServerRoot „c:/Apache24“ –> ServerRoot „..“
  • Listen 80 –> Listen 82
  • LoadModule php5_module „../php/php5apache2_4.dll“ (an Ende des Blocks der LoadModule Anweisungen etwa in der Mitte der Datei)
  • #ServerName www.example.com:80 –> ServerName localhost:82
  • Require all denied (im Block unter <Directory />) –> Require all granted
  • DocumentRoot „c:/Apache24/htdocs“ –> DocumentRoot „../htdocs“
  • <Directory „c:/Apache24/htdocs“> –> <Directory „../htdocs“>
  • DirectoryIndex index.html –> DirectoryIndex index.php index.html
  • AddType application/x-httpd-php .php (an das Ende der Direktive <IfModule mime_module>, also z.B. hinter AddType application/x-gzip .gz .tgz)
  • PHPIniDir ../php (als letzte Zeile der Datei hinzufügen)

Um Konfigurations-Konflikten mit ggf. weiteren installierten Webservern (wie z.B. WAMP) oder anderer Software (z.B. Skype) aus dem Weg zu gehen, haben wir den Port von 80 auf 82 geändert. Wichig ist das, wenn man die Beispiel afruft: dann muss man nämlich http://localhost:82/ aufrufen anstatt http://localhost/. Wenn ihr sicher seid, dass der urspüngliche Port 80 auf eurem Rechner frei ist, könnt ihr diese Änderung übergehen.

Es muss noch einmal betont werden, dass die Installation nur für Testzwecke gedacht ist. Der Webserver ist zwar anders als der PHP Snapshot auch für den produktiven Einsatz zu gebrauchen, allerdings haben wir mit der obigen Konfiguration alle Tore aufgerissen ("Require all granted") und damit nicht zwingend zur Absicherung der Installation beigetragen.

4. Erste Tests laufen lassen

Um den Server zu starten, öffnen wir eine Kommandozeile (Win+R) und wechseln in unser Testverzeichnis mit

cd c:\wap\apache\bin

Mit dem Aufruf von einem

httpd

startet unser Webserver. Tauchen Fehlermeldungen auf, ist was schief gegangen. Bei der Fehlerbehebung steht Google mit Rat und Tat zur Seite. Bei einer lauffähigen Installation legen wir als erstes unter htdocs eine Datei mit dem Namen phpinfo.php und folgendem Inhalt an:

<?php phpinfo(); ?>

Als Ausgabe erwarten wir:

Testbare Beispiele zu den neuen Features finden sich in der PHP Dokumentation. Wer die Liste studiert, wird zwar auf eine Reihe neuer Operatoren und erweiterte Sprachkonstrukte treffen, bahnbrecende Killerfeatures jedoch vergeblich suchen. Werfen wir einen Blick auf Features, die dem Entwickler das Leben einfacher machen sollen:

Variadic Funktions & Argument Unpacking

Die variadischen Funktionen ließen sich bisher indirekt unter Rückgriff auf die Funktion func_get_args() nutzen. Eine variable Anzahl an Parametern für eine Funktion ist ab PHP 5.6 mit dem Operator ... möglich. Innerhalb der Funktion sind die Parameter als Array verfügbar, der Umweg über func_get_args() entfällt:

<?php
function v( $required, $optional = 0, ...$variable){
  printf('Variadic params are of type %s with length %d',
    gettype($variable), count($variable));
}

v('a');
v('b', 1);
v('c', 2, 9);
v('c', 2, 9, 8);
v('c', 2, 9, 8, 7);
v('c', 2, 9, 8, 7, 6);
?>

Ist der Parameter ein Array oder traversierbares Objekt, kann der Operator … zum Entpacken der Elemente verwendet werden. Die folgende Funktion zum Addieren gibt als Ergebnis 15 zurück:

<?php
function summe($a, $b, $c, $d, $e) {
  return $a + $b + $c + $d + $e;
}

$summanden = [2, 3, 4, 5];
echo summe(1, ...$summanden);
?>

Übernahme mittels use function & use const

Was bisher mit dem use Konstrukt zum Übernehmen von Klassen in einen Namensraum möglich war, wird in PHP 5.6 für Funktionen und Kontanten erweitert:

<?php
namespace Name\Space {
  const FOO = 42;
  function f() { echo __FUNCTION__."\n"; }
}

namespace {
  use const Name\Space\FOO;
  use function Name\Space\f;

  echo FOO."\n";
  f();
}
?>

Kommentare sind deaktiviert.