User Tools

Site Tools


backend:phpbase

PHP

logo

Site référence

Présentation

PHP

PHP: Hypertext Preprocessor, plus connu sous son sigle PHP (sigle auto-référentiel), est un langage de programmation libre, principalement utilisé pour produire des pages Web dynamiques via un serveur HTTP, mais pouvant également fonctionner comme n'importe quel langage interprété de façon locale. PHP est un langage impératif orienté objet.

PHP a permis de créer un grand nombre de sites web célèbres, comme Facebook et Wikipédia Il est considéré comme une des bases de la création de sites web dits dynamiques mais également des applications web.

C'est un langage qui a besoin d'être interprété et qui est impératif, une seule ligne est exécutée avant de passer à la suivante. Il est également orienté objet.

Le typage est dynamique et faible, ce n'est pas la peine de déclarer les variables en amont, PHP détermine automatiquement le type des variables, elles peuvent aussi changer de type en fonction du contexte.

PHP crée dynamiquement du HTML, si on lui fait afficher du code HTML, il va afficher la page correspondant.

PHP CLI

PHP CLI (Interface de ligne de commande) est un micro-framework formulé pour créer rapidement des applications de ligne de commande basées sur PHP. Les développeurs peuvent utiliser PHP CLI pour créer des scripts shell et d'autres scripts de support côté service PHP qui peuvent tirer parti des capacités de multithreading de PHP5 sans avoir à utiliser un autre langage de codage comme Bash ou Perl.

Bases

Installation

Il faut installer un interpréteur pour faire fonctionner le code PHP, on peut soit le télécharger sur le site officiel et l'installer soi-même, soit utiliser des logiciels “clé en main” tel que WampServer, Laragon ou EasyPHP. Ce type d'applications intègrent souvent un serveur web et un système de base de données.

Télécharger WampServer

Utilisation

Pour lancer un script dans VSCode, il faut ouvrir le terminal, aller dans le répertoire du fichier php et taper : php demo.php

On écrit le code entre les balises <?php et '?>, si on n'écrit que du PHP, on n'a pas besoin de la balise fermante

Tout ce qui est en dehors des balises : <?php … ?> sera affiché à l'écran

Les instructions se terminent par ;

Dans la console, php -a permet de tester du code directement

Serveur Web

Un Serveur Web (tel qu'Apache, NGINX, MySQL) sert à interpréter la requête faite par un navigateur et on peut greffer PHP dessus.

On peut en créer un directement dans le terminal (en utilisant le port 8000 qui doit être libre normalement) en tapant :

php -S localhost:8000

ou si on veut avoir le rapport de toutes les erreurs

php -S localhost:8000 -d error_reporting=E_ALL

On y accède dans le navigateur à l'adresse http://localhost:8000/

Voir : Options de ligne de commande

Débogage

Voir les erreurs

Dans les fichiers logs

On peut voie les erreurs dans les fichiers logs, pour trouver leurs emplacements,il faut lancer un fichier php avec le code :

<?php phpinfo() ?>

On peut alors trouver, entre autre, l'emplacement des fichiers logs et du fichier php.ini

Dans le navigateur

On peut faire apparaître les erreurs directement dans le navigateur internet à la place d'une page blanche. Il faut configurer le serveur PHP dans le fichier php.ini :

 display_errors = on
 error_reporting = E_ALL

Il faut ensuite redémarrer le serveur PHP pour que les changements soient pris en compte.

Il faudra penser à remodifier le fichier php.ini quand on passera en production pour que les erreurs n'apparaîssent plus

Dans le terminal

On peut aussi configurer les rapports d'erreurs, à la volée, directement dans le terminal quand on lance le serveur :

 php -S localhost:8000 -d display_errors=1

Erreurs communes

Headers already sent by

Cela indique que de l'affichage a déjà été envoyé avant un header(), session_start() ou setcookie() dans le fichier php.

Si on veut mettre du texte en attente en utilisant :

ob_start ();
...
$content = ob_get_clean();

puis utiliser la variable $content plus tard dans la page, après les header(), session_start() et setcookie().

On peut ne pas avoir ce type d'erreur si, dans le fichier php.ini, il y a output_buffering = 4096. Cela indique que PHP met en mémoire le contenu avant de l'afficher, dans la limite de 4096 caractères ici.
Par défaut, il y a off à la place.

Notice : Undefined index

Cela indique qu'on appelle une clé qui n'existe pas dans un tableau.

Trying to get property of non-object

Cela indique qu'on essaie d'accéder à la proriété d'un objet qui n'est pas un objet.

Parse error: syntax error, unexpected 'echo'

C'est systématiquement une erreur de syntaxe et souvent un problème de ; ou de parenthèses.

Opérateurs de comparaison

Comparaison

Exemple Nom Résultat
$a == $b Egal TRUE si $a est égal à $b après le transtypage.
$a === $b Identique TRUE si $a est égal à $b et qu'ils sont de même type.
$a != $b Différent TRUE si $a est différent de $b après le transtypage.
$a <> $b Différent TRUE si $a est différent de $b après le transtypage.
$a !== $b Différent TRUE si $a est différent de $b ou bien s'ils ne sont pas du même type.
$a < $b Plus petit que TRUE si $a est strictement plus petit que $b.
$a > $b Plus grand TRUE si $a est strictement plus grand que $b.
$a ⇐ $b Inférieur ou égal TRUE si $a est plus petit ou égal à $b.
$a >= $b Supérieur ou égal TRUE si $a est plus grand ou égal à $b.
$a ⇔ $b Combiné Un entier <, = ou > à zéro lorsque $a est <, = ou > à $b respectivement.
Disponible à partir de PHP 7.

A cause de la façon dont les nombres à virgule flottante sont représentés en interne, on ne doit pas tester l'égalité entre deux nombres de type float comme cela.

Comparaison avec plusieurs types

Type de l'opérande 1 Type de l'opérande 2 Résultat
null ou chaîne de caractères string Convertit NULL en “”, comparaison numérique ou lexicale
booléen ou null N'importe quoi Convertit en booléen, FALSE TRUE
objet objet Les classes internes peuvent définir leur propre méthode de comparaison; différentes classes ne sont pas comparables; entre objets de même classe
chaîne de caractères, ressource ou nombre chaîne de caractères, ressource ou nombre Transforme les chaînes de caractères et les ressources en nombres
tableaux tableaux Le tableau avec le moins de membres est plus petit, si la clé de l'opérande 1 n'est pas trouvée dans l'opérande 2, alors les tableaux ne sont pas comparables, sinon la comparaison se fait valeur par valeur (voir l'exemple suivant)
object N'importe quoi L'objet est toujours plus grand
array N'importe quoi Le tableau est toujours plus grand

