Outils pour utilisateurs

Outils du site


web:php:introduction

PHP

Architecture trois tiers

  1. Informatique centralisée : un ordinateur central avec des terminaux
  2. Client-serveur : ordinateur central avec des clients, qui sont des micro-ordinateurs où une partie du traitement est effectué
  3. Architecture 3-tiers
    1. Serveur web qui fait le traitement
    2. Clients légers (thin client) / navigateur
    3. Serveur de base de données
  4. Architecture n-tiers :
    1. clients légers (couche client)
    2. Couche présentation → seveur web (pilotage de l'interface)
    3. 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 :

  1. Ouvrir une connexion
  2. Sélectionner la base de donnée
  3. Faire une ou plusieurs requêtes
  4. 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("Location: http://". $_SERVER['HTTP_POST'] . dirname($_SERVER['HTTP_SELF']) ."/");

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
?>
Comme les caractères accentués en Unicode sont représentés par deux octets en mémoire, il se peut qu'une longueur de chaine soit erronée.

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

PDO

web/php/introduction.txt · Dernière modification : 2022/02/02 00:42 de 127.0.0.1