Aide-Mémoire PHP
Structures
- Tag PHP
-
<?php ... ... ?>
- Définition de constante
-
// Définition d'une constante define('ZeConstante', 'ZeValeur') ; $Variabme = ZeConstante ; // Pour une constante insensible à la casse define('ZeConstante', 'ZeValeur', TRUE) ; $Variabme = ZeCONSTANTE ;
- Structures Conditionnelles
- Les condition IF .. ELSE de base.
if (condition) { ... ; ... ; }
if (condition) { ... ; ... ; } else { ... ; ... ; }
if (condition) { ... ; ... ; } elseif (condition) { ... ; ... ; } else { ... ; ... ; }
Les cas de valeurs de variable.
switch ($variable) { case valeur1 : { ... ; break ; } case valeur2 : { ... ; break ; } default : { ... ; break ; } }
Les ternaires : Il s’agit d’une condition en une ligne.
$reponse = ($age >= 18) ? 'Que oui' : 'Que non' ;
- Les Boucles
- Boucle While.
$i = 0; while ($i <= 10) { ... ; ... ; }
Boucle de 1 à 10.
for ($i = 1; $i <= 10; $i++) { ... ; ... ; }
Boucle sur un tableau.
foreach ($UnTableau as $Element) { ... ; ... ; }
Boucle sur un tableau de clés et valeurs.
foreach ($UnTableau as $cle => $Element) { ... ; ... ; }
- Les Opérateurs Conditionnels
-
Opérateur Description == Egal à != Différent < Inférieur <= Inférieur ou égal > Supérieur >= Supérieur ou égal and Et & Et or Ou || Ou === Identique en type et valeur !== Différent en type et valeur ! Négation de la condition suivante
- Les Fonctions
- Fonction avec retour de valeur.
function ZeFonction($arg1, $arg2) { ... ; ... ; return $reponse } .. $var = ZeFonction(1, 2) ;
Fonction avec argument par défaut sans retour de valeur.
function ZeFonction($arg1 = 1, $arg2 = 2) { global $a, $b ; ... ; ... ; } .. ZeFonction() ;
- Inclusion de code
- Inclure un script PHP (warning en cas d’erreur).
include 'LeFichier.php' ;
Inclure un script PHP (erreur grave en cas d’erreur).
require 'LeFichier.php' ;
- Débranchement direct
- Obligatoirement avant le code HTML.
header('Location: VersAutreSite.php') ;
Les Variables et Tableaux
- Global et Static
- Une variable dont la valeur sera modifiable et gardé à chaque appel de fonction.
static $count = 0; static $connect = null;
Des variables disponibles partout.
global $a, $b;
- Constantes
-
define('UNECONSTANTE', 10) ; echo UNECONSTANTE ;
- Affectation de variables
-
$VariableNumerique = 128 ; $VariableAlphab1 = 'Oh le beau texte' ; $VariableAlphab2 = "Oh le beau texte avec un retour chariot. \n" ; $VariableAlphab3 = 'Oh le beau texte concaténé avec un retour chariot.' . "\n" ; $VariableAlphab4 = "Oh le beau texte avec une variable $LaVariable et des \"guillemets échappés\"." ; $VariableAlphab4 = 'Oh le beau texte avec une variable ' . $LaVariable . ' concaténée.' ; $VariableBool = false ; $VariableFloat = 3.141592 ;
- Transtypage de variables
- Les types possibles sont (int), (float), (string), (bool).
$VariableNumerique = (int)$VariableAlpha ;
- Opérations simple
-
// --- Attribution --- $i = 5 ; // --- Ajout de 1 --- $i += 1; // --- Ajout de 1 --- $i++ ; // --- Concaténation de chaine --- $var .= $texte ;
- Gestion de tableaux
- Déclaration de tableau.
$LeTablo = array() ; $AutreTablo = array(1, 2, 'trois', false, 45.3) ;
Ajouter des valeurs à partir de 0 (compris).
$LeTablo = array() ; $LeTablo[] = 'valeur 1' ; $LeTablo[] = 'valeur 2' ; $LeTablo[3] = 3 ; $LeTablo[] = 'valeur 4' ;
Tableau associatif.
$LeTablo = array() ; $LeTablo['cle'] = 'valeur' ; $LeTablo['nom'] = 'Gotlib' ; $LeTablo['prenom'] = 'Marcel' ; $LeMemeTablo = array('cle' => 'valeur', 'nom' => 'Gotlib', 'prenom' => 'Marcel');
Nombre d’éléments d’un Tableau.
$LeNb = count($Tablo) ;
Recherche d’une clé.
$LeNo = array_search('Marcel', $LeTablo) ;
Existence d’une clé.
if (array_key_exists('prenom')) { echo 'trouvé !' ; }
Vérification d’appartenance.
if (in_array('Marcel', $LeTablo)) { echo 'trouvé !' ; }
Tri d’un tableau
// Tri en ordre croissant sort($tablo) ; // Tri en ordre décroissant rsort($tablo) ;
Supprimer une valeur
unset($tablo['prenom']) ;
- Les variables super-globales
- Variables superglobales (de type tableau).
Superglobale Description $_GET[…] Variables récupérées dans l’URL. $_POST[…] Variables postées par un formulaire. $_FILES[…] Liste et caractéristique d’un fichier transmis. $_SERVER[…] Informations sur la requete en cours. $_ENV[…] Informations sur l’environnement.
- Fonctions d’affichage
- Ecriture de base.
echo 'en Html, vieux php : ' . htmlentities($variabl, ENT_COMPAT ,'ISO-8859-1') ; echo 'en Html : ' . htmlentities($variabl, ENT_COMPAT | ENT_HTML401 ,'ISO-8859-15') ; echo 'en Xhtml : ' . htmlentities($variabl, ENT_COMPAT | ENT_XHTML ,'UTF-8') ; echo "un texte très beau : $variabl" ;
Debugage.
echo "une variable : $variabl" ; print_r($ZeTablo) ; var_dump($ZeObjet) ;
Affichage formaté.
// affiche : PHP 05, PHP 5.10, PHP 101 printf('PHP %2d, PHP %.2f, PHP %b', 5.1, 5.1, 5.1) ;
Fonctions utiles
- Fonctions texte.
-
// --- Calcul de longueur --- $LongueurTexte = strlen($var) ; // --- Remplacement de texte --- $var = str_replace('old', 'new', $var) ; // --- Mélange des lettres --- $var = str_shuffle($var) ; // --- Mise en minuscule --- $var = strtolower($var) ; // --- Mise en majuscule --- $var = strtoupper($var) ; // --- prend 5 caractères à partir de la première pos. --- $var = substr($var, 0, 5) ; // --- Recherche la position d'un texte. --- $pos = strpos($var, "<br />") ; // --- Retrait des blancs --- $var = trim($var) ; $var = ltrim($var) ; $var = rtrim($var) ; // --- Ajout de caractères d'échapement --- $var = addSlashes($var) ; // --- Retrait de caractères d'échapement --- $var = stripSlashes($var) ; // --- Retrait des balises html et php --- $var = strip_tags($var) ; // --- Affichage de variable --- echo 'en Html, vieux php : ' . htmlentities($variabl, ENT_COMPAT ,'ISO-8859-1') ; echo 'en Html : ' . htmlentities($variabl, ENT_COMPAT | ENT_HTML401 ,'ISO-8859-15') ; echo 'en Xhtml : ' . htmlentities($variabl, ENT_COMPAT | ENT_XHTML ,'UTF-8') ; // --- conversion des caractère spéciaux html --- $var = htmlspecialchars($var, ENT_COMPAT ,'ISO-8859-1') ; $var = htmlspecialchars($var, ENT_COMPAT | ENT_HTML401 ,'ISO-8859-15') ; $var = htmlspecialchars($var, ENT_COMPAT | ENT_XHTML ,'UTF-8') ; // --- Ajout d'un saut de ligne html à chaque nouvelle ligne --- $var = nl2br($var) ; // --- Découpage/regroupement d'une chaine en tableau --- $tab = explode($separateur, $var [, $limite]) ; $var = implode($separateur, $tab) // --- Ajout d'un saut de ligne html à chaque nouvelle ligne --- $var = nl2br($var) ; // --- Encodage d'un mot de passe : md5 --- $var = md5($PassWord) ; // --- Présentation d'un décimal --- $var = number_format($nb, 2, ',', '')
- Fonctions date.
- Timestamp du jour (secondes depuis début de l’époque unix)
$LeTimeStamp = time() ;
Date selon différents formats
echo "Date SQL : " . date('Y-m-d', time()) ; echo "Date affich. : " . date('d/m/Y', time()) ;
Paramètres de la fonction date
Code Description w Jour de la semaine : 1 D Jour de la semaine : Mon l Jour de la semaine : monday d Jour : 01 j Jour : 1 m Mois : 01 d Mois : 1 F Mois : January M Mois : Jan Y Année : 1953 y Année : 53 g Heure (format 12h) : 6 h Heure (format 12h) : 06 G Heure (format 24h) : 1 H Heure (format 24h) : 01 i Minutes : 05 s Seconde : 01 z Nbre de jour dans l’année : 57 W Numéro de la semaine : 02 Contrôle d’une date
if (checkdate($mois, $jour, $annee)) { echo "Date valide" ; }
Construire un Timestamp
$ts = mktime($heur, $minut, $sec, $mois, $jour, $annee) ;
- Fonctions de variable.
-
if (empty($var)) echo 'La variable non initialisée ou égale à zéro.' ; if (isset($var)) echo 'La variable initialisée.' ; if (is_array($var)) echo 'La variable est un tableau.' ; // --- désaffectation de la variable --- unset($var) ; // --- Type d'une variable --- echo gettype($var) ;
- Expressions Régulières.
-
Sympbole Description ^ Début de ligne. $ Fin de ligne. | Alternative. ( ) Capture de motif (pour matcher un contenu). [ ] Caractères possibles [0134] ou [a-z] ou [a-zA-Z0-9]. [^a] Négation de caractère [^a]. . Tout caractères. {n} n caractères exactement. {n,m} n à m caractères. ? ou {0,1} zéro ou un fois. * ou {0,} Zéro à n fois. + ou {1,} Un à n fois. [[:alnum:]] Caractère alphanumérique [[:alpha:]] Caractère alphabetique [[:digit:]] Caractère numérique [[:blank:]] Espace ou Tabulation [[:space:]] Tout caractère d’espace [[:lower:]] Caractère minuscule [[:upper:]] Caractère majuscule Recherche
// --- Recherche --- // --- La chaine de recherche est toujours encadrée. if (preg('#^[0-9]+$#', $chaine) { ... ; } // --- Recherche --- if (preg('/[0-9]+/', $chaine, $tabloResultat) { ... ; }
Remplacement de chaîne
// --- Remplacement --- $Result = preg_replace('#(b([a-z]+)e)+#', '\\3remplac', $chaine)
Accès MySQL
- API mysql – En cours d’abandon
- Ce type d’accès est sur le point d’être abandonné de PHP, mais certain provider n’accepte que lui. Connexion MySQL + Database MySQL.
$link = mysql_connect($Base, $User, $Password) or die('Erreur de connexion '.mysql_error()) ; mysql_set_charset('latin1',$link); // -- selon version Php - MySQL // mysql_set_charset('utf8',$link) ; mysql_select_db($Database) or die('Erreur de selection '.mysql_error()) ;
Déconnexion MySQL.
mysql_close($link) ;
Boucle de lecture.
$sql = ' SELECT ZeRubr' ; $sql .= ' FROM TestPost' ; $sql .= " WHERE variab = '" . mysql_real_escape_string($NoPost, $link) . "'" ; $sql .= ' ORDER BY 1 ' ; $sql .= ' LIMIT 0,10 ' ; $result = mysql_query($sql, $link) or die('Select - Erreur SQL ! '.mysql_error()) ; $nbligne = mysql_num_rows($result); while ($row = mysql_fetch_assoc($result)) { echo htmlentities($row['ZeRubr']).'<br />' ; }
Simple lecture.
$sql = 'SELECT ZeRubr FROM TestPost' ; $result = mysql_query($sql, $link) or die('Select - Erreur SQL ! '.mysql_error()) ; if ($row = mysql_fetch_assoc($result)) { echo htmlentities($row['ZeRubr'], ENT_COMPAT ,'ISO-8859-1')).'<br />' ; }
Insertion données.
$sql = 'INSERT INTO TestPost VALUES (' ; $sql .= mysql_real_escape_string($NewNoPost, $link) . ", " $sql .= "'" . mysql_real_escape_string($NewPosteur, $link) . "', " ; $sql .= 'current_date, ' ; $sql .= " '" . mysql_real_escape_string($NewTitre, $link) . "', " ; $sql .= " '" . nl2br(mysql_real_escape_string($NewContenu, $link)) . "' " ; $sql .= ")" ; $result = mysql_query($sql) or die('Insert - Erreur SQL ! '.mysql_error()) ;
Mise à jour de données.
$sql = 'UPDATE TestPost SET ' ; $sql .= " POSTEUR = '" . mysql_real_escape_string($NewPosteur, $link) . "' " ; $sql .= " , DATEPOST = current_date " ; $sql .= " , TITRE = '" . mysql_real_escape_string($NewTitre, $link) . "' " ; $sql .= " , CONTENU = '" . nl2br(mysql_real_escape_string($NewContenu, $link)) . "' " ; $sql .= " WHERE NOPOST = " . mysql_real_escape_string($NoPost, $link) ; $result = mysql_query($sql) or die('Update - Erreur SQL ! '.mysql_error()) ;
Suppression de données.
$sql = ' DELETE FROM TestPost ' ; $sql .= " WHERE NOPOST = " . mysql_real_escape_string($NoPost, $link) ; $result = mysql_query($sql) or die('Delete - Erreur SQL ! '.mysql_error()) ;
Isolation session de COMMIT.
$sql = " START TRANSACTION " ; mysql_query($sql, $link) or die('START : - Erreur SQL !'.mysql_error()) ;
Commit.
$sql = " COMMIT " ; mysql_query($sql, $link) or die('COMMIT - Erreur SQL ! '.mysql_error()) ;
Rollback.
$sql = " ROLLBACK " ; mysql_query($sql, $link) or die('ROLLBACK - Erreur SQL ! '.mysql_error()) ;
- API mysqli – Mode procédural
- Type d’accès conseillé. Connexion MySQL + Database MySQL.
$link = mysqli_connect($Base, $User, $Password, $Database) ; if (mysqli_connect_errno($link)) { die('Erreur de connexion : '. mysqli_connect_error() ) ; } if (!mysqli_set_charset($link, "latin1")) { die('Erreur de Pagecode : '. mysqli_connect_error() ) ; } // if (!mysqli_set_charset($link, "utf8")) { die('Erreur de Pagecode : '. mysqli_connect_error() ) ; }
Déconnexion MySQL.
mysqli_close($link) ;
Boucle de lecture.
$sql = ' SELECT ZeRubr' ; $sql .= ' FROM TestPost' ; $sql .= " WHERE variab = '" . mysqli_real_escape_string($link, $NoPost) . "'" ; $sql .= ' ORDER BY 1 ' ; $sql .= ' LIMIT 0,10 ' ; $result = mysqli_query($link, $sql) or die('Select - Erreur SQL ! '.mysqli_connect_error() ) ; $nbligne = mysqli_num_rows($result) ; while ($row = mysqli_fetch_assoc($result)) { echo htmlentities($row['ZeRubr']), ENT_COMPAT ,'ISO-8859-1')).'<br />' ; } mysqli_free_result($result);
Simple lecture.
$sql = 'SELECT ZeRubr FROM TestPost' ; $result = mysqli_query($link, $sql) or die('Select - Erreur SQL ! '.mysqli_connect_error() ) ; if ($row = mysqli_fetch_assoc($result)) { echo htmlentities($row['ZeRubr'], ENT_COMPAT ,'ISO-8859-1')).'<br />' ; } mysqli_free_result($result);
Insertion données.
$sql = 'INSERT INTO TestPost VALUES (' ; $sql .= mysqli_real_escape_string($link, $NewNoPost) . ", " $sql .= "'" . mysqli_real_escape_string($link, $NewPosteur) . "', " ; $sql .= 'current_date, ' ; $sql .= " '" . mysqli_real_escape_string($link, $NewTitre) . "', " ; $sql .= " '" . nl2br(mysqli_real_escape_string($link, $NewContenu)) . "' " ; $sql .= ")" ; $result = mysqli_query($link, $sql) or die('Insert - Erreur SQL ! '.mysqli_connect_error() ) ; mysqli_free_result($result);
Mise à jour de données.
$sql = 'UPDATE TestPost SET ' ; $sql .= " POSTEUR = '" . mysqli_real_escape_string($link, $NewPosteur) . "' " ; $sql .= " , DATEPOST = current_date " ; $sql .= " , TITRE = '" . mysqli_real_escape_string($link, $NewTitre) . "' " ; $sql .= " , CONTENU = '" . nl2br(mysqli_real_escape_string($link, $NewContenu)) . "' " ; $sql .= " WHERE NOPOST = " . mysqli_real_escape_string($link, $NoPost) ; $result = mysqli_query($link, $sql) or die('Update - Erreur SQL ! '.mysqli_connect_error() ) ; mysqli_free_result($result);
Suppression de données.
$sql = ' DELETE FROM TestPost ' ; $sql .= " WHERE NOPOST = " . mysqli_real_escape_string($link) ; $result = mysqli_query($link, $sql) or die('Delete - Erreur SQL ! '.mysqli_connect_error() ) ; mysqli_free_result($result);
Isolation session de COMMIT.
$sql = " START TRANSACTION " ; $result = mysqli_query($link, $sql) or die('Start - Erreur SQL ! '.mysqli_connect_error() ) ; mysqli_free_result($result); ou mysqli_begin_transaction($link) ;
Commit.
$sql = " COMMIT " ; $result = mysqli_query($link, $sql) or die('Commit - Erreur SQL ! '.mysqli_connect_error() ) ; mysqli_free_result($result); ou mysqli_commit(link) ;
Rollback.
$sql = " ROLLBACK " ; $result = mysqli_query($link, $sql) or die('Rollback - Erreur SQL ! '.mysqli_connect_error() ) ; mysqli_free_result($result); ou mysqli_rollback(link) ;
- API mysqli – Mode objet
- Type d’accès conseillé. Connexion MySQL + Database MySQL.
$mysqli = new mysqli($Base, $User, $Password, $Database) ; if ($mysqli->connect_errno) { die('Erreur de connexion : '. $mysqli->connect_error ) ; } if (!$mysqli->set_charset("latin1")) { die('Erreur de Pagecode : '. $mysqli->error ) ; } // if (!$mysqli->set_charset("utf8")) { die('Erreur de Pagecode : '. $mysqli->error ) ; }
Déconnexion MySQL.
$mysqli->close() ;
Boucle de lecture.
$sql = ' SELECT ZeRubr' ; $sql .= ' FROM TestPost' ; $sql .= " WHERE variab = '" . $mysqli->real_escape_string($NoPost) . "'" ; $sql .= ' ORDER BY 1 ' ; $sql .= ' LIMIT 0,10 ' ; $result = $mysqli->query($sql) or die('Select - Erreur SQL ! '.$mysqli->error ) ; $nbligne = $result->num_rows ; while ($row = $result->fetch_assoc()) { echo htmlentities($row['ZeRubr']).'<br />' ; } $result->free();
Simple lecture.
$sql = 'SELECT ZeRubr FROM TestPost' ; $result = $mysqli->query($sql) or die('Select - Erreur SQL ! '.$mysqli->error ) ; if ($row = $result->fetch_assoc()) { echo htmlentities($row['ZeRubr'], ENT_COMPAT ,'ISO-8859-1')).'<br />' ; } $result->free();
Insertion données.
$sql = 'INSERT INTO TestPost VALUES (' ; $sql .= $mysqli->real_escape_string($NewNoPost, $link) . ", " $sql .= "'" . $mysqli->real_escape_string($NewPosteur) . "', " ; $sql .= 'current_date, ' ; $sql .= " '" . $mysqli->real_escape_string($NewTitre) . "', " ; $sql .= " '" . nl2br($mysqli->real_escape_string($NewContenu)) . "' " ; $sql .= ")" ; $result = $mysqli->query($sql) or die('Insert - Erreur SQL ! '.$mysqli->error ) ; $result->free();
Mise à jour de données.
$sql = 'UPDATE TestPost SET ' ; $sql .= " POSTEUR = '" . $mysqli->real_escape_string($NewPosteur) . "' " ; $sql .= " , DATEPOST = current_date " ; $sql .= " , TITRE = '" . $mysqli->real_escape_string($NewTitre) . "' " ; $sql .= " , CONTENU = '" . nl2br($mysqli->real_escape_string($NewContenu)) . "' " ; $sql .= " WHERE NOPOST = " . $mysqli->real_escape_string($NoPost) ; $result = $mysqli->query($sql) or die('Update - Erreur SQL ! '.$mysqli->error ) ; $result->free();
Suppression de données.
$sql = ' DELETE FROM TestPost ' ; $sql .= " WHERE NOPOST = " . $mysqli->real_escape_string($NoPost) ; $result = $mysqli->query($sql) or die('Delete - Erreur SQL ! '.$mysqli->error ) ; $result->free();
Isolation session de COMMIT.
$sql = " START TRANSACTION " ; $result = $mysqli->query($sql) or die('Start - Erreur SQL ! '.$mysqli->error ) ; $result->free(); ou $mysqli->begin_transaction() ;
Commit.
$sql = " COMMIT " ; $result = $mysqli->query($sql) or die('Commit - Erreur SQL ! '.$mysqli->error ) ; $result->free(); ou $mysqli->commit() ;
Rollback.
$sql = " ROLLBACK " ; $result = $mysqli->query($sql) or die('Rollback - Erreur SQL ! '.$mysqli->error ) ; $result->free(); ou $mysqli->rollback() ;
Accès Fichiers
- Test de présence
- Existence d’un fichier.
if (file_exists($ZeFich)) { ... }
Vérifie s’il s’agit d’un fichier.
if (is_file($ZeFich)) { ... }
Vérifie s’il s’agit d’un répertoire.
if (is_dir($ZeFich)) { ... }
- Lecture de fichier
- Lecture binaire.
if (!$ZeFich = fopen($AdressFich, "r")) { echo "Impossible d'ouvrir le fichier ($filename)"; exit; } $lecture = fread($ZeFich, filesize($filename)) ; if ($lecture === FALSE) { echo "Impossible de lire le fichier ($AdressFich)"; exit; } fclose($ZeFich) ;
- Ecriture de fichier
- Ecriture binaire.
if (!$ZeFich = fopen($AdressFich, "w")) { echo "Impossible d'ouvrir le fichier ($filename)"; exit; } if (fwrite($ZeFich, $ZeText) === false) { echo "Impossible d'écrire dans le fichier ($AdressFich)"; exit; } fclose($ZeFich) ;
- Lecture de fichier dans un tableau
- Lecture en Tableau.
$lines = array(); $lines = file($AdressFich);
- Création de Repertoire
- Création d’un repertoire avec des droits « 700 ».
mkdir($ZeCheminRepert, 0700);
- Saut de ligne PHP
-
$ZeSautDeLigne = PHP_EOL ;
- Lecture d’un répertoire
- Lecture d’un répertoire de fichiers dans un tableau
$repert = array(); $d = dir("./"); while (false !== ($entry = $d->read())) { $suff1 = substr($entry, 0, 1) ; $suff4 = substr($entry, strlen($entry) -4, 1) ; $suff5 = substr($entry, strlen($entry) -5, 1) ; if ( ($suff1 !== ".") and (($suff4 == ".") or ($suff5 == ".") ) { $repert[] = $entry ; } } $d->close();
- Option d’ouverture de fichier
- Modes de lecture de la fonction fopen.
mode Description ‘r’ Ouvre en lecture seule, et place le pointeur de fichier au début du fichier. ‘r+’ Ouvre en lecture et écriture, et place le pointeur de fichier au début du fichier. ‘w’ Ouvre en écriture seule ; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n’existe pas, on tente de le créer. ‘w+’ Ouvre en lecture et écriture ; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n’existe pas, on tente de le créer. ‘a’ Ouvre en écriture seule ; place le pointeur de fichier à la fin du fichier. Si le fichier n’existe pas, on tente de le créer. ‘a+’ Ouvre en lecture et écriture ; place le pointeur de fichier à la fin du fichier. Si le fichier n’existe pas, on tente de le créer. ‘x’ Crée et ouvre le fichier en lecture seule ; place le pointeur de fichier au début du fichier. Si le fichier existe déjà, fopen() va échouer, en retournant FALSE et en générant une erreur de niveau E_WARNING. Si le fichier n’existe pas, fopen() tente de le créer. Ce mode est l’équivalent des options O_EXCL|O_CREAT pour l’appel système open(2) sous-jacent. Cette option est supportée à partir de PHP 4.3.2 et fonctionne uniquement avec des fichiers locaux. ‘x+’ Crée et ouvre le fichier pour lecture et écriture; le comportement est le même que pour ‘x’. ‘c’ Ouvre le fichier pour écriture seulement. Si le fichier n’existe pas, il sera crée, s’il existe, il n’est pas tronqué (contrairement à ‘w’) et l’appel à la fonction n’échoue pas (comme dans le cas de ‘x’). Le pointeur du fichier est positionné au début. Ce mode peut être utile pour obtenir un verrou (voyez flock()) avant de tenter de modifier le fichier, utiliser ‘w’ pourrait tronquer le fichier avant d’obtenir le verrou (vous pouvez toujours tronquer grâce à ftruncate()). ‘c+’ Ouvre le fichier pour lecture et écriture, le comportement est le même que pour le mode ‘c’. Ajouter ‘b’ au mode pour forcer une lecture en mode binaire.
Les Classes
- Description d’une classe
- Définition d’une classe.
class Panier { // Eléments de notre panier var $items; // Ajout de $num articles de type $artnr au panier function add_item($artnr, $num) { $this->items[$artnr] += $num; } // Suppression de $num articles du type $artnr du panier function remove_item($artnr, $num) { if ($this->items[$artnr] > $num) { $this->items[$artnr] -= $num; return true; } elseif ($this->items[$artnr] == $num) { unset($this->items[$artnr]); return true; } else { return false; } } } ?>
Utilisation d’une classe.
$cart = new Panier; $cart->add_item("10", 1); $another_cart = new Panier; $another_cart->add_item("0815", 3);
Une méthode de même nom que la classe deviendra son constructeur, ici en plus on étend la classe par Extends.
class Auto_Panier extends Panier { function Auto_Panier () { $this->add_item ("10", 1); } }
On peut utiliser une méthode non instanciée grace au « :: »
A::example();
Les fonctions serialize() et unserialise() permette de sauver une classe
$a = new A; $s = serialize($a); ... $c = unserialize($s);
La gestion des Sessions et des Cookies
- Gestion des sessions
- Ouverture de la session (Début de document obligatoire).
session_start() ;
Fermeture de la session (Début de document obligatoire).
session_start() ; session_destroy() ;
Ecriture d’une variable de session.
$_SESSION['AutorisationAcces'] = 'OK' ;
Lecture d’une variable de session.
if ($_SESSION['AutorisationAcces'] != 'OK') { header('Location: SaisirMotPass.php') ; }
- Gestion des cookies
- Ecriture d’une variable de cookie pour 90 jours.
setcookie('MaVariableCOOKIE', $Var_a_Sauver, time()+60*60*24*90) ;
Lecture d’une variable de session.
if (isset($_COOKIE['MaVariableCOOKIE'])) { $var_a_recuperer = $_COOKIE['MaVariableCOOKIE'] ; ; }
Les failles à éviter
- La faille include.
- Inutile en PHP5 si l’option « allow_url_fopen » est à « OFF ». Le but est de controler la présence d’un fichier include demandé dans le formulaire.
if(isset($_GET['page']) AND file_exists($_GET['page'].'.php')) { include $_GET['page'].'.php'; } else { include 'accueil.php'; }
- La faille SQL injection.
- Il faut éviter qu’un champ puisse détourner une requete SQL (par ajout d’une condition » or 1 = 1 « ). En premier, on inactive les guillemets magiques pour tout les objets reçus (Get / Post / Cookie).
// // -- Inactivation Magic Quotes // if(get_magic_quotes_gpc()===1) { if (isset($_POST['login'])) { $_POST['login'] = stripslashes($_POST['login']); } if (isset($_POST['passe'])) { $_POST['passe'] = stripslashes($_POST['passe']); } }
Les données encapsulées dans un ordre SQL sont protégées.
// // Préparation d'un ordre MySQL // .. $sql .= ", Var01 = '" . mysql_real_escape_string($Var01, $link) . "' " ; $sql .= ", Var02 = '" . mysql_real_escape_string($Var02, $link) . "' " ; $sql .= ", Var03 = '" . mysql_real_escape_string($Var03, $link) . "' " ; $sql .= ", Var04 = '" . mysql_real_escape_string($Var04, $link) . "' " ; ..
- La faille du code HTML et des formulaires.
- Le code html présent dans des champs lus doit être inactivé.
echo '<tr>' ; echo '<td>'.htmlentities($row['JourEVT']).'</td>'."\n" ; echo '<td>'.htmlentities($row['JourAlertEVT']).'</td>'."\n" ; echo '<td>'.htmlentities($row['Libelle']).'</td>'."\n" ; echo '<td>'.htmlentities($row['Type']).'</td>'."\n" ; echo '</tr>' ;
- Exemple réception de données (pour GET, POST, Cookie).
- Exemple de réception de donnée alphanumérique sécurisé.
$variabl = '' ; if (isset($_GET['variabl'])) { $variabl = (get_magic_quotes_gpc()===1) ? stripslashes($_GET['variabl']) : $_GET['variabl'] ; $variabl = trim($variabl) ; // facultatif }
Exemple de réception de donnée numérique sécurisé.
$variabl = '' ; if (isset($_GET['variabl'])) { $variabl = (get_magic_quotes_gpc()===1) ? stripslashes($_GET['variabl']) : $_GET['variabl'] ; $variabl = intval(trim($variabl)) ; // facultatif }
Petites fonctions Personelles
- Le remplacement de htmlentities.
- L’encodage par défaut passe en UTF-8 à partir de la 5.4, pour éviter d’être géné par ce changement, j’externalise la fonction pour éviter les surprises.
// * * * Util Reception * * * * * * * * * * * * * * * * * * * * * * * * * function affhtml($var) { // * * php 5.2 * * // return htmlentities($var, ENT_COMPAT, 'ISO-8859-15') ; // * * html 4 * * // return htmlentities($var, ENT_COMPAT | ENT_HTML401, 'ISO-8859-15') ; // * * xhtml * * return htmlentities($var, ENT_COMPAT | ENT_XHTML ,'UTF-8') ; }
- La réception des champs.
- Pour récupérer le POST, sinon le GET, sinon la valeur par défaut. Prise en compte des magic quotes.
// * * * Util Reception * * * * * * * * * * * * * * * * * * * * * * * * * function getGETPOST($trDef, $trGet, $trPost) { if ($trPost != '' and isset($_POST[$trPost])) { return (get_magic_quotes_gpc()===1) ? stripslashes($_POST[$trPost]) : $_POST[$trPost] ; } if ($trGet != '' and isset($_GET[$trGet])) { return (get_magic_quotes_gpc()===1) ? stripslashes($_GET[$trGet]) : $_GET[$trGet] ; } return $trDef ; }
- Des fonctions d’affichage.
- Présentation des dates.
// * * * Fonctions diverses * * * * * * * * * * * * * * * * * * * * * * * function date2SQL($TrDate) // -- Conversion en format SQL { if (substr($TrDate,4,1) == '-' and substr($TrDate,7,1) == '-') { return $TrDate ; } if (substr($TrDate,2,1) == '/' and substr($TrDate,5,1) == '/') { return substr($TrDate,6,4).'-'.substr($TrDate,3,2).'-'.substr($TrDate,0,2) ; } if (substr($TrDate,2,1) == '.' and substr($TrDate,5,1) == '.') { return substr($TrDate,6,4).'-'.substr($TrDate,3,2).'-'.substr($TrDate,0,2) ; } return $TrDate ; } function date2AFF($TrDate) // -- Conversion en format Français { if (substr($TrDate,2,1) == '/' and substr($TrDate,5,1) == '/') { return $TrDate ; } if (substr($TrDate,2,1) == '.' and substr($TrDate,5,1) == '.') { return substr($TrDate,0,2).'/'.substr($TrDate,3,2).'/'.substr($TrDate,6,4) ; } if (substr($TrDate,4,1) == '-' and substr($TrDate,7,1) == '-') { return substr($TrDate,8,2).'/'.substr($TrDate,5,2).'/'.substr($TrDate,0,4) ; } return $TrDate ; } function date2LONG($TrDate) // -- Conversion en format long { $recmois = array('01' => 'janvier', '02' => 'février', '03' => 'mars', '04' => 'avril', '05' => 'mai', '06' => 'juin', '07' => 'juillet', '08' => 'août', '09' => 'septembre', 10 => 'octobre', '11' => 'novembre', '12' => 'décembre') ; if (substr($TrDate,2,1) == '/' and substr($TrDate,5,1) == '/') { return substr($TrDate,0,2).' '.$recmois[substr($TrDate,3,2)].' '.substr($TrDate,6,4) ; } if (substr($TrDate,2,1) == '.' and substr($TrDate,5,1) == '.') { return substr($TrDate,0,2).' '.$recmois[substr($TrDate,3,2)].' '.substr($TrDate,6,4) ; } if (substr($TrDate,4,1) == '-' and substr($TrDate,7,1) == '-') { return substr($TrDate,8,2).' '.$recmois[substr($TrDate,5,2)].' '.substr($TrDate,0,4) ; } return $TrDate ; } function ts2AFF($TrDate, $TrPrf) // -- Conversion timestamp en affichage clair { $dt = date2AFF($TrDate) ; $dj = date('d/m/Y', time()) ; $dh = date('d/m/Y', (time() - 86400) ) ; $dd = date('d/m/Y', (time() + 86400) ) ; if ($dj == $dt) { $dt = "aujourd'hui" ; } elseif ($dj == $dh) { $dt = "hier" ; } elseif ($dj == $dd) { $dt = "demain" ; } elseif ($TrPrf != '') { $dt = $TrPrf.' '.$dt ; } $hr = 0 + ( substr($TrDate,11,2) ) ; $hr = $hr.'h'.substr($TrDate,14,2) ; return $dt.' à '.$hr ; }
- Des fonctions de connexion, déconnexion et rollback.
- Présentation des dates.
// * * * Partie Gestion SQL * * * * * * * * * * * * * * * * * * * * * * * * // // * * * La connexion de base à faire une fois // * On récupère la variable $link // function SQLconnex() { $link = mysql_connect(BaseHost(), Baselogin(), Basepass()) or die('Erreur de connexion '.mysql_error()) ; mysql_set_charset('latin1',$link) ; // - selon la version de PHP // mysql_set_charset('utf8',$link) ; // - Pour de l'UTF-8 mysql_select_db(Basebase()) or die('Erreur de selection '.mysql_error()); return $link ; } // // * * * Pb donc ROLLBACK + DIE (dans le cas ou on a démarrer une transaction) // function SQLrollback($link, $mess) { $sql = " ROLLBACK " ; mysql_query($sql, $link) or die('Erreur SQL !'.mysql_error() . ' / ' . $mess) ; die($mess) ; }