next_inactive up previous

Introduction a php3

Bruno Böttcher
Copyright (C) 1999 Bruno Böttcher
bboett@earthling.net
http://erm6.u-strasbg.fr/~bboett
ce texte est inspiré de celui d'Olivier Martineau
sur le site http://www.cigogne.net/php/


Contents

Introduction

Avec la naissance du world wide web est apparu un réseau d'informations reliées entre elles par ce qu'on appelera des liens hyper-texte, qui permettent de passer d'un document à l'autre, réalisant à l'échelle mondiale ce que réalisaient déjà d'autres systèmes hypertexte, de l'époque.

Alors que la première vocation de ce système était de mettre à disposition de manière aisée et d'un accès rapide des documentations et travaux scientifiques, ce système c'est très vite vu étendu à des contenus plus ludiques, incluant à part du texte, des graphiques et maintenant même des programmes exécutables entiers.

Alors que le contenu de ces premières pages web était statique, de nos jours de plus en plus souvent on présente à travers des pages web des contenus dynamiques, ce qui veut dire qu'entre deux chargememnts d'une même page les informations figurant dessus auront changé.

Une des premières applications de ce genre furent les compteurs d'accès. Pour que cela puisse fonctionner, le standard des CGI (Common Gateway Interface) fut inventé. Ce standard permet à des pages web d'appeler un programme exterieur au serveur pour faire des traitements spécifiques. À l'appel des paramêtres peuvent être passés, la sortie du programme constituant la nouvelle page que l'utilisateur verra.

Après les CGI apparurent les langages de scripte comme le javascript, dont le code source du programme est transmis dans la page web, enfermé dans des tags spéciaux, et qui sera (éventuellement) executé dans le browser de l'utilisateur.

Et enfin, le serveur web le plus populaire apache implémenta ce qu'on appelera des modules. Il s'agit la d'extensions (dynamiques) du serveur, qui implémentent comme les CGI des fonctionalités externes aux devoirs normaux d'un serveur web, mais qui s'executent à l'interieur même du serveur web. Une des applications de ces modules est l'incorporation au serveur web d'un parseur de langage scripte appelé PHP.

PHP est un langage de programmation qui s'inclut dans le code HTML pour effectuer certaines opérations qui peuvent aller d'insérer la date du jour à retrouver une information dans une base de donnés.

Dans cet article on essayera d'expliquer les avantages du PHP par rapport aux autres possibilités, ainsi qu'une petite présentation des possibilités de ce langage.


Les CGI

De nos jours les CGI peuvent être implémentés dans la pluspart des langues de programmation ou de scriptage, le perl étant un langage de prédilection dans ce type d'application au vu de sa puissance concernant la manipulation de textes.

Le problème des CGI réside dans le fait qu'il s'agit d'un programme externe, donc qui à tous les droits conférés à un programme lancé par un utilisateur. Ce qui explique la résurgence systématique de problèmes de trous de sécurité ouverts par des CGI mal écrits, ou mal protégés. De plus pour chaque appel à un CGI le serveur lance un processus externe, ce qui peut avoir un impact certain sur le temps de réponse du serveur dépendant de la charge, car le serveur se bloque du moins en partie attendant la réponse du CGI, le CGI doit d'abord lancer une machine virtuelle qui permettra de s'exécuter ainsi que le fait que tous le systèmes ont un nombre maximal de processus qui peuvent tourner en même temps, même si c'est une limite pratique.

Les avantages sont que l'on peut programmer dans la langue de programmation que l'on veut, que l'on à accès au système au même titre qu'un utilisateur normal, et que ce programme est indépendant, et devrait fonctionner avec n'importe quel serveur web.


Le javascript

Le javascript à le gros avantage d'être executé par le browser du client, donc de décharger le serveur, par contre beaucoup de fonctionalitées proposées de nos jours nécessitent des données séjournant sur le serveur ou en règle générale nécessitent une connexion avec le serveur. Donc le javascript servira surtout à présenter de manière plus agréable les contenus souhaités et pourra implémenter des actions qui ne nécessitent que peu d'interaction avec le serveur. Le gros désavantage de ce système réside dans le fait qu'il à besoin d'être supporté par le browser, or bon nombre de browsers ne supportent pas les fonctionalités javascript.

De plus bon nombre d'utilisateurs ont dévalidé l'option javascript de leur browser de peur des trous de sécurités inhérents à ce système. Donc en utilisant ce genre de système l'on cible qu'une partie des utilisateurs du web, autant ne pas implémenter des fonctions vitales avec ce système.