L'opérateur ternaire

L'expression (expr1) ? (expr2) : (expr3); est évaluée à expr2 si expr1 est évaluée à TRUE, et expr3 si expr1 est évaluée à FALSE. Depuis PHP 5.3, il est possible d'omettre la partie centrale de l'opérateur ternaire. L'expression expr1 ?: expr3 retourne expr1 si expr1 vaut TRUE, et expr3 sinon.

Opérateur de fusion Null

L'expression (expr1) ?? (expr2) retourne expr2 si expr1 est NULL, et expr1 dans les autres cas. En particulier, cet opérateur n'émet pas de notice si la partie gauche n'existe pas, exactement comme isset(). Ceci est particulièrement utile pour les clés des tableaux.

Constantes

Déclaration

Par convention, on écrit les constantes en majuscule.

Pour l'utiliser, ce n'est pas la peine mettre $ devant, juste le nom de la constante en majuscule.

define ( string $name , mixed $value [, bool $case_insensitive = FALSE ] ) : bool

➔ Définit une constante

Constantes magiques

PHP fournit un grand nombre de constantes magiques. Certaines constantes sont définies par différentes extensions, et ne seront présentes que si ces extensions sont compilées avec PHP, ou bien si l'extension a été chargée dynamiquement.

Il y a neuf constantes magiques qui changent suivant l'emplacement où elles sont utilisées. Par exemple, la valeur de __LINE__ dépend de la ligne où vous l'utilisez dans votre script. Toutes ces constantes “magiques” sont évaluées au moment de la compilation, contrairement aux constantes classiques, qui sont évaluées au moment de l'exécution. Ces constantes spéciales sont insensibles à la casse. = Quelques constantes PHP magiques =

Nom Description
__LINE__ La ligne courante dans le fichier.
__FILE__ Le chemin complet et le nom du fichier courant avec les liens symboliques résolus. Si utilisé pour une inclusion, le nom du fichier inclus est retourné.
__DIR__ Le dossier du fichier. Si utilisé dans une inclusion, le dossier du fichier inclus sera retourné. C'est l'équivalent de dirname(__FILE__). Ce nom de dossier ne contiendra pas de slash final, sauf si c'est le dossier racine.
__FUNCTION__ Le nom de la fonction, ou {closure} pour les fonctions anonymes.
__CLASS__ Le nom de la classe courante. Le nom de la classe contient l'espace de nom dans lequel cette classe a été déclarée (i.e. Foo\Bar). Notez que depuis PHP 5.4, __CLASS__ fonctionne aussi dans les traits. Lorsqu'elle est utilisée dans une méthode de trait, __CLASS__ est le nom de la classe dans laquelle le trait est utilisé.
__TRAIT__ Le nom du trait. Le nom du trait inclut l'espace de nom dans lequel il a été déclaré (e.g. Foo\Bar).
__METHOD__ Le nom de la méthode courante.
__NAMESPACE__Le nom de l'espace de noms courant.
ClassName::class Le nom entièrement qualifié de la classe.

Variables

Déclaration

$nom-de-la-variable = valeur;

Il faut mettre $devant pour indiquer que c'est une variable.

