[Présentation
|Installation
Mandrake |
Présentation de
l'arborescence | Configuration (Les fichiers de configuration
, Les pages webs
utilisateurs ) | Lancemen de
l'application en standalone | Tests de fonctionnement | Les hôtes virtuels | Les alias | Protection
d'une page | MySQL (Tests de fonctionnement ,phpMyAdmin) | Scripts
CGI | PHP et LDAP ]
Dernière modification 19 septembre 2005
Apache + PHP + MySQL (installation avec RPM Mandriva LE2005)
(Ce guide peut être téléchargé dans la
section téléchargement)
Configuration réseau
Présentation
Cette page n'a pas pour vocation de vous présenter
l'installation d'un serveur Apache destiné à être
vu du monde entier, mais plutôt l'installation d'un serveur Apache
sur un réseau local en intranet, afin surtout de se familiariser
au langage PHP et au SGBD MySQL et
éventuellement
à LDAP.
Si vous voulez avoir une version optimisée pour votre machine et
une version plus récente vous pouvez aller voir sur ma page "Apache+PHP+MySQL avec les
sources".
NOTE: Pour plus d'info sur Apache www.apache.org
Pour l'analyser des logs d'Apache, reportez vous à la page "Analyser les logs
d'Apache avec Webalizer et Awstats".
Pour mettre en place un moteur de recherche, reportez vous à
la page "Ht://Dig".
Installation Mandrake
Voici les packages standards à installer pour Apache (un
urpmi apache2 devrait suffire),
voilà la liste par défaut
apache-conf-2.0.53-5mdk.i586
apache2-2.0.53-9.1.102mdk.i586
apache2-common-2.0.53-9.1.102mdk.i586
apache2-modules-2.0.53-9.1.102mdk.i586
libapr-util0-0.9.6-4mdk.i586
libapr0-0.9.6-3mdk.i586
Pour le PHP un urpmi
apache2-mod_php5 suffit, il mène à l'installation
des packages suivants :
apache2-mod_php5-2.0.53_5.0.3-5mdk.i586
libphp5_common5-5.0.3-8mdk.i586
php5-ctype-5.0.3-4mdk.i586
php5-ftp-5.0.3-4mdk.i586
php5-gettext-5.0.3-4mdk.i586
php5-ini-5.0.3-3mdk.noarch
php5-pcre-5.0.3-4mdk.i586
php5-posix-5.0.3-4mdk.i586
php5-session-5.0.3-4mdk.i586
php5-sysvsem-5.0.3-4mdk.i586
php5-sysvshm-5.0.3-4mdk.i586
php5-yp-5.0.3-4mdk.i586
Vous trouverez ces autres packages pour les extensions GD, MySQL
et LDAP
php5-gd-5.0.3-4mdk.i586.rpm
libmysql14-4.1.11-1.1.102mdk.i586
php5-mysql-5.0.3-6mdk.i586 (requière MySQL)
php5-ldap-5.0.3-6mdk.i586.rpm
(requière OpenLDAP)
ATTENTION - Pour MySQL, le serveur MySQL fourni
avec la Mandrake doit être préalablement installé,
pour plus d'info voir la page MySQL.
- Pour LDAP, le serveur LDAP fourni avec la Mandrake
doit être préalablement installé, pour plus d'info
voir la page OpenLDAP.
Présentation de
l'arborescence
L'installation va créer un répertoire /etc/httpd
contenant:
- répertoire 2.0
- répertoire conf qui contient les fichiers de
configuration
- répertoire conf.d qui contient les fichiers de
configuration des modules non standards (dont PHP)
- fichier logs lien vers /var/log/httpd/ contenant les
logs d'Apache
Le répertoire 2.0
contient
- un lien conf vers le répertoire vu plus haut
- un lien extramodules vers le répertoire /usr/lib/apache2-extramodules/
contenant des modules particuliers (dont le module PHP)
(à ce propos y a un bug dans la LE2005 le lien va vers /usr/lib/apache-extramodules/
qui n'existe pas...)
- un lien lib vers le répertoire de
bibliothèque /usr/lib
- à nouveau un lien logs vers le répertoire de
log /var/log/httpd/
- un lien modules vers le répertoire /usr/lib/apache2/
contenant
les modules standards d'Apache (hôte virtuel, proxy, etc.)
Le répertoire de log /var/log/httpd contient
essentiellement deux fichiers:
- access_log listant les accès au serveur
- error_log listant les erreurs en tout genre
Le répertoire de modules /usr/lib/apache2 contient
tous les modules utilisables par Apache, pour info un module
est une extension logicielle à Apache, lui permettant
par exemple d'interpréter le PHP (module mod_php5.so
se
trouvant sous /usr/lib/apache2-extramodules).
Le répertoire /etc/httpd/conf contient:
- le fichier de configuration d'Apache httpd2.conf
- le fichier commonhttpd.conf qui est appelé dans httpd2.conf,
il contient des paramètres complémentaires de
configuration.
- le fichier fileprotector.conf pour
protéger les fichiers php contre l'édition
- autre fichier de conf httpd2-perl.conf
qui
ne sert à rien, il est là à titre d'exemple
- apache-mime.types fixe le type de fichier suivant l'extension
du dit fichier (.doc=msword, .ps=postscript, ...),
ça permet au client qui se connecte sur le serveur, de savoir
comment interpréter le fichier suivant son extension.
- magic qui sert pour le module mod_mime_magic qui
est désactivé par défaut
- magic.default qui est un modèle pour le fichier magic,
il ne sert pas à la configuration d'Apache
- un répertoire vhosts pour gérer les hôtes
virtuels, en gros pour un même serveur vous pouvez définir
plusieurs noms, voir paragraphe plus bas
- un répertoire addon-modules qui contient des fichiers
de configuration de certains modules
Maintenant vous avez encore d'autres fichiers sous /var/www avec
:
- répertoire cgi-bin qui contiendra vos scripts CGI
- répertoire html contenant la page d'accueil d'Apache
par défaut
- répertoire icons, qui comme son nom l'indique contient
des icônes, notamment celles pour identifier le type de fichier
- répertoire error contient les messages d'erreur
d'Apache, c'est ces fichiers qu'il faudra modifier pour personnaliser
les mesages d'erreur.
- répertoire perl contient les scripts perl
Configuration
Les fichiers de
configuration
Voici un extrait des fichiers de conf d'Apache avec les points
que je juge important :
Pour /etc/httpd/conf/httpd2.conf
### Main Configuration Section
### You really shouldn't change these settings unless you're a guru
###
ServerRoot /etc/httpd/2.0
#ServerName localhost
#LockFile /etc/httpd/httpd.lock
PidFile /var/run/httpd.pid
ErrorLog logs/error_log
LogLevel warn
# là où sont placés les fichiers par défaut
du serveur
DocumentRoot /var/www/html
### Dynamic Shared Object (DSO) Support
###
### You should always leave those three, as they are needed for
### normal use.
### mod_access (Order, Allow, etc..)
### mod_log_config (Transferlog, etc..)
### mod_mime (AddType, etc...)
# chargement des modules (non chargé si ligne commentée
par un #)
# la documentation sur tous les modules se trouvent sur le site officiel
# ou dans le package apache2-manual package.
LoadModule access_module
modules/mod_access.so
LoadModule
auth_module
modules/mod_auth.so
LoadModule auth_anon_module
modules/mod_auth_anon.so
##LoadModule auth_dbm_module modules/mod_auth_dbm.so
LoadModule auth_digest_module modules/mod_auth_digest.so
##LoadModule
charset_lite_module
modules/mod_charset_lite.so
##LoadModule case_filter_module modules/mod_case_filter.so
##LoadModule case_filter_in_module
modules/mod_case_filter_in.so
##LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule include_module
modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
#LoadModule log_forensic_module modules/mod_log_forensic.so
LoadModule logio_module
modules/mod_logio.so
LoadModule
env_module
modules/mod_env.so
##LoadModule mime_magic_module modules/mod_mime_magic.so
##LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule expires_module
modules/mod_expires.so
LoadModule headers_module
modules/mod_headers.so
LoadModule usertrack_module
modules/mod_usertrack.so
##LoadModule unique_id_module modules/mod_unique_id.so
LoadModule setenvif_module
modules/mod_setenvif.so
LoadModule
mime_module
modules/mod_mime.so
LoadModule status_module
modules/mod_status.so
LoadModule autoindex_module
modules/mod_autoindex.so
LoadModule
asis_module
modules/mod_asis.so
LoadModule
info_module
modules/mod_info.so
LoadModule
cgi_module
modules/mod_cgi.so
##LoadModule
cgid_module
modules/mod_cgid.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule
dir_module
modules/mod_dir.so
LoadModule
imap_module
modules/mod_imap.so
LoadModule actions_module
modules/mod_actions.so
##LoadModule speling_module
modules/mod_speling.so
LoadModule userdir_module
modules/mod_userdir.so
LoadModule alias_module
modules/mod_alias.so
LoadModule rewrite_module
modules/mod_rewrite.so
#LoadModule dumpio_module
modules/mod_dumpio.so
###
### Global Configuration
###
# We now support multiple apache configurations on the same server. In
# common.conf, we put all directives that are common to all
implementations
# (httpd, httpd-perl, etc.)
# For Apache2 we load all conf files in conf.d
# on charge des fichiers de configuration complémentaires
Include /etc/httpd/conf.d/*.conf
Include conf/commonhttpd.conf
Include conf/fileprotector.conf
###
### IP Address/Port and Proxied configuration section
###
# The APACHEPROXIED setting can be set in /etc/rc.d/init.d/httpd if you
# are using a proxy or accelerator, like the Apache-SGI or khttpd, so
that
# the fast web server serves static content while Apache handles the
# cgi or php files
# vous avez la possibilité de configurer apache comme un proxy
# dans ce cas les directives suivantes fixe les numéros de port
du proxy
# et du serveur http
#BindAddress *
<IfDefine APACHEPROXIED>
Listen 8080
</IfDefine>
<IfDefine !APACHEPROXIED>
Listen 80
</IfDefine>
# Likewise, we can set apache as the server by default and send perl
# requests via ProxyPass to apache-mod_perl. It increases performance
# since the perl interpreter is only used for perl and the standard
apache
# does all the html and image files, with a smaller footprint.
#
# If you install apache and apache-mod_perl, this is the default config.
# If you don't want two web servers to use perl, uninstall apache, and
# apache-mod_perl will not be proxied.
<IfDefine PERLPROXIED>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^proxy:.* - [F]
RewriteRule ^(.*\/perl\/.*)$
http://%{HTTP_HOST}:8200$1 [P]
RewriteRule ^(.*\/cgi-perl\/.*)$
http://%{HTTP_HOST}:8200$1 [P]
</IfModule>
</IfDefine>
###
### Log configuration Section
###
<IfModule mod_log_config.c>
#Single logfile with access, agent and referer information
#This is the default, if vlogs are not defined for the main server
CustomLog logs/access_log combined env=!VLOG
#If VLOG is defined in conf/vhosts/Vhost.conf, we use this entry
CustomLog "|/usr/sbin/advxsplitlogfile" vhost env=VLOG
</IfModule>
###
### Virtual Hosts
###
# We include different templates for Virtual Hosting. Have a look in the
# vhosts directory and modify to suit your needs.
# chargement du fichier de configuration des hôtes virtuels
Include conf/vhosts/Vhosts.conf
#Include conf/vhosts/DynamicVhosts.conf
#Include conf/vhosts/VirtualHomePages.conf
###
### Performance settings Section
###
#
# Timeout: The number of seconds before receives and sends time out.
#
# 300s avant d'abandonner, c'est peut être un peu long
Timeout 300
#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
# pour empêcher plusieurs requêtes par connexion
KeepAlive On
#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
# nombre maximum de requêtes durant une connexion
MaxKeepAliveRequests 100
#
# KeepAliveTimeout: Number of seconds to wait for the next request from
the
# same client on the same connection.
#
# nombre max de seconde à attendre la prochaine requête
d'un client pendant la même connexion
KeepAliveTimeout 15
# prefork MPM [THIS IS THE DEFAULT]
# paramètres sur les nombres de process serveurs
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept
spare
# MaxSpareServers: maximum number of server processes which are kept
spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process
serves
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
# worker MPM
# paramètres de performance
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server
process
# MaxRequestsPerChild: maximum number of requests a server process
serves
<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
# perchild MPM
# NumServers: constant number of server processes
# StartThreads: initial number of worker threads in each server process
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# MaxThreadsPerChild: maximum number of worker threads in each server
process
# MaxRequestsPerChild: maximum number of connections per server process
<IfModule perchild.c>
NumServers 5
StartThreads 5
MinSpareThreads 5
MaxSpareThreads 10
MaxThreadsPerChild 20
MaxRequestsPerChild 0
# force fcntl
AcceptMutex fcntl
</IfModule>
# peruser MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept
spare
# MaxSpareServers: maximum number of server processes which are kept
spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process
serves
<IfModule peruser.c>
MinSpareServers 2
MaxProcessors 10
MaxClients 150
MaxRequestsPerChild 100
Multiplexer apache apache
# Processor user group /home/user
# chroot dir is optional:
# Processor user group
</IfModule>
###
### webapps configuration section
###
# Web applications should be activated _after_ apache has been
# configured properly.
Include /etc/httpd/webapps.d/*.conf
Dans le fichier commonhttpd.conf vous aurez la
configuration notamment de :
### Common server configuration
# nom du proprio du process, l'important est que ce soit pas root
# pour une raison de sécurité
User apache
Group apache
#
# ServerAdmin: Your address, where problems with the server should be
# e-mailed. This address appears on some server-generated
pages, such
# as error documents.
# mail de l'administrateur du serveur
ServerAdmin root@localhost
# options d'accès au répertoire racine d'Apache
<Directory />
Options -All -Multiviews
AllowOverride None
<IfModule mod_access.c>
Order deny,allow
Deny from all
</IfModule>
</Directory>
# on pourra accèder aux pages HTML de vos
utilisateurs si
ceux-ci créent
# un répertoire public_html (droit 755) sous leur
homedirectory (droit 755)
# on y accès en tapant dans un navigateur
http://serveur-apache/~login-utilisateur
<IfModule mod_userdir.c>
UserDir public_html
</IfModule>
# DirectoryIndex: Name of the file or files to use as a
pre-written
HTML
# directory index. Separate multiple entries with spaces.
# nom du fichier (suivant son type) qui sera chargé en
premier dans un
répertoire,
<IfModule mod_include.c>
<IfModule mod_dir.c>
DirectoryIndex index.shtml
</IfModule>
</IfModule>
<IfModule mod_php4.c>
<IfModule mod_dir.c>
DirectoryIndex index.php
index.phtml index.php index.php4
</IfModule>
</IfModule>
<IfModule mod_php5.c>
<IfModule mod_dir.c>
DirectoryIndex index.php
index.phtml index.php index.php4 index.php5
</IfModule>
</IfModule>
<IfModule mod_dir.c>
DirectoryIndex index.html index.html.var index.cgi
index.pl index.htm Default.htm default.htm index.xml
</IfModule>
# nom du fichier pour limiter l'accès à un
répertoire
AccessFileName .htaccess
# directive pour qu'on ne puisse pas voir les fichier
.htaccess
<IfModule mod_access.c>
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>
</IfModule>
(...)
# Cette directive permet de définir les informations
sur le
serveur Apache qui seront consultables
# vous avez le choix entre Full | OS | Minor | Minimal | Major | Prod
ServerTokens Full
(...)
# définition des alias, on verra plus bas leur
intérêt
<IfModule mod_alias.c>
#
# Note that if you include a trailing / on fakename
then the server will
# require it to be present in the URL. So
"/icons" isn't aliased in this
# example, only "/icons/"..
#
Alias /icons/ /var/www/icons/
Alias /doc /usr/share/doc
#
# ScriptAlias: This controls which directories
contain server scripts.
# ScriptAliases are essentially the same as Aliases,
except that
# documents in the realname directory are treated as
applications and
# run by the server when requested rather than as
documents sent to the client.
# The same rules about trailing "/" apply to
ScriptAlias directives as to
# Alias.
#
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
ScriptAlias /protected-cgi-bin/
/var/www/protected-cgi-bin/
<IfModule mod_perl.c>
#Provide two aliases to the
same cgi-bin directory,
#to see the effects of the 2
different mod_perl modes
#for Apache::Registry Mode
Alias /perl/ /var/www/perl/
#for Apache::Perlrun Mode
Alias /cgi-perl/
/var/www/perl/
</IfModule>
</IfModule>
(...)
# pour une page multi language le français est
prioritaire
<IfModule mod_negotiation.c>
LanguagePriority fr en de
es it da nl et el ja kr no pl pt pt-br ru ltz ca sv tw
</IfModule>
(...)
# définition des droits d'accès aux pages
perso
<Directory /home/*/public_html>
AllowOverride All
Options MultiViews -Indexes Includes FollowSymLinks
<IfModule mod_access.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
<Directory /home/*/public_html/cgi-bin>
Options +ExecCGI -Includes -Indexes
SetHandler cgi-script
<IfModule mod_access.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
<IfModule mod_perl.c>
<Directory /home/*/public_html/perl>
SetHandler perl-script
<IfDefine !APACHE2>
PerlHandler
Apache::PerlRun
</IfDefine>
<IfDefine APACHE2>
PerlResponseHandler ModPerl::PerlRun
</IfDefine>
Options -Indexes ExecCGI
PerlSendHeader On
<IfModule mod_access.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
</IfModule>
(...)
Vous constaterez que vous pouvez très bien intégrer ce
dernier fichier très facilement au fichier httpd2.conf
pour
simplifier.
A noter le fichier /etc/httpd/conf.d/70_mod_php5.conf contenant
<IfDefine HAVE_PHP5>
<IfModule !mod_php5.c>
LoadModule php5_module
extramodules/mod_php5.so
</IfModule>
</IfDefine>
<IfModule mod_php5.c>
PHPINIDir /etc
</IfModule>
<IfModule mod_mime.c>
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php4
AddType application/x-httpd-php .php5
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php-source .phps
</IfModule>
Il sert pour l'interprétation des pages se terminant par .php,.php4,
etc par le module PHP.
Les pages webs
utilisateurs
Le problème avec le répertoire public_html
des utilisateurs et qu'il faut mettre 755 au niveau de la home
directory, ce qui est particulièrement génant au niveau
sécurité. Vous pouvez spécifier que chaque
utilisateur doit créer ses pages sous
/home/http/login-utilisateur en écrivant pour la variable UserDir
dans
le fichier commonhttpd.conf
UserDir /home/httpd
Ainsi pour l'utilisateur toto quand vous taperez comme URL http://serveur-apache/~toto,apache
ira
chercher le fichier index.htm sous /home/httpd/toto. On
peut aller plus loin en spécifiant un répertoire
particulier, /home/httpd/toto/html par exemple, en
écrivant:
UserDir /home/httpd/*/html
Dans ce cas pensez à modifier dans commonhttpd.conf la
partie
<Directory /home/*/public_html>
AllowOverride All
Options MultiViews -Indexes Includes FollowSymLinks
<IfModule mod_access.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
<Directory /home/*/public_html/cgi-bin>
Options +ExecCGI -Includes -Indexes
SetHandler cgi-script
<IfModule mod_access.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
<IfModule mod_perl.c>
<Directory /home/*/public_html/perl>
SetHandler perl-script
<IfDefine !APACHE2>
PerlHandler
Apache::PerlRun
</IfDefine>
<IfDefine APACHE2>
PerlResponseHandler ModPerl::PerlRun
</IfDefine>
Options -Indexes ExecCGI
PerlSendHeader On
<IfModule mod_access.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
</IfModule>
Et remplacer /home/*/public_html par /home/httpd/*/html
Lancement de l'application
Vous allez trouver un fichier de lancement/arrêt du nom de httpd
dans /etc/rc.d/init.d, le lancement est automatique à
l'état de marche 3, 4 et 5. Toutefois pour lancer Apache
la première fois lors de son installation il sera
nécessaire de taper
/etc/rc.d/init.d/httpd start
En cas de modification du fichier de configuration, pour relancer Apache
il suffit de taper
/etc/rc.d/init.d/httpd restart
Pour connaître l'état
/etc/rc.d/init.d/httpd status
voilà le résultat
Apache is running.
httpd2: 28556 28555 28554 28553 28552
28544
Use /etc/rc.d/init.d/httpd
extendedstatus for more information.
Pour avoir encore plus d'info
/etc/rc.d/init.d/httpd extendedstatus
voilà le résultat
Apache Server Status for 127.0.0.1
Server Version: Apache-AdvancedExtranetServer/2.0.53
(Mandriva
Linux/PREFORK-9.2.102mdk) PHP/5.0.3
Server Built: Sep 6 2005 09:59:01
_________________________________________________________________
Current Time: Monday, 19-Sep-2005 19:05:54 CEST
Restart Time: Monday, 19-Sep-2005 18:50:04 CEST
Parent Server Generation: 0
Server uptime: 15 minutes 49 seconds
Total accesses: 0 - Total Traffic: 0 kB
CPU Usage: u0 s0 cu0 cs0
0 requests/sec - 0 B/second -
1 requests currently being processed, 4 idle workers
W____...........................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading
Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully
finishing,
"I" Idle cleanup of worker, "." Open slot with no current
process
#######################################
#######################################
Pour stopper
/etc/rc.d/init.d/httpd stop
Tests de fonctionnement
Tout d'abord en tant que simple utilisateur, toto par exemple,
vous allez créer un répertoire public_html dans
votre répertoire contenant un fichier index.html basique
du style:
<html>
<body>
<p> hello world </p>
</body>
</html>
ATTENTION répertoire /home/toto à 755
de
même que /home/toto/public_html
Maintenant d'un poste client tapez dans le champ URL de votre
navigateur préféré, en admettant que votre serveur
se nomme obelix:
http://obelix
Et là magique, apparaît la page d'accueil d'Apache,
pour info celle-ci se trouve sous /var/www/html. Maintenant
tapez:
http://obelix/~toto
et vous voyez apparaître sur un fond bien gris (ou d'une autre
couleur ça dépend de la config de votre navigateur).
hello world
C'est bon ça marche. Pour tester le PHP, en tant que toto,
écrivez un fichier info.php sous votre
répertoire public_htmlcontenant:
<?
phpinfo();
?>
D'un poste client, tapez dans le champ adresse (ou URL):
http://obelix/~toto/info.php
Voilà le résultat :