Le PHP

Le PHP est un langage qui à été spécialement développé en vue de la création de CGI et de pages dynamiques. Son apprentisage est devenu très rapide, car la syntaxe s'apparente du langage C.

De plus du fait que le code PHP est noyé dans le code HTML des pages même, la maintenance en est fortement aisée.

Du fait qu'entretemps l'interpretateur PHP existe aussi en tant que module apache, le temps d'appel de cet interpretateur est très court, et le temps de réponse est déterminé par la quantité de code PHP contenu dans la page. Ainsi un page marquée en tant que page PHP, mais ne contenant pas de code PHPsera servie aussi rapidement qu'une page statique d'html.

Comme pour le CGI aucune partie du code source ayant servi à générer la page délivrée ne sera visible pour l'utilisateur, celui-ci recevant du HTML pur, que tous les browsers pourront essayer de parser.

Les mécanismes de sécurité du serveur web apache se branchent autour de l'execution du scripte, limitant ainsi les trous de sécurité.


Installation de PHP

Logiciels nécessaires

L'installation est dans la pluspart des cas très simple. Dans le cas d'une distribution linux, il suffit de valider dans le gestionnaire des paquetages:

Configuration d'Apache pour prendre en compte PHP

Pour que le serveur apache fonctionne comme l'on désire il faudra peut être modifier ses fichiers de configuration souvent localisés dans /etc/httpd/conf/.

httpd.conf Rajouter ou décommenter la ligne LoadModule PHP_module modules/libPHP.so AddModule mod_PHP.c

srm.conf Rajouter ou décommenter les lignes