Types

    - Nombres
    - Caractères
    - Booléens
    - Null
    - Tableaux
    - ...
                

La valeur null, n'affiche rien, c'est la valeur de base des variables

On peut forcer un type de variable en mettant le type entre () devant (ex : $action = (int) readline('Entrer un entier);)

Si il y a & devant une variable, elle sera modifiée par la fonction, on parle de sa référence (ex : $var1=&$var2; si on modifier var1, var2 sera aussi modifiée).

Pour éviter que PHP n'interpole name=“$nom[]” comme $nom “étant un tableau, il faut utiliser les { }, cela donne name=”{$nom}[]“

Caractères

Une chaîne de caractères est entourée de ' ou de ”

Les ' sont interprétés beaucoup plus vite que les “.

Les ' n'interpolent pas les variables, il faut utiliser les ” pour pouvoir interpoler des variables ou des caractères spéciaux comme le retour à la ligne \n.

Si on veut mettre un ' entre 2 ', il faut l'échapper : \'

Si on veut mettre un “ entre 2 ”, il faut l'échapper : \“

Liste des caractères spéciaux sur commentcamarche : Caractères spéciaux HTML

Syntaxe Heredoc

Cette syntaxe sert à délimiter une chaîne de caractères. C'est l'utilisation de ‹‹‹. Après cet opérateur, un identifiant est fourni, suivi d'une nouvelle ligne. La chaîne de caractères en elle-même vient ensuite, suivie du même identifiant pour fermer la notation.

Il est très important de noter que la ligne contenant l'identifiant de fin ne doit contenir aucun autre caractère, mis à part un ;

Cela signifie en particulier que l'identifiant ne doit pas être indenté, et qu'il ne doit y avoir aucun espace ou tabulation avant ou après le point-virgule. Le délimiteur de fermeture doit aussi être suivi d'une nouvelle ligne.

Tableaux simples

Déclaration :
$notes = [];
$notes = [10,20,15];

Ancienne notation :

$notes = array (10, 20, 15);

On peut mettre tout type de variable dedans, même des tableaux.

Le premier index d'un tableau est 0.

Récupération :
$notes[1];

retourne la 2ème valeur du tableau $notes : 20.

Modification
$notes = [18, 20];

modifie le tableau

Ajout:
$notes[] = 18;

ajoute 18 à la fin du tableau.

Tableaux avec index automatique

Déclaration :

$eleve = ['Marc', 'Doe', [10, 20 ,15]];

Récupération :

$eleve[2][1];

retourne la 2ème valeur du tableau n°3 : 20.

Tableaux avec clés particulières

Déclaration :

On peut utiliser des clés particulières dans les tableaux avec ⇒.

    $eleve = [
        'nom' => 'Doe',
        'prenom' => 'Marc',
        'notes' => [10, 20 ,15]
    ];

Récupération :

$eleve['nom'];

retourne : Doe

$eleve['prenom'] . ' ' . $eleve['nom'];

retourne : Marc Doe

echo $eleve['notes'];

retourne :

    Array
print_r($eleve['notes']);

retourne :

    Array
    (
        [0] => 10
        [1] => 20
        [2] => 15
        [3] => 16
        [4] => 18
    )
var_dump($eleve['notes']);

retourne :

    Array(5) {
        [0]=> int(10)
        [1]=> int(20)
        [2]=> int(15)
        [3]=> int(16)
        [4]=> int(18)
    }

Modification :

$eleve['prenom'] = 'Jean';\\
$eleve['prenom'] . ' ' . $eleve['nom'];

retourne : Jean Doe

Ajout

$eleve['notes'][3] = 16;

ajoute 16 en position 4 (donc là, à la fin) du tableau 'notes'.

$eleve['notes'][] = 18;

ajoute 18 à la fin du tableau

Ajout de clé

$eleve[] = 'CM2';
print_r($eleve);

retourne :

    Array
    (
        [nom] => Doe
        [prenom] => Marc
        [notes] => Array
            (
                [0] => 10
                [1] => 20
                [2] => 15
                [3] => 16
                [4] => 18
            )
        [0] => CM2
    )
 
    $eleves = [
        'cm2' => 'jean',
        'cm1' => 'Marc'
    ];
    foreach ($eleves as $classe => $eleve) {
        echo "$eleve est dans la classe $classe \n";
    }

retourne :

    jean est dans la classe cm2
    Marc est dans la classe cm1
 
var_dump($eleve);

retourne :

    string(4) "jean"
    string(4) "Marc"
 
var_dump($classe);

retourne :

    string(3) "cm2"
    string(3) "cm1"
 
$eleves = [
    'cm2' => ['jean', 'Marc', 'Jane', 'Marion'],
    'cm1' => ['Marc', 'Marcelin']
];
foreach ($eleves as $classe => $listeEleves) {
    echo "La Classe $classe : \n";
    foreach ($listeEleves as $eleve) {
        echo "- $eleve\n";
    }
}

retourne :

    La Classe cm2 :
    - jean
    - Marc
    - Jane
    - Marion
    La Classe cm1 :
    - Marc
    - Marcelin

Vérification de la taille

On peut compter le nombre d'élément dedans.

count ( mixed $array_or_countable [, int $mode = COUNT_NORMAL ] ) : int

➔ Compte tous les éléments d'un tableau ou quelque chose d'un objet

On peut voir si un tableau est vide.

empty ( mixed $var ) : bool

➔ Détermine si une variable est vide

Comparaison

Il faut utiliser le === pour que l'égalité soit sûre, sur le type et la valeur.

Affichage

print_r ( mixed $expression [, bool $return = FALSE ] ) : mixed

➔ Affiche des informations lisibles pour une variable

var_dump ( mixed $expression [, mixed $... ] ) : void

➔ Affiche les informations d'une variable

Superglobales

Les Superglobales sont des variables internes qui sont toujours disponibles, quel que soit le contexte :

    $GLOBALS
    $_SERVER
    $_GET
    $_POST
    $_FILES
    $_COOKIE
    $_SESSION
    $_REQUEST
    $_ENV

$_SERVER

Contient les variables :
[SCRIPT_NAME] qui renvoie le nom du fichier
[SCRIPT_FILENAME] qui renvoie le chemin complet du fichier

On peut alors faire un test sur le nom du fichier pour changer dynamiquement le lien actif de la page HTML header. On peut aussi créer une fonction qui le fait pour l'utiliser pour chaque page.

$class = $class . ” active“; peut être remplacé par $class .= “active”;

$_GET et $_POST

Elles servent à récupérer, sous forme de tableau associatif, les données passées au script courant via le protocole HTTP.

$_GET utilise la méthode GET, les valeurs apparaissent dans l'URL.

$_POST utilise la méthode POST, les valeurs n'apparaissent pas dans l'URL (utilisé pour les identifiants et mots de passe par exemple).

Documentation

Voir sur le site de PHP : Les Superglobales

Conditions

!

Veut dire 'NOT'

&& et ||

Ces sont les opérateurs booléens ET et OU.

IF ... ELSE (ELSEIF)

    if (comparaison) {
    } elseif {
    } else {
    };

SWITCH ... CASE

    switch ($valeur) {
    case 1 :
    case 2 :
    default :
    };

WHILE

    while (condition) {
    };

On peut utiliser break; pour sortir de la boucle.

FOR

    for ($debut; $fin; incrémentation) {
    };

FOREACH ... AS

    foreach ($valeur as $autre_valeur) {
    };

Utilisé pour parcourir les tableaux.

Fonctions

Déclaration

fonction (paramètres) : $valeur_renvoyée

Les fonctions peuvent ne pas renvoyer de valeur.

- & devant une variable, celle-ci est passée en référence, elle sera modifiée par la fonction
- ? devant le type d'un paramètre ou d'un retour de fonction, cela indique que la valeur peut être le type ou null
- @ devant une fonction, cela cache les erreurs ça les rend silencieuses

Fonctions utiles

print_r ( mixed $expression [, bool $return = FALSE ] ) : mixed

➔ Affiche des informations à propos d'une variable, de manière à ce qu'elle soit lisible

var_dump ( mixed $expression [, mixed $... ] ) : void

➔ Affiche les informations structurées d'une variable, y compris son type et sa valeur

readline ([ string $prompt = NULL ] ) : string

➔ Retourne une ligne entrée par l'utilisateur

array_push ( array \&$array [, mixed $... ] ) : int

➔ Ajoute un élément à un tableau, il est préférable de la remplacer par l'opérateur $array[] = qui évite le passage par une fonction

sort ( array \&$array [, int $sort_flags = SORT_REGULAR ] ) : bool

➔ Cette fonction trie le tableau array. Les éléments seront triés du plus petit au plus grand

exit ([ string $status ] ) : void

➔ Affiche un message et termine le script courant

isset ( mixed $var [, mixed $... ] ) : bool

➔ Détermine si une variable est déclarée et est différente de NULL

function_exists ( string $function_name ) : bool

➔ Indique si une fonction est définie

htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = TRUE ]]] ) : string

