Blog ENI : Toute la veille numérique !
Dernière chance (fin le 29/02) : -25€ dès 75€ sur les livres en ligne, vidéos... code FUSEE25. J'en profite !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. PHP 8
  3. Utiliser les fonctions PHP
Extrait - PHP 8 Développez un site web dynamique et interactif (2e édition)
Extraits du livre
PHP 8 Développez un site web dynamique et interactif (2e édition) Revenir à la page d'achat du livre

Utiliser les fonctions PHP

Préambule

L’objectif de ce chapitre est de présenter les fonctions les plus utiles dans le cadre du développement d’un site web.

PHP propose de nombreuses fonctions ; la description de chaque fonction est accessible en ligne sur le site www.php.net.

images/logoversion8.png

Depuis la version 8, il est possible de passer des paramètres à une fonction en utilisant le nom du paramètre au lieu de sa position. Cette fonctionnalité est présentée dans le chapitre Écrire des fonctions et des classes PHP, mais elle peut être utilisée pour les fonctions natives du langage PHP, et donc pour les fonctions présentées dans ce chapitre. Par contre, dans ce chapitre, les noms réels des paramètres des fonctions ne sont pas présentés (ils sont traduits) ; pour les connaître, consultez la documentation en ligne des fonctions.

Depuis la version 8.1, passer la valeur NULL à un paramètre qui n’est pas explicitement optionnel est déprécié et génère donc une alerte de niveau E_DEPRECATED.

Exemple

<?php  
$x = null; 
$n = strlen($x);  
?> 

Résultat

Deprecated: strlen(): Passing null to parameter #1 ($string) of type string 
is deprecated in /app/scripts/index.php on line 3 

Manipuler les constantes, les variables et les types de données

1. Constantes

PHP propose un certain nombre de fonctions utiles sur les constantes :

Nom

Rôle

defined

Indique si une constante est définie ou non.

constant

Retourne la valeur d’une constante.

defined

La fonction defined permet de savoir si une constante est définie ou non.

Syntaxe

booléen defined(chaîne nom) 

nom

Nom de la constante.

La fonction defined retourne TRUE si la constante est définie et FALSE dans le cas contraire.

Exemple

<?php 
// Tester si la constante CONSTANTE est définie. 
$ok = defined('CONSTANTE'); 
if ($ok) { 
  echo 'CONSTANTE est définie.<br />'; 
} else { 
  echo 'CONSTANTE n\'est pas définie.<br />'; 
}; 
// Définir la constante CONSTANTE 
define('CONSTANTE','valeur de CONSTANTE'); 
// Tester si la constante CONSTANTE est définie. 
$ok = defined('CONSTANTE'); 
if ($ok) { 
  echo 'CONSTANTE est définie.<br />'; 
} else { 
  echo 'CONSTANTE n\'est pas définie.<br />'; 
}; 
?> 

Résultat

CONSTANTE n'est pas définie. 
CONSTANTE est définie. 

constant

La fonction constant retourne la valeur d’une constante dont le nom est passé en paramètre.

Syntaxe

mixte constant(chaîne nom) 

Avec :

nom

Nom de la constante.

Cette fonction est pratique pour récupérer la valeur d’une constante dont le nom n’est pas connu a priori.

Exemple

<?php 
// définir le nom de la constante dans une variable 
$nomConstante = 'AUTRE CONSTANTE'; 
// définir la valeur de la constante 
define($nomConstante,'valeur de AUTRE CONSTANTE'); 
// afficher la valeur de la constante 
echo $nomConstante,' = ',constant($nomConstante); 
?> 

Résultat

AUTRE CONSTANTE = valeur de AUTRE CONSTANTE 

D’autres fonctions permettent de connaître le type d’une constante (cf. section Manipuler les constantes, les variables et les types de données - Types de données).

2. Variables

PHP propose un certain nombre de fonctions utiles sur les variables...

Manipuler les tableaux

PHP propose un grand nombre de fonctions permettant de manipuler les tableaux.

Les fonctions les plus utilisées sont les suivantes :

Nom

Rôle

count

Compte le nombre d’éléments dans un tableau.

in_array

Teste si une valeur est présente dans un tableau.

array_search

Recherche une valeur dans un tableau.

array_replace

Remplace des valeurs dans un tableau.

[a|k][r]sort

Trie un tableau (plusieurs variantes possibles).

explode

