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.
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)
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...
Manipuler les tableaux
PHP propose un très 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_arrays |
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 |
Trient un tableau (plusieurs variantes possibles). |
str_split |
Découpe une chaîne en morceaux de longueur fixe et stocke les éléments dans un tableau. |
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. |
array_column |
Retourne les valeurs d’une colonne d’un tableau multidimensionnel. |
max |
Retourne la plus grande valeur stockée dans un tableau. |
min |
Retourne la plus petite valeur stockée dans un tableau. |
N’oubliez pas la fonction is_array qui permet de savoir si une variable est de type tableau (cf. dans ce chapitre Manipuler les constantes, les variables et les types de données - Types de données).
Certaines fonctions modifient le contenu du tableau passé en paramètre 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 ...
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 ;
-
retourner la première ou la dernière clé d’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 nombre aléatoire |
round |
Arrondit 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 à 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 à 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)...
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 lcfirst ucwords |
Conversions minuscules/majuscules. |
strcmp strcasecmp |
Comparaison de chaînes (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 portion de chaîne. |
str_repeat |
Construction d’une chaîne par répétition de caractères. |
str[r][i]pos |
Recherche 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 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 et implode présentées précédemment (cf. dans ce chapitre Manipuler les tableaux). D’autres fonctions plus spécifiquement liées à la gestion des formulaires sont étudiées dans le chapitre...
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 seule 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 <>.
Exemples (délimiteur en gras)
/http:\/\/(.*)/
{http://(.*)}
Comme le montre le premier exemple, 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 (option en gras et utilisation du caractère # comme délimiteur)...
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. |
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. |
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...
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
62583b776e886
62583b776e887
abc62583b776e888
62583b776e8894.21626890
Cet exemple montre que l’identifiant généré est bien unique, même si la différence entre deux appels successifs est faible. Du coup, l’identifiant généré peut être jugé insuffisamment aléatoire et un peu trop déterministe.
Une technique classique consiste alors à hacher l’identifiant généré. La fonction md5 permet de le faire très facilement, en utilisant une méthode MD5.
Syntaxe
chaîne md5(chaîne valeur)
valeur |
Chaîne à hacher. |
La fonction md5 retourne la chaîne hachée....
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) |
fwrite |
Écrire dans un fichier |
file_get_contents |
Ouvrir, lire et fermer un fichier |
file_put_contents |
Ouvrir, écrire et fermer un fichier |
readfile |
Affiche le contenu d’un fichier directement sur la sortie |
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 |
Il existe aussi des fonctions qui permettent de lire le contenu d’un répertoire (opendir, readdir, closedir, scandir, etc.). Pour plus d’information, consultez la documentation PHP.
Certaines de ces fonctions vont prendre comme paramètre un nom de fichier ou de répertoire. Sur la 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 de 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...
Envoyer un courrier électronique
1. Vue d’ensemble
Un site interactif a souvent besoin d’envoyer des messages électroniques aux utilisateurs, par exemple pour confirmer un achat, une inscription ou envoyer une lettre d’information.
La fonction mail, proposée par PHP, permet de répondre simplement à ce genre de besoin. Cette fonction est détaillée dans ce chapitre, d’abord, pour envoyer des messages textes (sans pièce jointe), puis pour envoyer des messages au format MIME (Multipurpose Internet Mail Extensions).
En complément, PHP propose une bibliothèque puissante, mais plus complexe d’utilisation, pour gérer des messages selon le protocole IMAP (Internet Message Access Protocol). Cette bibliothèque ne sera pas abordée dans cet ouvrage car elle n’est pas indispensable pour répondre au besoin évoqué précédemment.
2. Envoyer un message texte sans pièce jointe
La fonction mail permet d’envoyer un message électronique.
Syntaxe
booléen mail(chaîne destinataire, chaîne objet, chaîne message[, chaîne
entête])
destinataire |
Adresse e-mail du destinataire. Des destinataires multiples peuvent être indiqués en les séparant par des virgules. |
objet |
Objet du message. |
message |
Texte du message. |
entête |
En-têtes supplémentaires, sous la forme d’une chaîne de caractères ou d’un tableau. |
La fonction mail envoie le message caractérisé par les différents paramètres à un serveur de messagerie défini par les directives de configuration suivantes :
Win32 |
SMTP |
Adresse du serveur SMTP auquel envoyer le message. Exemple : smtp.gmail.com |
sendmail_from |
Adresse e-mail de l’émetteur. Exemple : webmaster@monsite.com... |
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 avec PHP - Aller sur une autre page) ;
-
identification HTTP (cf. chapitre Gérer les sessions - Authentification) ;
-
téléchargement ("download") d’un document (cf. chapitre Gérer les formulaires et les liens avec PHP - Échanger un fichier entre le client et le serveur) ;
-
affichage d’une image dans une page à l’aide d’un script PHP (cf. chapitre Accéder à une base de données MySQL - Utilisation de l’extension MySQLi).
La fonction header doit être appelée avant toute instruction (PHP ou HTML) qui a pour effet de commencer à construire...