Sommaire

BONJOUR
Musique "Invention BWV784" J.S. BACH 1685-1750

Tutoriel et Help

Style & CSS


Accueil

Accueil CHM


Accueil

La page vide

Normal, dit comme ça,
vous ne risquez pas de comprendre.


Installation de EasyPHP

Introduction à EasyPHP

Afin de faire fonctionner PHP, il est nécessaire à la base d'en télécharger les sources depuis un site spécialisé (par exemple http://www.php.net), puis de compiler celui-ci (ainsi que d'éditer les liens) afin de créer un fichier exécutable.

Ce processus demande des notions avancées en informatique, c'est pourquoi trois adeptes de PHP (Emmanuel Faivre, Laurent Abbal et Thierry Murail) ont mis au point un package (appelé EasyPHP) contenant 3 produits incontournables de la scène PHP :

  • Le serveur Web Apache
  • Le moteur de scripts PHP4
  • La base de données MySQL
  • Un outil de gestion de base de donnée graphique, Phpmyadmin

EasyPHP est ainsi un pack fonctionnant sous Windows permettant d'installer en un clin d'oeil les éléments nécessaires au fonctionnement d'un site web dynamique développé en PHP

Récupérer EasyPHP

Le pack EasyPHP est disponible sur les sites suivants :

  • https://loogaroo.net/
  • www.easyphp.org

Il vous suffit dans un premier temps de télécharger la version la plus récente de EasyPHP. Vous pouvez la télécharger à cette adresse :
Page de téléchargement de EasyPhP

Installer EasyPHP

L'installation de EasyPHP est très simple, notamment avec l'apparition de la version 1.4 comportant un installeur automatique.

Pour installer EasyPHP, il vous suffit dans un premier temps de double-cliquer sur le fichier téléchargé précédemment :

installation de EasyPHP

L'écran d'installation de EasyPHP suivant devrait apparaître, cliquez sur Next (Suivant</<ital>) :

L'installeur va ensuite vous demander de préciser le répertoire d'installation :

installation de EasyPHP - choix du répertoire

Puis il va demander la création d'un groupe dans le menu démarrer

Et enfin il va vous récapituler les éléments de l'installation avant de procéder à la copie des fichiers.

installation de EasyPHP

Après la copie des fichiers, EasyPHP vous présente l'écran suivant indiquant que l'installation s'est déroulée correctement

installation de EasyPHP - installation réussie de EasyPHP

Il se peut lors de l'installation que l'installeur vous indique l'erreur suivante :

installation de EasyPHP - Erreur msvcrt.dll

Cette erreur indique que la librairie msvcrt.dll n'a pû être copiée. La raison de cette erreur provient du fait que votre système Windows est actuellement en train d'utiliser cette libraire et ne peut donc l'écraser.

Pour y remédier, copiez cette librairie (par exemple dans c:\</ital>) sur votre disque dur (cliquez ici pour télécharger la librairie pour Windows 9x), puis redémarrez en mode MS-DOS, puis tapez copy c:\msvcrt.dll c:\windows\system. Le système va vous demander de confirmer cet écrasement répondez "Oui" (Y ou O), redémarrez Windows et EasyPHP devrait fonctionner !

Démarrage de EasyPHP

Pour démarrer Apache, MySQL et PHP, il vous suffit de lancer EasyPHP à partir du groupe créé dans le menu démarrer :

démarrage de EasyPHP

Pour vérifier si EasyPHP fonctionne, il vous suffit de taper dans votre navigateur préféré :

  • http://localhost
  • ou http://127.0.0.1

Les deux adresses ci-dessus représentant votre machine locale.

Editer votre site

Pour créer votre site web dynamique avec EasyPHP, il vous suffit de déposer vos créations dans le sous-répertoire /www de EasyPHP.

Par exemple créez un fichier texte contenant le texte suivant :

<?
phpinfo();

?>

Puis renommez ce fichier en phpinfo.php et déposez-le dans le sous-répertoire /www.
Vous pouvez désormais visualiser le résultat à l'adresse suivante :
http://localhost/phpinfo.php

Plus d'informations

Pour plus d'informations ou en cas de problème avec EasyPHP, allez sur http://www.easyphp.org.

Article écrit par [mailto:webmaster@commentcamarche.net Jean-François Pillou]

Cet article est régulièrement mis à jour par des experts sous la
direction de Jean-François Pillou, fondateur de CommentCaMarche
et directeur délégué au développement numérique du groupe Figaro.


Utiliser PHP hors connexion ; configurer Apache, PHP et MySQL ; installer EasyPHP.

Utiliser PHP hors connexion

Pour exécuter un script PHP hors connexion ou pour passer d'HTML à PHP et tester son site localement sous Windows ou Linux il faut disposer d'un serveur local (Apache), d'un interpréteur PHP et d'un accès à une base de données (MySQL).

Installer Apache, PHP et MySQL sous Windows