Découpe une chaîne selon un séparateur et stocke les éléments dans un tableau.

implode

Regroupe les éléments d’un tableau dans une chaîne à l’aide d’un séparateur.

max

Retourne la plus grande valeur stockée dans un tableau.

min

Retourne la plus petite valeur stockée dans un tableau.

str_split

Découpe une chaîne en morceaux de longueur fixe et stocke les éléments dans un tableau.

array_column

Retourne les valeurs d’une colonne d’un tableau multidimensionnel.

array_key_first

Retourne la première clé d’un tableau.

array_key_last

Retourne la dernière clé d’un tableau.

Certaines fonctions modifient le contenu du tableau passé en paramètres et ne peuvent donc pas être appliquées à un tableau constant sous peine d’obtenir une erreur fatale :

Fatal error: Only variables can be passed by reference in ... 

La fonction is_array (cf. section Manipuler les constantes, les variables et les types de données - Types de données) permet de savoir si une variable est de type tableau. Ne l’oubliez pas.

De nombreuses autres fonctions existent, la description de chaque fonction est accessible en ligne sur le site www.php.net. Vous y trouverez notamment des fonctions pour :

  • réaliser des calculs (somme...)

  • extraire un sous-tableau d’un tableau

  • fusionner des tableaux

  • dédoublonner un tableau...

count

La fonction count permet de connaître le nombre d’éléments dans un tableau.

Syntaxe

entier count(tableau variable) 

variable

Variable concernée.

Si la variable est un tableau, la fonction count retourne le nombre d’éléments présents dans le tableau (0 si le tableau est vide).

images/logoversion8.png

Depuis la version 8, si la fonction est appliquée à une variable qui n’est pas un tableau...

Manipuler les nombres

Les fonctions les plus utiles pour manipuler les nombres sont les suivantes :

Nom

Rôle

abs

Valeur absolue d’un nombre.

ceil

Arrondit un nombre à l’entier supérieur.

floor

Arrondit un nombre à l’entier inférieur.

intdiv

Quotient de la division entière de deux entiers.

max

Plus grande valeur d’une liste de nombres.

min

Plus petite valeur d’une liste de nombres.

rand

Génération de nombres aléatoires

round

Arrondi d’un nombre à virgule flottante.

abs

La fonction abs retourne la valeur absolue d’un nombre.

Syntaxe

nombre abs(nombre valeur) 

valeur

Nombre à traiter.

La fonction abs retourne un nombre du même type que le nombre passé en paramètre (entier ou nombre à virgule flottante).

Exemple

<?php  
echo 'abs(123) = ',abs(123),'<br />';  
echo 'abs(-321) = ',abs(-321); 
?> 

Résultat

abs(123) = 123 
abs(-321) = 321 

ceil

La fonction ceil (« plafond ») arrondit un nombre à l’entier supérieur.

Syntaxe

nombre ceil(nombre valeur) 

valeur

Nombre à traiter.

La fonction ceil retourne un nombre entier mais dont le type de données est un nombre à virgule flottante (float).

Exemple

<?php  
echo 'ceil(123.45) = ',ceil(123.45),'<br />';  
echo 'ceil(-123.45) = ',ceil (-123.45); 
?> 

Résultat

ceil(123.45) = 124 
ceil(-123.45) = -123 

floor

La fonction floor (« plancher ») arrondit un nombre à l’entier inférieur.

Syntaxe

nombre floor(nombre valeur) 

valeur

Nombre à traiter.

La fonction floor retourne un nombre entier mais dont le type de données est un nombre à virgule flottante (float).

Exemple

<?php  
echo 'floor(1234.56) = ',floor(1234.56),'<br />';  
echo 'floor(-1234.56) = ',floor (-1234.56); 
?> 

Résultat

floor(1234.56) = 1234 
floor(-1234.56) = -1235 

intdiv

La fonction intdiv retourne le quotient de la division entière de deux entiers.

Syntaxe

entier intdiv(entier dividende, entier diviseur) 

dividende

Dividende.

diviseur

Diviseur.

Si les deux paramètres ne sont pas de type entier, ils sont convertis en entiers avant le calcul, en utilisant les règles...

Manipuler les chaînes de caractères

Les fonctions les plus utiles pour manipuler les chaînes de caractères sont les suivantes :

Nom

Rôle

strlen

Retourne le nombre de caractères d’une chaîne.

strtolower

strtoupper