➔ Convertit tous les caractères éligibles en entités HTML

define ( string $name , mixed $value [, bool $case_insensitive = FALSE ] ) : bool

➔ Définit une constante

count ( mixed $array_or_countable [, int $mode = COUNT_NORMAL ] ) : int

➔ Compte tous les éléments d'un tableau ou quelque chose d'un objet

empty ( mixed $var ) : bool

➔ Détermine si une variable est vide

time ( void ) : int

➔ Retourne le timestamp UNIX actuel

date ( string $format [, int $timestamp = time() ] ) : string

➔ Formate une date/heure locale

Paramètre Description Exemple
Jour
d Jour du mois, sur deux chiffres (avec un zéro initial) 01 à 31
D Jour de la semaine, en trois lettres (et en anglais - par défaut : en anglais, ou sinon, dans la langue locale du serveur) Mon à Sun
j Jour du mois sans les zéros initiaux 1 à 31
l ('L' minuscule) Jour de la semaine, textuel, version longue, en anglais Sunday à Saturday
N Représentation numérique ISO-8601 du jour de la semaine (ajouté en PHP 5.1.0) 1 (pour Lundi) à 7 (pour Dimanche)
S Suffixe ordinal d'un nombre pour le jour du mois, en anglais, sur deux lettres st, nd, rd ou th. Fonctionne bien avec j
w Jour de la semaine au format numérique 0 (pour dimanche) à 6 (pour samedi)
z Jour de l'année 0 à 365
Semaine
W Numéro de semaine dans l'année ISO-8601, les semaines commencent le lundi Exemple : 42 (la 42ème semaine de l'année)
Mois
F Mois, textuel, version longue; en anglais, comme January ou December January à December
m Mois au format numérique, avec zéros initiaux 01 à 12
M Mois, en trois lettres, en anglais Jan à Dec
n Mois sans les zéros initiaux 1 à 12
t Nombre de jours dans le mois 28 à 31
Année
L Est ce que l'année est bissextile 1 si bissextile, 0 sinon.
o La numérotation de semaine dans l'année ISO-8601. C'est la même valeur que Y, excepté si le numéro de la semaine ISO (W) appartient à l'année précédente ou suivante, cette année sera utilisée à la place. (ajouté en PHP 5.1.0) Exemples : 1999 ou 2003
Y Année sur 4 chiffres Exemples : 1999 ou 2003
y Année sur 2 chiffres Exemples : 99 ou 03
Heure
a Ante meridiem et Post meridiem en minuscules am ou pm
A Ante meridiem et Post meridiem en majuscules AM ou PM
B Heure Internet Swatch 000 à 999
g Heure, au format 12h, sans les zéros initiaux 1 à 12
G Heure, au format 24h, sans les zéros initiaux 0 à 23
h Heure, au format 12h, avec les zéros initiaux 01 à 12
H Heure, au format 24h, avec les zéros initiaux 00 à 23
i Minutes avec les zéros initiaux 00 à 59
s Secondes avec zéros initiaux 00 à 59
u Microsecondes (ajouté en PHP 5.2.2). Notez que la fonction date() génèrera toujours 000000 vu qu'elle prend un paramètre de type entier, alors que la méthode DateTime::format() supporte les microsecondes si DateTime a été créée avec des microsecondes.Exemple : 654321
v Millisecondes (ajouté dans PHP 7.0.0). Même note que pour u. Exemple: 654
Fuseau horaire
e L'identifiant du fuseau horaire (ajouté en PHP 5.1.0) Exemples : UTC, GMT, Atlantic/Azores
I (i majuscule) L'heure d'été est activée ou pas 1 si oui, 0 sinon.
O Différence d'heures avec l'heure de Greenwich (GMT), sans deux-points entre les heures et les minutes Exemple : +0200
P Différence avec l'heure Greenwich (GMT) avec un deux-points entre les heures et les minutes (ajouté dans PHP 5.1.3) Exemple : +02:00
T Abréviation du fuseau horaire Exemples : EST, MDT …
Z Décalage horaire en secondes. Le décalage des zones à l'ouest de la zone UTC est négative, et à l'est, il est positif. -43200 à 50400
Date et Heure complète
c Date au format ISO 8601 (ajouté en PHP 5) 2004-02-12T15:19:21+00:00
r Format de date »RFC 2822 Exemple : Thu, 21 Dec 2000 16:01:07 +0200
U Secondes depuis l'époque Unix (1er Janvier 1970, 0h00 00s GMT) Voir aussi time()
date_default_timezone_set ( string $timezone_identifier ) : bool

