LX-SVS-INFO-PHP5
Updated sep/21/10 13:04

php5 op apache2 - debian

php5 is een programmeertaal waarmee je dynamische websites kunt bouwen. php5 staat voor Php is a Hypertext Preprocessor, versie 5. Dit is dus een recursieve afkorting. Omdat PHP origineel gebaseerd was op de script taal Perl, kunnen we het ook vertalen als Perl Hypertext Preprocessor.

Enkele links:

php.net: http://www.php.net/
PHP 101: PHP For the Absolute Beginner: http://devzone.zend.com/article/627

  1. Wat doet php5

    Hier volgt een 'simpel' voorbeeld waarbij php-code wordt uitgevoerd door een apache2 server, links de php-code, en rechts de webpagina in html zoals die wordt doorgestuurd.


    Het is niet de bedoeling dat je dit nu intikt op je server, dat kan je eventueel wel doen, zodra php5 is geïnstalleerd en getest.


    code.php
    doorgestuurde html:
    <html>
    <head></head>
    <body>
    <h2>Today is
    <?php
    echo date('l jS \of F Y h:i:s A');
    ?>
    </h2>
    <br /><br />
    <b>So who do you think you are, ...?</b>
    <br /><br />
    <i>
    <?php
    // print output
    $hostname=gethostname();
    echo "My name is $hostname but most people call me <b>The Server</b>!";
    ?>
    </i>
    </body>
    </html>
    <html>
    <head></head>
    <body>
    <h2>Today is
    Tuesday 21st of September 2010 02:22:55 PM
    </h2>
    <br /><br />
    <b>So who do you think you are, ...?</b>
    <br /><br />
    <i>
    My name is lx08 but most people call me <b>The Server</b>!</i>
    </body>
    </html>


    De gebruiker krijgt dit te zien:

    op je webbrowser:

    Today is Tuesday 21st of September 2010 02:22:55 PM



    So who do you think you are, ...?

    My name is lx08 but most people call me The Server!

    De naam verandert afhankelijk van de server waarop de code draait, en de datum is natuurlijk ook dynamisch.

    Met php kun je dus programma's schrijven: we noemen ze webapplicaties.

    Een systeembeheerder moet meestal geen webapplicaties kunnen schrijven, wel de server opzetten die ze moet draaien. Zij/Hij moet genoeg kennis hebben van php5 om de server te debuggen.

    In het voorbeeld wordt alles wat tussen <?php en ?> staat geïnterpreteerd als php-code. De rest is html. In php wordt alles wat volgt na echo, in de html resultaatcode gestopt. (on screen echo zoals in bash). date en gethostname zijn functies. $hostname is een variabele. //print output is een kommentaarregel.

    Noot: sommige servers willen geen hostname doorgeven: Fatal error: Call to undefined function gethostname() in /var/www/vhosts/linux800.be/httpdocs/code.php on line 15

  2. php5 installeren

    Met het volgende commando kun je php5 installeren:

    # apt-get install php5
    Reading package lists... Done
    Building dependency tree... Done
    The following extra packages will be installed:
      apache2-mpm-prefork libapache2-mod-php5
    Suggested packages:
      php-pear
    The following packages will be REMOVED:
      apache2-mpm-worker
    The following NEW packages will be installed:
      apache2-mpm-prefork libapache2-mod-php5 php5
    0 upgraded, 3 newly installed, 1 to remove and 77 not upgraded.
    Need to get 1048B/2835kB of archives.
    After unpacking 5407kB of additional disk space will be used.
    Do you want to continue [Y/n]? y
    Get:1 http://ftp.belnet.be etch/main php5 5.2.0-8+etch13 [1048B]
    Fetched 1048B in 0s (7155B/s)
    dpkg: apache2-mpm-worker: dependency problems, but removing anyway as you request:
     apache2 depends on apache2-mpm-worker (>= 2.2.3-4+etch6) | apache2-mpm-prefork (>= 2.2.3-4+etch6) | apache2-mpm-event (>= 2.2.3-4+etch6); however:
      Package apache2-mpm-worker is to be removed.
      Package apache2-mpm-prefork is not installed.

      Package apache2-mpm-event is not installed.
    (Reading database ... 165885 files and directories currently installed.)
    Removing apache2-mpm-worker ...
    Stopping web server (apache2)....
    Selecting previously deselected package apache2-mpm-prefork.
    (Reading database ... 165881 files and directories currently installed.)
    Unpacking apache2-mpm-prefork (from .../apache2-mpm-prefork_2.2.3-4+etch6_i386.deb) ...
    Selecting previously deselected package libapache2-mod-php5.
    Unpacking libapache2-mod-php5 (from .../libapache2-mod-php5_5.2.0-8+etch13_i386.deb) ...
    Selecting previously deselected package php5.
    Unpacking php5 (from .../php5_5.2.0-8+etch13_all.deb) ...
    Setting up apache2-mpm-prefork (2.2.3-4+etch6) ...
    Starting web server (apache2)....

    Setting up libapache2-mod-php5 (5.2.0-8+etch13) ...

    Setting up php5 (5.2.0-8+etch13) ...


    php5 werkt niet met apache2-mpm-worker, maar wel met apache2-mpm-prefork. apt-get zorgt voor de juiste versie. Voor de verschillen tussen de twee verwijs ik naar:

    http://httpd.apache.org/docs/2.0/mod/worker.html
    http://httpd.apache.org/docs/2.0/mod/prefork.html

    apt-get heeft zoals altijd zelf de webserver herstart.
  3. test of je php5 module geladen is

    Dat doen we met het volgende commando:

    # apache2ctl -M
    ServerName
    Loaded Modules:
     core_module (static)
     log_config_module (static)
     logio_module (static)
     mpm_prefork_module (static)
     http_module (static)
     so_module (static)
     alias_module (shared)
     auth_basic_module (shared)
     authn_file_module (shared)
     authz_default_module (shared)
     authz_groupfile_module (shared)
     authz_host_module (shared)
     authz_user_module (shared)
     autoindex_module (shared)
     cgi_module (shared)
     deflate_module (shared)
     dir_module (shared)
     env_module (shared)
     mime_module (shared)
     negotiation_module (shared)

     php5_module (shared)
     
    reqtimeout_module (shared)
     setenvif_module (shared)
     status_module (shared)
    Syntax OK


    En alles is hier ok

  4. als het echt fout gaat

    # apache2ctl -M
    Loaded Modules:
     core_module (static)
     log_config_module (static)
     logio_module (static)
     mpm_prefork_module (static)
     http_module (static)
     so_module (static)
     alias_module (shared)
     auth_basic_module (shared)
     authn_file_module (shared)
     authz_default_module (shared)
     authz_groupfile_module (shared)
     authz_host_module (shared)
     authz_user_module (shared)
     autoindex_module (shared)
     cgi_module (shared)
     dir_module (shared)
     env_module (shared)
     mime_module (shared)
     negotiation_module (shared)
     setenvif_module (shared)
     status_module (shared)
    Syntax OK


    Tot mijn niet geringe verbazing ontbreekt php5_module (shared)

    Dan moeten we kijken in /usr/lib/apache2/modules of php5 aanwezig is:

    # ls /usr/lib/apache2/modules/
    httpd.exp mod_authz_dbm.so mod_dav.so mod_include.so mod_rewrite.so libphp5.so mod_authz_default.so mod_dbd.so mod_info.so mod_setenvif.so mod_actions.so mod_authz_groupfile.so mod_deflate.so mod_ldap.so mod_speling.so mod_alias.so mod_authz_host.so mod_dir.so mod_log_forensic.so mod_ssl.so mod_asis.so mod_authz_owner.so mod_disk_cache.so mod_mem_cache.so mod_status.so mod_auth_basic.so mod_authz_user.so mod_dumpio.so mod_mime_magic.so mod_suexec.so mod_auth_digest.so mod_autoindex.so mod_env.so mod_mime.so mod_unique_id.so mod_authn_alias.so mod_cache.so mod_expires.so mod_negotiation.so mod_userdir.so mod_authn_anon.so mod_cern_meta.so mod_ext_filter.so mod_proxy_ajp.so mod_usertrack.so
    mod_authn_dbd.so mod_cgid.so mod_file_cache.so mod_proxy_balancer.so mod_version.so mod_authn_dbm.so mod_cgi.so mod_filter.so mod_proxy_connect.so mod_vhost_alias.so mod_authn_default.so mod_charset_lite.so mod_headers.so mod_proxy_ftp.so mod_authn_file.so mod_dav_fs.so mod_ident.so mod_proxy_http.so mod_authnz_ldap.so mod_dav_lock.so mod_imagemap.so mod_proxy.so


    libphp5.so is beschikbaar, we moeten alleen de module toevoegen in /etc/apache2/mods-available en ze daarna linken naar
    /etc/apache2/mods-enabled


    Zet wat volgt in /etc/apache2/mods-available/php5.load

    # vim /etc/apache2/mods-available/php5.load
    LoadModule php5_module /usr/lib/apache2/modules/libphp5.so

    Zet nu de configuratie correct in de file
    /etc/apache2/mods-available/php5.conf

    # vim /etc/apache2/mods-available/php5.conf
    <IfModule mod_php5.c>
      AddType application/x-httpd-php .php .phtml .php3
      AddType application/x-httpd-php-source .phps
    </IfModule>

    Nu moeten we beide files nog linken naar mods-enabled:

    # cd /etc/apache2/mods-enabled
    # ln -s ../mods-available/php5.* .

    en tenslotte moeten we apache2 herstarten:

    # /etc/init.d/apache2 restart

  5. php5 testen

    Maak een webpagina in je apache2 webserver met de naam test.php
    en met de volgende inhoud:

    $ vim /home/<mywebaccount>/httpdocs/test.php

    <?
    phpinfo();
    ?>


    Save de file en test in je webbrowser

    http://<mywebsite>/test.php

    Je zou dan iets moeten zien dat er ongeveer zo uitziet:

    PHP Version 5.2.0-8+etch13



    System Linux cassandra 2.6.18-5-686 #1 SMP Tue Dec 18 21:24:20 UTC 2007 i686
    Build Date Oct 2 2008 08:13:20
    Server API Apache 2.0 Handler
    Virtual Directory Support disabled
    Configuration File (php.ini) Path /etc/php5/apache2/php.ini
    Scan this dir for additional .ini files /etc/php5/apache2/conf.d
    additional .ini files parsed /etc/php5/apache2/conf.d/pdo.ini
    PHP API 20041225
    PHP Extension 20060613
    Zend Extension 220060519
    Debug Build no
    Thread Safety disabled
    Zend Memory Manager enabled
    IPv6 Support enabled
    Registered PHP Streams zip
    Registered Stream Socket Transports tcp, udp, unix, udg, ssl, sslv3, sslv2, tls
    Registered Stream Filters string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, convert.iconv.*, bzip2.*, zlib.*



    ...