Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Du 22 au 24 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. PHP et MySQL
  3. Utiliser les fonctions PHP
Extrait - PHP et MySQL Maîtrisez le développement d'un site web dynamique et interactif (5e édition)
Extraits du livre
PHP et MySQL Maîtrisez le développement d'un site web dynamique et interactif (5e édition)
1 avis
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.

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...