Huiswerk Linux: Installatie PHP

+XLVZHUN/LQX[,QVWDOODWLH3+3
PHP is de meest gebruikte programmeertaal voor het maken van websites. Als je PHP met Apache gebruikt, dan wordt
het mogelijk om zogenaamde Content Management Systems (CMS) te gebruiken, zoals WordPress, Joomla en Drupal.
Het huiswerk voor deze week is: installeer de PHP scripting taal.
2YHU3+3
PHP is bedacht door Rasmus Lerdorf. De oorspronkelijke betekenis van de letters PHP is Personal Home Page, maar dat
werd vrij snel veranderd in PHP Hypertext Preprocessor. Hoewel PHP zuigt (zie: Apache front-end), is het een zeer
populaire scripting-taal. Dit komt voornamelijk omdat bijna alle Content Management Systems (CMS), zoals WordPress,
Joomla, Drupal en Zend de taal gebruiken.
PHP wordt met Apache meegecompileerd. Dat wil zeggen: we moeten eerst de PHP shared module compileren. Daarna
moeten we Apache opnieuw compileren zodat Apache de nieuwe module kan gebruiken.
+HWVXGRPHFKDQLVPH
Het compileren en installeren van de PHP software doen we namens de root gebruiker. Hierdoor worden automatisch de
juiste toegangsrechten op de bestanden toegepast.
Cygwin gebruikers
Sudo voor Cygwin gebruikers: rechts-klik op het icoon van de Cygwin terminal, en kies voor Als administrator
uitvoeren. PHP gaat ervan uit dat minimaal de volgende pakketten op je systeem aanwezig zijn. Deze moeten we dus
eerst nog installeren.
apt-cyg install libxml2-devel libjpeg-devel libpng-devel
Het pakket libxml2 is een verzameling functies waarmee XML (Extended Markup Language) documenten kunnen
worden gemaakt en gelezen. Met de pakketten libjpeg en libpng kunnen afbeeldingen in het PNG1 en JPEG2 formaat
worden bewerkt.
Cygwin gebruikers moeten er rekening mee houden dat soms de shared modules niet gevonden worden door het
configure script. Dit komt door afwijkende bestandsnamen. Om ervoor te zorgen dat de bestandsnaam klopt, gebruiken
we een truuk die veel in de Linux-wereld gebruikt wordt. We maken een symbolic link (snelkoppeling) aan met de juiste
bestandsnamen:
ln -s /usr/lib/libpng.dll.a /usr/lib/libpng.a
ln -s /usr/lib/libjpeg.dll.a /usr/lib/libjpeg.a
Let op: als je hier de foutmelding File exists krijgt, dan is het ook goed. Het bestand heeft dan al de juiste naam.
Andere Linux gebruikers
Gebruikers van andere Linux distributies (Ubuntu, Debian, Suze, OSX, etc.) starten een terminal met de
toetsencombinatie <Ctrl><Alt>-T. We gebruiken het commando sudo om in te loggen met het su (become Super
User) commando. Daardoor blijven we ingelogd:
sudo su
PHP gaat ervan uit dat minimaal de volgende pakketten met shared libraries op je systeem aanwezig zijn. Deze
moeten we dus eerst installeren.
apt-get install libxml2-dev libjpeg-dev libpng-dev
Raspbian-gebruikers (Raspberry PI) moeten er rekening mee houden dat hun software voor de ARM chip
gecompileerd gaat worden. De loadable modules staan op een andere plek dan waar PHP ze verwacht. Daarom
moeten de Raspbian gebruikers volgende symbolic links aanmaken:
ln -s /usr/lib/arm-linux-gnueabihf/libjpeg.a /usr/lib/
ln -s /usr/lib/arm-linux-gnueabihf/libpng.a /usr/lib/
1
2
Portable Network Graphics
Joint Photographic Experts Group
%URQFRGHQHHUODGHQHQXLWSDNNHQ
We gaan eerst de broncode voor PHP neerladen. Ga in de directory voor broncode staan. Dit doen we met het commando
cd (change directory):
cd /usr/local/src
Nu kunnen we de broncode voor PHP neerladen. Dit doen we met het wget (www get document) programma:
wget -N http://www.commandlinerevolution.nl/Source/php-5.2.17.tar.gz
Het programma wget maakt een kopie van het neergeladen bestand met een volgnummer als het bestand al een keer is
neergeladen. Dit is niet handig. Via de optie N (newer) geven we aan dat wget het eventueel bestaande bestand vervangt
als het nieuwer is.
De broncode is ingepakt in het tar (tape archive, in Linux slang: tarball) formaat. Pak het bestand uit middels het tar
commando:
tar -xvf php-5.2.17.tar.gz
Met de optie x (extract) geven we aan dat we het bestand willen uitpakken. Middels optie v (verbose) geven we aan dat
we het uitpak-proces willen zien. Met optie f (file) geven we aan dat het om een bestand gaat.
Je ziet nu dat het tar programma de bestanden uitpakt naar de map php-5.2.17. Wacht tot dit klaar is.
%URQFRGHSDWFKHQ
PHP maakt gebruik van de XML library (bibliotheek met functies voor het bewerken van XML). Deze verschilt sterk in
versie per Linux systeem. Om ervoor te zorgen dat de PHP code op alle systemen gecompileerd kan worden, gaan we de
broncode “oplappen” (patchen). Ga allereerst in de zoëven aangemaakte directory staan. Dit doen we met het commando
cd (change directory):
cd php-5.2.17
Nu gaan we de het patch-bestand neerladen. Dit doen we ook weer met het wget programma:
wget -N http://www.commandlinerevolution.nl/Source/php-5.2.17-libxml2-2.9.0.patch
Tot slot kunnen we de patch uitvoeren. Dit doen we met het patch programma:
patch -p0 < php-5.2.17-libxml2-2.9.0.patch
Middels de optie p (path) geven we aan welk deel van de in het patch-bestandje genoemde directory relatief is aan de
map waarin de broncode van PHP staat. Met het omgekeerde redirection-symbool (“<”) geven we aan dat het hele
bestand als input moet worden genomen. De output moet er alsvolgt uitzien:
patching file ext/dom/node.c
Hunk #1 succeeded at 1950 (offset 55 lines).
patching file ext/dom/documenttype.c
Hunk #1 succeeded at 215 (offset 10 lines).
patching file ext/simplexml/simplexml.c
Hunk #1 succeeded at 1343 (offset -74 lines).
%URQFRGHFRPSLOHUHQ
Zoals eerder besproken bestaat het uitvoeren van locale installaties uit drie stappen: configureren, compileren en
installeren (zie ook: Linux Huiswerksysteem).
Configureren
Omdat PHP, net als alle Linux-software, is geschreven als platform-onafhankelijke software, moeten er extra tests op je
systeem worden uitgevoerd. Het configure script is een zogenaamd shell script waarmee deze tests worden uitgevoerd.
Dit script wordt in alle software-distributies meegeleverd. Je kunt het script alsvolgt starten:
./configure --with-apache=../apache_1.3.29 \
--with-mysql=/usr/local \
--without-iconv \
--with-gd \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--enable-mbstring
Zoals je ziet is het commando over meerdere regels verdeeld. Dit moest omdat de complete regel niet op de pagina paste
-. Je kunt gerust het hele blokje tekst copiëeren en in de terminal plakken. De afgebroken regels zijn namelijk beëindigd
met een backslash (“\”) character. Dit zorgt ervoor dat de terminal de regels ziet als één commando.
Via de optie -with-apache geven we aan waar PHP de extra broncode moet plaatsen, waarmee we straks Apache kunnen
hercompileren. Met de optie -with-mysql geven we aan waar de broncode van MySQL zich bevindt. Met de optie without-iconv geven we aan dat de iconv3 bibliotheken niet gebruikt moeten worden. Met -with-gd compileren we de
GD4 broncode mee. Via de opties -with-jpeg-dir en -with-png-dir geven we aan waar de voor GD benodigde broncode
voor het bewerken van afbeeldingen zich bevindt. Met de optie -enable-mbstring (multi-byte strings) geven we aan dat
we unicode strings, zoals UTF-8, willen gebruiken. De output ziet er ongeveer alsvolgt uit:
Generating files
creating ./config.status
creating php5.spec
creating main/build-defs.h
creating scripts/phpize
creating scripts/man1/phpize.1
creating scripts/php-config
creating scripts/man1/php-config.1
creating sapi/apache/libphp5.module
creating sapi/cli/php.1
creating main/php_config.h
creating main/internal_functions.c
creating main/internal_functions_cli.c
+--------------------------------------------------------------------+
| License:
|
| This software is subject to the PHP License, available in this
|
| distribution in the file LICENSE. By continuing this installation |
| process, you are bound by the terms of this license agreement.
|
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.
|
+--------------------------------------------------------------------+
Thank you for using PHP.
Remember to check the platform specific part of the reference manual
for hints about installing MySQL on your platform.
Also have a look at the files in the Docs directory.
Compileren
Nadat PHP de systeemvereisten heeft gecontroleerd, kan de broncode gecompileerd worden. Dit doen we met het make
programma:
make
We kijgen nu de output van het compileer-proces te zien. Deze bestaat voornamelijk uit het herhaaldelijk uitvoeren van
het GNU compiler programma gcc. De output van een succesvolle compilatie ziet er alsvolgt uit:
Build complete.
Don't forget to run 'make test'.
Let op: Voer make test niet uit. Het compileer-proces duurt toch al vrij lang. Op mijn machine (3Ghz/500Mb) duurde het
een kwartier. Op mijn Raspberry PI (500Mhz/500Mb) zelfs 1 uur.
Installeren
We hebben nu een aantal zogenaamde binaries (uitvoerbare programma’s) gemaakt. De binaries, inclusief help- en
loadable modules, moeten nu in de juiste locaties geïnstalleerd worden:
Type bestanden
binaries (programma’s)
man pages (help-bestanden)
libraries (loadable modules)
includes (broncode)
locatie
/usr/local/bin
/usr/local/man
/usr/local/lib/php
/usr/local/include/php
3
De iconv software converteert van de ene teken-set naar de andere, bijvoorbeeld ASCII of UTF-8. PHP heeft een bepaalde versie nodig welke in veel
Linux systemen niet ondersteund wordt. Om conflicten te voorkomen, compileren we de iconv broncode niet mee.
4
GD staat voor Graphics Draw. Een framework, bedoeld voor web-programmeurs om afbeeldingen te bewerken. Zie voor meer info:
http://www.boutell.com/gd/
Dit kunnen we automatisch doen via de optie install van het make programma:
make install
De bestanden worden nu gekopieerd naar de juiste locaties en voorzien van de juiste toegangsrechten. Ook dit duurt vrij
lang: ongeveer 5 minuten. Wacht rustig af. De output ziet er alsvolgt uit:
Installing PHP SAPI module:
apache
Installing PHP CLI binary:
/usr/local/bin/
Installing PHP CLI man page:
/usr/local/man/man1/
Installing build environment:
/usr/local/lib/php/build/
Installing header files:
/usr/local/include/php/
Installing helper programs:
/usr/local/bin/
program: phpize
program: php-config
Installing man pages:
/usr/local/man/man1/
page: phpize.1
page: php-config.1
Installing PEAR environment:
/usr/local/lib/php/
[PEAR] Archive_Tar
- installed: 1.3.7
[PEAR] Console_Getopt - installed: 1.2.3
[PEAR] Structures_Graph- installed: 1.0.3
[PEAR] XML_Util
- installed: 1.2.1
[PEAR] PEAR
- installed: 1.9.1
Wrote PEAR system config file at: /usr/local/etc/pear.conf
You may want to add: /usr/local/lib/php to your php.ini include_path
Installing PDO headers:
/usr/local/include/php/ext/pdo/
$SDFKHKHUFRPSLOHUHQ
In de vorige stap hebben we de PHP-module gecompileerd, zodat er extra broncode wordt toegevoegd aan de map voor
de Apache broncode. Deze extra broncode moet nu worden meegecompileerd. Ga allereerst terug naar de map voor de
Apache broncode. Dit doen we met het commando cd:
cd ../apache_1.3.29
Zoals we eerder hebben gezien (zie: Apache Installatie), installeren we Apache in drie stappen: configureren, compileren
en installeren.
Configureren
Het configure-script kunnen we alsvolgt starten:
bash ./configure --activate-module=src/modules/php5/libphp5.a
Normaal zou het commando ./configure voldoende zijn, maar in sommige Linux versies zoals Debian, wordt standaard
niet bash als commando-interpreter gebruikt maar dash, een variant op het bash programma. De Apache scripting
benodigt bash. Met de optie -activate-module geven we aan dat de PHP module moet worden meegecompileerd.
Configuring for Apache, Version 1.3.29
+ using installation path layout: Apache (config.layout)
+ activated php5 module (modules/php5/libphp5.a)
+ Warning: no Perl interpreter detected for support scripts.
+ Perhaps you need to specify one with --with-perl=FILE.
Creating Makefile
Creating Configuration.apaci in src
Creating Makefile in src
+ configured for Cygwin platform
+ setting C compiler to gcc
+ setting C pre-processor to gcc -E
+ using "tr [a-z] [A-Z]" to uppercase
+ checking for system header files
+ adding selected modules
o php5_module uses ConfigStart/End
+ using builtin Expat
+ checking sizeof various data types
+ doing sanity check on compiler and options
Creating Makefile in src/support
Creating Makefile in src/os/cygwin
Creating Makefile in src/ap
Creating Makefile in src/main
Creating Makefile in src/lib/expat-lite
Creating Makefile in src/modules/standard
Creating Makefile in src/modules/php5
Compileren
Nu kan het hercompileren van Apache worden gestart. Dit doen we met het make programma:
make
We kijgen nu de output van het compileer-proces te zien. Deze bestaat voornamelijk uit het herhaaldelijk uitvoeren van
het GNU compiler programma gcc. De output van een succesvolle compilatie ziet er alsvolgt uit:
gcc -c -I../os/cygwin -I../include
-DCYGWIN -DUSE_HSREGEX -DUSE_EXPAT -I../lib/expatlite -DNO_DL_NEEDED `../apaci` checkgid.c
gcc -DCYGWIN -DUSE_HSREGEX -DUSE_EXPAT -I../lib/expat-lite -DNO_DL_NEEDED `../apaci` -o
checkgid
-L../os/cygwin -L../ap checkgid.o -lm -lap -los -lcrypt -lgdbm
make[2]: Map '/usr/local/src/apache_1.3.29/src/support' wordt verlaten
<=== src/support
make[1]: Map '/usr/local/src/apache_1.3.29' wordt verlaten
make[1]: Map '/usr/local/src/apache_1.3.29' wordt binnengegaan
make[1]: Map '/usr/local/src/apache_1.3.29' wordt verlaten
<=== src
Installeren
We hebben nu een aantal zogenaamde binaries (uitvoerbare programma’s) gemaakt. De binaries, inclusief help- en
configuratiebestand moeten nu in de juiste locaties geïnstalleerd worden. Dit doen we opnieuw met het make programma:
make install
De bestanden worden geïnstalleeerd. De output ziet er alsvolgt uit:
+--------------------------------------------------------+
| You now have successfully built and installed the
|
| Apache 1.3 HTTP server. To verify that Apache actually |
| works correctly you now should first check the
|
| (initially created or preserved) configuration files
|
|
|
|
/usr/local/apache/conf/httpd.conf
|
|
| and then you should be able to immediately fire up
|
| Apache the first time by running:
|
|
|
|
/usr/local/apache/bin/apachectl start
|
|
| Thanks for using Apache.
The Apache Group
|
|
http://www.apache.org/ |
+--------------------------------------------------------+
+HWKRHUDPRPHQW
We hebben de PHP module met Apache meegecompileerd. Dit betekent dat Apache nu beschikking heeft over de PHP
scripting taal.
Om te controleren of de PHP module aan Apache is toegevoegd kunnen we het volgende commando gebruiken:
/usr/local/apache/bin/httpd -l
De (ingekorte) output moet er alsvolgt uitzien. Als het goed gegaan is heb je nu de module mod_php5.c
meegecompileerd:
Compiled-in modules:
http_core.c
mod_env.c
mod_log_config.c
mod_mime.c
mod_negotiation.c
mod_status.c
mod_userdir.c
mod_alias.c
mod_access.c
mod_auth.c
mod_setenvif.c
mod_php5.c
suexec: disabled; invalid wrapper /usr/local/apache/bin/suexec
+XLVZHUNRSVWXUHQ
Teken de opdracht af door mij jouw command history te sturen. Dit doe je met een pijpleiding tussen de commando’s
history en email. Zorg dat het onderwerp van de e-mail tussen aanhalingstekens staat:
history | email -s "PHP installatie" daniel@localhost
$GPLQLVWUDWRUXLWORJJHQ
We hebben Apache opnieuw gecompileerd met de PHP module, maar we zijn nog steeds ingelogd als Administrator
(root).
Geef tot slot <Ctrl>-D om de Administrator uit te loggen.