Aide Memoire PHP
Aide Memoire PHP
Aide Memoire PHP
1. Introduction
PHP (Personal Home Page) ou (HyperText Preprocessor): Langage de script incorporé dans du HTML,
s'exécutant coté serveur, soit comme CGI, soit comme un module (+ rapide).
Langage interprété, Expressions régulières riches, Conversions automatiques, Déclarations optionnelles et non
typées, Fin de ligne (;) obligatoires, Fonctions natives pour accéder aux SGBD (MySQL, Oracle, PostgreSQL,
ODBC, ...). Connexions persistantes (à fermer !);
Variables préfixées par le symbole: $
Syntaxe fonctionnelle: fopen("/home/toto/file.txt","r");
PHP est un logiciel libre.
Possibilité de télécharger des fichiers depuis le client (upload).
Extensions (librairies dynamiques) : gd (graphique), analyseur XML, ...
Gestion des identificateurs de sessions par cookie ou par URL longue(PHP4)
3. Développement
3.1 Généralités
Commentaires par: /* ... */ ou // ... ou # jusqu'à fin de la ligne
A ne pas confondre avec les commentaires HTML <!-- Commentaire html -->
Edition du fichier source toto.php puis interprétation au niveau du serveur http.
Exécution sur la ligne de commande du serveur: php -toto.php
Débogage manuel, par exemple:
$DEBUG=1; //débogage activé dans le script
function debug($msg){if($_GLOBALS['DEBUG']) echo $msg,<br>"\n";}
debug("ligne".__LINE__ ." x= ".$x); //appel
$PHP_SELF nom du fichier PHP en cours d'exécution; également accessible via $_SERVER["PHP_SELF"].
Un certain nombre de variables prédéfinies sont des tableaux super globaux:
par exemple, $_SERVER["REQUEST_METHOD"] indique la méthode utilisée (GET ou POST ou ...);
$_REQUEST variables de tous les tableaux précédents avec la priorité définie par la directive de configuration
variables_order qui vaut habituellement EGPCS (GET, POST, Cookie, Environment, Server);
Nom Description
$GLOBALS Contient toutes les variables disponibles dans l'environnement d'exécution global.
$_SERVER Contient les variables fournies par le serveur web (Apache)
$_GET Contient les variables fournies en paramètre au script via la méthode GET du protocole HTTP.
$_POST Contient les variables fournies par un formulaire via la méthode POST du protocole HTTP.
$_COOKIE Contient les variables fournies par les cookies via le protocole HTTP.
Contient les variables fournies suite à un chargement de fichier par un formulaire via la méthode
$_FILES
POST du protocole HTTP.
Contient les variables fournies par l'environnement. Ce peut être des variables du Shell sous
$_ENV
lequel s'exécute PHP, les variables CGI... (necessite EGPCS dans php.ini) voir aussi getenv()
$_REQUEST Contient les variables fournies au script par n'importe quel mécanisme (GET ou POST ).
$_SESSION Contient les variables de la session en cours dans le script.
4.4 Constantes
Macro définie grâce à la fonction define("PI",3.1415);
Attention echo "La valeur de pi=PI"; ici PI n'est pas reconnu comme constante
if faudrait écrire: echo "Valeur de pi=".PI;
4.5 Tableaux
Il n'y a que des tableaux associatifs avec une clé entière (0 … n-1) par défaut. Les tableaux ont un pointeur
courant automatiquement incrémenté lors d'une affectation. La clé doit être unique sinon il y a écrasement.
Définition $tab=array(1,2,6); $tvide=array();
Définition $asso=array("toto"=>1,"titi"=>8);
Affectation multiple list($i,$j)=($j,$i) ou list($i,$j)=$tab
Ajout $tvide[]="case 0"; $tvide[]="case 1";
Remise à zéro reset($tab); Remet le pointeur au début.
Fin de tableau end($tab): va pointer sur le dernier élément.
Parcours array each($tab): retourne un asso à 4 éléments ou faux si fin de tableau:
$r[0] = $r["key"] = clé courante; $r[1] = $r["value"] = valeur courante.
Exemple:
reset($tab);
while(list($key,$value)=each($tab))
{echo"$key => $value";} // Affiche la clé puis la valeur.
Accès $tab[6]=$asso["toto"];
Valeur courante current($tab): faux si vide, à la fin ou valeur FALSE.
Valeur et déplacement mixed next($tab);
mixed prev($tab); retourne la valeur courante puis déplacement, faux si place vide ou fin ou début de
tableau.
Taille int count($tab); ou sizeof()
Clé courante mixed key($tab)
Existence bool in_array("toto", $tab)
A 2 dimensions $et=array(array(0,0), array(0,1)); $et[i][j]
Autres fonctions: array_intersect(), array_merge(), array_diff(), is_array($tab)
5. Expressions
Quasiment tout est une expression en PHP.
5.1 Opérateurs
Quasiment utilisés que pour les nombres sauf la concaténation de chaîne (.) et l'affectation (chaînes et
tableaux). $$s valeur de la variable dont le nom est dans la variable s.
$x++; $x--; ++$x; $y--; // Post, pré Incrémentation, décrémentation
$i==$j ? valSiVrai : ValSiFaux expression conditionnelle
Arithmétique +, -, *, /, %
Affectation =, +=, -=, *=, /=, %= ($i+=$j équivalent à $i=$i+$j)
Binaires &, |, ~, <<, >> (Bit à bit: ET, OU, NOT, Shift gauche, droite)
Logiques &&, ||, ^, ! (AND, OR, XOR, NOT)
Comparaison <, <=, ==, !=, <>, >=, >, ===, !==
Attention à la priorité des opérateurs, utiliser les parentèses.
Lancer une commande système: system('dir')
Concaténation de chaine $s."toto"; $s.="toto";
L'affectation de chaîne longue est possible (PHP4) :
$s=<<<FIN
6. Structures de contrôle
Alternative avec if:
if(expr) { inst1 } else { inst2 }
if(cond) instructions endif;
7. Fonctions
Un nombre impressionnant de fonctions prédéfinies! Passage des paramètres scalaires ou tableaux par valeur
(PHP4 par références si précédé de & dans l'appel et la déclaration).
Les variables globales ne sont pas accessibles directement. Il faut utiliser la notation: $_GLOBALS['glob'].
$_GLOBALS est le tableau associatif des variables globales. On peut aussi déclarer les variables globales
dans la fonction par global $gi, $gj; Les arguments peuvent avoir une valeur par défaut (optionnels) et
être en nombre variable. Les valeurs de retour peuvent être scalaire ou tableaux. On peut supprimer l'affichage
des erreurs produites par l'appel à une fonction fn par : @fn($i)
8. Fonctions prédéfinies
8.1 Fonctions diverses
echo exp1, exp2, ...; affiche les expressions;
print(exp) affiche une expression; idem que echo(exp)
print_r($var) affiche la variable scalaire ou tableau ou objet récursivement;
void exit() termine le script
$l=system("dir"); exécute une commande système
void die("message") affiche le message puis termine le script
void eval("instructions PHP") il faut échapper les caractères spéciaux:
eval('$' . f($i).'= "toto";'; Ne pas oublier le point virgule ( ; )
Sous répertoires:
$file=readdir($dh) lecture de l'entrée de répertoire courante.
is_dir($dir) teste si $dir est un dossier.
$dh=opendir("/tmp") ouvre et obtient un pointeur sur le répertoire.
rewinddir($dir) Retourne à la première entrée.
closedir($dir) ferme le répertoire.
scandir($dir,sort) renvoie un tableau trié des fichiers du répertoire.
chdir($dir) Change de dossier.
getcwd() Donne le répertoire courant.
chroot($dir) Change de répertoire racine.
dirname($s) renvoie le nom du dossier contenant le fichier ou répertoire $s.
<?php
$dir = "/tmp/php5";
// Ouvre le dossier et liste tous les fichiers
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
echo "fichier : $file : type : " . filetype($dir . $file) . "\n";
}
closedir($dh);
}
}
?>
<?php
$path = "/home/httpd/html/index.php";
$file = basename ($path); // $file is set to "index.php"
$file = basename ($path,".php"); // $file is set to "index"
?>
Autres fonctions: disk_free_space($dir), disk_total_space($dir)
Autres fonctions:
explode($car,$s) implode($car, $tableau) strpos($s, $ss, $decalage)
str_replace($model, $remplacement, $s) $code=ord($c) $c=chr(13) str_replace()
str_pad() str_word_count() strrev() substr_replace() substr_count() strcmp()
print() printf() vprintf() sprintf() vsprintf() sscanf() fprintf()
vfprintf() fscanf()
9. Classes
Collection (tableau) de variables et de fonctions; héritage simple possible par extends; tout est public;
l'affectation se fait par recopie; pas de surcharge (utiliser un paramètre tableau).
Class Point{var $x,$y;
function Point($px=0,$py=0) { //constructeur
$this -> x = $px; $this -> y = $py; }
function getxy(){
return array($this -> x, $this -> y); } }
$p1 = &new Point(); // (0,0)
$p2=&new Point(3,4);
list($a,$b)=$p2 -> getxy();
10.2 Un exemple
$co=mysql_connect('sql.free.fr','login','asswd') or die('Connexion au serveur
impossible!');
mysql_select_db('mabase',$co)or die("Base de données inaccessible!");
$r=mysql_query('SELECT nom, prenom FROM matable',
$co) or die('Requête erronée'); $nc=mysql_num_fields($r);
$nl=mysql_num_rows($r); while($raw=mysql_fetch_assoc($r))
{ echo "NOM:",$raw['nom'],";Prénom:",$raw['prenom'],"<BR />";
} mysql_close($co);
12. Réseau
socket $sock=fsockopen($hostname, $port, $timeout)
ouvrir une socket; il ne reste plus qu'à lire dedans ... et la fermer!
17. Téléchargement
Du site web vers le client: download ou déchargement; Du client vers le site web : upload ou chargement;
17.1 Déchargement
Réaliser un lien référençant le fichier à décharger, par exemple:
<a href="Public/toto.pdf"> Cliquer ici</a>. Si le type du fichier est affichable par le navigateur, il
sera affiché (donc déchargé), sinon il sera proposé à l'utilisateur soit de sauver le fichier, soit de lancer
l'application associée. Remarquons que tout lien peut être enregistré en utilisant le bouton droit de la souris sur
le lien.
17.2 Chargement
Réaliser un formulaire de chargement envoyant une requête POST. L'action effectuée (script) après soumission
doit vérifier que le fichier chargé est du bon type et de la bonne taille puis l'afficher depuis la zone temporaire
(tmp/) ou il est chargé. Le fichier temporaire sera automatiquement effacé de la zone à la fin du script, s'il n'a
pas été déplacé ou renommé. Par exemple, le formulaire sera :
<FORM ENCTYPE="multipart/form-data" ACTION="traitement.php" METHOD="POST">
<INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" value= "1000">
Envoyez ce fichier: <INPUT NAME="fichier" TYPE="file" SIZE=15>
<INPUT TYPE="submit" VALUE="Envoyer le fichier">
20. Redirection
La fonction PHP header() doit être exécutée avant toute chose et permet de nombreuses choses dont: la
redirection vers une autre URL en plaçant des éléments dans l'entête du fichier HTML:
header("Location: http://www.php.net/"); /* Redirige le client */
exit(); /* rien après */
L'erreur header("Status: 404 Not Found");
L'expiration header("Expires:Mon, 26 Jul 2003 05:00:00 GMT");
La date de mise à jour: header("Last-Modified: ".gmdate("D,dM Y H:i:s")." GMT");
La non mise en cache: header("Cache-Control: no-cache, must-revalidate");
Le type mime: header("Content-type:application/pdf");
Le nom du fichier : header("Content-Disposition: attachment; filename=toto.pdf");
Exemple:
<?php
$co = mysql_connect('bib.ito.dz', 'login', 'password');
mysql_select_db('LaBase',$co);
$res = mysql_query('SELECT * FROM lecteurs');
$nb = mysql_num_rows($res);
echo 'Il y a '.$nb.' enregistrement(s) dans la table lecteurs.<br>';
echo 'Voici la liste:<br>';
echo '<table><tr><td>No</td><td>Nom</td><td>Prénom</td></tr>';
while($ligne=mysql_fetch_assoc($res);)
{echo"<tr><td>$ligne['No']</td><td>$ligne['nom']</td><td>$ligne['prenom']
</td></tr>";
} echo '</table>';
mysql_close($co);
?>