Introduction
-
PHP est un langage de script qui permet de créer des pages Web dynamiques
-
Ces pages sont des pages HTML classiques, mais qui peuvent contenir du
code PHP
<HTML>
<HEAD>
<TITLE>Test de l'outil PHP</TITLE>
</HEAD>
<BODY>
<?php echo "Salut les amis !"; ?>
</BODY>
</HTML>
Syntaxe du langage assez semblable à celle du langage C, avec des
emprunts à Perl et à Java
Généralités
-
Les pages contenant des ordres PHP se terminent par .php3
-
Pour debugger : les fichiers .phps
sont affichables en couleur (syntax hilighting)
-
Les ordres PHP sont interprétés par le serveur
-
PHP peut être installé comme module par Apache et Microsoft
Internet Information Server, soit 90% des serveurs du marché. Solution
la plus performante.
-
PHP peut aussi être installé dans n'importe quel serveur Web
sous la forme d'un programme CGI. Dans ce cas toutes les pages contenant
des ordres PHP devront être passée en paramètre à
l'interprète PHP situé dans le répertoire /cgi-bin
du serveur.
-
Outil gratuit, OpenSource, livré en standard avec la distribution
Red Hat Linux
-
Concurrent de l'outil ASP de Microsoft, il existe même des convertisseurs
ASP vers PHP
-
En Juin 1998, 150.000 sites Web utilisaient des pages PHP (sources Netcraft)
Traitement des formulaires HTML
-
Adieu les CGIs ! Récupèrer les paramètres d'un formulaire
HTML est enfantin !
<FORM ACTION="TraiteFormulaire.php3" METHOD="POST">
Votre nom : <INPUT TYPE=TEXT NAME=nom>
Votre age : <INPUT TYPE=TEXT NAME=age>
<INPUT TYPE=SUBMIT NAME="Ok">
</FORM>
Lorsque on clique sur le bouton Ok de la page Web contenant le formulaire
précédent, la page TraiteFormulaire.php3
est appelée. Cette dernière contient des ordres PHP :
...
Bonjour <?php echo $nom; ?>, <P>
vous avez bien <?php echo $age; ?> ans <BR>
cette année ?
...
Interfaçage avec une base de données
-
Interfaçage avec une base de données hyper simple ! Le point
fort de PHP.
-
Supporte indifféremment Oracle, Sybase, mSql, MySQL, Solid, PostgresSQL,
dBase, Informix, dbm, etc... en mode natif
-
Supporte également l'accès à toutes les BD qui proposent
un pont ODBC
-
Moyen le plus simple (à part Java/JDBC) d'attaquer une BD Microsoft
depuis Linux/Unix
Exemple d'utilisation avec MySQL
...
mysql_connect($hostname, $username, $password) or die("Connexion impossible");
@mysql_select_db("$dbName") or die("Impossible d'accèder à la base $dbName");
$query = "SELECT * FROM $usertable WHERE (annee LIKE 'ESSI3');
$result = mysql_query($query);
$number = mysql_numrows($result);
i = 0;
if ($number == 0) {
print "<CENTER><P>Il n'y a aucun élève en ESSI3!</CENTER>";
elseif ($number > 0) {
$nom = mysql_result($result, $i, "nom");
$email = mysql_result($result, $i, "email");
print "Nom = $nom, email = $email<BR>";
i++;
}
...
Authentification HTTP
<?php
if(!isset($PHP_AUTH_USER)) {
Header("WWW-Authenticate: Basic realm=\"My Realm\"");
Header("HTTP/1.0 401 Unauthorized");
echo "Texte affiché si l'utilisateur appuie sur le bouton Cancel";
exit;
} else {
echo "Bonjour $PHP_AUTH_USER.<P>";
echo "Vous avez un mot de passe égal à $PHP_AUTH_PW.<P>";
}
?>
Téléchargement de fichier avec PHP
-
Soit le formulaire HTML suivant :
<FORM ENCTYPE="multipart/form-data" ACTION="PageTraiteUpload.php3" METHOD=POST>
<INPUT TYPE="HIDDEN" name="MAX_FILE_SIZE" VALUE="1000">
Fichier à envoyer : <INPUT NAME="NomFichier" TYPE="FILE">
<INPUT TYPE="SUBMIT" VALUE="Uploader le fichier choisi">
</FORM>
Ce formulaire propose à l'utilisateur de séléctionner
un fichier qu'il désire uploader sur un site. La page PageTraiteUpload.php3
va se charger du travail
Script de téléchargement
<?php
echo "Nom du fichier temporaire où se trouve le fichier côté serveur : $NomFichier<P>";
echo "Nom original du fichier côté client : $NomFichier_name<P>";
echo "Taille du fichier uploadé : $NomFichier_size<P>";
echo "Type MIME du fichier reçu : $NomFichier_type<P>";
/* Copie du fichier stocké dans le répertoire temporaire vers sa destination */
copy($NomFichier, "/u/I3S/buffa/uploads/$NomFichier_name");
?>
En effet le fichier uploadé arrive dans le
répertoire temporaire du serveur...
Support pour les cookies
-
Voir http://www.netscape.com/newsref/std/cookie_spec.html
pour tout savoir sur les cookies !
-
Une page peut installer un cookie par appel à
la fonction SetCookie() avant qu'elle n'affiche quelque
chose sur la sortie standard (les cookies sont dans le HEADER http)
SetCookie("TestCookie", "Test Value");
SetCookie("TestCookie", $value, time()+3600); /* expire dans une heure */
Un cookie envoyé par le client sera récupéré
sous la forme d'une variable dans la page Web
echo $TestCookie;
Manipulation d'expressions régulières
-
Puissantes fonctions de manipulation des expressions
régulières (norme POSIX) : ereg, ereg_replace, eregi, eregi_replace,
split
ereg("abc", $string); /* vrai si $string contient abc */
ereg("^abc", $string); /* vrai si abc au début de $string */
ereg("abc$", $string); /* vrai si abc à la fin de $string */
eregi("(ozilla.[23]|MSIE.3)", $HTTP_USER_AGENT); /* Vrai si le navigateur utilisé est
Netscape 2 ou 3, ou MSIE 3 */
ereg_replace("^", "<BR>", $string); /* insère <BR> au début de $string */
...
Structures de base (1)
-
Basé sur des expressions, non typé
function double($i) {
return $i * 2;
}
$b = $a = 5;
$c = $a++;
$e = $d = ++$b;
$f = double($d++);
$g = double($++e);
$h = $g += 10;
Structures de base (2)
-
if..then..else, do..while, for, while, switch
ressemblent à ceux du C, à part que les variables sont non
typées
for($i = 0; $i < 10; $i++) {
echo $i;
}
ordres include, require pour insèrer
du code situé dans un fichier externe :
include('fonctions.inc');
Fonctions (1)
function foo($arg1, $arg2, ... $argn) {
echo "Exemple de fonction";
return $valeur_retour;
}
Fonctions (2)
-
Fonctions possèdant une liste d'aguments (liste
d'objets séparés par le caractère '.'), passage de
paramètres par valeur, par référence
// Passage de paramètres par référence
function foo2(&$arg) {
$arg .= " et voici la fin de la phrase...";
}
// Passage de paramètres par valeur
function foo3($arg) {
$arg .= " et voici la fin de la phrase...";
}
$str = "Ceci est le début de la phrase";
foo3($str);
echo $str; // Affiche "Ceci est le début de la phrase"
foo2($str);
echo $str; // Affiche "Ceci est le début de la phrase et voici la fin de la phrase"
PHP orienté objet ???
-
Une classe est une collection de variable et de fonctions,
un peu comme dans les langages par objets
<?php
class caddie {
var $item; // tableau des item que l'on a dans le caddie
// Ajoute $num articles de type $article_number au caddie
function add_item($article_number, $num) {
$this->items[$article_number] += $num;
}
}
?>
$monCaddie = new caddie;
$monCaddie->add_item("14", 2); // Ajoute deux articles de type 14 à mon caddie
Fonctions prédéfinies (1)
API incroyablement riche !!!! (527 pages le référence
manual). On distingue plusieurs groupes de fonctions prédéfinies
-
Fonctions de manipulation de chaînes de caractères
: AddSlashes, Chop, crypt, explode, htmlspecialchars, htmlentities, QuoteMetan
rawurldecode, print, printf, sprintf, etc... 50 fonctions !
-
Fonctions de manipulation de variables : gettype,
is_array, is_double, empty, doubleval, etc...
-
Fonctions de manipulation de tableaux et listes :
array, array_walk, key, list, key, ksort, asort...
-
Fonctions de manipulation de dates, heures, calendriers
: date, checkdate, gmdate, getdate, time, etc... API très riche
!
-
Fonctions mathématiques : sin, cos, sqr, sqrt,
number_format
-
Fonctions de gestion des expressions régulières
: ereg, eregi, ereg_replace, eregi_replace, split
Fonctions prédéfinies (2)
-
Fonctions de gestion des URLs : parse_url, urldecode,
urlencode, etc...
-
Les fonctions spécifiques au serveur Apache
: apache_lookup_uri, etc...
-
Fonctions de manipulation de fichiers et répertoires
: dir, chdir, opendir, etc... copy, rename, chmod, chgrp, fopen, fclose,
fgetc, fgets...
-
Fonctions de gestion de processus externes : system,
exec, etc...
-
Fonctions relatives aux Bases de Données.
Classées par type de BD supportée : dBase, dbm, MiniSQL,
MySQL, Oracle... plus ODBC
-
Fonctions HTTP : setcookie, header
Fonctions prédéfinies (3)
-
Fonctions de gestion/manipulation/génération
d'images : ImageCreate, ImageColorTransparent, etc... API très riche.
Possibilité de générer des boutons au vol avec surimpression
de texte, etc...
-
Fonctions mail : mail pour envoyer un mail plus gestion
complète du protocole IMAP, API de 50 fonctions...
-
Fonctions propres à PHP et à sa configuration
: error_log, get_cfg_var, get_current_user, phpinfo, etc...
-
Fonctions diverses : eval, exit, serialize, unserialize,
sleep, etc...
-
Fonctions réseau : fsockopen, gethostbyaddr,
gethostbyname, etc...
-
Fonctions de support pourle format PDF : génération
de fichiers PDF au vol : PDF_open, PDF_close, PDF_end_page, etc.. 60 fonctions
!
-
Fonctions de gestion du protocole SNMP
-
Fonctions de compression/decompression : support
pour gzip : gzope, gzread, etc...
-
Fonctions de support pour le langage XML : le parsing
est implemente, mais pas la validation...