ucfirst

ucwords

lcfirst

Conversions minuscules/majuscules éventuellement limitées au(x) premier(s) mot(s).

strcmp

strcasecmp

Comparaison de chaîne (sensible à la casse ou non).

[s]printf

v[s]printf

Mise en forme d’une chaîne (identique aux fonctions C équivalentes).

number_format

Mise en forme d’un nombre.

[l|r]trim

Suppression de caractères "blancs".

substr

Extraction d’une sous-chaîne dans une chaîne.

str_repeat

Construction d’une chaîne par répétition de caractères.

str[r][i]pos

Recherche de la position d’une occurrence (caractère ou chaîne) à l’intérieur d’une chaîne.

str[i]str

strrchr

Extraction de la sous-chaîne dans une chaîne commençant à partir d’une certaine occurrence d’un caractère ou d’une chaîne.

str_[i]replace

Remplacement des occurrences d’une chaîne par une autre chaîne.

strtr

Remplacement des occurrences d’un caractère par un autre caractère ou d’une chaîne par une autre chaîne.

str_contains

Détermine si une chaîne contient une autre chaîne (apparue en version 8).

str_starts_with

Détermine si une chaîne commence par une autre chaîne (apparue en version 8).

str_ends_with

Détermine si une chaîne se termine par une autre chaîne (apparue en version 8).

N’oubliez pas les fonctions explode, implode et str_split précédemment présentées (cf. section Manipuler les tableaux). D’autres fonctions, plus spécifiquement liées à la gestion des formulaires, sont étudiées dans le chapitre Gérer les formulaires et les liens.

images/logoversion8.png

Depuis la version 8.2, les fonctions qui effectuent des conversions de casse (strtolower, strtoupper, lcfirst, ucfirst, ucwords) ou des recherches/comparaisons insensibles à la casse (stristr, stripos, strripos, str_ireplace) ne tiennent plus compte des caractéristiques linguistiques locales éventuellement définies par l’intermédiaire...

Utiliser les expressions rationnelles

1. Introduction

Une expression rationnelle est une chaîne de caractères qui décrit le modèle (encore appelé motif) recherché dans une autre chaîne de caractères. Les expressions rationnelles sont très utiles et très efficaces pour effectuer des vérifications ou des manipulations parfois complexes sur les chaînes de caractères.

Le terme anglais « regular expression » est très souvent traduit à tort par « expression régulière ».

PHP propose une extension pour utiliser les expressions rationnelles : PCRE (Perl Compatible Regular Expression).

Cette extension (fonctions preg_*) utilise pratiquement la même syntaxe que le langage Perl pour écrire l’expression rationnelle.

2. Structure d’une expression rationnelle

Une expression rationnelle Perl doit être encadrée par un caractère délimiteur. Ce délimiteur peut être n’importe quel caractère à l’exception de l’antislash (\) ; très souvent le caractère slash (/) est utilisé. Il est possible aussi d’utiliser les délimiteurs (), {}, [] et <>.

Exemple (délimiteurs en gras)

