Technologies internet


PHP


Voir:

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)


La différence avec les autres scripts CGI

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".

Exemple d'introduction

<html>
  <head>
    <title>Exemple</title>
  </head>
  <body>
    <?php
    echo "Bonjour, je suis un script PHP!";
    ?>
  </body>
</html>

Exemples

Afficher la date du jour

<html>
<body>
<center>Bonjour, nous sommes le :
<?
$date = date("d-m-Y");
echo "$date";
?>
</center>
</body>
</html>

Voici le résultat.

Inclure le contenu d'un fichier das une page html

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"); ?>

Date de dernière modification

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 */
?>

Variables prédéfinies

<pre>
<?
  print_r($_SERVER);
  print_r($GLOBALS);
?>
</pre>

Voici les résultats.

Récupérer son adresse IP

<pre>
  echo $_SERVER['REMOTE_ADDR'];
</pre>

Résultats

Que peut faire PHP?

Quelques détails syntaxiques

On peut "mixer" du HTML à l'intérieur d'une instruction PHP

<?php
  if ( expression-booléenne ) {
?>
  <strong>Ceci est vrai.</strong>
<?php
  } else {
?>
<strong>Ceci est faux.</strong>
<?php
  }
?>

PHP supporte les commentaires comme en C, C++ et Shell Unix

<?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
?>

Variables

Instructions

Types

Types supportés

Typage 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";
}
?>

Les chaînes de caractères

Une chaîne peut être spécifiée de trois manières différentes :

Fonctions sur les chaînes

Les tableaux

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.

Créer un tableau array

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
?>

Modifier un tableau

<?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
?>

Fonctions sur les tableaux

<?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"

Parcours d'un tableau

<?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
)
*/
?>

Fonctions

Les objets

<?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();
?>

Ressources

Analyseur syntaxique XML

Exemple 1. Afficher une structure XML

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);
?>

Exemple 2. Transtypage XML -> HTML

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);
?>

Formulaires HTML

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);
?>

Nom:     
Courriel:

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;
}

Cookies HTTP

Caractéristiques

Créer un cookie en PHP

setcookie ("Journaldunet", "oui", time()+3600*24*30, "/", ".journaldunet.com",0);

Les arguments de la fonction spécifient :

Récupération de la valeur des cookies

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"];

Suppression d'un cookie

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);
?>

Exemple

<?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.

Variables de session

<?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.