PHP, est un langage de script HTML, exécuté coté serveur. L'essentiel de sa syntaxe est emprunté aux langages C, Java et Perl, avec des améliorations spécifiques.
Créé par Rasmus Lerdorf (Apache Group) en 1994 (php = "personal home page", changé ansuite par la communauté Php pour le nom récursif "PHP: Hypertext Preprocessor").
L'objet de ce langage est de permettre aux développeurs web d'écrire des pages dynamiques rapidement.
"open-source system" (code source libre)
Au lieu d'écrire un programme avec de nombreuses lignes de commandes afin d'afficher une page HTML, vous écrivez une page HTML avec du code inclus à l'intérieur afin de réaliser une action précise (dans ce cas là, afficher du texte).
Le code PHP est inclus entre une balise de début et une balise de fin qui permettent au serveur web de passer en "mode PHP".
<html> <head> <title>Exemple</title> </head> <body> <?php echo "Bonjour, je suis un script PHP!"; ?> </body> </html>
<html> <body> <center>Bonjour, nous sommes le : <? $date = date("d-m-Y"); echo "$date"; ?> </center> </body> </html>
Voici le résultat.
La fonction include est pratique pour inclure le contenu d'un fichier dans la page html.
Exemple: pour mettre un copyright en bas de chaque page html, on met le texte désiré dans un fichier texte et on ajoute ensuite le code php suivant dans toutes les pages html.
<? include("copyright.txt"); ?>
Pour afficher la date de dernière modification de la page
Dernière modification le 07/12/2003 à 15h11
on ajoute le code php suivant dans toutes les pages voulues :
<?
echo "Dernière modification le";
echo
date(
"d/m/Y à H\hi",
filemtime(
$_SERVER['PATH_TRANSLATED'] )
);
/* \h permet d'afficher h au lieu de l'heure */
?>
<pre> <? print_r($_SERVER); print_r($GLOBALS); ?> </pre>
Voici les résultats.
<pre> echo $_SERVER['REMOTE_ADDR']; </pre>
<?php if ( expression-booléenne ) { ?> <strong>Ceci est vrai.</strong> <?php } else { ?> <strong>Ceci est faux.</strong> <?php } ?>
<?php echo "Ceci est un test"; // Ceci est un commentaire sur une ligne comme en C++ /* Ceci est un commentaire sur plusieurs lignes, comme en C et C++ */ echo "Ceci est encore un test"; echo "Enfin, le test final"; # Ceci est un commentaire comme en Shell Unix ?>
<?php define('MAX_LIGNES', 5); ?>
if
, switch
, while
, for
et do-while
mêmes qu'en JavaScriptforeach
discutée plus loinTypage dynamique : le type d'une variable n'est pas déclaré par le programmeur.
Il est décidé au moment de l'exécution par le PHP, en fonction du contexte dans lequel la variable est utilisée.
<?php $bool = TRUE; // un booléen $str = "foo"; // une chaîne de caractères $int = 12; // un entier echo gettype($bool); // affiche "boolean" echo gettype($str); // affiche "string" // Ceci est un entier, on l'incrémente de 4 if (is_int($int)) { $int += 4; } // Si $bool est une chaîne, l'afficher // (Ne pas imprimer n'importe quoi) if (is_string($bool)) { echo "Chaine : $bool"; } ?>
Une chaîne peut être spécifiée de trois manières différentes :
<?php $str = <<<EOD Exemple de chaîne sur plusieurs lignes en utilisant la syntaxe Heredoc. EOD; /* Exemple plus complexe, avec des variables. */ class foo { var $foo; var $bar; function foo() { $this->foo = 'Foo'; $this->bar = array('Bar1', 'Bar2', 'Bar3'); } } $foo = new foo(); $nom = 'MonNom'; echo <<<EOT Mon nom est "$nom". J'affiche quelques $foo->foo. Maintenant, j'affiche quelques {$foo->bar[1]}. Et ceci devrait afficher un 'A': \x41 EOT; ?>
Voici les résultats.
Fonctions sur les chaînes
Un tableau PHP est une association ordonnée (littéralement, une map). Une association est un type qui fait correspondre des valeurs à des clés.
Un tableau peut contenir des valeurs de types différents.
Un tableau array peut être créé avec la fonction array.
<?php $arbres = array("chêne", "pin", "larix", "orme"); $arr = array("foo" => "bar", 12 => true); echo $arbres[3]; // orme echo $arr["foo"]; // bar echo $arr[12]; // 1 list($oak, $pine, $larch, $elm) = $arbres; echo $oak; // chêne ?>
<?php $arr = array(5 => 1, 12 => 2); $arr[] = 56; // Ceci revient à $arr[13] = 56; à ce moment du script $arr["x"] = 42; // Ceci ajoute un nouvel élément avec l'index "x" unset($arr[5]); // Ceci efface un élément du tableau if (array_key_exists(5, $arr)) echo "PHP ne marche pas correctement"; echo sizeof($arr); // 3 unset($arr); // Ceci efface tout le tableau ?>
<?php // remplit un tableau avec les noms de fichiers d'un dossier $handle = opendir('.'); while ( $file = readdir($handle) ){ $files[] = $file; } closedir($handle); sort($files); print_r($files); ?>
$str = "orange,pomme,poire,raisin,citron"; $fruits = explode(",", $str); // un tableau de 5 éléments $str = implode(" ", $fruits); // "orange pomme poire raisin citron"
<?php $couleurs = array('rouge','bleu','vert','jaune'); foreach ( $couleurs as $couleur ){ echo "Aimez-vous la couleur $couleur?\n"; } /* Affiche : Aimez-vous la couleur rouge? Aimez-vous la couleur bleu? Aimez-vous la couleur vert? Aimez-vous la couleur jaune? */ ?>
<?php foreach( $couleurs as $cle => $couleur ){ // ne marche pas //$couleur = strtoupper($couleur); //marche : $couleurs[$cle] = strtoupper($couleur); } print_r($couleurs); /* Affiche : Array ( [0] => ROUGE [1] => BLEU [2] => VERT [3] => JAUNE ) */ ?>
<?php function f($i){ $i = 99; } function g(&$i){ $i = 99; } $i = 77; f($i); echo $i; // 77 g($i); echo $i; // 99 ?>
<?php function servir_cafe($types = array("cappuccino"), $coffeeMaker = NULL){ $device = is_null($coffeeMaker) ? "les mains" : $coffeeMaker; return "Préparation d'une tasse de ".join(", ", $types)." avec $device.\n"; } echo servir_cafe(); echo servir_cafe(array("cappuccino", "lavazza"), "une cafetière"); ?>
<?php $total = 0; function ajouter($i){ $total += $i; } ajouter(77); echo $total; // 0 ?>Pour avoir l'accès à une variable déclarée à l'extérieur de la fonction, on utilise la directive
global
.
<?php $total = 0; function ajouter($i){ global $total; $total += $i; } ajouter(77); echo $total; // 77 ?>
<?php function ajouter($i){ static $total; $total += $i; return $total; } echo ajouter(10); echo ajouter(20); ?>
<?php class A { var $v; function f() { echo "f"; } } class B extends A { function g(){ echo "g"; } } $aa = new A; $aa->f(); A::f(); $bb = new B; $bb->g(); $bb->f(); ?>
Ce premier exemple affiche la structure de l'élément de début dans un document avec indentation.
<?php $file = "donnees.xml"; function debutElement($parser, $name, $attrs) { print "$name\n"; } function finElement($parser, $name) { } $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "debutElement", "finElement"); if (!($fp = fopen($file, "r"))) { die("Impossible d'ouvrir le fichier XML"); } while ($data = fread($fp, 4096)) { if (!xml_parse($xml_parser, $data, feof($fp))) { die(sprintf("erreur XML : %s à la ligne %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } xml_parser_free($xml_parser); ?>
Cet exemple remplace les balises XML d'un document par des balises HTML. Les éléments inconnus seront ignorés. Bien entendu, cet exemple sera appliqué à un type précis de fichiers XML.
<?php $file = "data.xml"; $map_array = array( "BOLD" => "B", "EMPHASIS" => "I", "LITERAL" => "TT" ); function startElement($parser, $name, $attrs) { global $map_array; if ($htmltag = $map_array[$name]) { print "<$htmltag>"; } } function endElement($parser, $name) { global $map_array; if ($htmltag = $map_array[$name]) { print "</$htmltag>"; } } function characterData($parser, $data) { print $data; } $xml_parser = xml_parser_create(); // Utilisons la gestion de casse, de manière à être sur de trouver la balise dans $map_array xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true); xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_character_data_handler($xml_parser, "characterData"); if (!($fp = fopen($file, "r"))) { die("Impossible de trouver le fichier XML"); } while ($data = fread($fp, 4096)) { if (!xml_parse($xml_parser, $data, feof($fp))) { die(sprintf("erreur XML : %s à la ligne %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } xml_parser_free($xml_parser); ?>
Lorsqu'un formulaire est envoyé à un script PHP, toutes les variables du formulaire seront automatiquement disponibles dans le script.
Considérons le formulaire suivant :
<form action="http://w4.uqo.ca/iglewski/ens/inf4533/src/serveur/exemples/postVars.php" method="post"> Name: <input type="text" name="username"><br> Email: <input type="text" name="email"><br> <input type="submit" name="submit" value="Submit me!"> </form>
Le fichier postVars.php est comme suit :
<?php echo '$_POST='; print_r($_POST); echo "\n"; echo '$_REQUEST='; print_r($_REQUEST); echo "\n"; import_request_variables('p', 'p_'); echo '$p_username='; print_r($p_username); echo "\n"; echo '$HTTP_POST_VARS='; print_r($HTTP_POST_VARS); ?>
Soumettons!
Utilisation d'un formulaire de type GET est similaire, hormis le fait que nous utilisons les variables prédéfinies du GET à la place.
GET s'applique aussi à la QUERY_STRING (les informations disponibles après le '?' dans une URL).
Pour se diriger vers un autre document php, utilisez la fonction suivante :
function redirect( $url ){ if ( ! headers_sent() ){ header ( "Location: $url" ); exit; } else echo "\n<meta http-equiv='refresh' "."content='0;URL=".$url."'>\n"; exit; }
setcookie ("Journaldunet", "oui", time()+3600*24*30, "/", ".journaldunet.com",0);
Les arguments de la fonction spécifient :
Les valeurs des cookies valides et disponibles sont automatiquement stockées dans le tableau $HTTP_COOKIE_VARS. Selon la configuration de votre serveur, elles sont également stockées dans la variable correspondant au nom du cookie. Ainsi, on affichera cette valeur soit par :
echo $Journaldunet;
soit, de manière plus rigoureuse, par:
echo $HTTP_COOKIE_VARS[ "Journaldunet"];
Il est très simple, là encore, de supprimer un cookie, par exemple en cas de déconnexion d'une session par l'utilisateur: la méthode consiste à renvoyer un cookie avec, pour seul argument à la fonction setcookie(), le nom du cookie à supprimer.
Si vous souhaitez assigner plusieurs valeurs à un seul cookie, il vous faut ajouter les caractères [] au nom de votre cookie. Par exemple : Utilisation de tableaux avec les cookies
<?php setcookie ("MonCookie[]", "test", time()+3600); ?>
Il est à noter qu'un cookie remplace le cookie précédent par un cookie de même nom tant que le "path" ou le domaine sont identiques. Donc, pour une application de caddie, vous devez implémenter un compteur et l'incrémenter au fur et à mesure. C'est-à-dire :
<?php $compte++; SetCookie ("Compte", $compte, time()+3600); SetCookie ("Caddie[$compte]", $item, time()+3600); ?>
<?php //cookie_test.php if ($HTTP_POST_VARS['sel_type']) setcookie ("police[type]", $HTTP_POST_VARS['sel_type'], time()+3600); if ($HTTP_POST_VARS['sel_taille']) setcookie ("police[taille]", $HTTP_POST_VARS['sel_taille'], time()+3600); $type = array("arial", "helvetica", "sans-serif", "courier"); $taille = array("1","2","3","4","5","6","7"); echo "<HTML><HEAD><TITLE>Cookie Test</TITLE></HEAD><BODY><DIV ALIGN = 'center'>"; //phpinfo(INFO_VARIABLES); echo "<FORM METHOD=POST>"; echo "Quel type de police désirez-vous utiliser? "; echo "<SELECT NAME='sel_type'>"; echo "<OPTION SELECTED VALUE=''>default</OPTION>"; foreach ($type as $var) echo "<OPTION>$var</OPTION>"; echo "</SELECT><BR><BR>"; echo "Quelle taille de police désirez-vous utiliser? "; echo "<SELECT NAME='sel_taille'>"; echo "<OPTION SELECTED VALUE=''>default</OPTION>"; foreach ($taille as $var) echo "<OPTION>$var</OPTION>"; echo "</SELECT><BR><BR>"; echo "<INPUT TYPE=SUBMIT>"; echo "</FORM>"; echo "<B>Vos cookies disent :</B><BR>"; echo "<FONT "; if ($_COOKIE['police']['type']) echo "FACE=$_COOKIE['police']['type'] "; if ($_COOKIE['police']['taille']) echo "SIZE=".$_COOKIE['police']['taille'].' '; echo ">"; echo "\$police[type] = ".$_COOKIE['police']['type']."<BR>"; echo "\$police[taille] = ".$_COOKIE['police']['taille']."<BR>"; echo "</FONT><BR>"; echo "<B>Vos variables de formulaire disent :</B><BR>"; echo "<FONT "; if ($HTTP_POST_VARS['sel_type']) echo "FACE=".$HTTP_POST_VARS['sel_type'].' '; if ($HTTP_POST_VARS['sel_taille']) echo "SIZE=".$HTTP_POST_VARS['sel_taille'].' '; echo ">"; echo "\$sel_type = ".$HTTP_POST_VARS['sel_type']."<BR>"; echo "\$sel_taille = ".$HTTP_POST_VARS['sel_taille']."<BR>"; echo "</FONT>"; echo "</DIV></BODY></HTML>"; ?>
Voir les résultats.
<?php session_start(); var_dump($_SESSION); if (!isSet($_SESSION["nombre_pages"])) $_SESSION["nombre_pages"] = 0; $nombre_pages = $_SESSION["nombre_pages"]; $_SESSION["nombre_pages"]++; print("<br/>Vous avez visité $nombre_pages page(s) <br/>"); ?>
Voir les résultats.