Table des matières
PHP
Architecture trois tiers
- Informatique centralisée : un ordinateur central avec des terminaux
- Client-serveur : ordinateur central avec des clients, qui sont des micro-ordinateurs où une partie du traitement est effectué
- Architecture 3-tiers
- Serveur web qui fait le traitement
- Clients légers (thin client) / navigateur
- Serveur de base de données
- Architecture n-tiers :
- clients légers (couche client)
- Couche présentation → seveur web (pilotage de l'interface)
- Couche données
Environnement de développement
Pour développer des applications web avec PHP, nous avons besoin de trois éléments :
- Serveur web (Apache) avec interpréteur PHP
- SGBD (MySQL)
- Client (Navigateur)
Plusieurs suites intègrent les éléments nécessaires au développement (sauf le navigateur), que l'on appelle WAMP, LAMP ou MAMP (Windows/Linux/Mac Apache-MySQL-PHP), dont par exemple EasyPHP qui est un WAMP.
Les tableaux
Interaction avec le client
L'interaction se fait principalement avec les formulaires et l'envoi de données par deux méthodes : POST
et GET
.
GET
Les données envoyées en GET
sont accessibles dans le tableau $_GET
.
POST
Les données envoyées en POST
sont accessibles dans le tableau $_POST
.
Une méthode pour savoir si un formulaire de la même page a été soumis est d'utiliser
if(array_key_exists('submit', $_POST))
ISSET
if (isset($var)) { //code }
Programmation modulaire
Des parties de pages, par exemple l'entête, le menu de navigation et le pied de page, peuvent être implémentés dans un fichier différent qui sera appelé dans chacune des pages qui l'utilise. Lors d'une modification, on aura que le fichier inclu (fichier.inc.php
) à modifier.
Interaction avec la base de données
La manipulation des bases de données se fait en plusieurs étapes :
- Ouvrir une connexion
- Sélectionner la base de donnée
- Faire une ou plusieurs requêtes
- Fermer la connexion
Ouvrir une connexion
$connexion = mysql_connect("localhost","user","password") or die("Impossible de se connecter à la base de données.");
Gestion de session
COOKIES
<?php $value = 'Valeur de test'; setcookie("TestCookie", $value); setcookie("TestCookie", $value, time()+3600); /* expire dans une heure */ setcookie("TestCookie", $value, time()+3600,"/~rasmus/",".utoronto.ca",1); ?> <?php // Afficher un cookie echo $_COOKIE["TestCookie"]; echo $HTTP_COOKIE_VARS["TestCookie"]; // Une autre mÈthode pour afficher tous les cookies print_r($_COOKIE); ?>
Gestion de session
Le HTTP est un protocole sans état ou en mode non-connecté. Tel quel, il n'est donc pas possible de garder de l'information sur le visiteur d'une requête à l'autre, d'un document à l'autre, etc.
Créer une session
La première page doit normalement créer une session et les autres y participeront. Que la session doit être créée ou qu'une page doit participer à cette session, la commande est la même.
session_start();
Fermer la session
Pour fermer ou détruire une session, il faut que la page actuelle participe à la session. Cela signifie qu'il doit y avoir la commande session_start()
avant la destruction de la session.
session_destroy();
Pour utiliser la session
On utilise le tableau $_SESSION
.
$_SESSION['connecté'] = 1; // la valeur du tableau sera créée autmatiquement $_SESSION['username'] = "Paul";
On peut supprimer une entrée dans la session.
unset($_SESSION['username']);
session id
session timeout
Fonctions utiles
header()
Classes
Exemple de classe complète
/** * Représente un employé. * * <p>Employé.</p> * * @name myUpload * @author Nom Auteur <nomauteur@domaine.com> * @link * @copyright Nom Auteur 2009 * @version 1.0.0 * @package Employe.class */ class Employe { public function __construct($firstName, $lastName, $email) { $this->firstName = $firstName; $this->lastName = $lastName; $this->email = $email; } public function __toString() { return "Employé : Prénom = " . $this->firstName . ", Nom = " . $this->lastName . ", Courriel = " . $this->email; } }
Constructeur et Destructeur
Le constructeur est une méthode réservée qui est exécutée automatiquement, et avant tout autre chose, lors de l'instanciation de la classe. Le constructeur pourra alors servir pour l'initialisation des variables.
La méthode constructeur n'appelle pas implicitement le constructeur du parent. Pour se faire, il faut utiliser parent::__construct()
.
/** * Constructeur * * <p>Création de l'instance de la classe.</p> * @name Employe::__construct() * @return void */ public function __construct() { } /** * Destructeur * * <p>Destruction de l'instance de classe.</p> * * @name Employe::__destruct() * @return void */ public function __destruct() { }
Lorsqu'il y a héritage, on peut appeler parent::__construct();
pour appeler le constructeur du parent.
Propriétés
/** * @var (String) * @desc Nom de l'employé. */ private $nom;
Méthodes
/** * Crée le code de l'employé. * * <p>Crée le code de l'employé</p> * * @name Employe::createCode() * @return String */ private function createCode() { return $this->nom; } /** * Détermine le nom complet de l'employé * * <p>Détermine le nom complet de l'employé</p> * * @name Employe::setFullName() * @param $firstname * @param $lastname * @return string */ public function setFullName($firstname, $lastname) { $this->firstname=$firstname; $this->lastname=$lastname; }
Utilisation de la classe
<?php include("classes/Employe.class.php"); $employe = new Employe(); $employe->setFirstName("Alex"); $employe->setLastName("Thérieur"); $nom_complet = $employe->getFullName(); ?>
Méthodes magiques
__toString()
__get()
et__set()
__isset()
et__unset()
__call()
__autoload()
__sleep()
et__wakeup()
__clone()
Chaines de caractères
Longueur d'une chaine
<?php $titre = 'Le Wiki de Stéphane Gariépy'; echo strlen($titre); // Affiche 27 ?>
Accéder à un caractère précis
L'index des chaines de caractères en PHP débutent par 0.
<?php $texte = 'Bonjour' ; echo $texte{1}; // Affiche o ?>
Sous-chaine
string substr ( string $string , int $start [, int $length ] )
ASCII
Il est possible d'obtenir la valeur ASCII du caractère avec la fonction ord()
. La fonction chr()
est l'inverse de ord()
.
<?php echo ord('a'); // Donne 97 echo chr(97) ; // Donne a ?>
Téléchargement de fichiers
Permettre le téléchargement de fichiers vers un serveur en utilisant PHP n'est pas très compliqué. Grosso modo, on doit faire un formulaire HTML avec un input
de type file
ainsi qu'un bouton Envoyer. On peut inclure aussi un input
de type hidden
pour la taille maximale du fichier. Le formulaire est ensuite envoyé à un script PHP (dans notre cas upload.php
) qui va gérer le transfert de fichier. La fonction importante est move_uploaded_file()
qui retourne un booléen selon si le fichier a transféré avec succès ou non.
Quand le code du téléchargement est intégré à un site, il faut aussi créer un sous-répertoire du même nom de la variable $dossier
du fichier upload.php
. Il faut vérifier les droits d'écriture du répertoire pour fonctionner.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Téléchargement</title> </head> <body> <form method="POST" action="upload.php" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="100000"> Fichier : <input type="file" name="avatar"> <input type="submit" name="envoyer" value="Envoyer le fichier"> </form> </body> </html>
<?php $dossier = 'upload/'; $fichier = basename($_FILES['avatar']['name']); $taille_maxi = 10000000; $taille = filesize($_FILES['avatar']['tmp_name']); $extensions = array('.png', '.gif', '.jpg', '.jpeg','.pdf'); $extension = strrchr($_FILES['avatar']['name'], '.'); //Début des vérifications de sécurité... if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau { $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...'; } if($taille>$taille_maxi) { $erreur = 'Le fichier est trop gros...'; } if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload { //On formate le nom du fichier ici... $fichier = strtr($fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier); if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné... { echo 'Upload effectué avec succès !'; } else //Sinon (la fonction renvoie FALSE). { echo 'Echec de l\'upload !'; } } else { echo $erreur; } ?>
Source : Upload de fichiers en PHP
JSON
Obtenir les données
$jsonurl = "http://site.com/json"; // url du site qui offre du JSON $contents=file_get_contents($jsonurl);
Décode
$json = '{"foo-bar": 12345}'; $obj = json_decode($json); print $obj->{'foo-bar'}; // 12345
Source : http://www.php.net/manual/fr/function.json-decode.php