Installation PHP 5.6.4 mit Apache 2.4-2.4.10_2 Support in FreeBSD 10.1-RELEASE-p4
Voraussetzungen
- FreeBSD 10.1-RELEASE-p4
- Apache 2.4-2.4.10_2
Installation PHP Scripting Sprache
Installation via Packages. Falls die Abhängigkeiten für libxml2 und pcre fehlen werde diese Packages automatisch mit installiert.
root@host:/ # pkg install -y php56
Installation via Ports:
root@host:/ # cd /usr/ports/lang/php56 root@host:/usr/ports/lang/php56 # make install clean
Installation PHP Bibliotheken
Icinga Web 1 und Web 2 benötigen mehrere PHP Bibliotheken. In den PHP-Extensions sind die Meisten von denen die man braucht enthalten. Die Restlichen müssen nach installiert werden.
- php56-gd
- php56-gettext
- php56-jason
- php56-ldap (Wenn das Login über Active Directory oder LDAP geschehen soll)
- php56-mysql (wenn MySQL als Datenbank dienen soll)
- php56-openssl
- php56-pdo
- php56-soap
- php56-sockets
- php56-xmlrpc
- php56-xsl
- pear-phing
Installation via Packages. Das Modul Openssl wird erst für Icinga Web 2 wichtig.
root@host:/ # pkg install -y php56-extensions root@host:/ # pkg install -y php56-gd php56-ldap php56-mysql php56-openssl php56-pdo_mysql \ php56-soap php56-sockets php56-xmlrpc php56-xsl
Bei der Installation via Ports müssen die Bibliotheken GD, LDAP, MYSQL, OPENSSL, PDO_MYSQL, SOAP, SOCKETS, XMLRPC, XSL zusätzlich aktiviert werden.
root@host:/ # cd /usr/ports/lang/php56-extensions root@host:/usr/ports/lang/php56 # make install clean
Installation PEAR Framework für PHP
Die Installation von PEAR (PHP Extension and Application Repository) als Package ist nicht zu empfehcd ../pealen. In der jetzigen Version würde es PHP5 nachinstallieren. Um PHP56 zu nutzten muss es über die Ports erfolgen.
root@host:/ # cd /usr/ports/devel/pear root@host:/usr/ports/devel/pear # make install clean
Installation PEAR PHING
Die Installation von PEAR-PHING als Package ist nicht zu empfehlen. In der jetzigen Version würde es PHP5 nachinstallieren und damit die PHP56 deinstallieren. Um PHP56 zu nutzten muss es über die Ports installiert werden.
root@host:/ # cd /usr/ports/devel/pear-phing root@host:/usr/ports/devel/pear # make install clean
Installation PHP INTL
Für Icinga Web 2 ist es nicht zwingend notwendig aber es freut sich über Internationalisierung. Dazu benötigt Icinga Web 2 das PHP Modul INTL. Auch dieses Packages gibt es nur mit PHP5 Abhängigkeit und muss über die Ports installiert werden. Es werden mehrere Ports (z.B. gmake und icu) mit installiert. Bei deren Config Abfragen immer den Standard unverändert lassen.
root@host:/ # cd /usr/ports/devel/pecl-intl root@host:/usr/ports/devel/pecl-intl/ # make install clean
Konfiguration
Die Einstellungen für PHP erfolgen in der php.ini, die standartmäßig im Verzeichnis /usr/local/etc/ gesucht von PHP werden. Die Datei muss aber zuvor dorthin kopiert werden.
root@host:/ # cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
In der php.ini werden zum Beispiel die Variablen timezone, upload_max_filesize und post_max_size angepasst.
Einstellen PHP Timezone
Icinga Web2 benötigt eine Zeitzone in PHP. Wer es jetzt nicht konfigurieren möchte wird später im Web Setup darauf hingweisen. In der php.ini wird es unter date.timezone eingestellt. Dazu wird in der Zeile das ; Zeichen am Anfang der Zeile entfernt und zum Beispiel Europe/Berlin eingetragen.
date.timezone = Europe/Berlin
Einstellen PHP Session Pfad
Icinga Web2 benötigt den Session Pfad für die MySQL Kommunikation. Diesen sucht es in der php.ini. Wer es jetzt nicht konfigurieren möchte wird später beim Aufruf der Website mit einer Fehlermeldung begrüßt. In der php.ini ist es unter session.save_path zu finden. Nicht vergessen das ; Zeichen am Anfang der Zeile entfernen und /tmp eingetragen.
session.save_path = /tmp
Integration in Apache
PHP wird in Apache als Modul integriert.
Installation mod_php
Insofern mod_php vor Apache eingespielt wird, installiert sich der Web Server automatisch mit.
Installiert via Package:
root@host:/ # pkg install -y mod_php56
Installation via Port:
root@host:/ # cd /usr/ports/www/mod_php56 root@host:/usr/ports/www/mod_php56 # make install clean
Konfiguration Apache
Dafür, dass PHP-Scripts mit Hilfe des Apache ausgeführt werden, benötigt die Konfigurationsdatei des Web Servers einige zusätzliche Zeilen. Zuerst muss das Modul geladen werden.
Nach der Installation von mod_php wird das Module automatisch in der Apache Konfiguration httpd.conf registriert.
Man sollte dennoch überprüfen, ob der Eintrag wirklich erfolgreich war. Folgende Zeile muss enthalten sein (ohne das # Zeichen am Anfang der Zeile). Der Pfad auf der rechten Seite der LoadModule-Anweisung muss auf den Ort des PHP-Moduls im System zeigen.
LoadModule php5_module libexec/apache24/libphp5.so
Die Reihenfolge der index Dateien ist nicht willkürlich. Findet Apache bei einem Startseiten- bzw. Verzeichnisaufruf mehrere index Dateien, so wird es die erstgenannte index Datei verwenden. In meinem Fall die index.php, auch wenn eine index.html vorhanden ist.
<IfModule dir_module> DirectoryIndex index.php index.html <IfModule>
Man benötigt einen laufenden Apache2 mit Unterstützung für PHP als SAPI-Modul. Apache muss also angewiesen werden, bestimmte Dateiendungen als PHP Skripte zu behandeln. Der veraltete Weg ist, in der Datei httpd.conf im Abschnitt AddType folgendes einzutragen.
AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
Will man PHP Code innerhalb von HTML Seiten nutzten, dann empfiehlt sich folgende Einstellung.
AddType application/x-httpd-php .php .html AddType application/x-httpd-php-source .phps .html
Es gibt eine zweite Alternative. Da in der Regel mod_mime aktiviert ist (für Scripteinsatz zwingend erforderlich) und in der httpd.conf die Zeile TypesConfig conf/mime.types oder ähnlich enthalten ist, kann man in die Datei mime.types (/usr/local/etc/apache24/mime.types), den gewünschten MIME-Typ eintragen.
Das bedeutet, in die Liste der bereits verzeichneten Typen noch diese Zeilen hinzufügen.
application/x-httpd-php php application/x-httpd-php-source phps
Die Installationshinweise von FreeBSD und PHP (Link) empfehlen eine andere Integration des MIME-Typ (am besten am Ende der Datei httpd.conf anfügen) als Apache FilesMatch. Anstelle nur die Apachedirektive AddType zu verwenden, kann man zusätzlich verhindern, dass potentiell gefährliche Dateien wie exploit.php.jpg als PHP-Dateien ausgeführt werden. Es handelt sich also um eine Sicherheitseinstellung und sollte daher bevorzugt verwendet werden!
<FilesMatch "\.php$> SetHandler application/x-httpd-php </FilesMatch>
<FilesMatch "\.phps$> SetHandler application/x-httpd-php-source </FilesMatch>
Apache muss jetzt neu gestartet werden damit die Neuerungen aktiv werden.
root@host:/ # /usr/local/etc/rc.d/apache24 restart
Testen PHP
Zum Schluss wird getestet ob PHP und Apache zusammenarbeiten.
Man kann sich alle geladenen Module anzeigen lassen.
root@host:/ # php -m
Für Apache wird die phpinfo() Anweisung in eine PHP Datei eingebettet.
<?php // Zeigt alle Informationen (Standardwert ist INFO_ALL) phpinfo(); ?>
Oder das ganze in Kurzversion:
root@host:/ # echo '<?php phpinfo(); ?>' >> /usr/local/www/apache24/data/phpinfo.php
Zum Schluss im Browser die gerade eben erzeugte Datei über http://www.example.com/phpinfo.php aufrufen. Jetzt sollten die Informationen zur PHP Installation angezeigt werden.