Le plus simple, c'est d'utiliser EasyPHP 1.7 (version 2003) qui installe apache 1.3.27 - php 4.3.3 - mysql 4.0.15 - phpyadmin 2.5.3 (apache 1.3.33 - php 4.3.10 - mysql 4.1.9 et phpmyadmin 2.6.1 avec la version 2005 d'EasyPHP 1.8).
Pas de problème normalement sauf lors de la fermeture de Windows lorsque l'option Démarrer les serveurs en tant que services a été choisie.
Plusieurs fichiers ou dossiers importants :
- C:\Program Files\EasyPHP1-7\apache\php.ini
Ce fichier permet de modifier la configuration de PHP.
Les autres fichiers de configuration sont accessibles par un clic droit sur l'icône icône.

- C:\Program Files\EasyPHP1-7\www
Par défaut ce dossier contient votre site local.

Configurer PHP 4 ou 5

Ouvrez php.ini.
Pour trouver les erreurs et les problèmes, il faut remplacer
display_errors = Off par display_errors = On,
display_startup_errors = Off par display_startup_errors = On
et log_errors = Off par log_errors = On en indiquant le nom du fichier où les erreurs seront enregistrées (par exemple error_log = "c:\Program Files\easyphp1-7\php\error_php.log").
Si vous voulez utiliser des scripts PHP 3, il faudra sans doute remplacer register_globals = Off par register_globals = On.
Ce n'est pas une très bonne idée car il vaut mieux s'habituer à PHP 4 et modifier les scripts à l'aide des messages d'erreur.
La modification des autres paramètres ne s'impose pas.

Configurer Apache 1.3

Si tout marche bien et si vous placez votre site local en C:\Program Files\EasyPHP1-7\www, pas de problème.
Si votre site local est ailleurs, deux solutions :
1. Si vous voulez tester votre site local avec un fichier robots.txt, des cookies ou si vous utilisez le "referrer" ("HTTP_REFERER"), remplacez dans le fichier de configuration (clic droit sur l'icône ou C:\Program Files\EasyPHP1-7\apache\conf\httpd.conf)
DocumentRoot "c:/Program Files/EasyPHP1-7/www" par DocumentRoot "c:/site"
et <Directory "c:/Program Files/EasyPHP1-7/www"> par Directory "c:/site">.
Quand vous taperez 127.0.0.1 ou localhost dans la barre d'adresse de votre navigateur, ce sera votre page d'accueil qui sera lancée.

2. Sinon, ajoutez un Alias avec le menu Administration (si MSIE n'est pas votre navigateur par défaut, entrez http://127.0.0.1/home/ dans la barre d'adresse) ou manuellement dans le fichier de configuration (clic droit sur l'icône ou C:\Program Files\EasyPHP1-7\apache\conf\httpd.conf):
Dans la partie Aliases, ajoutez
    Alias /site "c:/site"
    <Directory "c:/site">
        Options FollowSymLinks Indexes
        AllowOverride None
        Order deny,allow
        allow from 127.0.0.1
        deny from all
    </Directory>
Si vous avez un deuxième site, ou des scripts PHP à exécuter, ajoutez
    Alias /site2 "c:/site2"
    <Directory "c:/site2">
        Options FollowSymLinks Indexes
        AllowOverride None
        Order deny,allow
        allow from 127.0.0.1
        deny from all
    </Directory>
Quand vous taperez 127.0.0.1/site ou localhost/site dans la barre d'adresse de votre navigateur, ce sera votre page d'accueil qui sera lancée.
Quand vous taperez 127.0.0.1/site2/votre_script.php, le script sera exécuté.

Configurer MySQL

Si vos données ne doivent pas être placées dans le répertoire par défaut - datadir = c:/Program Files/EasyPHP1-7/mysql/data/ (datadir=${path}/mysql/data avec la version 1.8) -, vous pouvez modifier ce paramètre (clic droit sur l'icône ou effectuez une recherche pour trouver le fichier my.ini - remplacez par exemple par datadir = c:/data/).
Dans tous les cas, phpMyAdmin (127.0.0.1/mysql/) accèdera aux bases de données sans qu'il soit nécessaire de modifier son fichier de configuration.

Avec WampServer, Mov'AMP, XAMP ou d'autres environnements

Avec Apache 1.3, les mêmes fichiers (ils portent parfois un autre nom : mywamp.ini pour WampServer) sont à modifier pour tester et déboguer PHP localement.
Pour Apache 2, procédez comme avec Linux après avoir localisé le fichier de configuration.

Exécuter un script PHP hors connexion

On démarre les serveurs Apache et MySQL.
En fonction de ce qui a été choisi lors de la configuration d'Apache, on tape ensuite http://127.0.0.1/nom_de_l'alias/(nom_du_fichier) dans la barre d'adresse de son navigateur préféré (avec IE6 il faut connecter ou décocher Fichier/travail hors connexion).
Normalement, la page d'accueil (ou nom_du_fichier) est affichée.

Passer d'HTML à PHP

Pour commencer, on peut renommer son fichier index.html en index.php.
On démarre les serveurs Apache et MySQL.
En fonction de ce qui a été choisi lors de la configuration d'Apache, on tape ensuite http://127.0.0.1/ (ou http://127.0.0.1/nom_de_l'alias) dans la barre d'adresse de son navigateur préféré (avec IE6 il faut connecter ou décocher Fichier/travail hors connexion).
Normalement, la page d'accueil est affichée.
  • Tous les robots de référencement n'apprécient pas PHP, certains indexent une page mais ne suivent pas les liens vers des pages en PHP. Il est donc nécessaire de lier la page d'accueil à une page HTML (le plan du site par exemple) avec les titres et avec les liens vers les pages qui doivent être référencées.
Une fois que tout marche, il faut modifier les extensions dans toutes les pages à l'aide d'un utilitaire de recherche et remplacement.
Un outil comme inforapid search and replace est tout à fait adapté.
On remplace donc .html ou .htm
Recherche
par .php pour les pages du site dans toutes les pages du site sauf pour les liens vers la page .html destinée au référencement.
Remplacement
Il faut ensuite renommer toutes les pages (sauf la page .html destinée au référencement).
Reste à tester la validité des liens et rechercher les éventuelles erreurs.
On peut maintenant ajouter les scripts PHP nécessaires.

Afin de vérifier le bon fonctionnement des scripts, on a plusieurs possibilités :

- soit WinHttrack (fonctionnement avec différents navigateurs, syntaxe des fichiers générés, liens et partiellement javascript),

- soit, pour MSIE 6 uniquement, Wysigot qui aspire le site local, ce qui permet de trouver les erreurs ou avertissements lors de l'exécution dans le fichier error_log spécifié lors de la configuration de PHP 4 (ou dans les pages) et les problèmes de liens dans le fichier error.log d'Apache.
A chaque rafraîchissement, comme tout fichier modifié est repéré en gras et toute modification est surlignée, l'incidence d'un ajout ou d'une modification est vite constatée sur l'ensemble du site (la version gratuite ne permet pas de vérifier la syntaxe des fichiers générées).

Pour finir, transférez le site.

Et Linux ?

Les trois distributions que j'ai essayées ont toutes posé problème.
En effet, il faut verifier que le serveur Apache (Apache HTTP Server) soit installé de même que PHP (Server-side, HTML-embedded scripting language), installer tout d'abord le paquetage MySQL (MySQL Server), et celui qui assure les liens entre PHP et MySQL (MySQL module for php5), puis indiquer que les services httpd et mysql doivent être lancés au démarrage. Les distributions récentes permettent l'installation sans difficulté grâce à des outils comme Synaptic Package Manager.
Une fois tout en ordre, il faut installer phpMyAdmin (MySQL web administration tool) ou le télécharger phpMyAdmin dans la version correspondant à celle reconnue par l'hébergeur : php ou php3.
PhpMyAdmin doit être décompressé dans un dossier (dans mon cas /echange/phpMyAdmin-2.6.0). Aujourd'hui, Synaptic Package Manager propose d'installer et configurer PhpMyAdmin.
En fonction de la version d'Apache installée, l'alias n'est pas déclaré dans le même fichier :

- avec Apache 1.3

Le fichier httpd.conf se trouve dans le dossier /etc/httpd/conf/
Normalement la partie Aliases s'y trouve (sinon elle est dans un fichier inclus) et il suffit d'ajouter
    Alias /phpmyadmin/ "/echange/phpmyadmin-2.6.0/"
    <Directory "/echange/phpmyadmin-2.6.0/">
        Options FollowSymLinks Indexes
        AllowOverride None
        Order deny,allow
        allow from 127.0.0.1
        deny from all
    </Directory>
pour gérer les bases de données en tapant http://localhost/phpmyadmin/ dans la barre d'adresse d'un navigateur.
Dans ce fichier on procède comme avec Windows pour l'ajout d'un alias pour le site ou la modification de DocumentRoot.
Dans la partie User, deux solutions :
  1. on remplace apache par son nom d'utilisateur dans le fichier.
  2. on déclare dans le gestionnaire des modifications des comptes utilisateurs qu'on fait partie du groupe apache ou qu'on est autorisé à utiliser apache (et MySQL).
Si AddDefaultCharset a été défini, vérifiez qu'il corresponde au codage souhaité, sinon commentez la ligne pour que le navigateur puisse en utiliser un autre.
La modification des autres paramètres ne s'impose pas.

- avec Apache 2

Le fichier httpd2.conf se trouve dans le dossier /etc/httpd/conf/ ou encore apache2.conf situé dans le dossier /etc/apache2/
Normalement la partie Aliases est dans un fichier inclus (soit /etc/httpd/conf/commonhttpd.conf, soit dans le dossier /etc/httpd/conf.d/ soit /etc/apache2/mods-enabled) et il suffit d'ajouter dans le fichier déclarant les "alias"
    Alias /phpmyadmin/ "/echange/phpmyadmin-2.6.0/"
    <Directory "/echange/phpmyadmin-2.6.0/">
        Options FollowSymLinks Indexes
        AllowOverride None
        Order deny,allow
        allow from 127.0.0.1
        deny from all
    </Directory>
pour gérer les bases de données en tapant http://localhost/phpmyadmin/ dans la barre d'adresse d'un navigateur. Aujourd'hui, Synaptic Package Manager propose d'installer et configurer PhpMyAdmin.
Si on souhaite modifier DocumentRoot il faut le faire ici pour <Directory ... > puis dans le fichier httpd2.conf pour DocumentRoot.
La modification des autres paramètres s'effectue comme avec apache 1.3 soit dans httpd2.conf soit dans commonhttpd.conf.

configurer PHP et MySQL

Comme pour Windows il faut modifier le fichier /etc/php.ini et éventuellement le fichier /etc/my.cnf (obtenu partir d'une copie de /usr/share/mysql/my-medium.cnf ou /usr/share/mysql/my-large.cnf auquel on ajoute datadir = /chemin_complet dans la partie [mysqld]) sans oublier de cocher mysql dans le groupe de l'utilisateur.


EasyPHP 1.7 et PHP 5 - Le PHP Facile

beaucoups EasyPHP 1.7 et PHP 5 - Le PHP Facile

Vu dans ... http://www.lephpfacile.com/forum/1-php-mysql/2409-easyphp-1-7-et-php-5

    Créer un compte S'identifier
    • Accueil
    • Forum
    • PHP / MySQL
    • EasyPHP 1.7 et PHP 5

    PHP

    • Cours de PHP
    • Comment faire ?
    • Manuel PHP

    Communauté

    • News
    • Forum

    Divers

    • Annuaire
    • Wall
    • Contact
    • Recherche

    EasyPHP 1.7 et PHP 5

    Répondre
    • 1
    • 2
    Citer ce message
    le 31/08/2004 à 13:08
    i M@N
    Hello !

    Je viens d'installer PHP5 dans mon EasyPHP 1.7 ... cool. mais un peu relou parce qu'il faut modifier quelques trucs :

    Télecharger "PHP 5.0.1 zip package" (pour windows) a partir de http://www.php.net/downloads.php et le dezipper dans le dossier d'installation d'EasyPHP.

    Il suffit ensuite de modifier le c:/easyphp/apache/conf/httpd.conf
    ci dessous les qques lignes que j'ai du modifier:
    LoadModule php4_module "C:/EasyPHP/php/php4apache.dll" devient
    LoadModule php5_module "C:/EasyPHP/php/php5apache.dll"
    AddModule mod_php4.c devient
    AddModule mod_php5.c
    Pour ce bloc, on ajoute juste "index.php5"

    DirectoryIndex index.html index.shtml index.wml index.pwml index.php index.php3 index.php4 index.php5

    meme chose pour cette ligne ou on ajoute l'extension ".php5":
    AddType application/x-httpd-php .phtml .pwml .php3 .php4 .php5 .php .php2 .inc

    il faut copier le fichier C:\Program Files\EasyPHP1-7\php\libmysql.dll dans le dossier C:\WINDOWS\system

    Dans php.ini :
    ; Directory in which the loadable extensions (modules) reside.
    Remplacer :
    ; extension_dir = "C:\Program Files\EasyPHP1-7\php\extensions\"
    Par :
    extension_dir = "C:\Program Files\EasyPHP1-7\php\ext\"

    A la fin de php.ini : ajouter extension=php_mysql.dll

    Yeah ! smiley

    @+...
    One Love, One Heart, One Unity.
    Citer ce message
    le 31/08/2004 à 13:24
    bibi
    faudrai ptet mettre dans les comment faire , dans une rubrik EasyPHP par exemple :)
    commit suicide
    Citer ce message
    le 31/08/2004 à 13:34
    moogli
    ben ya deja comment installer apache + php + mysql + phpmyadmin ......

    Pour moi sa fait pareil, m'enfin sa peut etre utile ....
    Il en faut peu pour être heureux !!!!!
    Citer ce message
    le 31/08/2004 à 16:18
    Carssou
    Il existe un package français du même style que easyphp dédié à php5 , il existe un add-on pour php4.
    Wampserver http://www.wampserver.com/
    Citer ce message
    le 01/09/2004 à 09:53
    allserv
    Oui il est meme très bien ce package ca rl'on peut telecharger des add-on pour switcher entre php 4.3.8 par exemple et php 5. Très sympa et aussi facile que easyphp....
    Citer ce message
    le 02/09/2004 à 12:35
    zebden
    Pas mal ce petit soft.. je dirais presque mieux que easyPHP
    zebdinou pour les intimes / Blog : http://www.zebden.fr
    Citer ce message
    le 03/09/2004 à 01:24
    bibi
    juste moi ca foire
    les servers(apache & mysql) démarrent bien au bout du pc mais si je les redémarre, ya ke apache ki démarre, po mysql :/
    commit suicide
    Citer ce message
    le 03/09/2004 à 18:20
    moogli
    Ben moi sous 98SE y po moyen pour que je puisse l'utiliser malgres qu'apache soit lancer et que tout tourne au poil. smiley

    Je doit le seul mais c'est enervant si non c'est vrai qu'il pas mal, il est d'actualité inclus un gestionnaire pour sqlite (sqlitemanager, genre phpmyadmin en 1 peu moins simple je trouve mais efficace).

    Bref malgres quelque déboire je suis pour wamp :)
    Il en faut peu pour être heureux !!!!!
    Citer ce message
    le 05/09/2004 à 21:38
    savageman
    Yes, c'est trop bien WampServer ;)
    Mais normalement ca amrche pas sous Win98... (car il utilise les services, et que sous Win98 il n'y a pas de services...)
    @bibi: Essaie de réinstaller, c'est censé marcher nickel!
    Citer ce message
    le 05/09/2004 à 21:48
    Sedilbur
    wamp est mis à jour beaucoups plus régulièrement que EasyPHP et au final c'est même beaucoups mieux :p...
    Répondre
    • 1
    • 2
    Partager
    cet élément
    Lien :
    © 2002 - 2019 Le PHP Facile
    • Jamma Play
    • L'éditeur javascript
    • CSS
    • Tutoriaux PHP
    • Tutoriels PHP
    • Bretagne
    • php
    • Moto
    • Kit graphique
    Loading Chargement en cours


Présentation d'EasyPHP

Vu dans ... https://geronimo.developpez.com/EasyPHP/

I. Introduction

Installer Apache, PHP et MySQL sous Linux, c'est facile, il suffit de télécharger les paquetages RPMS correspondants (consultez ce tutoriel pour plus d'informations. Et si c'était plus facile sous Windows ? EasyPHP permet en effet d'installer simplement un serveur Apache, MySQL et PHP conjointement, en quelques clics. Ce document à pour but de vous présenter EasyPHP et de vous en expliquer succinctement le fonctionnement. Si vous constatez une erreur dans ce document, n'hésitez pas à me la signaler. L'auteur se dégage cependant de toute responsabilité quant à l'utilisation directe ou indirecte de cet article. Tous droits réservés.

II. Pourquoi EasyPHP ?

Le langage PHP est un langage extrêmement puissant : il permet de créer des pages web, au travers desquelles l'utilisateur peut échanger des informations avec le serveur ; c'est ce qu'on appelle des pages web dynamiques. Programmer en PHP est assez simple. En revanche, PHP n'est pas un langage compilé, c'est un langage interprété par le serveur : le serveur lit le code PHP, le transforme et génère la page HTML. Pour fonctionner, il a donc besoin d'un serveur web. Donc si vous souhaitez utiliser des pages en PHP dans votre site web, pour les tester, il faudra les exécuter sur un serveur web. Donc deux solutions :

  • soit vous les envoyez régulièrement grâce à un programme FTP sur votre serveur web pour les tester. C'est faisable, mais ça peut devenir fastidieux ;
  • soit vous installez un serveur web en local, qui vous permettra de tester directement vos pages PHP. EasyPHP permet de réaliser simplement cette dernière solution.

Enfin, EasyPHP permet également d'installer MySQL, une base de donnée, le troisième et inséparable membre du trio Apache/PHP/MySQL. Une base de donnée est un programme permettant de gérer une grande quantité de données en les organisant sous forme de tables. Vous n'avez alors plus à vous occuper de la manière dont les données sont stockées sur le disque dur, de simples instructions permettent d'ajouter, de supprimer, de mettre à jour et surtout de rechercher des données dans une base de donnée. On peut de plus accéder très facilement à une base de donnée MySQL à partir de PHP, ce qui permet de développer des sites web très performants et interactifs (par exemple, le forum de Developpez.com). EasyPHP joint PHPMyAdmin à MySQL, un outil écrit en PHP permettant de gérer vos bases de données MySQL. En utilisant EasyPHP, vous pouvez installer un serveur web complet, qui vous permettra de faire tous vos tests de pages PHP en toute facilité.

Image non disponible

EasyPHP est un donc paquetage contenant à la fois Apache, PHP et MySQL. Cela explique sa taille relativement importante à télécharger (environ 10 Mo).

III. Quelles fonctionnalités propose EasyPHP ?

Chose-la plus importante, EasyPHP propose le téléchargement en une fois et l'installation en un assistant des trois programmes précédemment cités, Apache, PHP et MySQL. Cela permet d'installer automatiquement ceux-ci, en se libérant des problèmes liés à la configuration manuelle qui est souvent nécessaire lorsqu'on les installe séparément.

Lorsqu'EasyPHP est lancé, les serveurs Apache et MySQL sont automatiquement lancés (il est même possible de le faire automatiquement au démarrage de Windows). Une petite icône s'installe dans la barre des tâches, à côté de l'horloge, permettant un accès rapide aux fonctions proposés par EasyPHP :

  • arrêter et Redémarrer les serveurs Apache et MySQL ;
  • accéder au « Web local », c'est-à-dire la racine des sites Web ;
  • un panneau d'administration en PHP ;
  • un outil de configuration d'EasyPHP ;
  • l'accès aux logs ;
  • l'aide.

IV. Le panneau d'administration

Image non disponible

Ce panneau de configuration permet de paramètrer simplement certaines options d'Apache et de MySQL.

Les alias

Par défaut, si vous tapez http://localhost dans votre navigateur, les pages web affichées seront celles du répertoire …\EasyPHP\www. Vous pouvez modifier ce répertoire en éditant le fichier httpd.conf situé dans le répertoire …\EasyPHP\apache\conf et en éditant la ligne DocumentRoot, remplaçant le chemin par celui de votre choix :

Sélectionnez
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "C:/Program Files/EasyPHP/www"

Vous pouvez aussi créer des alias. Ce système permet de gérer plusieurs sites web en créant des répertoires « virtuels » : considérons que vous gérez deux sites, l'un sur le C++ et l'autres sur Windows. Vous pouvez créer un alias "C++" qui pointera sur le répertoire c:\mes documents\site_cpp où se situe votre site sur le C++ et un alias « SiteWindows » vers c:\mes documents\Jacques\windows, répertoire qui contient votre site de trucs et astuces Windows. Pour accéder aux pages web en passant par le serveur, il vous suffira d'ouvrir un navigateur et de taper http://localhost/c++ ou bien http://localhost/SiteWindows pour accéder respectivement à l'un ou l'autre des sites. Les alias permettent donc de créer de faux répertoires qui permettent d'accéder à des répertoires totalement indépendants du disque.

PhpMyAdmin

Vous pouvez paramétrer d'autres options. L'un des outils les plus utiles sur ce panneau est PhpMyAdmin. PhpMyAdmin permet de gérer votre base de donnée MySQL en fournissant une interface graphique; mieux vaut une démonstration que des discours : une démo on-line est disponible à cette adresse : http://www.phpmyadmin.net/phpMyAdmin/ et vous pouvez en savoir plus en consultant http://www.phpwizard.net/projects/phpMyAdmin/.

IV-A. Remarques

  • Si vous avez déjà installé php, apache ou mysql, vous pourrez avoir des problèmes de fichiers de configuration.
  • Si le serveur web personnel de Windows est lancé, il prendra le dessus sur Apache. Pour l'arrêter, Démarrer/Programmes/Accessoires/Outils Internet/Serveur Web Personnel/Gestionnaire de serveur web personnel, et cliquez sur Arrêter.
  • N'importe qui, pour peu qu'il connaisse votre adresse IP, peut accéder à votre site en tapant par exemple http://xxx.xxx.xxx.xxx/c++ (ou xxx.xxx.xxx.xxx est votre adresse IP). Cela peut souvent s'avérer très pratique.

Vous pouvez télécharger EasyPHP à l'adresse suivante : http://www.easyphp.org.


[EasyPHP] - Support

Introduction
Support
Faq PHP

Le site d'EasyPHP La FAQ d'EasyPHP Le forum d'EasyPHP

Listes de discussions d'EasyPHP :
Support technique, questions ... | Développement, nouvelles idées, distribution ...
• Pour vous abonner • Pour vous désabonner • Pour écrire au(x) propriétaire(s) de la liste • Pour écrire au(x) modérateur(s) de la liste | • Pour vous abonner • Pour vous désabonner • Pour écrire au(x) propriétaire(s) de la liste • Pour écrire au(x) modérateur(s) de la liste


[EasyPHP] - Accueil

Introduction
Support
Faq PHP

Pour faciliter son téléchargement et sa distribution, EasyPHP n'intègre que les éléments indispensables d'Apache, PHP et MySQL.

Avant d'ouvrir l'"Administration" ou le "Web local", vérifier qu'easyphp.exe est lancé (ex.: Démarrer>Programmes>EasyPHP>EasyPHP) et que les serveurs fonctionnent (double-cliquer sur l'icône d'EasyPHP à côté de l'horloge [1] : les status d'Apache et de MySQL doivent être au vert).
 | Administration
 | Faire un clic droit sur l'icône d'EasyPHP [1] et sélectionner "Administration"[2]. Cette page vous permet entre autre de gérer vos bases de données et d'administrer vos alias.
 | Web local
 | Faire un clic droit sur l'icône d'EasyPHP [1] et sélectionner "Web local" [2] afin de visualiser vos fichiers (cf. "Introduction à EasyPHP").

easyphp 1.7 : apache 1.3.27 - php 4.3.3 - mysql 4.0.15 - phpmyadmin 2.5.3
le site d'easyphp : www.easyphp.org


[EasyPHP] - Introduction

Introduction
Support
Faq PHP

Installer EasyPHP
• Télécharger EasyPHP sur le site www.easyphp.org
• Double cliquer sur l'executable téléchargé
• Sélectionner le répertoire d'installation et suivre la procédure
Lancer EasyPHP
On ne peut pas à proprement parler du lancement d'EasyPHP, il s'agit en fait de la mise en route du serveur Apache et de MySQL.
A l'installation, un raccourci vers EasyPHP est créé dans le répertoire "Démarrer/Programmes/EasyPHP".
Une fois EasyPHP lancé, une icône se place à côté de l'horloge [1].

Un clic droit permet d'accéder à différents menus [2] :
• Aide : aide d'EasyPHP
• Fichiers Log : renvoie aux erreurs générées par Apache, MySQL et EasyPHP
• Configuration : donne accès aux différents outils de configuration
• Explorer : ouvre le répertoire "www" via l'explorateur Windows
• Administration : ouvre la page d'administration
• Web local : ouvre le web local
• Redémarrer : redémarre Apache et MySQL
• Démarrer/Arrêter : démarre/arrête Apache et MySQL
• Quitter : ferme EasyPHP

Utiliser le répertoire "www" ou les alias
Pour que vos pages PHP soient interprétées, il est impératif de placer vos fichiers dans le répertoire "www" ou dans un alias que vous avez créé. Pour visualiser vos pages il vous suffit alors d'ouvrir le "Web local" ou d'accéder à vos alias via la page d'"Administration".
Vos premières pages en PHP
Il existe autant de façon de programmer en PHP qu'il existe d'éditeurs spécialisés ou non (éditeurs html, coloration synthaxique, saisie semi-automatique ...). Nous allons, dans cet exemple, utiliser un simple éditeur de texte.

Ouvrez un nouveau fichier

Tapez la structure d'une page HTML vierge :
<html>
<head>
<title>Ma première page en PHP</title>
</head>
<body>

</body>
</html>

L'exemple consiste à afficher la date courante. Le code PHP s'intègre directement au code HTML et commence par <?php et se termine par ?>.
<html>
<head>
<title>Ma première page en PHP</title>
</head>
<body>

Date courante : <? print (Date("l F d, Y")); ?>

</body>
</html>

Enregistrement de la page.
Créer un nouveau répertoire dans le répertoire "www" (ou dans un alias). Enregistrer votre première page en PHP en lui donnant une des extensions suivantes : php (conseillé), php3, php4.
Ceci n'est pas une règle absolue, mais correspond à la configuration d'EasyPHP. Il vous sera peut-être nécessaire, si vous choisissez d'héberger vos pages chez un hébergeur dont la configuration est différente, de modifier ces extensions.
Pour notre exemple on choisit une extension en .php : "date.php"
Rq : s'assurer dans les options d'affichage de Windows que les extensions des fichiers dont le type est connu sont visibles.

Visualisation du résultat.
* A NE PAS FAIRE : aller dans le répertoire "www" (ou dans le répertoire d'un alias) puis dans le répertoire correspondant à votre projet et double-cliquer sur votre page d'exemple. Vous obtiendrez à coup sûr une page d'erreur.
* A FAIRE : lancer EasyPHP, ouvrir le "Web local", sélectionner votre répertoire de travail (ou un alias) puis cliquer sur "date.php". Vous obtiendrez alors une page qui vous affichera la date courante; par exemple : "Date courante : Sunday September 27, 2003".

A vous maintenant de créer vos propres développements.


[EasyPHP] - Support

Introduction
Support
Faq PHP

FAQ fr.comp.lang.php

Mise à jour : 21 juillet 2003

Cette FAQ reprend les questions posées régulièrement sur le newsgroup fr.comp.lang.php (anciennement fr.comp.infosystemes.www.auteurs.php)

1. Présentation de la FAQ

  • 1 Miroirs

  • 2 Présentation des réponses :

  • 3 Charte et modération

  • 4 La différence avec alt.fr.comp.lang.php

  • 5 Premiers rédacteurs de cette FAQ

  • 6 Remerciements

  • 5 Points juridiques

2. Les notions de base sur PHP

  • 1 Comment débuter en PHP

  • 2 php is not mysql !

  • 3 HTTP : client serveur en mode asynchrone non connecté

  • 4 Quel hébergeur choisir avec PHP ?

  • 5 Des problèmes d'installation

  • 6 Editeurs PHP

  • 7 Passage de variable(s) entre les scripts

  • 8 Passer des variables JavaScript à PHP

  • 9 La différence entre include( ) et require ( )

  • 10 Les chemins pour include( ) et require ( )

  • 11 Des problèmes avec la fonction header( )

  • 12 Remplacer les retours chariots dans une chaine

  • 13 Les expressions régulières

  • 14 Variables dynamiques $var_$i =>$var_1, $var_2 ...

  • 15 Un @ devant la commande ?

  • 16 Mon code PHP s'affiche au lieu d'être éxécuté

3. La connexion à un sgbdr

  • 1 ...0 is not a valid resource ...

  • 2 [souvent HS] Problèmes de connexion à MySQL

  • 3 Exemple de fonction de connexion à MySQL

  • 4 La protection de mes mots de passe de connexion à une base

4. Techniques de développement

  • 1 ...parse error on line...

  • 2 Le multitasking / exécutions parallèles (UNIX)

  • 3 Recherches par mots-clefs dans une base de données

  • 4 Lancer des commandes à intervalles réguliers ("crontab")

  • 5 Vérifier la présence d'un enregistrement avant de le mettre à jour

  • 6 Gérer plusieurs langues sur un site

  • 7 Connaître la version du navigateur et la résolution de l'écran

  • 8 Imprimer

  • 9 Alterner les couleurs dans un tableau

  • 10 L'upload de fichiers

  • 11 L'envoi de fichiers vers le navigateur

5. Les mails et les forums NNTP

  • 1 Le mail chez free.fr

  • 2 Envoi d'un mail.

  • 3 Tester la validité d'une adresse email

  • 4 Forums usenet

6. Les outils déjà prêts

  • 1 Code d'un forum ou BBS en PHP

  • 2 Code d'un caddie virtuel en PHP

  • 3 Code d'un "chat" en PHP

  • 4 PHP-NUKE

7. Gérer les sessions utilisateur

  • 1 Coder votre propre gestion de session

  • 2 Utiliser l'excellente PHPLib

  • 3 Le support natif des sessions de php4

  • 4 Comptabiliser le nombre courant de personnes "connectées" sur le site

  • 5 Suivre ses visiteurs sur son site / l'adresse IP de vos visiteurs

  • 6 Mot de passe d'accès à un répertoire

8. L'affichage de résultats de requêtes par tranches

  • 1 Présentation du problème

  • 2 Faire une série de requêtes SQL classiques et traiter en retour

  • 3 Utiliser la clause LIMIT du select de MySql

  • 4 Utiliser une table tampon

9. Ressources PHP

  • 1 Manuels php

  • 2 Ouvrages "papier"

  • 3 Archives du NG fr.comp.infosystemes.www.auteurs.php

  • 4 Interfacer php et Oracle

  • 5 Interfacer php et Sybase

  • 6 Sites en français

  • 6 Sites en anglais

10. Ressources connexes

  • 1 Problèmes avec un hébergeur

  • 2 Référence HTML

  • 3 Problèmes avec du SQL, MySQL, Postgres, Oracle, Sybase, etc...

  • 4 Ouvrages "papier"

  • 5 Problème de configuration Apache, IIS...

  • 6 Request For Comments

11. Génération de graphiques

  • 1 GD Lib

  • 2 Bibliothèques

  • 3 Redimensionner une image

12. Bugs php ?

  • 1 Comportement bizarre : un bug PHP ?

13. Les concurrents de PHP

  • 1 PHP et ASP

1. Présentation de la FAQ

Contenu de cette section

1.1 Miroirs

Cette FAQ est également disponible sur http://www.phpindex.com/fciwap/ et http://fciwap.phpheaven.net

1.2 Présentation des réponses :

Les questions prises en compte dans cette FAQ sont celles directement liées à PHP, ainsi que quelques questions limite ou hors sujet revenant régulièrement sur le forum, indiquées par :
[HS](Hors Sujet)
[OT] (Off Topic).

A chaque fois que possible, un lien direct vers les versions traduite et originale du manuel approprié sera fourni.
Tous les liens s'ouvriront dans une nouvelle fenêtre (pour les navigateurs qui le supportent).
Toute réponse mettant en jeu du code PHP sera accompagnée d'un exemple, testé par le rédateur de la réponse sauf mention contraire.
La "l" (lettre L") devant une variable (exemple $l_dad) indique une variable locale à la fonction, ce qui est bien entendu seulement une convention de nommage.
Le terme "unix" n'est pas restreint à linux.

1.3 Charte et modération

Le forum fr.comp.lang.php est un forum modéré. Il est donc normal d'observer un délai avant la parution de votre article.
Pour être publiés, vos articles doivent se conformer à la Charte de ce forum, disponible sur http://www.usenet-fr.net/fur/chartes/comp.lang.php.html: la lecture de ce document est donc fortement conseillée.
Pour joindre les modérateurs, vous pouvez utiliser l'adresse moderateurs-php@listserv.usenet-fr.net en oubliant pas de joindre l'article auquel vous faites référence avec ses en-têtes complètes. Il ne vous est pas interdit de rester poli et courtois : un refus de publication est, sauf erreur, motivé par le respect de la Charte, ce n'est ni une punition ni une insulte.
Que faire si votre article n'apparait pas au bout de 24h ? Si vous avez mis une adresse email invalide, les modérateurs n'ont aucun moyen de vous prévenir que votre article a été refusé. Dans TOUS les autres cas, vous recevrez, en cas de refus, la raison pour laquelle votre article n'a pas été publié.
Donc si votre article n'est toujours pas publié après 24h et que votre adresse FROM: ou REPLY-TO: est valide, le plus probable est que votre article s'est perdu suite à une mauvaise configuration de votre serveur de news. Prenez contact avec les modérateurs.

1.4 La différence avec alt.fr.comp.lang.php

Un peu plus d'un an après le passage en statut modéré de l'ancien fr.comp.infosystemes.www.auteurs.php qui est devenu fr.comp.lang.php au passage, la hiérarchie alt.* a vu l'ajout d'un équivalent de son ancêtre (fciwap). La différence entre fclphp et alt.fclphp est que le second n'est pas modéré. Avec dans les deux cas les avantages et inconvénients de la modération ou de la non-modération.

1.5 Premiers rédacteurs de cette FAQ

(Par ordre alphabétique)

Thierry André, thierry.andre@freesbee.fr, @lias Théo
Thomas Broyer, étudiant, ptittom@free.fr, alias (TOM) ou Tom. aka M. RTFM
echoes@free.fr alias Echoes
Armel Fauveau, Webmaster PHPIndex, webmaster@phpindex.com
John Gallet, Ingénieur EFREI, john.gallet@wanadoo.fr, aka M. Off Topic

1.6 Remerciements

- à François Boudot pour son script permettant l'indexation automatique qui a bien servi avant la migration vers phpFAQTory
- à Armel pour phpFAQTory
- aux personnes nous ayant envoyé leurs remarques concernant ce document.

1.5 Points juridiques

Autorisation est donnée à quiconque le souhaite de faire du "framing" pour afficher cette FAQ ou de la recopier et de la diffuser sans la modifier.
N'hésitez pas à nous contacter si vous avez besoin d'une autorisation pour en citer des parties.
La totalité des informations contenues dans cette FAQ est disponible sur internet et considérée comme de notoriété publique.
Tous les noms de produits et autres marques cités dans cette FAQ sont des marques déposées par leurs propriétaires respectifs.
L'intégralité du code cité est le fruit de la rédaction des auteurs de cette FAQ, tiré de code diffusé publiquement sur des forums de discussion ou avec autorisation de l'auteur.

Contenu de cette section

2. Les notions de base sur PHP

Contenu de cette section

2.1 Comment débuter en PHP

"Bienvenue chez les fous" :-) ((C)A.F. 1999)
PHP est un langage simple tant dans sa syntaxe que dans ses fonctions. Il faut connaître le HTML (ou l'apprendre en même temps). L'achat des ouvrages indiqués dans la section ressources (en bas de cette FAQ) est vivement conseillé. Installez PHP et MySQL ou Postgres sur votre ordinateur par exemple avec le package d'Emmanuel Faivre (windows) et testez vos scripts en local. Lisez ce document, apprenez à lire le manuel de PHP, à chercher un peu par vous même dans les multiples sites cités dans cette FAQ, et à poser vos questions au bon endroit : fclphp pour les questions liées à PHP, news:fr.comp.applications.sgbd (fcas) pour les questions sur le langage SQL ou la configuration de votre SGBDR (MySQL, Postgres, etc...) et news:fr.comp.infosystemes.www.auteurs pour les questions HTML , news:fr.comp.lang.javascript pour le JS, ainsi qu'au support technique (aide en ligne, forums réservés) de votre hébergeur. Partez du principe qu'il est probable que quelqu'un d'autre a déjà été confronté au même problème : si votre question n'est pas mentionnée dans cette FAQ, cherchez sur les archives de ce NG : sur http://www.phpindex.com/ng/ ou sur google : http://groups.google.com/
En respectant ces règles simples, vous aurez plus rapidement une réponse pertinente à votre question.

2.2 php is not mysql !

Bien que la plupart des questions traitées dans ce document concernent l'utilisation de PHP de concert avec une base de données, et dans la plupart des cas MySQL, il est faux et restrictif de penser que PHP nécessite un Système de Gestion de Base de Données Relationnel (SGBDR), et encore plus faux de penser que MySQL est "le" SGBDR incontournable avec PHP (on pourrait déjà discuter longtemps du qualificatif de SGBDR pour MySQL ...) : n'oublions pas Postgres, Oracle et Sybase pour ne citer qu'eux.
De même, la majeure partie des questions sur fclphp concernent l'utilisation de PHP couplé à un serveur web (Apache, IIS, PWS, Xitami, NES, etc...) mais PHP peut tout à fonctionner en tant qu'exécutable "stand-alone" : c'est une application à part entière.

2.3 HTTP : client serveur en mode asynchrone non connecté

Un script PHP utilisé pour générer dynamiquement une page web, comme un script ASP par exemple, s'exécute sur le serveur web qui reçoit une demande de la part d'un navigateur client. Le script PHP va faire certaines choses sur le serveur (mise à jour / interrogation de base de données, écriture dans des fichiers sur le serveur, consultation ou envoi de mail, etc...) puis va renvoyer au navigateur le résultat (HTML, PNG...) de ses actions. La page HTML qui revient vers le navigateur client n'a pas d'existence "physique", elle n'est pas ce que l'on appelle une page "statique", stockée sur le serveur (par FTP en général) et "servie", identique, au navigateur client à la demande. Néanmoins, en recevant le code HTML, le navigateur n'a pas moyen de savoir que c'est une page dynamique ou statique : le client ne sait rien de ce qui s'est passé sur le serveur où tourne PHP.
Remarque importante ca à la source de nombreuses confusions :
En particulier, du JavaScript qui tourne sur cette page dans le navigateur client n'a aucun moyen de savoir que PHP en a généré une partie. Ceci implique que PHP peut passer des arguments à du JavaScript (client), (en fait, on peut tout à fait faire du JS dynamiquement généré par du PHP), mais également que pour passer des arguments JS depuis le client vers PHP et donc le serveur, il faudra soumettre un formulaire ou faire une redirection/un refresh en JS qui appellera une URL en passant les valeurs JS en argument. Bref, il faut bien que le client (JS) appelle le script PHP serveur en lui passant les valeurs qui vont bien.

Notons ici néanmoins que PHP peut ouvrir des connexions par sockets vers d'autres serveurs.

2.4 Quel hébergeur choisir avec PHP ?

Hébergements payants : Reportez vous au site abc-hébergement : http://www.abchebergement.com/
Si vous cherchez un hébergeur gratuit et vous voulez savoir quelles extensions/fonctions php il propose, vous trouverez sur http://www.centrale-lyon.org/ng/phpinfo.html une liste d'hébergeurs proposant php gratuitement. On y trouve aussi des associations et des sociétés proposant des formules à bas prix. Attention aux remarques en bas de la page avant de vous engager pour 24 mois...

2.5 Des problèmes d'installation

Voici une liste de pointeurs pour l'installation de PHP avec différents serveurs web / SGBDR.

Avec windows :

Le package Easy-PHP (windows 9X/NT d'apache + mysql + php + phpmyadmin), est disponible à l'URL: http://www.easyphp.org/
A noter : il est plus judicieux de poser vos questions relatives à ce package sur la mailing list reservée à cet usage qui est en place sur http://www.easyphp.org/

Configuration du PWS pour PHP
Un guide complet, pas à pas, avec captures d'écran : http://davidubois.free.fr/cfg/index.html

Installation détaillée :

http://phm.nerim.net/wamp/Apache, MySQL et PHP sur un OS MS Windows 2000.
http://lwest.free.fr/doc/php/configuration_NT_fr.html php3 sur NT

Avec Unix :

De manière générale, commencer par enlever tous les RPMs plus ou moins pre-intallés, télécharger les tarballs et tout recompiler. Si vous faites des installations sucessives, penser à commencer par un make distclean ou carréement repartir des tarballs d'origine.
Concernant SSL : il n'y a pas que mod-sll dans la vie, on peut aussi compiler Apache avec support natif de SSL 128 bits. http://www.apache-ssl.org/ donne le détail du patch des sources et de la compilation.

Avec Sybase les options --with-sybase et --with-sybase-ct ne doivent pas être utilisées ensemble (conflit de la db et ct libs).

Avec Nescape Entreprise Server sur Solaris
Lire le manuel : http://www.php.net/manual/en/install.netscape-enterprise.php

Avec Macintosh MacOS X
Deux packages sont disponibles sur http://www.entropy.ch/software/macosx/php/
Traduction des procs d'install sur http://www.mosx.net/logiciels/php_mysql.shtml

2.6 Editeurs PHP

Cette liste est fournie pour le confort des yeux.

N'importe quel éditeur ASCII fait l'affaire.

Un article complet rédigé par S. Pineau est disponible sur http://steph.pineau.free.fr/php/index.php?LNK=EDIT avec un moteur de recherche multicritères pour vous guider dans votre choix.

  • Macintosh :

    • BBEdit : http://web.barebones.com/products/bbedit/bbedit.html

  • Dos / windows 3x

    • edit

  • Windows NT / 9X /2000
    Il nait presque un éditeur par jour pour windows. Le but n'est pas de les lister tous.

    • notepad

    • PHPEdit : http://www.soysal.com/PHPEd

    • HTML-Kit : http://www.chami.com/html-kit/

    • UltraEdit : http://www.ultraedit.com/

    • Textpad

      • http://www.textpad.com/

      • http://www.textpad.com/add-ons/syntax.html (liste complete des addons)

      • ftp://ftp.textpad.com/pub/addons/syntax/php.zip (lien vers l'addon PHP).

  • Unix

    • vi

    • nedit http://nedit.org/

    • (Linux) KPHPDevelop : http://nexus.deltanet.ro/kphpdev/ (lent)

    • (Linux) Webmaker : http://linux.netnerve.com/rpm/webmaker.html

    • (Linux KDE) Quanta Plus : http://quanta.sourceforge.net/

  • Emacs et emacs win32 :http://www.emacs.org/ : "plugins"

    • http://www.gest.unipd.it/~saint/hth.html

    • http://www.guru.nu/turadg/software/index.html

  • vim et vim win32:http://www.vim.org/

2.7 Passage de variable(s) entre les scripts

[HS] La solution la plus courante et la plus simple consiste à transmettre les variables dans l'URL sous la forme normalisée :
http://mon_url.fr/mon_beau_script.php3?variable1=valeur1&variable2=valeur&...&variableN=valeurN

Depuis la version 4.x de PHP, par défaut, les variables $variable1, $variable2, ... $variableN ne SONT PLUS définies. Il faut donc utiliser à la place les tableaux $_GET[], $_POST[] ou depuis la version 4.0.6 $_REQUEST[].
Autrement dit, là oû avant en appelant : script.php?toto=1 il était possible d'utiliser directement la variable $toto (qui valait 1) il faut maintenant par exemple commencer par affecter $toto=$_GET['toto']; pour que $toto soit disponible. Noter les simples quotes autour de 'toto'.

Voir la documentation sur http://www.php.net/manual/en/language.variables.external.php [en anglais] pour plus d'informations.

Rappelons aussi l'emploi parfois judicieux d'urlencode ( ) et de rawurlencode( ) ainsi que la préférence de la méthode POST et non GET.
Si vous vous posez ce genre de questions, il est probable que vous aurez aussi d'autres questions de base sur le HTML et il est probable que créer quelques pages statiques avant de vous intéresser à la création de pages dynamiques serait plus logique, afin d'échelonner les difficultés. N'hésitez pas à user et abuser de la liste des ressources présente dans cette FAQ.

2.8 Passer des variables JavaScript à PHP

Lire plus haut : HTTP : client serveur en mode asynchrone non connecté

2.9 La différence entre include( ) et require ( )

Remarque : include_once() et require_once(), introduits dans PHP4, ont le même comportement. Ils garantissent de plus que le fichier inclus ne le sera qu'une fois et une seule, ce qui facilite l'inclusion de fichiers définissant des fonctions (même si on peut très facilement se passer de ces fonctions).

Manuel pour include ( ) http://www.php.net/manual/function.include.php [en anglais] ou http://www.php.net/manual/fr/function.include.php [en français]
Manuel pour require ( ) http://www.php.net/manual/function.require.php [en anglais] ou http://www.php.net/manual/fr/function.require.php [en français]

include( ) comme require( ) permettent toutes les deux d'inclure un fichier dans un script php.
Une application pratique courante est de définir des fonctions dans un script qui sera appelé par include( ) ou require( ) pour rendre ces fonctions disponibles dans ce script.

En PHP 4.x
La seule différence enter les deux fonctions est leur comportement dans le cas où le fichier à inclure est introuvable/inaccessible. include('fichier_inaccessible.toto'); produira un warning mais le script continuera. require('fichier_inaccessible.toto'); stoppera l'exécution (comme s'il y avait un appel à exit() ou die() qui est un synonyme d'exit()). (lire aussi ci-dessous la version PHP3 et son utilisation)

En PHP 3.x
L'instruction require ( ) est traitée avant l'exécution réelle du script, par le préprocesseur PHP. Elle relève plus de la macro que de la fonction. La fonction include( ) est appelée, si nécessaire, au cours de l'exécution du programme.

Par exemple :
if($toto)
{
include("fic1.php3");
require("fic2.php3");
}

Dans ce code, le fichier fic2.php3 sera TOUJOURS inclus dans le script courant. En revanche, fic1.php3 ne sera inclus QUE si le test sur $toto renvoie TRUE.
Si pour une raison quelconque vous voulez inclure un fichier juste après l'avoir généré dynamiquement, vous êtes donc obligé de passer par include ( );

Dans toutes les versions

Si vous tenez *vraiment* à faire des versions différentes de votre site selon le navigateur, ceci peut vous permettre de définir de deux manières différentes la même fonction PHP, en adaptant ce qu'elle doit faire aux spécificités d'IE ou NS ( sorte de couche d'abstraction), ainsi le code du corps de votre site reste indépendant de tout ça.

2.10 Les chemins pour include( ) et require ( )

Les deux fonctions ont le même comportement pour aller chercher le fichier à inclure. Si on fait un include("../titi.inc"); dans le fichier toto.php3, alors, le chemin de titi doit être relatif à toto.php3. Dans cet exemple, il se trouve un répertoire au dessus.

Attention 1 : chez la plupart des hébergeurs , php est configuré de manière à interdire l'include de fichiers d'un répertoire parent pour d'évidentes raisons de sécurité.

Attention 2 : il est plus que conseillé de nommer ses fichier à inclure avec une extension .php ou .php3 car sinon, n'importe qui connaissant le nom du fichier le lira en clair dans son navigateur.

2.11 Des problèmes avec la fonction header( )

Pour tout appel à la fonction header( ), il ne doit en aucun cas y avoir un quelconque caractère retourné au navigateur avant son appel.
En particulier, faire la chasse aux espaces et aux retours à la ligne avant le tag d'ouverture <?php ou après le tag de fermeture ?> du script php.

De même, des problèmes ont été constatés lors de l'appel à une fonction qui faisait un return; vide dont le code de retour n'était pas traité dans la fonction appelante, un peu comme si la valeur retournée était parasite.

Manuel : www.php.net/manual/function.header.php [en anglais] ou www.php.net/manual/fr/function.header.php [en français]

2.12 Remplacer les retours chariots dans une chaine

$chaine = ereg_replace("(\r|\n){1,2}", " ", $chaine);

2.13 Les expressions régulières

Sujet trop vaste pour être traité dans une FAQ de NG, et non réellement lié à PHP. Des exemples sont présents dans cette FAQ.
Vous pouvez aussi consulter utilement les liens suivants :

http://www.linuxfocus.org/Francais/July1998/article53.html
http://www.phpbuilder.com/columns/dario19990616.php3
http://www.devshed.com/Server_Side/Administration/RegExp/page1.html
http://www.webmasterbase.com/article/974
http://www.zytrax.com/tech/web/regex.htm
ainsi que le chapitre Regexp de l'ouvrage PHP et MySQL en ligne de Jean Carfantan disponible sur phpindex.com : http://www.phpindex.com/download/regex.pdf

2.14 Variables dynamiques $var_$i =>$var_1, $var_2 ...

Il est possible en PHP de gérer des variables dynamiques, par exemple :

for ($n = 0; $n<4; $n++)
{
${"var_".$n}= "tutu".$n;
}

Cette boucle génère 5 variables : $var_0 à $var_4, qui contiennent le texte tutu0, tutu1...tutu4

2.15 Un @ devant la commande ?

On rencontre parfois des scripts de ce genre :
@mysql_connect(...

La présence du @ empêchera l'affichage d'une éventuelle erreur.
http://www.php.net/manual/en/language.operators.errorcontrol.php[EN] ou http://www.php.net/manual/frlanguage.operators.errorcontrol.php[FR]

ATTENTION : il vaut mieux GERER les erreurs que de les IGNORER.

16 Mon code PHP s'affiche au lieu d'être éxécuté

Le plus probable est que vous avez nommé votre fichier avec une extension .html ou .htm et non .php3 ou .php, c'est aussi simple que cela. Si le fichier a bien une extension .php3 ou .php, alors votre serveur http n'est pas configuré correctement ou n'a pas été redémarré pour prendre en compte les modifications. NB : il est possible de forcer l'association des fichiers .html avec PHP, mais attention aux performances. Ce genre de paramétrage n'a pas de raison d'être sauf dans des cas trè précis et spécifiques.

Contenu de cette section

3. La connexion à un sgbdr

Contenu de cette section

3.1 ...0 is not a valid resource ...

ou encore ...0 is not a valid mysql index on line...

La requête SQL a échoué et vous n'avez pas pensé qu'il faut toujours tester la valeur de retour d'une fonction aussi cruciale pour le résultat attendu qu'une requête sur BD, mysql_query( ) ici. Donc le premier appel au buffer de stockage du résultat, par mysql_fetch_*( ), provoque une erreur.
Pour trouver l'erreur dans votre requête SQL, affichez par un appel à echo "";ou print( ); la requête passée dans l'appel à mysql_query( ); et exécutez cette requête en ligne de commande dans MySQL.

3.2 [souvent HS] Problèmes de connexion à MySQL

Manuel de MySQL (FR): http://dev.nexen.net/docs/mysql/annotee/manuel_toc.php

Quelques messages d'erreurs rencontrés assez souvent et ce qu'ils peuvent cacher :

Message d'erreur du genre :
Fatal error : call to unsupported or undefined function mysql_connect() in [fichier].php3 on line [XXX]

ATTENTION : PHP4 possède un support natif de mysql, cette réponse n'est applicable QUE à PHP3.
Vérifier que dans le fichier php3.ini une ligne n'est pas encore commentée à tort.
Par exemple dans ce cas, sous windows, dans la section ;Windows Extensions il faut enlever le ; devant extension=php3_mysql.dll (mais donc laisser cette ligne commentée avec PHP4)

Message d'erreur du genre :
... Can't connect to mysql server on ...[HS]
Vérifier que le "démon" mysqld (ou mysqld-shareware) a bien été lancé en ligne de commande, par "c:\mysql\bin\mysqld.exe --standalone" sous windows 9x, en tant que service sous Windows NT (c'est le plus simple) et par "$MYSQL/bin/safe_mysqld &" sous unix (en standard $MYSQL vaudra /usr/local mais ceci dépend de votre installation).

Message d'erreur du genre :
... Access Denied for user [toto]@localhost ... [HS]
Si votre script tourne chez un hébergeur, contactez son support technique et lisez sa documentation interne.
Si vous avez la main sur le serveur MySQL, vérifiez les droits de connexion de ce [toto] en vous connectant, en ligne de commande, à MySQL en tant que user root, en faisant une fois connecté un select * from user where user='[toto]'; et regarder tout particulièrement la colonne Host.
Voir la section 6 du manuel http://www.mysql.com/documentation/mysql/commented/manual.php?section=Privilege_system [en anglais] ou
http://dev.nexen.net/docs/mysql/annotee/manuel_Privilege_system.php#Privilege_system [en français] de MySQL pour plus d'informations.

3.3 Exemple de fonction de connexion à MySQL

Cette fonction de connexion appelle une fonction fx_footer( ), que vous
devrez définir vous même, avec des arguments qui vous conviennent, par exemple dans le cas où
vous disposez d'un menu de navigation paramétrable. Sinon, un print("</BODY></HTML>"); fera l'affaire.

La terminologie DAD (Database Access Descriptor) est empruntée à Oracle.

Remarque : De manière générale,
il vaut mieux forcer les valeurs par défaut à des
valeurs que vous matrîsez.

function fx_std_connect( )

{

/* remplacer éventuellement localhost par le nom de serveur approprié.

Voir la doc de votre hébergeur. */

$l_dad=mysql_connect("localhost","votre_login","votre_password");

if ($l_dad == FALSE)
/* NB : on peut faire appel à la fonction mysql_error() ou mysql_errno() pour obtenir le
message de retour de la base */
        {
    print("Connexion impossible.\n");
        include("std_footer.php3");
        fx_footer("parametre1","parametre2");
        exit();
        }

if(mysql_select_db("votre_base",$l_dad)!=TRUE)

        {
        print("Database inaccessible.\n");
        include("std_footer.php3");
        fx_footer("parametre3","parametre4");
        exit();
        }

return ($l_dad);

}

Pour chaque nouvelle connexion, appeler directement $DAD=fx_std_connect( );

Il va de soit que cette fonction doit être définie dans chaque script où elle est appelée,
le plus simple étant de faire un include("std_connect.php3"); où std_connect.php3 est le fichier qui
en contient sa définition.

Si le fait de mettre ainsi votre login et mot de passe en clair dans un fichier
vous effraie, lisez dans cette FAQ la section appropriée :
"La protection de mes mots de passe de connexion à une base".

3.4 La protection de mes mots de passe de connexion à une base

Il existe de nombreuses méthodes permettant de sécuriser les informations relatives à la connexion vers une base de données. Nous allons en présenter ici quelques unes. En premier lieu, précisons qu'il est pratique de placer ces informations dans un fichier et/ou une fonction. Cette approche, modulaire, permet de procéder à des modifications ultérieures avec souplesse (changement du mot de passe d'accès à la base, etc.).

Par exemple, dans le cas particulier de MySQL, un fichier regroupant ces informations pourrait ressembler à celui-ci :

$host="mon_host";
$user="mon_user";
$password="mon_password";
$acces_bd=mysql_connect($host, $user, $password);

** Première méthode de protection Cas où vous n'avez pas la maîtrise du serveur qui héberge vos scripts
Nommer ce fichier en prenant soin de lui attribuer l'extension .php3 ou .php pour PHP4. Par exemple, base.inc.php3. Par ce simple fait, si un utilisateur mal intentionné tente d'ouvrir ce fichier à l'aide d'un simple navigateur, ce fichier sera de toutes facons "parsé" (interprété) par PHP coté serveur. Et le navigateur ne renverra rien de visible au client.

** Deuxième méthode de protection Cas où vous avez la maîtrise du serveur qui héberge vos scripts
Rien ne vous empèche de placer le fichier contenant les informations de connexion à votre base, en dehors de l'arborescence du serveur HTTP. C'est une bonne approche. Un serveur HTTP dispose d'une racine en aval de laquelle vont être placés et interprétés vos scripts et vos pages. Mais en amont, non. Par exemple, sous Apache, la racine (DOCUMENT_ROOT) est souvent /usr/local/apache/htdocs. Les pages et autres scripts se trouvant en aval de cette racine sont potentiellement visible depuis un navigateur. Il n'en va pas de même de ceux qui se trouvent en amont. Vous pouvez donc judicieusement placer votre fichier sous /usr/local/etc par exemple.
Une autre technique consiste à récupérer le login et password depuis des variables shell unix par un getenv();

** Troisième méthode de protection Cas où vous disposez des droits d'administration de votre base
Une méthode trop souvent ignorée consiste tout simplement à paramétrer finement les droits d'accès à votre base. Notamment afin de n'autoriser des connexions que depuis la machine locale (localhost). De ce fait, même si un utilisateur mal intentionné dispose des informations de connexion (et dans le cas où il ne dispose pas d'accès sur la machine afin d'y déposer des scripts, bien évidement), il ne pourra pas accéder à la base. Reportez vous au manuel du sgbd que vous utilisez.

** Les autres méthodes Ajoutons qu'il est aussi possible de bricoler les fichiers de configuration des serveurs HTTP (type Apache) afin de demander au serveur de "parser" les fichiers .inc ou encore de jouer avec les droits d'accès à certains répertoires ou fichiers (par le biais des fichiers .htaccess par exemple), y compris dans des sous répertoires si l'hébergeur interdit de "remonter" dans l'arborescence.

N'oublions pas qu'il est plus probable que votre mot de passe soit tout simplement "sniffé" quand il passera en clair avec votre clickdrome (tm) favori d'administration de base...

Contenu de cette section

4. Techniques de développement

Contenu de cette section

4.1 ...parse error on line...

parse error on line 55 : une erreur de parsing (en français dans le texte) est une erreur de syntaxe php. Une erreur déclarée sur la ligne N est très souvent causée sur la ligne N-1 sur cet exemple, la ligne 54.
L'erreur la plus courante est un oubli de ';' en fin de ligne...
Un autre grand classique est l'oubli de '\' devant des double-quotes ou l'oubli des double-quotes finales dans une chaîne de caractères.
On rencontre aussi une "parse error" en fin de fichier quand on oublie une accolade fermante } dans un bloc conditionnel. Typiquement, si votre fichier fait 204 lignes et que vous avez une "parse error" sur la 205eme, c'est un très probablement un problème d'accolades.

4.2 Le multitasking / exécutions parallèles (UNIX)

Si vous désirez lancer des scripts en parallèle et/ou en asynchrone (on les lance et on les oublie, on continue le script courant sans attendre qu'ils se terminent) vous pouvez utiliser les fonctions PHP exec(), passthru(), ou system().
Par exemple : exec(" nohup toto.sh >mon_log.txt &");
En revanche, il faudra analyser le résultat en disséquant ("parser") le fichier de log : ouvrir ce fichier avec fopen(); puis le lire ligne par ligne en cherchant des erreurs éventuelles, etc...

4.3 Recherches par mots-clefs dans une base de données

Il n'est pas rare de devoir effectuer des recherches dans une basesur des données partielles, comme par exemple un mot-clef.
De manière générale, deux principes peuvent être mis en oeuvre :
- gardez une table spécifique pour la recherche, qui contiendra uniquement les mots-clefs en majuscules et sans accents.
- si le sgbdr le supporte (mysql par exemple) utilisez plutôt les regexp DANS la requête SQL au lieu de faire du "WHERE machin LIKE '%toto%'".

http://www.mysql.com/doc/R/e/Regexp.html

4.4 Lancer des commandes à intervalles réguliers ("crontab")

Commencez avant tout par vérifier si votre script doit être absolument lancé à une heure précise en rapport direct avec le temps newtonien. Ceci est en fait assez rare, et est en général lié à des traitements assez longs à exécuter de nuit.
Dans beaucoup de cas, vous pourrez vous passer de crontab. Considérons par exemple la purge de données obsolètes. "Tous les jours à minuit" est une approche, mais en fait, il suffit de purger avant la prise en compte ou l'affichage de ces données. Il suffit donc d'appeller un script de purge avant le traitement. On peut ensuite par exemple utiliser un fichier de configuration sur le serveur (un peu comme un cookie) ou tester l'heure courante par rapport à une plage horaire pour éviter de lancer la purge à chaque appel.

Dans certains cas, néanmoins, cette méthode n'est pas applicable. L'idéal est bien sûr alors d'avoir accès à une crontab.

Sinon, on peut faire appel à des services de sites qui appelleront votre script à l'heure voulue comme par exemple: http://www.witbe.net/ ou http://www.webcron.org/ (gratuit)

Il est également parfois possible de faire un "daemon" en PHP, grâce à une boucle infinie testant la présence d'un fichier par exemple, mais attention aux obstacles suivants :
- Dans la plupart des cas le temps maximum d'exécution d'un script est limité, en particulier par un paramètre de php3.ini. Ce temps semble être du temps CPU, mais ceci est à confirmer, en particulier la gestion de ce paramètre est os-dependant.
- Attention à ne pas oublier de faire un appel à la fonction clearstatcache( ) si vous utilisez effectivement un test sur la présence d'un fichier pour arrêter votre démon ou c'est la boucle infine garantie.

4.5 Vérifier la présence d'un enregistrement avant de le mettre à jour

(La stratégie d'update / insert, limite hors sujet )
Pour vérifier la présence d'un enregistrement avant de le mettre à jour on peut procéder de la manière suivante :
1.Faire un select dans la table appropriée.
2.Tester le retour du nombre de rangs, par exemple grâce à mysql_num_rows ()
3.Si l'enregistrement n'existe pas, alors on fait un insert.
Sinon, on fait un update.
Une méthode plus rapide est la suivante :
Lancer l'update. Si le nombre de rangs mis à jour est égal à zéro, c'est que le rang n'existait pas dans la base.
Il n'y a plus qu'à l'insérer.

Comparaison du code des deux méthodes :

$result=mysql_query("SELECT * FROM ma_table WHERE ma_clef='$MA_VAR'");

$nbre_rangs=mysql_num_rows( $result);

if ($nbre_rangs == 1)

 {

 $modif=mysql_query("UPDATE ma_table SET colonne=colonne+1 WHERE ma_clef='$MA_VAR'");

 if (!$modif)

   {  return(FALSE); }

 }

else

 {

 $modif=mysql_query("INSERT INTO ma_table VALUES ('$MA_VAR',0)");

 if (!$modif)

    { return(FALSE); }

 }

Deuxième méthode :

/* $DAD = Database Access Descriptor, retour de mysql_connect() */

if (! mysql_query("UPDATE ma_table SET colonne=colonne+1 WHERE ma_clef='$MA_VAR'"),$DAD)

   {

   if(mysql_affected_rows($DAD)==0)

                 { mysql_query("INSERT INTO ma_table VALUES ( '$MA_VAR', 0)",$DAD); }

   }

Il est à noter que le code de la deuxième méthode, beaucoup plus compact et plus performant, est néanmoins plus permissif car il n'intègre pas de gestion des erreurs.

NB : dans le cas de MySQL intéressez vous à la commande REPLACE.

4.6 Gérer plusieurs langues sur un site

Voir le travail de Nicolas Hoizey : phpLang sur http://www.phpHeaven.net/

Par ailleurs, il est possible de définir la même variable PHP, avec une valeur différente selon la langue simplement en se servant de fichiers à inclure.
Soit par exemple une gestion de trois langues: allemand (DE), anglais (EN), et français (FR). Le code de toute page PHP commencera par le code suivant :

$l_langue=fx_filtrer($i_langue);
/*On filtre toute variable arrivant du monde extérieur */
switch ($l_langue)
{
/* Profitons de la capacité de PHP à accepter des chaînes
de caractères dans les switch( ) */
case "FR" : include("FR_mesg.php3");
break;
case "EN" : include("EN_mesg.php3");
break;
case "DE" : include("DE_mesg.php3");
break;
default : print("Langue non reconnue
");
fx_footer("parametres divers");
exit();
/* N'oublions pas le cas par défaut qui permet de traiter TOUTES
les erreurs d'un seul coup */
}
Les fichiers contiendront une définition différente des mêmes variables / constantes :
Dans FR_mesg.php3 : define(msg1,"Bonjour");
Dans EN_mesg.php3 : define(msg1,"Hello");
Dans DE_mesg.php3 : define(msg1,"Gunten Tag");
Dans le code du script, il suffira d'afficher la constante msg1 sans réfléchir : la bonne langue sera automatiquement sélectionnée.
Il est bien entendu aussi possible de stocker des messages dans une table d'une base de données qui aura trois colonnes : l'identifiant du message (msg1,...msgn), la
langue, et le texte, la clef primaire étant bien sûr le couple (identifiant, langue).

4.7 Connaître la version du navigateur et la résolution de l'écran

Remarque : il n'est pas particulièrement conseillé de faire des versions différentes d'un site selon la configuration du client qui va le voir (version du navigateur, résolution de l'écran...), en particulier pour la maintenance du code. Pour plus d'informations sur ce débat qui n'a rien à voir avec PHP, reportez vous au newsgroup fr.comp.infosystemes.www.auteurs ou fciwa et en particulier à ses archives sur http://www.deja.com/home_ps.shtml

La variable globale HTTP_USER_AGENT contient la version du navigateur ayant demandé la page (ou celle qu'il a bien voulu donner par exemple dans le cas d'un "aspirateur").

La résolution de l'écran n'est pas transmise au serveur par le navigateur. Si vous souhaitez vraiment vous en servir, utilisez JavaScript.

4.8 Imprimer

Non, on ne peut pas. Le serveur sur lequel tourne PHP n'a aucune connaissance des millions d'imprimantes connectées aux millions de PC/mac/autres de ceux qui regardent vos pages, c'est aussi simple que ça.
Si pour une raison quelconque, le bouton "imprimer" du navigateur ne vous convient pas, c'est en JS qu'il faudra gérer vos traitement spécifiques, côté client.

4.9 Alterner les couleurs dans un tableau

Pour autant que cela ait un réel intérêt graphique (en tous cas, c'est à la mode), il est très simple d'alterner les couleurs du fond d'un tableau.
Un exemple :

while($row =mysql_fetch_row($result_buffer) )

{

if($bg_color=="red"){$bg_color="green"}else{$bg_color="red"}

print "<TR><TD BGCOLOR=$bg_color>$row[1]</TD></TR>";

}

Remarque : pour les navigateurs qui gèrent correctement les CSS, on peut utiliser la méthode suivante :

<style type="text/css" media="print">

td { border-bottom : thin solid Gray;}

</style>

4.10 L'upload de fichiers

A voir dans la doc : http://www.php.net/manual/features.file-upload.php [en anglais] ou http://www.php.net/manual/fr/features.file-upload.php [en français]
Prérequis dans le formulaire :
- le formulaire doit être en encodage (enctype)
multipart/form-data et en méthode POST.

<form action="script.php3" enctype="multipart/form-data" method="POST">

- un champ (en général caché) nommé MAX_FILE_SIZE dont la valeur sera la taille maximale
acceptée pour les fichiers, exprimée en octets. Ce champ est facultatif.
<input type="hidden" name="MAX_FILE_SIZE" value="1000">

- un champ de type "file", le nom n'importe pas, appelé LeFichier pour la suite.
<input type="file" name="LeFichier" >

Gestion dans le script :
Le script recevant le formulaire va créer 5 variables pour chaque fichier chargé :

$_FILES['LeFichier']['tmp_name'] : l'emplacement temporaire du fichier sur le serveur
$_FILES['LeFichier']['name'] : le nom du fichier initial dans l'ordinateur client
$_FILES['LeFichier']['size'] : la taille du fichier exprimée en octets
$_FILES['LeFichier']['type'] : le type MIME du fichier (à condition que le navigateur l'ait renseigné!)
$_FILES['LeFichier']['error'] : le code retour de l'upload (php version>=4.2).
Ce code retour peut avoir les valeurs suivantes :
0 : tout va bien, fichier uploadé
1 : la taille du fichier dépassait la limite fixée dans php.ini
2 : la taille dépassait la limite fixée par le formulaire
3 : le chargement du fichier a été interrompu
4: le fichier n'a pas été chargé

On peut aussi simplement tester is_uploaded_file($_FILES['LeFichier']['tmp_name'])) qui renvoit FALSE si le fichier n'a pas pu être uploadé.

Reste donc simplement à déplacer le fichier temporaire dans un autre répertoire, par exemple : $DOCUMENT_ROOT."/upfiles/"
Ce répertoire cible doit être accessible en écriture. On peut le vérifier avec is_writeable($DOCUMENT_ROOT."/upfiles/")
http://www.php.net/manual/en/function.is-writeable.php [en anglais] ou http://www.php.net/manual/fr/function.is-writeable.php [en français]
Ensuite donc, on déplace : la fonction copy ( ) est utilisablee car rename( ) ne fonctionne pas toujours en multivolumes :
if (!copy($_FILES['LeFichier']['tmp_name'], $DOCUMENT_ROOT."/upfiles/".$_FILES['LeFichier']['name']))

Mais il vaut mieux encore appeler move_uploaded_file() (PHP 4 >= 4.0.3).

if(!move_uploaded_file($_FILES['LeFichier']['tmp_name'],
            $DOCUMENT_ROOT.'/upfiles/'.$_FILES['LeFichier']['name']))
   print 'erreur à la copie du fichier '.$_FILES['LeFichier']['name'];

http://www.php.net/manual/function.move-uploaded-file.php
http://www.php.net/manual/fr/function.move-uploaded-file.php
Remarques:
Si vous avez des problèmes à uploader les fichiers, vérifiez les paramètres suivants du fichier php.ini :
file_uploads=1
upload_tmp_dir= un répertoire temporaire auquel l'utilisateur php a accès en écriture (sous windows, c:/windows/temp semble un bon candidat)
upload_max_filesize=taille maxi d'un fichier uploadé
post_max_size=taille maxi des données envoyées par un formulaire (y compris les fichiers uploadés)

Sachez aussi que cette méthode d'upload par le protocole http n'est ni fiable ni adaptée aux gros fichiers; s'ils font plus de 2Mo envisagez plutôt un transfert par ftp.

Il est inutile de stocker des fichiers complets dans une base de données, leur chemin suffit. Une exception néanmoins si le but est de faire du PHP dynamique avec eval() mais ce seront des "petits" fichiers.

En particulier, il est rigoureusement inutile de stocker des fichiers binaires comme des images dans une base de données. Si vous le souhaitez vraiment (on ne peut pas vous empêcher...), pensez sous Oracle à utiliserle type BFILE, qui n'est pas stocké dans le tablespace.

Pour des raisons de sécurité, vérifiez toujours l'extension des fichiers uploadés pour bloquer ceux qui seraient exécutables (extensions '.php', '.php3', '.cgi', etc.), ou bien stockez tous vos fichiers uploadés dans un répertoire rendu inaccessible par le serveur HTTP (sous Apache .htaccess par exemple).

L'upload de fichiers fonctionne bizarement chez l'hébergeur Free. Il semble que le script appelé doive avoir l'extension php3.

4.11 L'envoi de fichiers vers le navigateur

Pour envoyer un fichier vers le navigateur du client par un simple lien http, il est possible d'utiliser la fonction header() (avec les précautions rappelées dans cette FAQ) :

header("Content-disposition: attachment; filename=nom_fichier.txt");

Contenu de cette section

5. Les mails et les forums NNTP

Contenu de cette section

5.1 Le mail chez free.fr

http://support.free.fr/faq/web.html#7
si la solution officielle "Form2Mail" ne répond pas à vos besoins, intéressez-vous à la solution 'Protomail' : http://samuel.kabak.free.fr/scripts/protomail.html%20target=

5.2 Envoi d'un mail.

Utilisez ou disséquez la très bonne classe de gestion de Léo West, disponible sur http://lwest.free.fr/doc/php/lib/Mail/ Documentation en français sur http://lwest.free.fr/doc/php/lib/index.php3?page=mail&lang=fr

5.3 Tester la validité d'une adresse email

Le MEILLEUR moyen de vérifier la validité d'une adresse email, c'est de lui en envoyer un pour demande de confirmation d'inscription.

On peut néanmoins dans un premier temps vérifier la syntaxe de l'adresse, mais cela est plus compliqué si on veut être pointu.
A titre d'exemple des regexp, on peut considérer le test ci dessous, permettant de juger assez grossièrement si la chaîne $email semble être une adresse valide.

$email=toto@coincoin.com;

if (ereg("^(.+)@(.+)\\.(.+)$",$email, $tableau)
{...}

Pour une fonction beaucoup plus fine, utilisez le code proposé par Marc Meurrens en suivant ce lien : http://www.cgsa.net/php/index.php

Concernant le nom de domaine, c'est encore moins fiable. A part vérifier que la résolution DNS renvoie bien quelque chose par checkdnsrr( ) mais ça peut prendre du temps, on ne sait pas faire grand chose.

5.4 Forums usenet

Il est possible d'utiliser soit les sockets, soit les fonctions IMAP
pour accèder en lecture / écriture à un serveur de news :

- L'article d'Armel Fauveau (en VF) traitant de la gestion des sockets avec php en lien avec un serveur NNTP :
<http://articles.phpheaven.net/article.php3?id_article=2>
- pour imap, le manuel :
<http://www.php.net/manual/fr/ref.imap.php>

- Sans oublier la RFC 977 traitant du NNTP : <http://www.ietf.org/rfc/rfc0977.txt?number=977>

2) classes NNTP disponibles en php :
<http://www.vhconsultants.com/nnrp/nnrp.htm> avec un tuto de présentation disponible ici :
<http://www.phpteam.net/affiche.php?quoi=socket1>

<http://phpclasses.upperdesign.com/browse.html/package/157>

Le projet PEAR : <http://cvs.php.net/cvs.php/pear/Net_NNTP>

3) Des projet de client NNTP via php :
<http://florian-amrhein.de/newsportal/index-english.php3>
<http://sourceforge.net/projects/phnntp/>

Contenu de cette section

6. Les outils déjà prêts

Contenu de cette section

6.1 Code d'un forum ou BBS en PHP

Il existe des projets "tout prêts" et gratuits. Par exemple :
- phorum http://www.phorum.org/
- agora http://w-agora.araxe.fr/

Si vous préférez faire le votre, un très bon exercice, inspirez vous de leur code (ce qui est du "hacking" au bon sens du terme).
Si vous possédez le livre de Leon Atkinson (cf en bas pour toutes ses références), voir le chapitre 16 pour un exemple.

6.2 Code d'un caddie virtuel en PHP

Intéressez vous au projet en Open Source d'Alexandre Trusch : http://www.w3-concept.net/
Et la démo de ce projet : http://demo.w3-concept.net/

6.3 Code d'un "chat" en PHP

Voir le travail de Nicolas Hoizey : phpMyChat sur http://www.phpHeaven.net/

6.4 PHP-NUKE

En cas de problème avec php-nuke, merci de commencer par consulter les ressources en ligne disponibles avant de poster sur fclphp.

Site officiel : http://www.phpnuke.org/

Liste de diffusion (en français) : http://fr.groups.yahoo.com/group/php-nuke/

Sites dediés (en français) :
http://cty.mandrake.org/davduf/
http://phpnuke.edazine.com/

Alternatives diverses :
http://www.phpscripts-fr.net/?page=scripts&cat=Portails

Contenu de cette section

7. Gérer les sessions utilisateur

Contenu de cette section

7.1 Coder votre propre gestion de session

Cette méthode, la seule possible sous PHP3, reste la plus souple et la plus fiable en ce qui concerne la capacité à maintenir le code. On utilise en général une table dans un SGBDR, contenant :
- un identifiant de session
- une colonne de type date, mise à jour à chaque demande de page, permettant aussi de faire expirer la session
- autant de colonnes que l'on veut associer de données à la session (dépendant de votre application)

L'identifiant de session est transmis dans les liens et les formulaires. A toute nouvelle connexion, on purge toutes les sessions inactives depuis plus de N minutes, puis on vérifie si la session courante est encore active.

Un générateur de session renvoie suffisament de caractère "aléatoirement" qu'il est impossible en termes de probabilités quepndant les N minutes de connexion, le même identifiant soit généré deux fois.

Deux grandes méthodes sont utilisées pour coder un générateur d'identifiants. La première consiste à se donner une liste de caractères autorisés et à "piocher" aléatoirement dans cette liste le nombre de fois voulu avec la fonction random(). La seconde repose sur le système d'exploitation et des "bidouilles" plus ou moins personnelles à chaque développeur, faisant appel à des concaténations de l'heure système et du PID du process courant par exemple.

Il est à noter que ce type de sessions peut être historisé dans une aute table, associée à un login/password par exemple, ce qui rend l'utilisation de cookies totalement inutile et perfidement, obligatoire pour l'internaute qui ne peut pas savoir ce qu'on stocke sur le serveur, mais peut effacer ou refuser les biscuits.

7.2 Utiliser l'excellente PHPLib

Ressources :
Site officiel de la PHPLib
https://sourceforge.net/projects/phplib/

NewsGroup dedié à la PHPLib
news://news.netimages.com/php3.phplib

Archives de la liste PHPLib du site PHPBuilder
http://www.geocrawler.com/lists/4/Web/195/0/

7.3 Le support natif des sessions de php4

A lire : http://php.net/manual/en/ref.session.php ou en français http://php.net/manual/fr/ref.session.php
A noter : il est très tentant de faire n'importe quoi et de stocker n'importe quoi dans des sessions avec php4. En particulier, on ne peut PAS stocker un identifiant de connexion à une base de données (par exemple le retour de mysl_connect) dans un identifiant session.
Les sessions en PHP4 devraient être réservées à des développeurs ayant un minimum d'expérience et de compréhension des mécanismes impliqués.

7.4 Comptabiliser le nombre courant de personnes "connectées" sur le site

Disposant d'un identifiant unique par session, vous pouvez stocker ces identifiants dans une table d'un SGBD, avec une colonne de fonctionnalité "timestamp" qui permettra de savoir quand l'enregistrement a eu lieu (mis systématiquement à l'heure système). Vous pouvez alors sélectionner toutes les sessions différentes "actives" dans, mettons, les 3 dernières minutes : souvenons nous que HTTP sur TCP/IP est un protocole utilisé en mode non connecté, il n'y a personne qui soit connecté (au sens ouverture de session avec authentification et fermeture explicite de session) à votre serveur en regardant vos pages.
Vous pouvez aussi vous servir de telles tables pour "suivre à la trace" les visteurs par leur identifiant. Notez que l'adresse IP de votre visiteur n'est a priori pas un identifiant fiable.
Remarque : si vous ne stockez qu'un identifiant qui n'a aucun lien direct avec l'internaute que vous "pistez", vous n'êtes en rien en contradiction avec la CNIL. Le stockage d'IP, bien que techniquement délirant, est plus sujet à caution.

7.5 Suivre ses visiteurs sur son site / l'adresse IP de vos visiteurs

La solution la plus simple consiste à utiliser des identifiants de session transmis d'une page à l'autre.

Les autres solutions côté serveur (à l'exclusion, donc, des cookies qui sont côté client) mettent en jeu plusieurs variables PHP :
Dans le cas où il n'y a pas de proxy(s) entre le client et le script php, $REMOTE_ADDR est l'adresse IP du client.
Dans le cas où il y a un (au moins) proxy, les variables $HTTP_X_COMING_FROM et $HTTP_VIA sont positionnées.

Attention donc, il n'est pas fiable d'utiliser $REMOTE_ADDR comme identifiant.

Si le problème vous intéresse, consultez la fonction GetIdentifier de Marc Meurrens : http://www.cgsa.net/php/

7.6 Mot de passe d'accès à un répertoire

La quasi totalité des hébergeurs proposent une interface graphique permettant de protéger l'accès à un répertoire par un couple (login / mot de passe).
[HS] Chez free.fr : http://support.free.fr/web/pperso/restriction_acces.html

Dans le cas où il vous faudrait faire ceci "à la main", une réponse sera rédigée en cas de demande. Il suffit en gros de faire un "man htpasswd"

Ceci est à différencier d'une gestion d'identification par login/passwd stockés dans une base de données.

Contenu de cette section

8. L'affichage de résultats de requêtes par tranches

Contenu de cette section

8.1 Présentation du problème

Lorsqu'une requête SQL renvoie un grand nombre d'enregistrements, on choisit souvent de n'afficher qu'un sous-ensemble de ceux-ci et de proposer à l'utilisateur de naviguer entre plusieurs pages de réponses (à la façon des moteurs de recherche).

Pour cela, plusieurs solutions sont possibles pour afficher les réponse $deb à $fin (deux variables passées en paramètre dans l'URL). Nous en présentons ici trois.

8.2 Faire une série de requêtes SQL classiques et traiter en retour

Avantages :
Compatible avec toute les bases.
On peut connaitre facilement le nombre total de réponses avec mysql_num_rows()
Inconvénient :
cette méthode est sous-optimale (!) en terme d'accès au sgbd et en post-traitement, et est présentée pour la forme.

$res = mysql_query("select nom, prenom from personne where age=30");
/* Boucler sur les résultats, en filtrant à l'affichage : */
$i = 0;
while ($a = mysql_fetch_row($res))
{
if (($i >= $deb) && ($i <= $fin))
afficher_rang($a);
$i++;
}

8.3 Utiliser la clause LIMIT du select de MySql

Avantage :
Utilisation optimale de MySql (et tout autre base acceptant un mécanisme semblable)
Inconvénients :
Non applicable à la plupart des sgbdr (qui n'acceptent pas cette notion de LIMIT)
On ne connait plus le nombre total de réponses. Pour l'obtenir il faut effectuer une requête supplémentaire lors avant la première tranche à afficher : select count(*) from personne where age=30;

$query = "select nom, prenom from personne where age=30 LIMIT $deb ,$fin ";
$res = mysql_query($query);
while ($a = mysql_fetch_row($res))
affiche_row($a);

/* Lien avec $deb et $fin2 en paramètre pour la page suivante */

$fin2 = $fin-$deb +1;
$deb=$fin2;

8.4 Utiliser une table tampon

Avantages :
Totalement compatible / portable quel que soit le sgbdr utilisé.
Compromis correct en utilisation des ressources.
Inconvénients :
Nécessite une table supplémentaire et un identifiant requête (ou session).
Remarque : la gestion des identifiants session est disponible dans cette FAQ.

Ci-dessous, les grandes lignes de la méthode. Un document plus détaillé est disponible donnant un exemple de moteur de recherche affichant ses résultats page par page sur http://johng.free.fr/requetes_tranches.html

1 - Créer une table fille, qui contient tout les champs de la table mère qu'on veut rendre disponible à la requête + 3 autres champs:
- une colonne id_session, contenant l'id de session du visiteur qui permettra d'identifier le résultat de la requête du visiteur, clef primaire de la table avec l'ordre_session.
- une colonne ordre_session qui sera incrémentée par chaque enregistrement d'une ligne de la requête sur la table mère.
- une colonne temp_session de type timestamp qui permettra de connaitre la date de création des lignes de la requête pour les purger le moment venu.

2.1 - On fait la requête sur la table mère. Avec le résultat on l'insère ligne par ligne dans la table fille, en n'oubliant pas de créer pour chaque ligne un champ
ordre-session incrémenté de 1, et deux champs id_session et temp_session identiques pour toutes les lignes de cette requête. On peut ici limiter le nombre maximum
d'enregistrements à présenter. On dispose alors du nombre total de lignes à afficher par tranches, $nombre_lignes.

2.2 - On purge la table des enregistrements dont le temp_session >= 20 minutes. (par exemple).

3 - On crée une variable borne_inferieure = 1. On crée ensuite une variable $borne_superieure = $borne_inferieure + $nombre_lignes;

En boucle pour chaque tranche :
4 - On fait une requête du style:

SELECT * FROM table_fille WHERE id_session='$id_visiteur'
AND ordre_session > $borne_inferieure AND ordre_session < $borne_superieure
ORDER BY ordre_session;

5 - On incrémente $borne_inferieure = $borne_superieure + 1; et $borne_superieure += $nombre_lignes;
(ou $borne_superieur=$nombre_lignes; si dépassement).

6 - On crée un lien contenant $id_session du visiteur,$borne_inferieure, $borne_superieure et $nombre_lignes. Retour acte - 5.
(sauf si $borne_inférieure >$nombre_lignes car dernière page)

Contenu de cette section

9. Ressources PHP

Contenu de cette section

9.1 Manuels php

Attention, les traductions en français ne sont parfois pas à jour. En cas de doute, référez-vous toujours à la version en anglais.

http://php.net/ et http://php.net/docs.php (anglais et français) dont la référence rapide : http://www.php.net/quickref.php
Traduction chez Nexen : http://dev.nexen.net/docs/

9.2 Ouvrages "papier"

Programmation web avec PHP (quatre co auteurs)
Editions Eyrolles. 360 pages. http://clauer.free.fr/livrephp.php3
Programmation en PHP par Leon Atkinson
Editions Campus Press. 450 pages, environ 200F.
Remarque : la première édition comporte de nombreuses erreurs de traduction. Une deuxième édition relue par Marc Meurrens est disponible. Voir http://www.cgsa.net/php/campusPress
Professionnal PHP programming(cinq co auteurs)
Editions Wrox. 900 pages, environ 360 F.
Disponible traduit chez Eyrolles.
Pages Web dynamiques avec ASP-PHP-SQL de Jean-Marc Herellier et Philippe Mérigod.
Editions Campus Press.

9.3 Archives du NG fr.comp.lang.php

Les archives de phpindex http://www.phpindex.com/ng/
Dispose aussi des archives de fcas et fciwa
Google : http://groups.google.com/

9.4 Interfacer php et Oracle

php-oracle (FR) : http://callista.free.fr/php_oracle/php_oracle.php3
Rappel : Oracle est téléchargeable sur le Technet Oracle : http://technet.oracle.com/
Si vous avez des erreurs de connexion de type "TNS coud not resolve..." voyez les user notes du manuel php.

9.5 Interfacer php et Sybase

Avec Windows : http://www.jf-lebon.com/sybase/

9.6 Sites en français

phpindex (FR): http://www.phpindex.com/ et en particulier la FAQ de phpindex :
http://www.phpindex.com/faq/
Comment ça marche (FR): http://www.commentcamarche.net/
phpfrance (FR) : http://phpfrance.com/
Site de Christophe Lauer (FR) : http://clauer.free.fr/
ilovephp (FR)(oui, en français!) : http://ilovephp.com/
phpdebutant.org (FR) : http://www.phpdebutant.org/
cgsa / Marc Meurrens : http://www.cgsa.net/
phpinfo(non maintenu): http://www.phpinfo.net/

9.6 Sites en anglais

PKB PHP Knowledge BASE (ENG) mais sections en en français : http://www.faqts.com/knowledge-base/index.phtml/fid/51/
PHP Classes Repository (ENG) : http://www.phpclasses.upperdesign.com/
Darkseed (ENG) : http://www.darkseed.net/main.html
PHP Builder (ENG) : http://phpbuilder.com/
PHP Club (ENG + RU ): http://phpclub.unet.ru/
PHP Wizard (ENG) : http://www.phpwizard.net/
Weberdev (ENG) : http://www.weberdev.com/
Hot Scripts (ENG) : http://www.hotscripts.com/PHP/Scripts_and_Programs/
Site de Hans Anderson (ENG) : http://www.hansanderson.com/php/ Le code d'un moteur de recherche et d'indexation en php y est disponible.

Contenu de cette section

10. Ressources connexes

Contenu de cette section

10.1 Problèmes avec un hébergeur

Avant tout, le support technique de cet hébergeur !!

Amen
Web : http://www.amen.fr/
Contact : http://support.amen.fr/contact/
Support : http://support.amen.fr/

OVH
Web : http://www.ovh.fr/
Contact Technique : tech@ovh.net, hotline@ovh.net
Contact Commercial : ventes@ovh.net
Support : http://www.ovh.fr/faq/

Online
Web : http://www.online.fr/
Contact Technique : support@online.net
Contact Commercial : hebergement@online.net
Support : http://www.online.fr/support/fr/

Free
Web : http://www.free.fr/
Contact : http://www.free.fr/corporate/contact.html
Support : http://support.free.fr/web/

Forez
Web : http://www.forez.com/portail/
Contact : webmestre@forez.com

Nexen :
Web : http://www.nexenservices.com/
Contact : http://www.nexenservices.com/contact/email.php
Support : http://www.nexenservices.com/

En complément :

- certains prestataires disposent de newsgroups privés et autres listes de
diffusion. C'est le cas en particulier de Proxad (Free et Online) avec
news:proxad.online.hebergement (vous devez disposer d'un compte). Ne pas
hésitez à y aller.

- ne pas négliger le fr.reseaux.internet.hebergement souvent plus adapté que
le fclphp (genre coup de gueule, demande de renseignements, etc.). Les
principaux hébergeurs y sont souvent assez actifs.

10.2 Référence HTML

Norme 4.0 du W3C : http://www.w3.org/TR/REC-html40/
All Html (en français) : http://www.allhtml.com/
Papier : HTML Pocket Reference, Jennifer Niederst, ed. O'Reilly

10.3 Problèmes avec du SQL, MySQL, Postgres, Oracle, Sybase, etc...

Le newsgroup qui permettra d'obtenir les réponses pertinentes : news://fr.comp.applications.sgbd/
La documentation MySQL en anglais: http://www.mysql.com/doc.html
La documentation MySQL traduite chez Nexen : http://dev.nexen.net/docs/mysql/annotee/
Le technet Oracle : http://technet.oracle.com/ (inscription gratuite, pas de spam à outrance constaté, Oracle 8i à télécharger gratuitement pour développement sous unix)
Le support Sybase : http://www.sybase.com/support/ (inscription gratuite, pas de spam à outrance constaté)

10.4 Ouvrages "papier"

Oracle Design Dave Ensor and Ian Stevenson ed. O'Reilly
Contrairement à son titre, cet ouvrage est très généralist sur les SGBDR et en particulier traite clairemnt et simplement des Formes Normales de Codd. 500+ pages, env 320F. Ne pas confondre avec sa mise à jour Oracle 8i.

10.5 Problème de configuration Apache, IIS...

Le newsgroup approprié news://fr.comp.infosystemes.www.serveurs/

10.6 Request For Comments

Les RFC (Request For Comment) définissent les protocloes utilisés quotidiennement par nos lecteurs de news et autres navigateurs. Elles sont toutes disponibles sur http://faqs.org/
Des grands classiques :
http : RFC 2616
nntp : RFC 977

Contenu de cette section

11. Génération de graphiques

Contenu de cette section

11.1 GD Lib

Il est possible d'afficher des statistiques sous forme de graphe avec PHP. Intéressez vous pour ceci à la GD LIB.
Il est à noter qu'à cause de problèmes de copyrights et de décalage entre PHP et la GD lib, vous pouvez avoir des problèmes de compilation.
GD Lib : http://www.boutell.com/gd/

Pour vous procurer d'anciennes versions de la GD Lib, avec support des GIFs :
http://rufus.w3.org/linux/RPM/GByName.html

11.2 Bibliothèques

Des bibliothèques s'appyant sur la GD lib :

vh graph : http://www.vhconsultants.com/
JpGraph : http://www.aditus.nu/jpgraph/
Vagrant : http://vagrant.sourceforge.net/

11.3 Redimensionner une image

http://www.php.net/manual/en/function.imagecopyresized.php
Et bien lire les user notes, qui sont (comme souvent) intéressantes, avec beaucoup d'exemples de code, des patches pour l'amélioration de la qualité des thumbnails,etc...
En particulier :
- Vous pouvez recompiler la GD lib ? Du code C et les moyens de patcher sont donnés
- Vous ne pouvez pas patcher la GD lib ? Ce sera moins performant, mais du code 100% PHP est disponible, donné par rze at counter-strike dot net le 11-Jul-2001.

Des exemples de manipulation sur http://clauer.free.fr/resphp.html (au milieu de la page)

Contenu de cette section

12. Bugs php ?

Contenu de cette section

12.1 Comportement bizarre : un bug PHP ?

Quand un script se comporte étrangement, la probabilité la plus forte est que c'est votre script qui se plante, ou que les permissions des fichiers que vous traitez sont mauvaises.
Néanmoins, il y a des bugs (ou des "problèmes résiduels" ((C) A.F. 2000)...) aussi dans PHP, il peut donc être intéressant de les connaître, surtout si vous utilisez une version un peu ancienne de PHP.

La liste officielle des bugs déclarés est disponible sur le site de PHP : http://bugs.php.net/

Contenu de cette section

13. Les concurrents de PHP

Contenu de cette section

13.1 PHP et ASP

Une magnifique tarte à la crème qui mobilise beaucoup d'électrons, l'éternel débat sur "lequel qu'est le mieux ?" a déjà largement fait transité des Mo. Avant de le relancer, vous pouvez consulter :

[Stratégie de développement} Analyse comparative PHP / ASP
en date du 01-08-200 par leylek@onera.fr
ID 4Muh5.3432$_y2.5664889@nnrp5.proxad.net

php versus asp
en date du 02-02-2001 par Théo
ID 95ek7q$2jp$1@nnrp1.deja.com

Php Vs Asp en date du 17-07-2001 par par rage
ID 3B544BC6.49C43EB1@caramail.com

Ces articles sont disponibles sur http://groups.google.com/ et http://www.phpindex.com/ng/ng_index.php3?c=fciwap

Quelques benchs :

http://aldev0.virtualave.net/php-perl-benchmarks.html
http://www.chamas.com/bench/hello_bysystem.html
http://php.weblogs.com/php_vs_asp

Contenu de cette section


[EasyPHP] - Administration

faq_php [EasyPHP] - Administration

");
    print("   ");
    while($start<$lenght){
        $car=substr($word,$start,1);
        print("  ");
        $start++;
    }
    print("    ");
}
?>

What is PHP?

PHP is a widely-used general-purpose scripting language that is
especially suited for Web development and can be embedded into HTML.
If you are new to PHP and want to get some idea of how it works,
try the introductory tutorial (http://www.php.net/tut.php).
After that, check out the online manual (http://www.php.net/docs.php),
and the example archive sites and some of the other resources
available in the links section (http://www.php.net/links.php).

extrait - source : php