C'est bon le module PHP fonctionne.
ATTENTION Si comme moi vous utilisez des URL du style http://www.funix.org/fr/linux/index.php?ref=apache&page=menu
c'est
à dire avec passage d'arguments, à partir de la version
4.2.0 de php cette fonctionnalité a été
désactivée pour des raisons de sécurité.
D'autres méthodes permettent néanmoins de pouvoir passer
des arguments d'une page à une autre. En attendant pour
réactiver cette fonctionnalité, créer le fichier /etc/php/php.ini
dans lequel vous mettrez
register_globals = On
Relancez Apache. Cela dit vous avez intérêt
à laisser cette variable à Off et procéder comme
suit. Voilà le bout de code php des pages html de ce site pour
faire l'inclusion du menu à gauche ou pas. Voilà la code
avec register_globals = On
<?
if ($page=="menu")
{
$menu="menu.htm";
include($menu);
}
?>
Et le même code avec register_globals = Off
<?
if ($_GET["page"]=="menu")
{
$menu="menu.htm";
include($menu);
}
?>
Pour plus d'info sur cette fonctionnalité
désactivée et sur la manière de faire autrement http://www.php.net/manual/en/security.registerglobals.php
Les
hôtes virtuels
On peut mettre en place des hôtes virtuels, en d'autres termes un
utilisateur pour un même serveur Apache croira en voir plusieurs.
Exemple, soit votre serveur Apache obelix (adresse IP 192.168.13.11),
votre domaine breizland.bz, on va créer les hôtes
virtuels www.asterix.breizland.bz et www.idefix.breizland.bz
qui
vont pointer chacun vers un endroit différent du disque
(respectivement /usr/local/asterix et /usr/local/idefix
chacun contenant des pages html).
Dans le fichier /etc/httpd/conf/vhosts/Vhosts.conf on
va rajouter:
NameVirtualHost 192.168.13.11
<VirtualHost 192.168.13.11>
ServerName obelix.breizland.bz
DocumentRoot /var/www/html
ErrorLog logs/obelix-error_log
TransferLog logs/obelix-access_log
</VirtualHost>
<VirtualHost 192.168.13.11>
ServerName www.asterix.breizland.bz
DocumentRoot /usr/local/asterix
ErrorLog logs/asterix-error_log
TransferLog logs/asterix-access_log
</VirtualHost>
<VirtualHost 192.168.13.11>
ServerName www.idefix.breizland.bz
DocumentRoot /usr/local/idefix
ErrorLog logs/idefix-error_log
TransferLog logs/idefix-access_log
</VirtualHost>
Pour info, ce fichier est appelé dans
/etc/http/conf/httpd2.conf à la ligne
Include conf/vhosts/Vhosts.conf
Maintenant dans le fichier commonhttpd.conf rajoutez
<Directory /usr/local/idefix>
Options -Indexes
FollowSymLinks MultiViews
AllowOverride All
<IfModule mod_access.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
<Directory /usr/local/asterix>
Options -Indexes
FollowSymLinks MultiViews
AllowOverride All
<IfModule mod_access.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
Relancez Apache en tapant:
/etc/rc.d/init.d/httpd restart
Maintenant nous allons créer nos hôtes asterix
et
idefix, pour cela vous avez deux méthodes:
- rajouter www.asterix.breizland.bz et www.idefix.breizland.bz
dans /etc/hosts sur la même ligne que votre serveur Apache
(obelix dans notre exemple).
192.168.13.11 obelix obelix.breizland.bz
www.asterix.breizland.bz www.idefix.breizland.bz
Normalement si vous faites un ping sur www.idefix.breizland.bz ça
devrait marcher, pour les postes clients il faudra rajouter la
même ligne dans le fichier hosts (non nécessaire).
- si vous disposez d'un serveur DNS sur votre machine , au niveau de
votre config DNS dans votre fichier breizland.bz qui se trouve
sous /var/named vous devez rajouter tout à la fin:
www.asterix A 192.168.13.11
www.idefix A 192.168.13.11
Relancez le DNS en tapant:
/etc/rc.d/init.d/named restart
Pour tester tapez dans un shell:
ping www.asterix.breizland.bz
Maintenant dans le champ URL de votre navigateur
préféré:
http://www.asterix.breizland.bz
Et là, normalement vous devriez voir s'afficher la page que
vous avez placé sous /usr/local/asterix
Les alias
Si vous ne voulez pas mettre en place un serveur DNS, vous avez un
moyen plus simple, les alias. Concrètement, votre serveur
s'appelle obelix, vous voulez rendre accessibles les fichiers
html se trouvant sous /usr/share/doc/HTML, les utilisateurs
devront taper dans leur navigateur préféré: http://obelix/documentation.
Pour cela dans votre fichier /etc/httpd/conf/commonhttpd.conf,
vous allez rajouter:
Alias /icons/ /var/www/icons/
Alias /doc /usr/share/doc/
Alias /documentation /usr/share/doc/HTML
Les deux premières lignes sont déjà existantes sur
une config standard, vous constaterez que les adresses http://obelix/icons/
et http://obelix/doc ne sont pas accessibles car il n'y a pas
de
fichier index dans les répertoires /var/www/icons et
/usr/share/doc.
Rajoutez maintenant au niveau des directives Directory les
lignes suivantes
<Directory /usr/share/doc/HTML>
Options -Indexes
FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Relancez Apache, pour tester l'alias.
Protection d'une page
La protection d'une page pour l'utilisateur olivier se fait de
manière très simple, tous les fichiers à
accès limité doivent être concentré dans un
même répertoire /home/olivier/public_html/reserve
par
exemple, il suffit de créer dans celui-ci un fichier qu'on devra
nommer .htaccess contenant:
AuthUserFile auth/olivier.users
AuthName "Acces Restreint"
AuthType Basic
<Limit GET POST>
require valid-user
</Limit>
Le fichier olivier.users va contenir la liste des
utilisateurs habilités à accéder au
répertoire où se trouve .htaccess, il va se
trouver sous le répertoire /etc/httpd/2.0/auth que vous
devez créer préalablement. Pour info vous pouvez changer
le chemin /etc/httpd/2.0 en modifiant la valeur de la variable ServerRoot
qu'on
trouve dans le fichier httpd2.conf. Pour créer ce fichier
il suffit de taper:
htpasswd -c /etc/httpd/2.0/auth/olivier.users olivier
L'option -c correspond à la création du
fichier. On va alors avoir à rentrer un mot de passe pour
l'utilisateur olivier habilité à accéder
au
répertoire protégé.
New password:
On confirme
Re-type new password:
Adding password for user olivier
Ze problème est que vous devez taper cette variable en tant que
root, l'autre solution est de mettre auth à 777 pour
qu'un simple utilisateur puisse taper la commande htpasswd, ce
qui est un peu moyen.
Pour que l'utilisateur veronique puisse accéder aussi
au répertoire reserve d'olivier, vous taperez
alors :
htpasswd /etc/httpd/2.0/auth/olivier.users veronique
Maitenant quand à partir de votre navigateur
préféré quand vous allez rentrer comme URL http://obelix/~olivier/reserve,
vous aurez une fenêtre popup qui va s'ouvrir vous demandant de
rentrer votre nom d'utilisateur et le mot de passe préalablement
rentré.
A noter qu'il existe une directive qui permet de ne pas voir les
fichiers .htaccess de vos utilisateurs à partir d'un
navigateur, elle est dans le fichier commonhttpd.conf :
<files ~ "/\.ht">
order deny,allow
deny from all
</files>
MySQL
Tests de fonctionnement
MySQL
Comme prérequis on suppose que vous avez installé,
configuré MySQL et créé les deux
exemples de la page MySQL. On suppose que le serveur
s'appelle obelix et l'utilisateur olivier.
A priori il suffit de mettre en place PHP avec Apachepour
que les routines MySQL soient prises en compte.
Voici une page écrite en PHP qui va accéder
à la base de donnée essai et à sa table coord.
<?
$serveur="localhost";
$login="olivier";
$pass="mot-de-passe";
$base="essai";
$table="coord";
$id=MYSQL_CONNECT($serveur,$login,$pass);
mysql_select_db($base);
$nom="hoarau";
$prenom="olivier";
$email="olivier.hoarau@fnac.net";
$query="INSERT INTO $table VALUES('$nom','$prenom','$email')";
$result=mysql_query($query,$id);
echo "Saisie terminée";
?>
Placer ce script dans ~/public_html et appeler le bd1.php
Dans votre navigateur préféré, dans le champ
URL saisissez
http://obelix/~olivier/bd1.php
A priori y a pas grand chose qui s'est passé, maintenant
connecter vous à votre base essai dans un shell
[olivier@obelix olivier]$ mysql -u olivier -p essai
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10 to server version: 4.1.11
Type 'help' for help.
mysql> SELECT * FROM coord;
+-----+-------+--------------------+
| nom | prenom |
email
|
+-----+-------+--------------------+
| hoarau | olivier | olivier.hoarau@fnac.net |
+-----+-------+--------------------+
1 row in set (0.00 sec)
C'est bon ça fonctionne. Passons à un exemple plus
pointu, on va entrer les informations concernant vos visiteurs dans une
base MySQL, créer la table telle que décrite dans
l'exemple 2 de la page MySQL, créer maintenant le script
PHP.
<?
$page=getenv("HTTP_REFERER");
$ip=getenv( "REMOTE_ADDR");
$host=gethostbyaddr($ip);
$d = date("d/m/Y H:i:s");
$expl=getenv("HTTP_USER_AGENT");
$serveur="localhost";
$login="olivier";
$pass="mot-de-passe";
$base="essai";
$table="ref";
$id=MYSQL_CONNECT($serveur,$login,$pass);
mysql_select_db($base);
$query="INSERT INTO $table
VALUES('$d','$host','$ip','$expl','$page')";
$result=mysql_query($query,$id);
echo "$d $host($ip) $expl $page";
?>
Nommez ce script bd2.php et placez le dans ~/public_html.
Dans votre navigateur préféré tapez dans le champ
URL
http://obelix/~olivier/bd2.php
Vous devriez voir la date, le nom de votre machine avec son adresse
IP et des infos sur votre OS et votre navigateur. A présent
connectons nous à la base:
[olivier@obelix olivier]$ mysql -u olivier -p essai
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10 to server version: 4.1.11
Type 'help' for help.
mysql> SELECT * FROM ref;
+---------------------+-------------------+------------------+-------------------------------------------------------+------------------+
|
date
|
host
| ip
| os
| page
|
+---------------------+-------------------+------------------+-------------------------------------------------------+------------------+
| 24/04/2000 08:34:05 | asterix.armoric.bz | 192.168.13.11 |
Mozilla/4.61 [en] (X | http://obelix/~olivier/bd2.php |
+---------------------+-------------------+------------------+-------------------------------------------------------+------------------+
1 row in set (0.00 sec)
C'est bon le visiteur a bien été pris en compte.
Maintenant que vous savez comment Apache fonctionne avec MySQL
et PHP, laissez libre cours à votre imagination.
phpMyAdmin
phpMyAdmin est un ensemble de scripts PHP qui permet
d'administrer des bases MySQL à partir d'un navigateur.
Les infos d'install sont par ici.
Scripts CGI
Pour activer les scripts CGI, veuillez vous référer au
fichier commonhttpd.conf, vous avez la ligne suivante :
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
Cet alias permet d'accèder au répertoire des scripts
CGI. Vous devez avoir aussi le package perl-CGI installé
sur votre système.
Le but de l'exercice est de créer un script perl CGI qui va
traiter un formulaire quelconque d'une page HTML. Vous allez
créer en tant que root votre script perl sous /var/www/cgi-bin/,
et le nommer form.pl, voici son contenu:
#!/usr/bin/perl
use CGI;
$html=new CGI;
print $html->header;
print "<HTML>\n";
print "<HEAD>\n";
print "<TITLE>Premier script CGI perl</TITLE>\n";
print "</HEAD>\n";
print "<BODY>\n";
print "<H1>Traitement du formulaire</H1>\n";
print "Nom :";
print $html->param('nom');
print "<p>\n";
print "Email :";
print $html->param('email');
print "<p>\n";
print "Commentaire:";
print $html->param('comment');
print "</BODY>\n";
print "</HTML>\n";
Donner les droits qui vont bien avec ce fichier:
chmod 755 form.pl
L'utilisateur apache du groupe apache doit en être
propriétaire:
chown apache:apache form.pl
En tant qu'utilisateur standard (olivier dans notre exemple),
dans votre répertoire public_html créer maintenant
le fichier HTML suivant que vous appelerez formulaire.htm
<html>
<body>
<h2>Formulaire</h2>
<form action="http://obelix/cgi-bin/form.pl" METHOD=GET>
Nom: <input type="text" name=nom size=20><br>
Email: <input type="text" name=email size=30><br>
Commentaire: <input type="text" name=comment size=30><br>
<input type=submit value="Envoyer"> <input type=reset
value="remettre à zéro">
</form>
</body>
</html>
Voilà maintenant quand vous allez accéder à http://obelix/~olivier/formulaire.htm,
vous allez avoir une page du style:
En appuyant sur Envoyer ça va déclencher
l'exécution du script CGI perl, qui va provoquer l'affichage des
valeurs précédemment saisies.
PHP et LDAP
Voilà un petit programme qui va nous permettre de rajouter une
entrée dans la base LDAP, libre à vous maintenant
de créer des formulaires de saisie, de destruction, et de
recherche:
<?
// nom du serveur LDAP
$server="asterix";
// identification de l'administrateur de la base
$rootdn="cn=Manager, dc=breizland, dc=bz";
//mot de passe administrateur
$rootpw="secret";
//connexion à la base
$result=ldap_connect($server);
if ($result==1)
{
ldap_bind($result,$rootdn,$rootpw);
}
//Enregistrement d'une entrée dans la base
echo"Enregistrement de Benjamin Hoarau\n";
$dn="dc=breizland, dc=bz";
$nom="Hoarau";
$prenom="Benjamin";
$info["cn"]=$nom." ".$prenom;
$info["sn"]=$nom;
$info["objectclass"]="person";
ldap_add($result,"cn=$nom $prenom,$dn",$info);
ldap_close($result);
echo "L'enregistement a réussi";
?>
Appelez ce fichier ldap.php, vous pouvez le tester et
vérifier avec ldapsearch que l'entrée a bien
été saisie dans la base.