➔ Définit le décalage horaire par défaut de toutes les fonctions date/heure

explode ( string $delimiter , string $string [, int $limit = PHP_INT_MAX ] ) : array

➔ Scinde une chaîne de caractères en segments

trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] ) : string

➔ Supprime les espaces (ou d'autres caractères) en début et fin de chaîne

        " " (ASCII 32 (0x20)), un espace ordinaire.
        "\t" (ASCII 9 (0x09)), une tabulation.
        "\n" (ASCII 10 (0x0A)), une nouvelle ligne (line feed).
        "\r" (ASCII 13 (0x0D)), un retour chariot (carriage return).
        "\0" (ASCII 0 (0x00)), le caractère NUL.
        "\x0B" (ASCII 11 (0x0B)), une tabulation verticale.
filter_var ( mixed $variable [, int $filter = FILTER_DEFAULT [, mixed $options ]] ) : mixed

➔ Filtre une variable avec un filtre spécifique

str_pad ( string $input , int $pad_length [, string $pad_string = " " [, int $pad_type = STR_PAD_RIGHT ]] ) : string

➔ Complète une chaîne jusqu'à une taille donnée

str_getcsv ( string $input [, string $delimiter = "," [, string $enclosure = '"' [, string $escape = "\\" ]]] ) : array

➔ Analyse une chaîne de caractères CSV dans un tableau

number_format ( float $number [, int $decimals = 0 ] ) : string

➔ Formate un nombre pour l'affichage

number_format ( float $number , int $decimals = 0 , string $dec_point = "." , string $thousands_sep = "," ) : string

➔ Cette fonction accepte un, deux, ou quatre paramètres (et pas trois) :

- Si seul le paramètre number est donné, il sera formaté sans partie décimale, mais avec une virgule entre chaque millier.

- Si les deux paramètres number et decimals sont fournis, number sera formaté avec decimals décimales, un point (”.“) comme séparateur décimal et une virgule entre chaque millier.

- Avec quatre paramètres, number sera formaté avec decimals décimales, dec_point comme séparateur décimal, et thousands_sep comme séparateur de milliers.

Les fonctions utilisateur

Les fonctions n'ont pas accès à un contexte extérieur. Les variables définis à l'extérieur de la fonction ne sont pas accessible par celle-ci.

Déclaration

function nom_de_la_fonction (paramètre=defaut) {}

return

On utilise return pour renvoyer une valeur par la fonction et celle-ci s'arrête après.

Typage

On peut typer les paramètres et la valeur renvoyée par une fonction. PHP va essayer automatiquement de convertir et pourrait mettre des choses qui ne conviennent pas.

require / include

Définition

Ce sont des instructions de langage incluent et exécutent le fichier spécifié en argument.

On peut les utiliser dans les fonctions.

On peut définir des variables pour rendre le site plus dynamique, il faut les déclarer avant le require/include pour pouvoir les utiliser dans le fichier pointé par ceux-ci.

include 'functions.php';

require

Exige que le fichier existe, il renverra une Fatal Error directement si le fichier n'existe pas.

include

Ne l'exige pas, il continuera le script et renverra une Fatal Error quand on utilisera une fonction du fichier qui n'existe pas.

require_once et include_once

L'ajout de _once, si le code a déjà été inclus, il ne le sera pas une seconde fois, et *_once retourne TRUE. Comme son nom l'indique, le fichier sera inclus une seule fois.

Syntaxes PHP dans HTML

Syntaxes

On peut utiliser plusieurs syntaxes lorsqu'on écrit du PHP dans du HTML.

‹?php … ?> de part et d'autre de chaque instruction PHP sur chaque ligne de HTML

Il faut séparer les parties PHP dans le HTML :
- en haut : les déclarations de variables et la logique
- en dessous le HTML

Exemple

Syntaxe 1
<p><?php if (isset($var)) {echo $var;} else {echo 'Texte'} ?>)</p>
Syntaxe 2
<?php if (isset($var)) { ?>
	<?php echo $var; ?>
<?php } else { ?>
	Texte
<?php } ?>
Syntaxe 3

