[Tutorial] PHP für Apache 1.x.x kompilieren und installieren

moses_78

Aktives Mitglied
Thread Starter
Dabei seit
08.04.2005
Beiträge
1.288
Reaktionspunkte
22
PHP 5.1.2 für Apache 1.x.x kompilieren und Installieren

Vorbereitung

Dieses Tutorial soll auch nicht-Konsolenjunkies auf einfachstem Weg die In-
stallation eines PHP-Moduls für den Apache 1.x.x (der von Hause aus vorin-
stalliert ist) erklären.

Hinweis: Eine Raute(#> ) vor den Befehlen bedeutet, dass man root-Rechte
benötigt, um sie auszuführen. Ein Dollarzeichen bedeutet, dass die Rechte
eines gewöhnlichen Benutzers ausreichen. Root-Rechte erlangt man mit "sudo
<Befehl>" oder "su root".

Die Sourcen (Version 5.1.2, Stand 26. 2. '06) werden erst einmal ins Pro-
gramme-Verzeichnis kopiert:
Code:
$> cd /Applications
$> curl -C - -O http://de3.php.net/distributions/php-5.1.2.tar.bz2
Ich würde liebend gerne "wget" benutzen, weil es Umleitungen beherscht,
und damit besser zum Saugen von den Sourceforge-Mirrors geeignet ist, es
ist jedoch leider nicht vorinstalliert.

Der sogenannte "Tarball" muss nun entpackt werden:
Code:
$> tar xjvf php-5.1.2.tar.bz2
$> cd php-5.1.2
Die PHP-Konfigurationsdatei wird jetzt mit
Code:
#> cp php.ini-dist /etc/php.ini
nach /etc kopiert.

Hinweis: Wenn schon ein andere PHP-Version in Form eines Paketes von
entropy.ch installiert wurde, muss sie noch aus der httpd.conf entfernt wer-
den:
Code:
#> vi /etc/httpd/httpd.conf
Hier muss alles von "# begin entropy.ch PHP module activation" bis "# end
entropy.ch PHP module activation" gelöscht werden. Dieser Bereich befin-
det sich ganz am Ende der Datei. Nachdem man mit "i" in den Eingabemod-
us gelangt ist, und diesen Teil gelöscht hat, speichert man ihn mit <Escape>
- ":" - "wq" - <Enter> (nacheinander, bitte).
Desweiteren kann noch der Ordner "/usr/local/php5" mit
Code:
#> rm -r /usr/local/php5
gelöscht werden. Wenn man den Apache-Webserver nun mit
Code:
#> apachectl restart
neu startet und ein PHP-Script aufruft, sollte man nur den Quelltext zu se-
hen bekommen.

Mit
Code:
$> ./configure --help
kann man sich eine Liste aller möglichen Flags ansehen, von denen wir je-
doch nur einen Bruchteil benötigen.
 
Zuletzt bearbeitet:
Installation der benötigten Bibliotheken

Leider müssen noch die aktuellsten Bibliotheken, die in PHP eingebunden
werden sollen, gesaugt und installiert werden. Wir fangen mit libxml an,
indem wir ein weiteres Terminalfenster öffnen und nacheinander folgendes
eingeben:

Für libxml:
Code:
$> cd $HOME
$> mkdir php_libs
$> cd php_libs
$> curl -C - -O http://xmlsoft.org/sources/xml/libxml2-2.6.11.tar.gz
$> tar xzvf libxml2-2.6.11.tar.gz
$> cd libxml2-2.6.11
$> ./configure --prefix=/usr/local/lib/libxml
$> make
#> make install

Für libpng:
Code:
$> cd ..
$> curl -C - -O http://heanet.dl.sourceforge.net/sourceforge/libpng/libpng-1.2.8-config.tar.gz
$> tar xzvf libpng-1.2.8-config.tar.gz
$> cd libpng-1.2.8-config
$> ./configure --prefix=/usr/local/lib/libpng
$> make
#> make install

freetype2:
Code:
$> cd ..
$> curl -C - -O http://download.savannah.gnu.org/releases/freetype/freetype-2.1.10.tar.bz2
$> tar xjvf freetype-2.1.10.tar.bz2
$> cd freetype-2.1.10
$> ./configure --prefix=/usr/local/lib/freetype
$> make
#> make install
 
Zuletzt bearbeitet:
Kompilierung & Installation

Das configure-Script produziert das Makefile, mit dem PHP schließlich als
Apache-Modul kompiliert wird. Hier sind die Flags, mit denen das configure-
Script nach Einhaltung der oben geschilderten Schritte ohne Mosern das
Makefile erstellen sollte:
Code:
 $> ./configure --prefix=/usr/local/php --with-apxs=/usr/sbin/apxs 
--with-libxml-dir=/usr/local/lib/libxml --with-zlib --enable-bcmath 
--with-bz2 --enable-calendar --with-curl --enable-ftp --with-gd 
--with-png-dir=/usr/local/lib/libpng --with-freetype-dir=/usr/local/lib/freetype 
--enable-mbstring --with-mysql=/usr/local/mysql --with-mysql-sock=/tmp 
--with-mysqli=/usr/local/mysql/bin/mysql_config --enable-soap 
--enable-sockets --with-pear=/usr/local/php/pear

Ich habe selbstverständlich nicht alle Erweiterungen einkompiliert, was auch
undenkbar ist, jedoch alle Module, die ich für wichtig erachte, wie MySQL, GD,
Soap oder ftp.

Es ist nicht ungewöhnlich, dass "configure" fehlschlägt; in diesem Fall muss
man weiter herumexperimentieren, ggf. Bibliotheken nachinstallieren, Doku-
mentationen wälzen und googeln, ich habe mich aber bemüht, eine Konfigu-
ration zu Finden, die an den meisten Systemen beim ersten Versuch funk-
tionieren sollte, und dieses Tutorial nochmal an einem vor kurzem eingerich-
teten 10.4er-System getestet.

Anmerkungen:
- "--with-apxs" ist das Flag, das PHP anweist, zur Installation des PHP-Mo-
duls das apxs-Script zu verwenden. Bei diesem Script handelt es sich um
ein Perl-Script, das die httpd.conf selbstständig editiert und uns weiteres
Editieren der httpd.conf erspart. Wer das PHP für einen Apache 2.x instal-
lieren will, muss "--with-apxs2=/pfad/zum/apache-ordner/bin/apxs2" an-
geben.

- Das "with-mysql"-Flag erwartet in dem angegebenen Verzeichnis einen Ord-
ner namens "lib". Da das MySQL-Installerpaket die Bibliotheken wie "libmysql-
client.dylib" in diesen Ordner kopiert, funktioniert der oben angegebene Pfad
einwandfrei, wenn MySQL als Paket installiert wurde. Wer jedoch MySQL höchst-
persönlich wie zb. nach diesem Tutorial kompiliert hat, muss vorher noch ein
Paar Anpassungen vornehmen:
Code:
$> cd /usr/local/mysql/lib/mysql
#> cp `ls` /usr/local/lib
Als Pfad für das "--with-mysql"-Flag muss dann "/usr/local/" angeben wer-
den.

- Ansonsten ist noch zu beachten, dass je nach MySQL-Installerpaket, die
"mysql.sock"-Datei an einem anderen Ort gespeichert wird. Das in dem
Datenbanken-Unterforum festgepinnte Tutorial legt das MySQL-Sock in
/usr/local/mysql/run ab. In diesem Fall müsste das --with-mysql-sock-
Flag auf diesen Pfad zeigen.

Wenn "configure" ohne Fehlermeldung durchläuft, muss das PHP-Modul kom-
piliert werden (genau hier fing der Prozessorlüfter des PB's zu Surren an :D):
Code:
$> make

Dieser Vorgang kann durchaus 10-15 Minuten dauern. Wenn "make" PHP
fertig kompiliert hat, wird mit
Code:
#> make install
die "libphp5.so"-Datei nach /usr/libexec/httpd kopiert, und das oben bereits
erwähnte apxs-Tool trägt das Modul automatisch in der httpd.conf ein.

Damit PHP nun lauffähig ist, müssen noch zwei minimale Änderungen der
httpd.conf vorgenommen werden:
Code:
#> vi /etc/httpd/httpd.conf

-Mit der Eingabe von "445G" springt der Cursor automatisch in die 445. Zei-
le ("DirectoryIndex index.html"). Dort gelangt man dann mit "i" in den Ein-
gabemodus, und fügt ein Leerzeichen hinter "index.html" "index.php" ein

-Mit "Escape" gelangt man wieder in den Kommandomodus. Wenn man jetzt
"856G" eintippt, springt der Cursor in diese Zeile ("AddType application/x-
tar..."). Wir gehen wieder in den Eingabemodus("i"), und fügen eine Zeile
tiefer folgendes ein:
Code:
AddType application/x-httpd-php .php
Jetzt kann der Text mit <Escape> - ":" - "wq" - <Enter>, gespeichert, und
vi verlassen werden.

Hinweis: Man kann in vi/vim in Zeilen mit bestimmten Suchwörtern springen,
indem man <Escape> - ":" - "/<Suchwort>" - "<Enter>" (nacheinander) ein-
gibt.

Jetzt dem Apache-Webserver mit
Code:
#> apachectl restart
neustarten und voila, unsere jungfräuliche und optimal an das System an-
gepasste PHP-Installation sollte einwandfrei laufen ;)
 
Zuletzt bearbeitet:
Feinschliff & Ergänzungen

Um die CLI/CGI-Version von PHP nutzbar zu machen, empfielt sich
folgendes:
Code:
#> ln -sf /usr/local/php/bin/php /usr/bin/php

Wer PEAR nutzt oder benutzen möchte, sollte folgenden Schritt ausführen:
Code:
#> ln -sf /usr/local/php/bin/pear /usr/bin/pear

Ich hoffe, mein Tutorial ist einigermaßen verständlich und funktioniert, wenn
nicht, schreibt eine PM oder postet in den Thread. Über Feedback würde ich
mich jederzeit freuen :)

Dieses Tutorial sollte bei genauer Befolgung keine irreversiblen Schäden am
System verursachen, wenn doch, kann ich nicht dafür verantwortlich gemacht
werden. Desweiteren darf dieser Text nicht ohne Genehmigung des Autors
auf anderen Webseiten publiziert werden.
 
Zuletzt bearbeitet:
Danke für das gute Tutorial!

Eine Frage hätte ich aber - wenn Apple den Apachen aktualisier (Software-Update), bleibt dann alles so wie es ist? Spätestens mit Apache 2 wird sich da vermutlich auf jeden Fall was ändern, vielleicht auch mit dem Umstieg auf PHP 5?

Wie ist das wenn man wie beschrieben die originalen PHP binaries mit symlinks überschreibt?

Eine Anmerkung noch: libxml wird bei PHP seit einiger Zeit mitgeliefert und muss nicht zusätzlich installiert werden.

Übrigens muss man JPEG Support auch einkomilieren (analog zu png), falls jemand JPEG benötigt.
 
Zuletzt bearbeitet:
Da das mit jpeg bei mir nicht ganzs so einfach war wie die anderen Bibliotheken, hier mal wie ich es hinbekommen habe:

Code:
wget ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
tar -xzf jpegsrc.v6b.tar.gz
cd jpeg-6b
ln -s `which glibtool` ./libtool
export MACOSX_DEPLOYMENT_TARGET=10.4
sudo mkdir -p /usr/local/lib/jpeg-6b/include
sudo mkdir /usr/local/lib/jpeg-6b/lib
./configure --prefix=/usr/local/lib/jpeg-6b --enable-shared
make
sudo make install-lib
Und dann eben bei php ./configure "--with-jpeg-dir=/usr/local/lib/jpeg-6b"
 
Zuletzt bearbeitet:
< Eine Frage hätte ich aber - wenn Apple den Apachen aktualisier
< (Software-Update), bleibt dann alles so wie es ist? Spätestens
< mit Apache 2 wird sich da vermutlich auf jeden Fall was ändern,
< vielleicht auch mit dem Umstieg auf PHP 5?
falls apple jemals auf den apache 2.x wechseln sollte, müssten sowieso
die ganzen module neugeschrieben werden, da der apache 1.x und der
apache 2.x ein völlig unterschiedliches api haben. hat apple denn mal
angekündigt, dass sie umsteigen wollenß

< Wie ist das wenn man wie beschrieben die originalen PHP binaries mit
< symlinks überschreibt?
wenn ich mich korrekt erinnere, ist bei os x im originalzustand schon ein
cli-binary dabei. der symlink wird gesetzt, damit die anwendungen ,,php´´
und ,,pear´´ in ihren aktuellen versionen in PATH vertreten sind, alternativ
könnte man auch auch den bin-ordner aus dem installationsprefix in PATH
aufnehmen.
 
Wenn ich den Apache nach eben dieser Anleitung kompiliert hab...
Frage 1: Wie kann ich das php dann auf 5.2.0 updaten?
Frage 2: Wie kann ich einfach jpeg-Support dazu installieren?


Jens
 
stenser schrieb:
Wenn ich den Apache nach eben dieser Anleitung kompiliert hab...
Wo wird denn in dieser Anleitung Apache kompiliert?
stenser schrieb:
Frage 1: Wie kann ich das php dann auf 5.2.0 updaten?
prinzipiell kannst Du das einfach drüberinstallieren. Ich würde vielleicht vorher das /usr/local/php - Verzeichnis umbenennen, zum einen um einfach wieder auf die alte Version umsteigen zu können, und weil es vielleicht etwas sauberer ist. Allerdings geht dann das alte mod_php verloren, das könnte man ggfs. noch sichern (`locate libphp5.so`). (Wenn jemand das anders sieht bitte korrigieren!)
stenser schrieb:
Frage 2: Wie kann ich einfach jpeg-Support dazu installieren?
Das habe ich in meinem 2. Posting beschrieben: https://www.macuser.de/forum/showpost.php?p=2015758&postcount=6
 
Ok. Habs hinbekommen. Wir war nur die Reihenfolge dann nicht ganz klar. Und das ich php nochmal komplett neu kompilieren muss. Aber auch das drüberbügeln hat einfach gut funktioniert.

Jens
 
Zurück
Oben Unten