Fallait que quelqu'un se tape le sale boulot alors je m'y colle
Note: si vous n'aimez pas mon tuto pourri, vous pouvez toujours vous rabattre sur ce lien fourni gracieusement par Gilbert Gosseyn sur un autre topic.
L'installation qui vous est proposée est à l'intention des développeurs (tout comme EasyPHP), et non pour un serveur public
Edit: la version Apache2/PHP5 par Gizmo
Merci au passage à ceux qui sont intervenu de près ou de loin dans l'élaboration, mises à jour ou corrections de ce tuto
Le but de ce topic: vous ôter l'envie d'utiliser EasyPHP et franchir le cap pour avoir la maîtrise de votre configuration, et gérer chacun des logiciels (Apache, PHP, MySQL) indépendamment des autres ou presque.
Comme EasyPHP est un truc 100% Windows, je vais prendre le point de vue de l'utilisateur Windows (ce que je suis moi-même d'ailleurs).
Choix des versions:
D'abord, il vaut mieux éviter de prendre la dernière version d'Apache (la 2.x) car son architecture a été revue au niveau du multithreading, ce qui n'est pas encore le cas de PHP (mais ce le sera dans la version 5). Autant éviter les problèmes et utiliser une configuration qui a fait ses preuves.
La dernière version dite stable d'Apache dans la branche 1.3.x est la 1.3.34. C'est celle que nous allons télécharger, par exemple ici (lien direct)
Pour PHP, la dernière version disponible au moment de la dernière édition de ce tuto est la 4.4.2. Comme vous pourrez le lire dans la doc, le support Apache 2 est expérimental. Je vous recommande le package ZIP et non le fichier d'installation standard car le ZIP contient beaucoup plus de fichiers, modules, etc.: http://be.php.net/get/php-4.4.2-Wi [...] m/a/mirror
Enfin, MySQL. Là, à vous de voir quelle version vous allez utiliser. La série 3.23 est certainement encore très répandue, la 4.0 a fait également son nid, et la 4.1 poursuit l'oeuvre, et la 5.0 est la dernière arrivée au niveau stable. Allez sur http://dev.mysql.com/ et suivez les liens sous la mention MySQL Products/Database servers à gauche, vous arriverez sur la liste des différents packages disponibles pour différents OS (Windows n'est pas le premier de la liste ) puis vous devrez choisir un miroir. Cette fois, vous pouvez prendre l'installeur, il fera tout ce qu'il faut.
Une fois tout cela récupéré, il faut installer. L'ordre importe peu car chaque package est indépendant. Notez bien où vous installez ces applications car il faudra aller y jeter un oeil plus tard.
Une fois tout installé, commençons les grandes manoeuvres:
MySQL
Sous Windows NT/2000/XP
L'installeur MySQL ne prend pas en charge la création du service comme le ferait Apache. Ce qui implique que le jour où vous désinstallez MySQL, le service sera toujours là, autant le savoir. Cependant, il existe un moyen simple de le retirer que j'expliquerai plus loin.
Créer un service manuellement ne sera pourtant pas à l'ordre du jour. Un utilitaire livré avec MySQL version Windows vous dépannera. Allez dans le répertoire bin en dessous du répertoire d'installation, vous trouverez un outil nommé winmysqladmin.exe. Démarrez le. Une fenêtre va apparaître un bref instant, puis il vous sera demandé un login d'administrateur, lequel sera créé dans la base de données par défaut installée avec MySQL.
Une fois ce login entré, il ne subsistera de l'application qu'une icône dans la traybar, de type feu de signalisation. Son état à rouge indique que le serveur ne fonctionne pas, ou du moins que le programme n'y est pas connecté. Dans notre situation, c'est simplement que le serveur ne tourne pas encore. Cliquez sur cette icône, voyez le menu WinNT, et choisissez Install the service dans le sous-menu. Une petite boîte de dialogue vous demandera confirmation. Cette confirmation donnée, MySQL apparaîtra dans la liste des services et démarrera automatiquement à chaque boot de la machine. Si cela ne vous plaît pas, modifiez les paramètres de démarrage du service et démarrez le ensuite. Vous verrez que le feu passe au vert, confirmation que MySQL a bien démarré.
Dans le même menu, une fois que le service est installé, vous aurez à disposition l'option inverse: retirer le service. A ne pas oublier lorsque vous désirez désinstaller MySQL.
Une fois que MySQL est bien installé, vous n'avez plus besoin de l'outil d'administration que j'ai mentionné, et vous pouvez vous en remettre à votre logiciel habituel pour gérer vos bases de données (Eskuel, MyPHPAdmin, MySQL-Front, etc.)
Sous Windows 95/98/ME
Il n'y a pas de service au même sens que sous la famille NT. Au choix vous lancez manuellement le serveur ou automatiquement au démarrage de la machine. Pour cela, il y a le dossier Démarrage.
Notez que quelque soit votre Windows, winmysqladmin.exe se glissera dans le dossier de démarrage. Si cela vous gêne, n'oubliez pas de le retirer.
MySQL: Le superflu
Sous Windows, le fichier de configuration se nomme my.ini et est localisé dans le répertoire principal de Windows (tout comme php.ini).
En éditant le fichier, vous pouvez choisir d'activer les tables InnoDB (si ce n'est déjà fait comme c'est le cas sur la version 4.0 de MySQL et suivantes) ou encore de changer le path d'accès aux tables parce que vous souhaitez tout simplement les loger ailleurs. Si vous voulez changer vos tables de place, n'oubliez pas d'arrêter votre serveur MySQL en premier lieu. Notez bien ensuite que tout répertoire référencé par my.ini doit exister, sinon le serveur ne voudra pas démarrer (cte feignasse ).
Pour déménager vos tables de type MYISAM ainsi que les tables de sécurité (qui sont MYISAM également), vous devez modifier le paramètre datadir.
Avec MySQL, vous trouverez installés dans le répertoire racine de MySQL quelques exemples de fichiers de configuration. Malheureusement, Windows les prend pour des fichiers de type Speedial et ils apparaissent comme des shortcuts. Pour pouvoir en visualiser le contenu, faites glisser le fichier dans votre éditeur texte favori.
La partie qui nous intéresse pour activer InnoDB (qui gère relations entre tables et les transactions), voici la partie qui nous intéresse:
Code :
- # Uncomment the following if you are using Innobase tables
- #innodb_data_file_path = ibdata1:100M
- #innodb_data_home_dir = c:ibdata
- #innodb_log_group_home_dir = c:iblogs
- #innodb_log_arch_dir = c:iblogs
- #set-variable = innodb_mirrored_log_groups=1
- #set-variable = innodb_log_files_in_group=3
- #set-variable = innodb_log_file_size=5M
- #set-variable = innodb_log_buffer_size=8M
- #innodb_flush_log_at_trx_commit=1
- #innodb_log_archive=0
- #set-variable = innodb_buffer_pool_size=16M
- #set-variable = innodb_additional_mem_pool_size=2M
- #set-variable = innodb_file_io_threads=4
- #set-variable = innodb_lock_wait_timeout=50
|
Vous l'aurez sans doute remarqué, le symbole de commentaire n'est pas le même que pour la configuration de PHP: il s'agit ici d'un dièse (#), comme dans Apache.
Ajoutez ces lignes sous la section [mysqld] dans my.ini et retirez les dièses. Assurez-vous que les répertoires pointés existent réellement, et redémarrez votre serveur MySQL. S'il a redémarré sans erreur, vous pouvez être satisfait: je n'y suis moi-même probablement jamais arrivé du premier coup malgré de nombreuses installations effectuées
A partir de MySQL 4.0, InnoDB est activé par défaut. Si vous souhaitez le désactiver, décommentez (ou ajoutez si elle n'existe pas déjà) la ligne suivante:
PHP
Pour l'instant, vous allez vous contenter de dézipper l'archive que vous avez downloadée, et placer son contenu à l'endroit du disque qui vous sied le mieux. Chez moi, j'ai choisi c:\servers\php comme répertoire de base.
Apache
Pour Apache en lui-même, il n'y a rien à faire. Si vous êtes arrivés à la fin de l'installation, Apache est installé, configuré et lancé comme service si vous êtes sous Windows NT/2000/XP. Sous Windows 95/98/ME, il vous faudra l'installer dans le dossier Démarrage si vous voulez le voir se lancer à chaque démarrage de la machine (enfin je le suppose, je n'ai jamais essayé).
Intégration de PHP dans Apache
Il faut maintenant intégrer PHP à Apache et faire (re)démarrer Apache sans heurt. Ce n'est pas compliqué. Allez dans le sous-répertoire conf en dessous d'Apache et ouvrez le fichier httpd.conf qui renferme la configuration du serveur Apache.
D'un autre côté, allez dans le répertoire où vous avez installé PHP, et repérez le fichier php4apache.dll. Ce fichier est le module que vous allez ajouter à la configuration d'Apache afin que celui-ci démarre en utilisant cette DLL pour interpréter vos scripts. Vous me direz, et php.exe alors? Et bien php.exe, c'est sans doute plus facile et rapide à installer, mais le problème est qu'entre chaque chargement de page, il est viré de la mémoire, et vous perdrez du même coup les infos de sessions ou toute autre information que vous vouliez stocker au niveau du serveur PHP, d'où le choix plus judicieux de la DLL qui elle, restera et fonctionnera en mémoire tant qu'Apache lui-même y sera.
La configuration d'Apache est divisée en différentes sections. Histoire de rester "dans la norme", scrollez vers le bas et cherchez un bloc de LoadModule. A la fin, vous y ajouterez le bloc suivant:
Code :
- LoadModule php4_module c:/servers/php/sapi/php4apache.dll
|
Notez que chez moi, PHP est installé dans le répertoire Cservers/php, il vous faudra faire la modification nécessaire pour référencer votre propre répertoire d'installation. Attention: si il y a un espace dans le chemin d'accès, veillez à encadrer ce chemin de guillemets afin qu'il soit pris complètement en compte.
Juste après dans le fichier de configuration, vous trouverez une série de AddModule. C'est la seconde partie à configurer. Ajoutez la ligne suivante:
Code :
- AddModule mod_php4.c
|
Directement en dessous, vous pouvez ajouter la séquence suivante:
Code :
- <IfModule mod_php4.c>
- AddType application/x-httpd-php .php
- </IfModule>
|
Faites maintenant une recherche sur: "<IfModule mod_dir.c>"
Vous trouverez une déclaration DirectoryIndex (le fichier lu par défaut quand vous tapez une url sans nom de fichier dans votre browser). Vous devez y ajouter un index.php et la ligne ressemblera à ceci:
Code :
- DirectoryIndex index.php index.html
|
Le fait de placer index.php devant index.html indique que index.php aura la précédence si les deux existent dans le répertoire correspondant à l'url tapée dans votre browser.
Configuration d'Apache
La chose suivante donc il faut vous occuper concernant Apache est le DocumentRoot, c'est à dire l'endroit où sont stockées les pages webs servies par Apache. Faites une recherche sur DocumentRoot et modifiez la déclaration de façon à pointer vers le répertoire de votre choix.
Code :
- DocumentRoot "e:/www"
|
Et tant que nous y sommes, deux dizaines de lignes plus bas:
Code :
- #
- # This should be changed to whatever you set DocumentRoot to.
- #
- <Directory "e:/www">
|
Retenez bien ce pointeur sur le DocumentRoot, il englobe des informations d'autorisations qui nous intéressent pour la partie superflue
Apache: Le superflu
.htaccess
Les fichiers .htaccess vous donnent plus de souplesse par rapport à la configuration d'Apache, telle que figée dans httpd.conf. Vous pouvez grâce à eux gérer la configuration répertoire par répertoire, sans avoir à redémarrer le serveur.
Pour pouvoir autoriser la possibilité d'utiliser les fichiers .htaccess, il vous faut retourner au pointeur sur le DocumentRoot mentionné précédemment. Deux lignes plus bas, vous pouvez modifier le paramètre AllowOverride comme ceci:
Cette option donne le maximum de pouvoirs aux .htaccess. Reportez vous au manuel d'Apache pour plus d'infos sur le sujet, je suis loin de maîtriser ce sujet précis
Attention toutefois! Il est largement préférable de limiter au maximum ce que vous placez comme paramètres. Un Limit au lieu de All, pour commencer, est préférable.
Afficher le contenu des répertoires
Si vous voulez autoriser l'affichage de répertoires au niveau du fichier conf d'Apache, c'est très simple: la ligne juste au-dessus d'AllowOverride (Options) vue plus haut vous permettra cette possibilité. Ajoutez Indexes à côté de FollowSymLinks. Ceci n'est toutefois pas recommandé sur un serveur de production!
URL rewriting
L'URL rewriting consiste à faire passer vos pages bourrées de paramètre en de simples urls HTML. C'est simpliste comme définition et les possibilités sont bien évidemment beaucoup plus vastes. Voyez par exemple le forum afficher un lien
qui sera transformé en
La sous-chaîne "programmation" sera passée en argument à forum1.php3 sous la forme cat=10. Tout cela en fait pour rendre une indexation plus aisée par les moteurs de recherche, ou tout simplement pour rendre moins cryptique une url d'un sujet ou d'une catégorie donnée.
Voici comment activer l'url rewriting:
Dans votre fichier httpd.conf, faites une recherche sur rewrite, vous trouverez les deux lignes suivantes (mais ne se suivent pas!)
Code :
- #LoadModule rewrite_module modules/mod_rewrite.so
- #AddModule mod_rewrite.c
|
Retirez le commentaire (#) pour ces deux lignes.
Si vous avez l'intention d'utiliser les .htaccess pour jouer avec l'url rewrite engine, retournez sur la ligne de l'AllowOverride lié à votre <Directory "votre documentroot"> et ajoutez FileInfo à côté de Limit, si vous avez spécifié Limit. Si vous avez spécifié All, vous ne devez pas modifier la ligne.
Code :
- AllowOverride Limit FileInfo
|
Voici un petit exemple d'htaccess tiré de mon site web:
Code :
- RewriteEngine On
- RewriteRule ^projects/projects-([A-z]+).html$ projects/projects.php?prj=$1
- RewriteRule ^hardware/hardware-([0-9]+).html$ hardware/hardware.php?test=$1
- RewriteRule ^citations/citations-([0-9]+).html$ citations/citations.php?cat=$1
- RewriteRule ^(.+).html$ $1.php
|
ce qui va effectuer les réécritures de lien suivantes:
projects/projects-AR.html -> projects.php?prj=AR
hardware/hardware-1.html -> hardware/hardware.php?test=1
citations/citations-1.html -> citations/citations.php?test=1
.html -> .php
Bien entendu, il faut que votre site affiche les liens de la partie gauche de l'htaccess, cela ne se fait pas tout seul! Pour ma part, mon site est prévu pour gérer les deux, histoire d'avoir la possibilité de switcher dans l'une ou l'autre configuration à ma convenance (par plaisir de l'expérimentation).
Configuration de PHP
La partie Apache est terminée, mais le moment de démarrer votre serveur web n'est pas encore venu. En effet, il reste encore à faire deux petites manipulations sur PHP.
1) Rendez vous dans votre répertoire PHP. Vous y trouverez un fichier nommé php4ts.dll. Copiez-le dans le répertoire SAPI où se trouve php4apache.dll, librairie qui sera chargée avec Apache. Le fichier que vous venez de copier est nécessaire à son exécution.
2) Dans le même répertoire PHP, vous trouverez un fichier nommé php.ini-recommended, copiez le dans le répertoire Windows sous le nom php.ini.
Editez maintenant ce fichier.
Le but de la manoeuvre est d'ajuster le niveau de rapport d'erreurs afin qu'il renvoie un maximum d'erreurs/warning et notifications. Vous n'y êtes pas obligés, mais EasyPHP est utilisé généralement pour faire du développement, il convient donc de configurer PHP pour le développement, à savoir faire apparaître tous les messages possibles afin d'éviter les problèmes les plus basiques.
En principe, c'est déjà fait, il s'agit donc surtout d'une vérification. Aux alentours de la ligne 250, vous arriverez au chapitre de la gestion d'erreur. Mettez en commentaire (avec un point-virgule) la ligne suivante si elle ne l'est pas:
Code :
- error_reporting = E_ALL & ~E_NOTICE
|
Et retirez le point-virgule ici:
Code :
- ;error_reporting = E_ALL
|
La ligne activée signifie: affiche TOUTES les erreurs. Ceci a pour but de forcer les programmeurs PHP à prendre de bonnes habitudes: déclarer leurs variables, en leur assignant une valeur en début de script, avant que la variable en question soit lue pour une quelconque raison. Si ce n'est fait, une notice apparaîtra pour indiquer une utilisation de variable avant initialisation.
Une autre option utile pour le développement est display_errors. Elle affiche les problèmes en relation avec la configuration lorsqu'ils surviennent.
Code :
- display_errors = On
|
Les sessions:
La configuration par défaut ne pourra pas utiliser les sessions. Soyez tranquille toutefois, il s'agit en fait d'un simple problème de chemin d'accès. Faites une recherche sur session.save_path (aux environs de la ligne 816), et modifiez son paramètre de façon à le faire pointer vers un répertoire temporaire existant: ctemp par exemple.
Code :
- session.save_path = c:/temp
|
Problèmes de variables non déclarées?
Un des problèmes les plus courants avec les anciens scripts, c'est qu'ils ne sont pas compatibles avec la dernière configuration recommandée par les auteurs de PHP. Cette configuration évolue, notamment au niveau de la sécurité. Donc, à chaque nouvelle installation, il se peut que le php.ini livré avec, soit différent du précédent.
Lorsque vous lancez votre script et que pléthore de messages d'erreur PHP fleurissent sur votre page web, la majorité indiquant que des variables n'ont pas été déclarées, c'est que votre fichier php.ini a subi une mise à jour par les auteurs de PHP, avec un impact important: les variables définies d'après un GET ou un POST n'existent plus.
Un paramètre de php.ini, nommé register_globals vaut off, alors qu'auparavant, il valait on. Ainsi, lorsqu'il vaut on, en cliquant par exemple sur une URL avec des paramètres, la page pointée reçoit ces paramètres directement sous forme de variable PHP. Si l'url contenait user=1, PHP créait une variable nommée $user, et lui affectait la valeur 1. Ceci a un inconvénient majeur: si un petit malin décide d'ajouter un paramètre manuellement dans l'url, PHP crée automatiquement une variable équivalente. Et si elle a le malheur de porter le même nom qu'une variable interne que vous avez vous-même créée, alors le petit malin peut influer sur le comportement de votre script. Pire encore: s'il connaît le script que vous utilisez, il n'aura même pas à se casser la tête pour savoir comment vous pirater.
La bonne pratique requiert donc de laisser register_globals à off et d'utiliser les tableaux $_GET et $_POST (et donc d'upgrader vos scripts afin qu'ils soient plus sûrs). Ne vous dites surtout pas que votre site n'a pas d'importance et que personne de mal intentionné ne s'arrêterait pour vous faire du mal: s'ils en ont la possibilité, ils le feront. Pour grossir leurs statistiques évidemment (ils se disent entre eux que ça enlarge leur pénis mais ça reste à prouver).
L'autre bonne pratique, c'est d'afficher TOUS les messages d'erreur, y compris les notifications, et de programmer votre script de façon à ce qu'aucun message n'apparaisse. A ce moment-là, vous aurez fait un pas décisif dans la bonne direction.
A partir de là, vous avez une installation standard, prête au développement, vous pouvez démarrer votre serveur Apache.
PHP: Le superflu
La configuration de PHP est donc localisée dans le répertoire Windows, sous le nom php.ini. Dans ce fichier, vous pouvez changer le niveau de rapport des erreurs, étendre les capacités de PHP en rajoutant des modules, etc etc.
Je vais d'ailleurs me limiter à ces modules. Si par exemple, vous voulez prendre en charge la génération d'images, vous avez besoin du module GD.
Faites une recherche sur le mot "extension_dir". Vous tomberez sur un paramètre qui référence le répertoire où se trouvent les extensions. Indiquez-y une référence absolue vers ce répertoire. Chez moi, ça donne ceci:
Code :
- extension_dir = "c:/servers/php/extensions"
|
Plus bas dans le fichier de configuration (la ligne 546 dans la mienne), il y a une petite section intitulée "Windows extensions". Vous l'aurez compris, cette portion est spécifique à Windows. Sous Linux, le module PHP est compilé avec tout ce dont on a besoin.
Il suffit de retirer le point-virgule pour le module dont vous avez besoin. Dans le cas présent, le module GD2 (la version 1 qui gérait les GIF a été retirée pour des problèmes de brevets) est référencé par la ligne:
Code :
- extension=php_gd2.dll
|
Une fois le point-virgule retiré, sauvez votre fichier, redémarrez Apache, et les fonctionnalités offertes par GD seront disponibles.
N'hésitez pas à me faire part de vos remarques et/ou suggestions pour améliorer ce tuto
Message édité par drasche le 26-01-2006 à 15:28:38
---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)