Pour avoir une syntaxe qui s'adapte mieux à du PHP intégré à du HTML, on peut remplacer les :

**{** par **:**
**} else {** par **else :**
**}** du if par **endif**

et de la même chose pour les for, foreach, while…, on peut donc écrire :

<?php if (isset($var)) : ?>
	<?php echo $var; ?>
<?php  else : ?>
	Texte
<?php endif ?>
Autres raccourcis de syntaxe

On peut utiliser une short syntax :

<?php echo

peut s'écrire

<?=

S'il ny a qu'une seule ligne pour le <?php on peut ne pas mettre le ; à la fin de la ligne.

Formulaires

HTML

On utilise la balise ‹form>en HTML, on lui assigne une method pour définir l'envoie des informations : GET ou POST.

Si on veut que les entrées puissent avoir plusieurs valeurs, il faut ajouter [] à la fin du nom (pour les checkbox par exemple). Les valeurs sont alors enregistrées dans un tableau.

NEVER TRUST THE USER : il faut toujours vérifier le format et les informations rentrées par l'utilisateur.

GET

Les informations sont envoyées via l'url, sous forme de string, chaque entrée du formulaire (bouton, texte, checkbox…) peut posséder un nom et une valeur, ceux-ci apparaîtront dans l'url.

De ce fait, on peut manuellement modifier les noms des entrées et leurs valeurs directement dans l'url, il faudra donc faire des tests sur les données récupérer pour s'assurer qu'elles correspondent à ce qu'on attend.

On peut alors récupérer ces informations avec la Superglobale $_GET suivi entre [ ] du nom de l'entrée à récupérer.

$_GET['monentree']

POST

Les informations ne sont pas récupérables dans l'url, on utilise la Superglobale $_POST pour les récupérer. Elle fonctionne comme $_GET.

$_POST['monentree']

Il faut penser à vérifier si les Superglobales $_GET et $_POST existent avant de les utiliser.

Fichiers

file_exists ( string $filename ) : bool

➔ Vérifie si un fichier ou un dossier existe

dirname ( string $path [, int $levels = 1 ] ) : string

➔ Renvoie le chemin du dossier parent

__DIR__