/http:\/\/(.*)/ 
{http://(.*)} 

Comme le montre le premier exemple ci-dessus, si le caractère délimiteur est présent dans le motif recherché, il doit être échappé par un antislash (\). Dans ce cas, utiliser un autre délimiteur que le / (# par exemple) permet d’obtenir une expression plus lisible. 

Après le délimiteur de fermeture, il est possible de préciser des options qui vont modifier le comportement de la recherche.

Exemple (options en gras et utilisation du caractère # comme délimiteur)

#http://(.*)#is 

Les principales options sont présentées dans la suite.

Dans une expression rationnelle, la plupart des caractères se représentent eux-mêmes. Ainsi l’expression /http/ permet de rechercher la chaîne http.

Mais la puissance des expressions rationnelles réside dans l’existence de caractères spéciaux (métacaractères) qui sont interprétés pour décrire le motif recherché....

Manipuler les dates

PHP ne gère pas les dates avec un type de donnée spécifique. Néanmoins, des dates peuvent être manipulées, soit sous la forme d’une chaîne de caractères, soit sous la forme d’un timestamp Unix (correspondant au nombre de secondes écoulées depuis le 1er janvier 1970 01:00:00). Il existe aussi plusieurs classes qui offrent des fonctionnalités avancées pour la manipulation des dates (classe DateTime) et des intervalles (classe DateInterval) sous une forme orientée objet (voir la documentation).

Plusieurs fonctions permettent de manipuler les dates sous l’une ou l’autre de ces formes :

Nom

Rôle

checkdate

Vérifie que trois entiers représentant le jour, le mois et l’année correspondent à une date valide.

date

Convertit en chaîne une date donnée sous la forme d’un timestamp Unix.

strftime

Convertit en chaîne une date donnée sous la forme d’un timestamp Unix, en utilisant des caractéristiques locales.

datefmt_create

Définit un format qui peut être utilisé pour con-vertir une date en chaîne à l’aide de la fonction datefmt_format.

datefmt_format

Formate une date/heure sous forme de chaîne à l’aide d’un format créé au préalable avec la fonction datefmt_create.

getdate

Stocke dans un tableau les différentes composantes d’une date donnée sous la forme d’un timestamp Unix.

date_parse_from_format

Stocke dans un tableau les différentes composantes d’une date donnée sous la forme d’une chaîne de caractères.

time

Donne le timestamp Unix actuel.

mktime

Crée un timestamp Unix à partir des différentes composantes d’une date.

microtime

Donne le timestamp Unix actuel accompagné du nombre de microsecondes écoulées depuis la dernière seconde.

hrtime

Retourne un temps écoulé à partir d’un instant arbitraire, avec une grande précision.

idate

Donne les composantes d’une date fournie sous la forme d’un timestamp Unix.

L’appel de certaines fonctions peut générer une alerte de niveau E_NOTICE si le fuseau horaire n’est pas correctement défini (voir la directive de configuration date.timezone...

Générer un identifiant unique

Dans certaines situations, il peut être nécessaire de générer des identifiants uniques.

PHP propose la fonction uniqid pour générer des identifiants uniques.

Syntaxe

chaîne uniqid()([chaîne préfixe [, booléen plus_unique]]) 

préfixe

Préfixe à ajouter à l’identifiant.

Mettre une chaîne vide ou ne rien mettre si vous ne souhaitez pas de préfixe.

plus_unique

Si ce paramètre est positionné à TRUE, des données supplémentaires sont ajoutées à la fin de la valeur retournée pour obtenir un identifiant plus long et plus difficilement identifiable.

La fonction uniqid retourne une chaîne de treize caractères, ou vingt-trois si le paramètre plus_unique est à TRUE (sans compter le préfixe), calculée à partir de l’heure courante en microsecondes.

Exemple

<?php  
echo uniqid(),'<br />';  
echo uniqid(),'<br />';  
echo uniqid('abc'),'<br />';  
echo uniqid('',TRUE) ,'<br />';  
?> 

Résultat

603e17c1be84f
603e17c1be861
abc603e17c1be862
603e17c1be8635.27083137 

Cet exemple montre que l’identifiant généré est bien unique, même si la différence entre...

Manipuler les fichiers sur le serveur

1. Fonctions utiles

PHP propose un grand nombre de fonctions permettant de manipuler les fichiers sur le serveur.

Les fonctions les plus utiles sont les suivantes :

Nom

Rôle

fopen

Ouvrir un fichier

fclose

Fermer un fichier

fread

Lire le contenu d’un fichier (dans une chaîne)

file

Lire le contenu d’un fichier (dans un tableau)

readfile

Lire le contenu d’un fichier et l’envoyer directement vers la sortie

fwrite

Écrire dans un fichier

file_get_contents

Ouvrir, lire et fermer un fichier

file_put_contents

Ouvrir, écrire et fermer dans un fichier

copy

Copier un fichier

unlink

Supprimer un fichier

rename

Renommer un fichier

file_exists

Tester l’existence d’un fichier

filesize

Lire la taille d’un fichier

chdir

Changer de répertoire courant

opendir

Ouvrir un répertoire

closedir

Fermer un répertoire

readdir

Lire le contenu d’un répertoire

scandir

Lister le contenu d’un répertoire (dans un tableau)

Certaines de ces fonctions vont prendre comme paramètre un nom de fichier ou de répertoire. Sur une plate-forme Windows, pour spécifier un chemin d’accès dans une chaîne de caractères délimitée par des guillemets, vous devez échapper l’antislash (par un antislash = \\) ou vous pouvez utiliser une notation type "Unix", avec des slashs (/). Par exemple, le chemin c:\temp\info.txt peut être écrit "c:\\temp\\info.txt" ou "c:/temp/info.txt". Si aucun chemin n’est indiqué, c’est le répertoire courant qui est utilisé. Des noms relatifs peuvent être spécifiés en utilisant le caractère . (point) pour désigner le répertoire courant, et .. (deux points) pour désigner le répertoire supérieur.

La constante prédéfinie DIRECTORY_SEPARATOR donne le caractère de séparation utilisé dans les noms de répertoire pour la plate-forme sur laquelle PHP est installé. La constante prédéfinie PHP_EOL donne la séquence de caractères utilisée par la plate-forme pour représenter une nouvelle ligne.

Par ailleurs, plusieurs fonctions possèdent un paramètre (appelé utiliser_inclusion dans les syntaxes de cet ouvrage)...

Manipuler les en-têtes HTTP

La fonction header permet d’envoyer des en-têtes HTTP avec la page HTML.

Syntaxe simplifiée

header(chaîne en-tête[, booléen remplacer[, entier code_réponse]]) 

en-tête

Chaîne à envoyer comme en-tête HTTP avec la page HTML.

remplacer

Indique si la fonction doit remplacer un en-tête précédemment émis (valeur TRUE, par défaut) ou bien ajouter un nouvel en-tête (valeur FALSE).

code_réponse

Code réponse HTTP.

Les différents en-têtes HTTP sont décrits dans la RFC 2616.

Par exemple, la fonction header peut être utilisée pour envoyer un en-tête qui interdit la mise en cache de la page par le client ou par un proxy. Ce besoin est assez fréquent dans les scripts PHP qui génèrent du HTML dynamique dont le contenu change en fonction de l’utilisateur.

Exemple

// HTTP 1.0 
header("Pragma: no-cache"); 
// HTTP 1.1 
header("Cache-Control: no-cache, must-revalidate"); 

Dans la suite de cet ouvrage, nous aurons l’occasion d’utiliser la fonction header dans plusieurs situations :

  • redirection HTTP (cf. chapitre Gérer les formulaires et les liens) ;

  • identification HTTP (cf. chapitre Gérer les sessions, section Authentification) ;

  • téléchargement (download) d’un document (cf. chapitre...

Exercices

1. Exercice 3 : manipuler les données

Maintenant que nous avons étudié un grand nombre de fonctions PHP, nous pouvons simplifier le code que nous avions écrit dans l’exercice 2, afficher des informations supplémentaires et modifier la présentation de certaines données.

Étape 1

Pour commencer, nous allons afficher un nouveau message donnant la date du jour, simplifier le code qui compte le nombre de lettres du nom et celui qui détermine si le nom commence par une voyelle.

Indications :

  • Dans un nouveau répertoire, copiez les scripts accueil.php et commun.inc.php développés dans l’exercice 2.

  • Dans le script accueil.php, après le message de bienvenue, affichez un nouveau message donnant la date du jour sous la forme « Nous sommes le .... » avec une date au format JJ/MM/AAAA.

  • Simplifiez le code qui compte le nombre de caractères du nom en utilisant une fonction PHP à la place de la boucle while.

  • Simplifiez le code qui détermine si le nom conmmence par une voyelle ou une consonne en utilisant des fonctions PHP à la place de la structure de contrôle if ou switch. Par exemple, vous pouvez définir un tableau (ou une chaîne) qui contient la liste des voyelles et tester si la première lettre du nom est dans ce tableau (ou dans cette chaîne). Gérez aussi le cas où le nom ne commence pas par une lettre majuscule comme supposé initialement.

Résultat attendu (sans affichage du tableau des auteurs)

Bonjour Olivier. 
Bienvenue sur monSite.com. 
Nous sommes le 17/03/2023. 
Votre nom comporte 7 lettres. 
Votre nom commence par une voyelle. 

Solution (code PHP modifié)

<?php 
// Afficher les messages 
echo "Bonjour $nom.<br />"; 
echo 'Bienvenue sur ',NOM_SITE,'.<br />'; 
// Afficher la date. 
echo 'Nous sommes le ',date('d/m/Y'),'.<br />'; 
// Compter le nombre de lettres du nom. 
echo 'Votre nom comporte ',strlen($nom),' lettres.<br />'; 
// Déterminer si le nom commence par une voyelle ou une consonne. 
$voyelles = ['A','E','I','O','U','Y']; 
if (in_array(strtoupper($nom[0]),$voyelles))...