Et redémarrer Apache, soit à la main (déconseillé) avec apachectl restart, soit en utilisant le script de démarrage de votre distribution (p.ex. /etc/init.d/apache restart.


Exemple simple de code PHP


Un minimum de syntaxe

Il est fortement conseillé d'avoir à proximité un serveur web (comme http://www.php.net/manual/) avec le manuel, ou de s'en faire une copie local ou papier.

Séparer le code PHP du HTML

Le code PHP est intégré au html entre des balises (tags) spécifiques. Il en existe plusieurs formes mais elles ont la même fonction :

La base du langage

Comme en perl, les variables sont non-typées et peuvent être déclarées à n'importe quel moment, leur nom commence forcément par un $. Les variables soumises par des pages web sous forme de requètes GET ou POST (resultats de formulaires web, p.ex.) sont mises à disposition du script sous le nom du champ du formulaire, sans que le développeur ait à extraire les variables lui même de la requète.

Ce qu'il faut toujours tenir en mémoire, c'est que les variables sont déclarées et valides dans le cadre d'une page (inclusions comprises, voir 6.3), mais jamais (sauf si on les propage avec des mécanismes HTML, ou autres) entre pages.

Dans les exemples de code qui suivent, parfois des procedures sont utilisés qui viennent directement du système de base PHP (comme count, ereg etc.) se reférer au manuel (A) pour un complément d'information.

Les assignements se font comme dans la pluspart des langages:

$done = "true";

pour changer une matrice:

$estDecideur = array( array(0, "Autre", 204, 204 ,0), array(0, "Oui", 190, 0 ,0), array(0, "Non", 0, 190 ,0) );

Les tests et les boucles sont comme en C , a savoir que tous les blocs (donc des parties de code entre des parenthèses) peuvent à tout moment être coupées par le tag de fin de scripte pour continuer en HTML, quitte à refaire du PHP plus tard.

Donc,

<?
   //on utilise une fonction base de php, compter le nombre d'élements
   //d'un vecteur
   $n = count($laProfession);
   for ($i = 0; $i < $n; $i++)
   {
     echo "<OPTION WIDTH=\"80%\"  BGCOLOR=\"white\"";
     $actProf = $laProfession[$i];
     if ($entrep == $actProf[1]) { echo "selected"; }
     echo " value=\"$actProf[1]\"> $actProf[1]\n";
   }/* for ($i = 0; $i */
?>

et

<?
   $n = count($laProfession);
   for ($i = 0; $i < $n; $i++)
   { 
?>
<OPTION WIDTH="80%"  BGCOLOR="white"
<?
     $actProf = $laProfession[$i];
     if ($entrep == $actProf[1]) { echo "selected"; }
     echo " value=\"$actProf[1]\"> $actProf[1]\n";
   }/* for ($i = 0; $i */
?>

sont équivalents.


Les fonctions

Les fonctions sont déclarées de la manière suivante:

 function compact($texte)
 {
   //ereg_replace est une fonciton php, qui remplace les occurences d'une
   //chaine de caractères par une autre au sein d'une chaine de caractères
   $texte = ereg_replace(" ","",$texte);
   return $texte;
 }

et ensuite son utilisation:

$name = compact($name);


Inclure de fichiers

Très vite l'on se rend compte que l'on utilise de parties de code identique un peu partout, d'ou l'intérêt de faire des sortes de librairies qui seront incluses aux bon endroits sans devoir dupliquer le code (p.ex. <? include "phpLib.php";?>)


Utilisation de fonctionalités externes, p.ex. accèder à une base de données

Le cas des bases de données est un peu plus compliqué, car comme dans la pluspart des cas, les requètes bien que standardisées par un standard tel que SQL, sont différentes d'une base de données à une autre. Les développeurs de ces bases de données mettent donc à disposition des bibliotheques pour accèder à leur base, ces librairies, il faut les inclure avant de faire des requètes.

La commande d'inclusion d'une biblotheque est dl. Voyons par exemple comment accèder à une base de données de type postgresSQL:

   //chargement dynamique des fonctions d'accès à une base de données de type
   //postgresSQL
   dl("pgsql.so");
   //obtenir une connexion vers la base
   $connection=pg_Connect("localhost","5432","","","visiteurs");

   if (!$connection)
   {
        echo "Could not open database visiteurs !\n";
        echo "Please contact the system administrator !\n";
        exit;
    };
   //obtenir des données de la base
   $result = pg_exec($connection,"select * from liste where name='$name'");
   if (!$result)
   {
        echo "Could not execute SQL-query ! \n";
        exit;
    };
   //derminer le nombre de résultats
   $num=pg_NumRows($result);
   if ($num>0)
   {
     //les afficher
     include "list.php";
   }

et dans list.php:

while ($counter<$num)
{
  $usage=pg_Result($result,$counter,"usage");
  echo "<P>$usage";
}

Par rapport à d'autres langues de programmation l'on voit que l'accès à la base est très simple et direct.


Gérer de fichiers

Juste dans un souci de montrer les applications les plus courantes, ouverture, écriture et fermeture d'un fichier:

  $name="afile";
  $file=fopen($name,"r+");
  $number=fread($file,filesize($name))+0;
  //revenir au début du fichier, pour écraser ce qu'il y a avait
  rewind($file);
  $number=$number+1;
  fwrite($file,$number);
  fclose($file);


Le petit exemple

Après avoir montré des bouts de code peut être quelquepeu compliqués, un exemple tout simple. Ce bout de code va simplement utiliser une fonction de la bibliotheque PHP standard appelé strftime, qui affiche la date selon la mode de la localisation, pour cela la localisation va être définie comme étant française:

<HTML>
<HEAD><TITLE>Petit exercice de {\sc PHP}</TITLE>
</HEAD>
<BODY>
<H1 ALIGN=center>Quelle est la date? </H1>
<P>
La date est 
<?
 setlocale ("LC_TIME", "fr");
 print(strftime("%x\n"));
?>
<P> ou avec un autre formatage:
<?
 print(strftime("%d/%m/%Y\n"));
?>
</BODY>               
</HTML>

Conclusion

Ce fut un tour rapide dans PHP, il y a encore beaucoup de procedures dans la distribution de base de PHP que l'on pourrait présenter, sans parler de toutes les adjonctions qui peuvent être trouvées sur le réseau, mises à disposition par des particuliers ou des entreprises commerciales.

Les sites de php et de code-exchange sont des bons endroits pour trouver des fonctionalités que l'on recherche, je ne peux que conseiller d'y faire un tour.


Liens/Références HTML intéressants


Site PHP http:/www.php.net/
Son miroir français http://fr.php.net/
Le manuel PHP http:/www.php.net/manual
Tutorial php + postgres http://www.networkcomputing.com/unixworld/ tutorial/018.html
Exemples de code (Berber's PHP Example page) http://php.netvision.net.il/examples/
PHP Code Exchange http://px.sklar.com/
Archive de la mailing list PHP http://www.progressive-comp.com/Lists/?l=php-general#php-general
Une autre introduction à PHP, avec des aides concernant la distribution linux redhat olivier@cigogne.net http://www.cigogne.net/

About this document ...

Introduction a php3

This document was generated using the LaTeX2HTML translator Version 2K.1beta (1.48)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2html php.tex

The translation was initiated by Bruno Boettcher on 2003-09-29


next_inactive up previous
Bruno Boettcher
2003-09-29