➔ Le dossier du fichier.

DIRECTORY_SEPARATOR

➔ Constante prédéfinie

basename ( string $path [, string $suffix ] ) : string

➔ Retourne le nom de la composante finale d'un chemin

*glob ( string $pattern [, int $flags = 0 ] ) : array

➔ Recherche des chemins qui vérifient un masque

Pour les petits fichiers

Quand on, utilise PHP, on a une quantité de mémoire à utiliser, si on la dépasse on aura une erreur (si on essaie d'ouvrir un fichier CSV énorme par exemple).

Écriture

file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] ) : int

➔ Écrit des données dans un fichier et retourne le nombre d'octets écrits

Si le fichier n'existe pas, il sera automatiquement créé.

FILE_APPEND

➔ si le fichier filename existe déjà, cette option permet d'ajouter les données au fichier au lieu de l'écraser.

Lecture

file_get_contents ( string $filename [, bool $use_include_path = FALSE [, resource $context [, int $offset = 0 [, int $maxlen ]]]] ) : string

➔ Lit tout un fichier dans une chaîne

Pour les gros fichiers

fopen ( string $filename , string $mode [, bool $use_include_path = FALSE [, resource $context ]] ) : resource

➔ Ouvre un fichier ou une URL, cela permet de mettre fichier en ressource et de placer un curseur dedans sans l'ouvrir, pour chercher dans de très grands fichiers

modeDescription
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. Dans ce mode, la fonction fseek() na aucun effet, les écritures surviennent toujours.
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. Dans ce mode, la fonction fseek() n'affecte que la position de lecture, les écritures surviennent toujours.
x Crée et ouvre le fichier en écriture seulement ; 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.
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, sil existe, il nest 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.
e Défini l'indicateur close-on-exec sur le descripteur de fichier ouvert. Disponible uniquement en PHP compilé sur les systèmes conforme POSIX.1-2008.
fseek ( resource $handle , int $offset [, int $whence = SEEK_SET ] ) : int

➔ Modifie la position du pointeur de fichier

file ( string $filename [, int $flags = 0 [, resource $context ]] ) : array

➔ Lit le fichier et renvoie le résultat dans un tableau

fread ( resource $handle , int $length ) : string

➔ Lecture du fichier en mode binaire

filetype ( string $filename ) : string

➔ Retourne le type de fichier

fstat ( resource $handle ) : array

➔ Lit les informations sur un fichier à partir d'un pointeur de fichier

fgets ( resource $handle [, int $length ] ) : string

➔ Récupère la ligne courante sur laquelle se trouve le pointeur du fichier, et fait avancer le curseur à la ligne suivante, pour lire une ligne dans le fichier, il faut faire une boucle jusqu'à la ligne voulue.

fclose ( resource $handle ) : bool

➔ Ferme un fichier. Il faut fermer le fichier après l'avoir utilisé.

Définition

Un cookie est défini par le protocole de communication HTTP comme étant une suite d'informations envoyée par un serveur HTTP à un client HTTP, que ce dernier retourne lors de chaque interrogation du même serveur HTTP sous certaines conditions.

