Manual Installation PHP5.3 und PHP5.4

Aus EUserv Wiki

Version vom 10:20, 25. Feb. 2013 bei Root (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Installation von PHP 5.3 und PHP 5.4 auf einem Rootserver

Inhaltsverzeichnis

Installation von PHP 5.3 und PHP 5.4 auf einem Rootserver

Allgemeines

Das Erscheinen von PHP 5.4 ergab Probleme mit vielen älteren PHP-Projekten durch nicht mehr unterstützte Funktionen oder andere Verhaltensweisen. Wer sich die Mühe ersparen will solche Projekte auf dem neuesten Stand zu halten, oder aus anderen Gründen parallel zu PHP 5.4 auch noch die Version PHP 5.3 verwenden möchte, dem wird hier eine Anleitung bereitgestellt, nach der man dies auf einem Server durch die Nutzung von PHP-Starter-Skripten realisieren kann.

Die Vorteile von fcgid
Der Hauptvorteil der Nutzung von fcgid liegt, neben der höheren Geschwindigkeit, wohl darin, das Scripte mit einstellbarem Benutzer ausgeführt werden. Dies bietet Sicherheit und administrative Vorteile. So kann zum Beispiel auch für jeden Benutzer eine eigene php.ini Datei verwendet werden.

In dieser Anleitung wird der virtuelle Hostname www.mein.test verwendet. Das Betriebssystem, welches verwendet wird ist Debian 6 (Squeeze). Der Hostname muss auch in der Datei /etc/hosts seiner IP zugeordnet werden. Als Benutzer/Owner wurde web1 festgelegt und das Root-Verzeichnis befindet sich in /var/www/web1/web.

Diese Einstellungen unterscheiden sich von Host zu Host und sind zu ersetzen. Alle Schritte benötigen Root-Rechte. Daher wurde sich als Root mit folgendem Befehl angemeldet:

su


Vorbereitung des Webservers

Zuerst muss der Apache-Webserver mit dem folgenden Befehl installiert werden:

apt-get install apache2 apache2-suexec

Installation von PHP 5.3

Das Betriebssystem Debian stellt für den Benutzer ein PHP5 Paket mit FastCGI zur Verfügung. PHP wird nun mit den folgenden Befehlen installiert:

apt-get install php5-cgi libapache2-mod-fcgid

Hierbei wird PHP 5.3 als FastCGI in den Webserver eingebunden.

Wenn der Apache-Server bereits mit dem PHP5-Modul installiert war, muss dieses mit dem folgenden Befehl deaktiviert werden:

a2dismod php5

Nun werden die folgenden Module deaktiviert:

a2enmod rewrite
a2enmod suexec
a2enmod include
a2enmod fcgid

Zusätzlich wird die Datei php.ini mit dem folgenden Befehl angepasst:

nano /etc/php5/cgi/php.ini

Hier wird nun die folgende Zeile auskommentiert:

cgi.fix_pathinfo=1

FCGI-Konfiguration

Nun wird die Datei fcgid.conf angpasst. Diese befindet sich unter /etc/apache2/mods-available/fcgid.conf und kann mit dem folgenden Befehl verändert werden:

nano /etc/apache2/mods-available/fcgid.conf
<IfModule mod_fcgid.c>
AddHandler    fcgid-script .fcgi
FcgidConnectTimeout 20
PHP_Fix_Pathinfo_Enable 1         <-------diese Zeile einfügen
</IfModule> 

Nun wird der Apache-Server neugestartet:

/etc/init.d/apache2 restart

Mit den folgenden Befehlen wird ein Benutzer und eine Gruppe mit Namen web1 angelegt:

groupadd web1
useradd -s /bin/false -d /var/www/web1 -m -g web1 web1
 

Nun wird ein root-Verzeichnis erstellt und ein Besitzer dieses Verzeichnisses mit den folgenden Befehlen festgelegt:

mkdir -p /var/www/web1/web
chown web1:web1 /var/www/web1/web
 

Nun wird der folgende Befehl ausgeführt:

/usr/lib/apache2/suexec -V

Die folgenden Zeilen sollten nun im Kommandofenster angezeigt werden:

-D AP_DOC_ROOT="/var/www"
-D AP_GID_MIN=100
-D AP_HTTPD_USER="www-data"
-D AP_LOG_EXEC="/var/log/apache2/suexec.log"
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=100
-D AP_USERDIR_SUFFIX="public_html"
 

Mit den folgenden Befehlen wird in dem Ordner /var/www/hp-fcgi-scripts/ ein Ordner web1 angelegt, in welchem das FCGI-Script erstellt wird:

 mkdir -p /var/www/php-fcgi-scripts/web1
 vi /var/www/php-fcgi-scripts/web1/php-fcgi-starter

In dieses Skript werden nun die folgenden Zeilen eingefügt:

#!/bin/sh
PHPRC=/etc/php5/cgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php
 

Mit den folgenden Befehlen werden die Schreib- und Leserechte für das Skript php-fcgi-starter gesetzt. Dabei wird der Benutzer web1 als Besitzer der Datei gesetzt.

chmod 755 /var/www/php-fcgi-scripts/web1/php-fcgi-starter
chown -R web1:web1 /var/www/php-fcgi-scripts/web1
 

Nun wird ein virtueller Host wird mit folgendem Befehl erstellt:

vi /etc/apache2/sites-available/web1

In diesem Host werden die folgenden Zeilen eingefügt:

<VirtualHost *:80>
  	ServerName www.mein.test
  	ServerAlias mein.test
  	ServerAdmin webmaster@mein.test
  	DocumentRoot /var/www/web1/web/

  		<IfModule mod_fcgid.c>
    			SuexecUserGroup web1 web1
    		<Directory /var/www/web1/web/>
      			Options +ExecCGI
      			AllowOverride All
      			AddHandler fcgid-script .php
      			FCGIWrapper /var/www/php-fcgi-scripts/web1/php-fcgi-starter .php
      			Order allow,deny
      			Allow from all
    		</Directory>
  		</IfModule>

  		ErrorLog /var/log/apache2/error.log
  		CustomLog /var/log/apache2/access.log combined
  		ServerSignature Off
</VirtualHost>
 

Hier verweist der FCGI-Wrapper auf das FCGI-Starter-Script und nutzt dies für die Dateien mit der Endung .php.

Mit dem folgenden Befehl wird der virtuelle Host aktiviert:

a2ensite web1

Damit die Änderungen wirksam werden, muss der Apache-Server neugestartet werden:

/etc/init.d/apache2 reload

Um zu testen, ob auf dem Webserver PHP installiert ist, wird mit dem folgenden Befehl die Datei info.php im Verzeichnis /var/www/web1/web/ erstellt:

vi /var/www/web1/web/info.php

In die Datei info.php werden nun die folgenden Zeilen eingefügt:

<?php
  phpinfo();
?>
 

Nun wird die URL des Servers (http://www.mein.test) mit einem beliebigen Browser aufgerufen. Daraufhin sollte die Seite mit den PHP-Information geöffnet werden. Hier sei nochmals darauf hingewiesen das www.mein.test in der Datei /etc/hosts aufgelöst werden muss. Dazu diese mit

vi /etc/hosts 

öffnen und

192.168.0.1(Ihre IP)   www.mein.test

einfügen.

Installation von PHP 5.4

Vorbereitung

Damit PHP 5.4 für das Modul mod_fcgid kompiliert werden kann, muss sichergestellt werden, dass die benötigten Pakete installiert sind. Mit den folgenden Befehlen werden alle benötigten Pakete installiert:

apt-get install libapache2-mod-fcgid apache2-suexec libpcre3-dev libpcre++-dev
libpng12-dev libbz2-dev libcurl4-openssl-dev libc-client2007e-dev 
libjpeg-dev libgif-dev libgif4 libpthread-stubs0 libpthread-stubs0-dev 
libx11-dev libxau-dev libxcb1-dev libxdmcp-dev libxpm-dev 
x11proto-core-dev x11proto-input-dev x11proto-kb-dev xtrans-dev 
libxml2-dev libmysqlclient-dev libfreetype6-dev
 

Nun wird das Standard-Upload-Limit für das FCGID-Modul auf 100MB angehoben. Dazu muss mit dem folgenden Befehl die Konfigurations-Datei fcgid.conf geöffnet werden:

vim /etc/apache2/mods-available/fcgid.conf

Hier wird nun die folgende Zeile eingefügt:

 
<IfModule mod_fcgid.c>
  AddHandler    fcgid-script .fcgi
  FcgidConnectTimeout 20
  PHP_Fix_Pathinfo_Enable 1
  FcgidMaxRequestLen 104857600  <---- diese Zeile wird eingefügt
</IfModule>
  

Um nun PHP5.4 zu installieren muss erst die neueste Version von einem Mirror-Server heruntergeladen und anschließend entpackt werden:

cd /tmp
wget "http://de.php.net/get/php-5.4.8.tar.bz2/from/this/mirror" -O php.tar.bz2
apt-get install bzip2
tar xfvj php.tar.bz2
cd php-5.4.8
 

Um zu prüfen ob ein 32-Bit oder 64-Bit-System installiert ist, müssen folgende Zeilen eingeben:

uname -a
 
Linux localhost.localdomain 2.6.32-279.14.1.el6.x86_64 #1 SMP Tue Nov 6 23:43:09 
UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
 
i386/i68632Bit-System
amd64/x86_6464Bit-System

In unserem Fall ist das System also mit einem 64Bit Kernel ausgestattet, wenn dort i386 oder i686 statt des amd64 steht kann man davon ausgehen, dass eine 32Bit Version installiert ist.

Kompilierung von PHP 5.4 mit mod_fcgid

Wenn es sich um ein 32bit-System handelt muss folgender Kompilier-Befehl ausgeführt werden:

./configure --prefix=/usr/share/php54 --datadir=/usr/share/php54 --mandir=/usr/share/man 
--bindir=/usr/bin/php54 --with-libdir=lib --includedir=/usr/include/php54 
--sysconfdir=/etc/php54/apache2 --with-config-file-path=/etc/php54/apache2 
--with-config-file-scan-dir=/etc/php54/conf.d --enable-libxml --enable-session 
--with-pcre-regex=/usr --enable-xml --enable-simplexml --enable-filter --disable-debug 
--enable-inline-optimization --disable-rpath --disable-static --enable-shared --with-pic 
--with-gnu-ld --with-mysql --with-gd --with-jpeg-dir --with-png-dir --with-xpm-dir --enable-exif 
--with-zlib --with-bz2 --with-curl --with-ldap --with-mysqli --with-freetype-dir --enable-soap 
--enable-sockets --enable-calendar --enable-ftp --enable-mbstring --enable-gd-native-ttf 
--enable-bcmath --enable-zip --with-pear --with-openssl --with-imap --with-imap-ssl --with-kerberos 
--enable-phar --enable-pdo --with-pdo-mysql –with-mysqli
 

Wenn es sich um ein 64bit-System handelt muss folgender Kompilier-Befehl ausgeführt werden:

./configure --prefix=/usr/share/php54 --datadir=/usr/share/php54 --mandir=/usr/share/man 
--bindir=/usr/bin/php54 --with-libdir=lib64 --includedir=/usr/include/php54 
--sysconfdir=/etc/php54/apache2 --with-config-file-path=/etc/php54/apache2 
--with-config-file-scan-dir=/etc/php54/conf.d --enable-libxml --enable-session 
--with-pcre-regex=/usr --enable-xml --enable-simplexml --enable-filter --disable-debug 
--enable-inline-optimization --disable-rpath --disable-static --enable-shared --with-pic 
--with-gnu-ld --with-mysql --with-gd --with-jpeg-dir --with-png-dir --with-xpm-dir --enable-exif 
--with-zlib --with-bz2 --with-curl --with-ldap --with-mysqli --with-freetype-dir --enable-soap 
--enable-sockets --enable-calendar --enable-ftp --enable-mbstring --enable-gd-native-ttf 
--enable-bcmath --enable-zip --with-pear --with-openssl --with-imap --with-imap-ssl --with-kerberos 
--enable-phar --enable-pdo --with-pdo-mysql --with-mysqli
 

Das Kompilieren wird mit dem folgenden Befehl durchgeführt:

make

Das Testen wird mit dem folgenden Befehl durchgeführt:

make test

Das Installieren wird mit dem folgenden Befehl durchgeführt:

make install

Der Befehl make test ist optional, sollte aber vor der Installation verwendet werden um sicherzustellen, dass PHP korrekt kompiliert wurde.

Das FastCGI-Modul mod_fcgid und suEXEC muss mit den folgenden Befehlen aktiviert werden:

a2enmod fcgid
a2enmod suexec

Schließlich wird der Apache-Server mit folgendem Befehl neugestartet:

/etc/init.d/apache2 force-reload

Wechsel zwischen PHP 5.3 und PHP 5.4

Dazu müssen die PHP-Starter-Skripte für PHP5.3 und PHP5.4 angepasst werden. Das Skript /var/www/php-fcgi-scripts/web1/php-fcgi-starter muss nun mit den folgenden Zeilen angepasst werden:

vi /var/www/php-fcgi-scripts/web1/php-fcgi-starter
#!/bin/sh
PHPRC=/etc/php5/cgi/    
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
########naechste Zeile fuer php5.3##########
exec /usr/lib/cgi-bin/php

########naechste Zeile fuer php5.4##########
# exec /usr/bin/php54/php-cgi

 

Der Pfad hinter exec weist auf die jeweilige Version der PHP Binary-Datei hin. Hier wird der Kommentar vor der jeweils gewünschten Version (im Beispiel php5.3) entfernt und der Apache-Server neugestartet.

Diese Anleitung kann für weitere Virtuelle Hosts übernommen werden, wobei für jeden jeweils sein eigenes Starterskript erstellt wird und diese somit mit unterschiedlichen PHP-Versionen parallel laufen können.