Il est envoyé en tant qu'en-tête HTTP par le serveur web au navigateur web qui le renvoie inchangé à chaque fois qu'il accède au serveur. Un cookie peut être utilisé pour une authentification, une session (maintenance d'état), et pour stocker une information spécifique sur l'utilisateur, comme les préférences d'un site ou le contenu d'un panier d'achat électronique

Le système de cookie n'est pas sécurisé car on peut modifier les valeurs par l'inspecteur.

Contenu

- Name (de la clé)
- Value (de la clé)
- Domain (le domaine pour lequel le cookie est associé)
- Path (pour restreindre les cookies à certains dossiers)
- Expires (dates d'expiration, une fois la date dépassée, le navigateur supprime le cookie) La limite de taille des cookies dépend des navigateurs, en moyenne 4ko à 5ko

Il faut envoyer une en-tête, il ne doit y a avoir aucun contenu dans le script avant les en-têtes

header ( string $header [, bool $replace = TRUE [, int $http_response_code ]] ) : void

➔ Envoie un en-tête HTTP brut

setcookie ( string $name [, string $value = "" [, int $expires = 0 [, string $path = "" [, string $domain = "" [, bool $secure = FALSE [, bool $httponly = FALSE ]]]]]] ) : bool

➔ Envoie un cookie

$expires

➔ est sous la forme time(), si on ne met rien, le cookie expirera à la fin de la session, quand l'utilisateur fermera son navigateur.
Pour définir 24h : time() + 60 * 60 * 24

setcookie ('utilisateur', 'John', time() + 60 * 60 * 24); donnera : utilisateur=John; expires=Thu, 21-May-2020 11:03:12 GMT; Max-Age=86400

Il y a une Superglobale : $_COOKIE, c'est un tableau associatif de variables, passé au script courant, via des cookies HTTP.

unset ( mixed $var [, mixed $... ] ) : void

➔ Détruit une variable

serialize ( mixed $value ) : string

➔ Génère une représentation stockable d'une valeur

unserialize ( string $str [, array $options ] ) : mixed

➔ Crée une variable PHP à partir d'une valeur linéarisée

On peut donc faire un setcookie de la version serialize d'un tableau puis on récupère le cookie est on le unserialize pour retrouver le tableau.

json_encode ( mixed $value [, int $options = 0 [, int $depth = = 512 ]] ) : string

➔ Retourne la représentation JSON d'une valeur

json_decode ( string $json [, bool $assoc = FALSE [, int $depth = 512 [, int $options c*= 0 ]]] ) : mixed

➔ Décode une chaîne JSON

Session

C'est comme un cookie top secret, l'utilisateur ne peut ni lire ni modifier les informations contenues dedans, on peut mettre des tableaux dedans.

Comme les cookies, il ne faut d'affichage avant, car cela modifie l'en-tête.

La session expire quand l'utilisateur fermera son navigateur.

session_start ([ array $options = array() ] ) : bool

➔ Démarre une nouvelle session ou reprend une session existante, il ne faut pas faire un session_start à chaque page car cela prend du temps, il faut le faire que lorsqu'on a besoin d'information sur la session.

Il y a une Superglobale : $SESSION, c'est un tableau associatif des valeurs stockées dans les sessions, et accessible au script courant.
Voir la vidéo de Grafikart : Comment marche $_SESSION

session_status ( void ) : int

➔ Détermine le statut de la session courante

Valeurs de retour :

PHP_SESSION_DISABLED : si les sessions sont désactivées.
PHP_SESSION_NONE : si les sessions sont activées, mais qu'aucune n'existe.
PHP_SESSION_ACTIVE : si les sessions sont activées, et qu'une existe.

Chiffrement

Il existe 2 types de chiffrement :

Remplacement

On remplace les lettres du mot de passe, ce n'est pas très sécurisé

Hachage

Plus sécurisé, on assigne une signature au mot de passe du côté serveur.

il existe 2 fonctions :

password_hash ( string $password , int $algo [, array $options ] ) : string

➔ Crée une clé de hachage pour un mot de passe

Les algorithmes suivants sont actuellement supportés :

- PASSWORD_DEFAULT - Utilisation de l'algorithme bcrypt (par défaut depuis PHP 5.5.0). Notez que cette constante est conçue pour changer dans le temps, au fur et à mesure que des algorithmes plus récents et plus forts sont ajoutés à PHP. Pour cette raison, la longueur du résultat issu de cet algorithme peut changer dans le temps, il est donc recommandé de stocker le résultat dans une colonne de la base de données qui peut contenir au moins 60 caractères (255 caractères peut être un très bon choix).

- PASSWORD_BCRYPT - Utilisation de l'algorithme CRYPT_BLOWFISH pour créer la clé de hachage. Ceci va créer une clé de hachage standard crypt() utilisant l'identifiant “$2y$”. Le résultat sera toujours une chaîne de 60 caractères, ou FALSE si une erreur survient.

- PASSWORD_ARGON2I - Utilise l'algorithme de hachage Argon2i pour créer le hachage. Cet algorithme est seulement disponible si PHP a été compilé avec le support d'Argon2

- PASSWORD_ARGON2ID - Utilise l'algorithme de hachage Argon2id pour créer le hachage. Cet algorithme est seulement disponible si PHP a été compilé avec le support d'Argon2

cost détermine le coût algorithmique qui doit être utilisé, plus il est élevé plus il faut du temps pour chiffrer ou déchiffrer le mot de passe (12 est bien), si omis, la valeur par défaut 10 sera utilisée. C'est un bon compromis, mais on pourrait vouloir l'augmenter suivant notre architecture.

password_verify ( string $password , string $hash ) : bool

➔ Vérifie qu'un mot de passe correspond à un hachage

cURL

Présentation

cURL (abréviation de client URL request library : « bibliothèque de requêtes aux URL pour les clients » ou see URL : « voir URL ») est une interface en ligne de commande, destinée à récupérer le contenu d'une ressource accessible par un réseau informatique.

La ressource est désignée à l'aide d'une URL et doit être d'un type supporté par le logiciel (voir ci-dessous). Le logiciel permet de créer ou modifier une ressource (contrairement à wget), il peut ainsi être utilisé en tant que client REST.

Le programme cURL implémente l'interface utilisateur et repose sur la bibliothèque logicielle libcurl, développée en langage C. Celle-ci est ainsi accessible aux programmeurs qui veulent disposer des fonctionnalités d'accès au réseau dans leurs programmes. Des interfaces ont été créées dans de nombreux langages (C++, Java, .NET, Perl, PHP, Ruby…).

La bibliothèque supporte notamment les protocoles DICT, file, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, Telnet et TFTP.

L'écriture peut se faire en HTTP en utilisant les commandes POST ou PUT.

backend/phpbase.txt · Last modified: 2020/09/16 10:35 (external edit)