Manuel du propriétaire | PHP PHP Manuel utilisateur

Ajouter à Mes manuels
1195 Des pages
Manuel du propriétaire | PHP PHP Manuel utilisateur | Fixfr
Manuel PHP
Stig Sæther Bakken
Alexander Aulbach
Egon Schmid
Jim Winstead
Lars Torben Wilson
Rasmus Lerdorf
Zeev Suraski
Andrei Zmievski
Jouni Ahto
Publié par
Damien Seguy
16-08-2001
Copyright © 1997, 1998, 1999, 2000, 2001 par PHP Documentation Group
Copyright
Ce manuel est © Copyright 1997, 1998, 1999, 2000, 2001 par PHP Documentation Group. Les
membres de ce groupe sont listés sur la première page de ce manuel.
Ce manuel peut être redistribué sous licence GNU General Public License, comme stipulé
par la Free Software Foundation; soit la version 2 de la Licence, soit (à votre choix), une
version ultérieure.
Manuel PHP
par Stig Sæther Bakken, Alexander Aulbach, Egon Schmid, Jim Winstead, Lars Torben Wilson, Rasmus Lerdorf, Zeev Suraski,
Andrei Zmievski, et Jouni Ahto
par
Publié par Damien Seguy
Publié 16-08-2001
Copyright © 1997, 1998, 1999, 2000, 2001 par PHP Documentation Group
Copyright
Ce manuel est © Copyright 1997, 1998, 1999, 2000, 2001 par PHP Documentation Group. Les membres de ce groupe sont listés sur
la première page de ce manuel.
Ce manuel peut être redistribué sous licence GNU General Public License, comme stipulé par la Free Software Foundation; soit la
version 2 de la Licence, soit (à votre choix), une version ultérieure.
Table des matières
Préface ......................................................................................................................................................................................i
A propos de ce manuel.....................................................................................................................................................i
I. Comment Commencer........................................................................................................................................................1
1. Introduction.................................................................................................................................................................1
Qu’est ce que PHP?...............................................................................................................................................2
Que peut faire PHP? ..............................................................................................................................................2
La génèse du PHP .................................................................................................................................................2
2. Installation...................................................................................................................................................................4
Télécharger la dernière version .............................................................................................................................5
Installation sous UNIX..........................................................................................................................................5
Référence Module Apache ..........................................................................................................................5
Compilation .................................................................................................................................................6
Installation sous Linux ..........................................................................................................................................6
Utilisation des packages ..............................................................................................................................6
Installation sous HP-UX........................................................................................................................................6
Installation sous Solaris.........................................................................................................................................7
Logiciels nécessaires ...................................................................................................................................7
Utilisation des packages ..............................................................................................................................7
Installations Unix/OpenBSD.................................................................................................................................7
Utilisation des ports .....................................................................................................................................7
Utilisation des Packages ..............................................................................................................................8
Installation sous Mac OS X...................................................................................................................................8
Utilisation des packages ..............................................................................................................................8
Compilation pour serveur OS X ..................................................................................................................8
Compilation pour MacOS X client ..............................................................................................................9
Liste complète des options de configuration .......................................................................................................10
Base de données.........................................................................................................................................10
E-commerce...............................................................................................................................................14
Images........................................................................................................................................................15
Divers.........................................................................................................................................................16
Réseau........................................................................................................................................................22
Comportement PHP ...................................................................................................................................23
Serveur .......................................................................................................................................................23
Texte et langue ...........................................................................................................................................25
XML ..........................................................................................................................................................25
Installation sous Windows 9x/ME/NT/2000 .......................................................................................................26
InstallShield sous Windows.......................................................................................................................26
Instructions Générales d’installation .........................................................................................................26
Compilation des sources ............................................................................................................................27
Préparation .......................................................................................................................................28
Mettre tout ensemble........................................................................................................................28
Compilation......................................................................................................................................29
Installation des extensions sous Windows .................................................................................................29
Installation du serveur Apache ............................................................................................................................31
Détails pour l’installation de PHP sous Apache sous Unix.......................................................................31
Détails sur l’installation de PHP sous Windows avec Apache 1.3.x .........................................................32
CGI/ Installation pour exécution en ligne de commande ....................................................................................33
Tests ...........................................................................................................................................................33
Performances .............................................................................................................................................33
Installation avec les serveurs fhttpd ....................................................................................................................33
Installation sur serveur Caudium.........................................................................................................................33
Installation avec les serveurs IIS/PWS................................................................................................................34
Windows et PWS/IIS 3 ..............................................................................................................................34
Windows et PWS 4 ou plus récent.............................................................................................................35
Windows NT/2000 et IIS 4 ou plus récent.................................................................................................35
Installation sous Netscape et iPlanet Enterprise Serveur ....................................................................................36
Installation OmniHTTPd.....................................................................................................................................38
iii
OmniHTTPd 2.0b1 et plus récent pour Windows .....................................................................................38
Installation Oreilly Website Pro Server...............................................................................................................38
Oreilly Website Pro 2.5 et plus récent pour Windows...............................................................................38
Installation Xitami...............................................................................................................................................39
Xitami pour Windows................................................................................................................................39
Autres serveurs web ............................................................................................................................................39
Des problèmes? ...................................................................................................................................................39
Lisez la FAQ ..............................................................................................................................................39
Rapports de Bug ........................................................................................................................................39
Autres problèmes .......................................................................................................................................39
3. Configuration ............................................................................................................................................................41
Le fichier de configuration ..................................................................................................................................42
Directives de configuration générale .........................................................................................................42
Configuration des directives concernant le mail........................................................................................45
Directives de configuration du "Safe Mode" .............................................................................................45
Directives de configuration de débbugage. ................................................................................................46
Directives de chargement des extensions ..................................................................................................46
MySQL Configuration Directives..............................................................................................................46
Directives de configuration mSQL ............................................................................................................46
Directives de configuration Postgres .........................................................................................................47
Directives de configuration SESAM..........................................................................................................47
Directives de configuration Sybase............................................................................................................47
Sybase-CT Configuration Directives .........................................................................................................48
Directives de configuration Informix.........................................................................................................48
Directives de configuration pour les calculs mathématiques.....................................................................49
Directives de configuration du navigateur. ................................................................................................49
Directives de configuration du driver ODBC unifié ..................................................................................49
4. Sécurité .....................................................................................................................................................................51
Binaires CGI........................................................................................................................................................52
Faiblesses connues.....................................................................................................................................52
Cas 1: Tous les fichiers sont publics ..........................................................................................................52
Cas 2: Utilisation de la directive de compilation --enable-force-cgi-redirect ...........................................53
Cas 3: Utilisation du "doc_root" ou du "user_dir" ....................................................................................53
Cas 4: L’exécutable PHP à l’extérieur de l’arborescence du serveur ........................................................53
Module Apache ...................................................................................................................................................54
Sécurité des fichiers.............................................................................................................................................54
Rapport d’erreur ..................................................................................................................................................55
Données transmises par les internautes ...............................................................................................................56
Considérations générales.....................................................................................................................................56
Etre à jour ............................................................................................................................................................57
II. Référence ..........................................................................................................................................................................58
5. La syntaxe de base ....................................................................................................................................................58
Le passage du HTML au PHP.............................................................................................................................59
Le séparateur d’instruction..................................................................................................................................59
Commentaires......................................................................................................................................................60
6. Les types ...................................................................................................................................................................61
Introduction .........................................................................................................................................................62
Booléens ..............................................................................................................................................................62
Conversion en booléen...............................................................................................................................63
Entiers..................................................................................................................................................................63
Dépassement de capacité des entiers .........................................................................................................63
Conversion en entiers.................................................................................................................................64
Depuis un booléen............................................................................................................................64
Depuis un nombre à virgule flottante ...............................................................................................64
From strings .....................................................................................................................................64
Conversion d’autres types ................................................................................................................65
Les nombres à virgule flottante ...........................................................................................................................65
Les chaînes de caractères ....................................................................................................................................65
Syntax ........................................................................................................................................................65
iv
guillemets simples............................................................................................................................65
Guillemets doubles...........................................................................................................................66
Syntaxe Heredoc ..............................................................................................................................66
Traitement des variables dans les chaînes........................................................................................67
Syntaxe simple........................................................................................................................67
Syntaxe complexe...................................................................................................................68
Accès aux caractères d’une chaîne...................................................................................................69
Fonctions et opérateurs pratiques ..............................................................................................................69
Conversion de type ....................................................................................................................................69
Les tableaux.........................................................................................................................................................70
Syntaxe ......................................................................................................................................................70
Créer un tableau array() ..................................................................................................................70
Omettre des clés .....................................................................................................................70
La syntaxe à crochets .......................................................................................................................70
Fonctions pratiques ....................................................................................................................................71
Exemples....................................................................................................................................................71
Attention aux tableaux...............................................................................................................................73
Pourquoi est ce que $foo[bar] est invalide? .................................................................................74
Alors, pourquoi est-ce mal?....................................................................................................74
Les objets.............................................................................................................................................................74
Initialisation d’un objet..............................................................................................................................75
Ressources ...........................................................................................................................................................75
Libérer des ressources................................................................................................................................75
La valeur NULL ..................................................................................................................................................75
Syntaxe ......................................................................................................................................................75
Définition du type................................................................................................................................................75
Transtypage................................................................................................................................................76
7. Les variables .............................................................................................................................................................79
Essentiel ..............................................................................................................................................................80
Variables prédéfinies ...........................................................................................................................................80
Variables Apache .......................................................................................................................................81
Variables d’environnement ........................................................................................................................82
Variables PHP ............................................................................................................................................82
Portée des variables .............................................................................................................................................83
Les variables dynamiques ...................................................................................................................................85
Variables externes à PHP.....................................................................................................................................86
Formulaires HTML (GET et POST)..........................................................................................................86
Bouton "submit" sous forme d’image ..............................................................................................86
HTTP Cookies ...........................................................................................................................................87
Variables d’environnement ........................................................................................................................87
Cas des points dans les noms de variables.................................................................................................87
Détermination du type des variables..........................................................................................................88
8. Les constantes ...........................................................................................................................................................89
Syntaxe ................................................................................................................................................................90
Constantes prédéfinies.........................................................................................................................................90
9. Les expressions .........................................................................................................................................................93
10. Les opérateurs .........................................................................................................................................................96
Les opérateurs arithmétiques...............................................................................................................................97
Les opérateurs d’assignation ...............................................................................................................................97
Opérateurs sur les bits .........................................................................................................................................97
Opérateurs de comparaison .................................................................................................................................98
Opérateur de contrôle d’erreur ............................................................................................................................98
Opérateur d’exécutions........................................................................................................................................99
Opérateurs d’incrémentation/Décrémentation ....................................................................................................99
Les opérateurs logiques .....................................................................................................................................100
La précédence des opérateurs............................................................................................................................100
Opérateurs de chaînes........................................................................................................................................101
11. Les structures de contrôle .....................................................................................................................................102
if.......................................................................................................................................................................103
else ..................................................................................................................................................................103
v
elseif ..............................................................................................................................................................104
Syntaxe alternative ............................................................................................................................................104
while ................................................................................................................................................................105
do..while .......................................................................................................................................................105
for ....................................................................................................................................................................106
foreach ............................................................................................................................................................107
break ................................................................................................................................................................109
continue ..........................................................................................................................................................109
switch ..............................................................................................................................................................110
declare ............................................................................................................................................................112
Ticks.........................................................................................................................................................112
require()............................................................................................................................................................113
include()............................................................................................................................................................113
require_once() ..................................................................................................................................................115
include_once() ..................................................................................................................................................117
12. Les fonctions.........................................................................................................................................................118
Les fonctions utilisateur ....................................................................................................................................119
Les arguments de fonction ................................................................................................................................119
Passage d’arguments par référence..........................................................................................................119
Valeur par défaut des arguments..............................................................................................................120
Nombre d’arguments variable .................................................................................................................121
Les valeurs de retour .........................................................................................................................................121
old_function .................................................................................................................................................121
Fonctions-variable .............................................................................................................................................122
13. Les classes et les objets.........................................................................................................................................123
Les classes : class ...........................................................................................................................................124
extends : héritage............................................................................................................................................125
Constructor : constructeur ............................................................................................................................126
Opérateur ::......................................................................................................................................................127
parent ..............................................................................................................................................................128
Sauvegarde d’objets - cas des sessions..............................................................................................................129
Les fonctions magiques __sleep et __wakeup ...............................................................................................130
Références dans un constructeur .......................................................................................................................130
14. Les références .......................................................................................................................................................133
Qu’est ce qu’une référence? ..............................................................................................................................134
Que font les références ? ...................................................................................................................................134
Ce que les références ne sont pas ......................................................................................................................134
Passage par référence ........................................................................................................................................135
Retourner des références ...................................................................................................................................135
Détruire une référence .......................................................................................................................................136
Repérer une référence........................................................................................................................................136
Références globales .................................................................................................................................136
$this.......................................................................................................................................................136
III. Caractéristiques ...........................................................................................................................................................138
15. Gestion des erreurs................................................................................................................................................138
16. Création d’images .................................................................................................................................................142
17. Authentification HTTP avec PHP .........................................................................................................................144
18. Cookies .................................................................................................................................................................147
19. Gestion des chargements de fichier.......................................................................................................................149
Chargements de fichiers par méthode POST.....................................................................................................150
Erreurs classiques ..............................................................................................................................................151
Chargement multiples de fichiers ......................................................................................................................151
Chargement par méthode PUT ..........................................................................................................................152
20. Utilisation des fichiers à distance..........................................................................................................................154
21. Gestion des connexions.........................................................................................................................................156
22. Connexions persistantes aux bases de données ....................................................................................................158
23. Safe mode..............................................................................................................................................................160
vi
IV. Index des fonctions.......................................................................................................................................................162
I. Apache .....................................................................................................................................................................162
ascii2ebcdic .......................................................................................................................................................163
ebcdic2ascii .......................................................................................................................................................163
apache_lookup_uri ............................................................................................................................................163
apache_note .......................................................................................................................................................163
getallheaders......................................................................................................................................................164
virtual ................................................................................................................................................................164
II. Tableaux .................................................................................................................................................................165
array...................................................................................................................................................................166
array_count_values............................................................................................................................................167
array_diff ...........................................................................................................................................................167
array_filter .........................................................................................................................................................168
array_flip ...........................................................................................................................................................168
array_intersect ...................................................................................................................................................169
array_keys .........................................................................................................................................................169
array_map..........................................................................................................................................................170
array_merge.......................................................................................................................................................172
array_merge_recursive ......................................................................................................................................173
array_multisort ..................................................................................................................................................173
array_pad ...........................................................................................................................................................174
array_pop...........................................................................................................................................................175
array_push .........................................................................................................................................................175
array_reverse .....................................................................................................................................................176
array_reduce ......................................................................................................................................................176
array_rand..........................................................................................................................................................177
array_shift..........................................................................................................................................................177
array_slice .........................................................................................................................................................178
array_splice .......................................................................................................................................................178
array_sum ..........................................................................................................................................................180
array_unique......................................................................................................................................................180
array_unshift......................................................................................................................................................181
array_values.......................................................................................................................................................181
array_walk .........................................................................................................................................................182
arsort..................................................................................................................................................................183
asort ...................................................................................................................................................................183
compact .............................................................................................................................................................184
count ..................................................................................................................................................................184
current................................................................................................................................................................185
each....................................................................................................................................................................185
end .....................................................................................................................................................................186
extract ................................................................................................................................................................186
in_array..............................................................................................................................................................187
array_search ......................................................................................................................................................188
key .....................................................................................................................................................................188
krsort..................................................................................................................................................................189
ksort ...................................................................................................................................................................189
list ......................................................................................................................................................................189
natsort ................................................................................................................................................................190
natcasesort .........................................................................................................................................................191
next ....................................................................................................................................................................191
pos .....................................................................................................................................................................192
prev....................................................................................................................................................................192
range ..................................................................................................................................................................192
reset ...................................................................................................................................................................192
rsort....................................................................................................................................................................192
shuffle ................................................................................................................................................................193
sizeof .................................................................................................................................................................193
sort .....................................................................................................................................................................193
vii
uasort .................................................................................................................................................................194
uksort .................................................................................................................................................................194
usort ...................................................................................................................................................................195
III. Aspell ....................................................................................................................................................................196
aspell_new .........................................................................................................................................................197
aspell_check ......................................................................................................................................................197
aspell_check_raw ..............................................................................................................................................197
aspell_suggest....................................................................................................................................................198
IV. Nombres de grande taille ......................................................................................................................................199
bcadd .................................................................................................................................................................200
bccomp ..............................................................................................................................................................200
bcdiv ..................................................................................................................................................................200
bcmod ................................................................................................................................................................200
bcmul .................................................................................................................................................................200
bcpow ................................................................................................................................................................201
bcscale ...............................................................................................................................................................201
bcsqrt .................................................................................................................................................................201
bcsub..................................................................................................................................................................201
V. Compression Bzip2 ................................................................................................................................................202
bzclose ...............................................................................................................................................................203
bzcompress ........................................................................................................................................................203
bzdecompress ....................................................................................................................................................203
bzerrno...............................................................................................................................................................204
bzerror ...............................................................................................................................................................204
bzerrstr...............................................................................................................................................................204
bzflush ...............................................................................................................................................................204
bzopen ...............................................................................................................................................................205
bzread ................................................................................................................................................................205
bzwrite ...............................................................................................................................................................205
VI. Calendrier .............................................................................................................................................................207
JDToGregorian ..................................................................................................................................................208
GregorianToJD ..................................................................................................................................................208
JDToJulian.........................................................................................................................................................208
JulianToJD.........................................................................................................................................................208
JDToJewish........................................................................................................................................................209
JewishToJD........................................................................................................................................................209
JDToFrench .......................................................................................................................................................209
FrenchToJD .......................................................................................................................................................209
JDMonthName ..................................................................................................................................................209
JDDayOfWeek...................................................................................................................................................210
easter_date .........................................................................................................................................................210
easter_days ........................................................................................................................................................211
unixtojd..............................................................................................................................................................211
jdtounix..............................................................................................................................................................211
VII. Paiement CCVS...................................................................................................................................................213
.................................................................................................................................................................214
VIII. Support COM pour Windows ............................................................................................................................215
com_load ...........................................................................................................................................................216
com_invoke .......................................................................................................................................................216
com_propget......................................................................................................................................................216
com_get .............................................................................................................................................................216
com_propput......................................................................................................................................................216
com_propset ......................................................................................................................................................216
com_set..............................................................................................................................................................217
IX. Objets....................................................................................................................................................................218
call_user_method ..............................................................................................................................................220
call_user_method_array ....................................................................................................................................220
class_exists ........................................................................................................................................................220
get_class ............................................................................................................................................................220
get_class_methods.............................................................................................................................................221
viii
get_class_vars....................................................................................................................................................222
get_declared_classes .........................................................................................................................................222
get_object_vars..................................................................................................................................................222
get_parent_class ................................................................................................................................................223
is_subclass_of....................................................................................................................................................223
method_exists....................................................................................................................................................224
X. ClibPDF .................................................................................................................................................................225
cpdf_global_set_document_limits ....................................................................................................................228
cpdf_set_creator ................................................................................................................................................228
cpdf_set_title .....................................................................................................................................................228
cpdf_set_subject ................................................................................................................................................228
cpdf_set_keywords ............................................................................................................................................228
cpdf_open ..........................................................................................................................................................228
cpdf_close..........................................................................................................................................................229
cpdf_page_init ...................................................................................................................................................229
cpdf_finalize_page ............................................................................................................................................229
cpdf_finalize ......................................................................................................................................................230
cpdf_output_buffer ............................................................................................................................................230
cpdf_save_to_file...............................................................................................................................................230
cpdf_set_current_page ......................................................................................................................................230
cpdf_begin_text .................................................................................................................................................230
cpdf_end_text ....................................................................................................................................................231
cpdf_show .........................................................................................................................................................231
cpdf_show_xy ...................................................................................................................................................231
cpdf_text............................................................................................................................................................232
cpdf_set_font .....................................................................................................................................................232
cpdf_set_leading................................................................................................................................................232
cpdf_set_text_rendering ....................................................................................................................................233
cpdf_set_horiz_scaling......................................................................................................................................233
cpdf_set_text_rise..............................................................................................................................................233
cpdf_set_text_matrix .........................................................................................................................................233
cpdf_set_text_pos..............................................................................................................................................233
cpdf_set_char_spacing ......................................................................................................................................233
cpdf_set_word_spacing .....................................................................................................................................234
cpdf_continue_text ............................................................................................................................................234
cpdf_stringwidth................................................................................................................................................234
cpdf_save...........................................................................................................................................................234
cpdf_restore .......................................................................................................................................................234
cpdf_translate ....................................................................................................................................................235
cpdf_scale..........................................................................................................................................................235
cpdf_rotate.........................................................................................................................................................235
cpdf_setflat ........................................................................................................................................................235
cpdf_setlinejoin .................................................................................................................................................236
cpdf_setlinecap..................................................................................................................................................236
cpdf_setmiterlimit .............................................................................................................................................236
cpdf_setlinewidth ..............................................................................................................................................236
cpdf_setdash ......................................................................................................................................................236
cpdf_newpath ....................................................................................................................................................237
cpdf_moveto ......................................................................................................................................................237
cpdf_rmoveto.....................................................................................................................................................237
cpdf_curveto......................................................................................................................................................237
cpdf_lineto.........................................................................................................................................................237
cpdf_rlineto .......................................................................................................................................................238
cpdf_circle .........................................................................................................................................................238
cpdf_arc .............................................................................................................................................................238
cpdf_rect............................................................................................................................................................238
cpdf_closepath...................................................................................................................................................239
cpdf_stroke ........................................................................................................................................................239
cpdf_closepath_stroke .......................................................................................................................................239
cpdf_fill .............................................................................................................................................................239
ix
cpdf_fill_stroke..................................................................................................................................................239
cpdf_closepath_fill_stroke.................................................................................................................................240
cpdf_clip............................................................................................................................................................240
cpdf_setgray_fill................................................................................................................................................240
cpdf_setgray_stroke...........................................................................................................................................240
cpdf_setgray ......................................................................................................................................................240
cpdf_setrgbcolor_fill .........................................................................................................................................241
cpdf_setrgbcolor_stroke ....................................................................................................................................241
cpdf_setrgbcolor................................................................................................................................................241
cpdf_add_outline ...............................................................................................................................................241
cpdf_set_page_animation..................................................................................................................................242
cpdf_import_jpeg ..............................................................................................................................................242
cpdf_place_inline_image ..................................................................................................................................242
cpdf_add_annotation .........................................................................................................................................243
XI. CURL....................................................................................................................................................................244
curl_init .............................................................................................................................................................245
curl_init .............................................................................................................................................................245
curl_exec ...........................................................................................................................................................247
curl_close ..........................................................................................................................................................247
curl_version .......................................................................................................................................................247
XII. Paiement Cybercash ............................................................................................................................................248
cybercash_encr ..................................................................................................................................................249
cybercash_decr ..................................................................................................................................................249
cybercash_base64_encode.................................................................................................................................249
cybercash_base64_decode.................................................................................................................................249
XIII. CyberMUT : Crédit Mutuel ...............................................................................................................................250
cybermut_creerformulairecm ............................................................................................................................251
cybermut_testmac..............................................................................................................................................251
cybermut_creerreponsecm.................................................................................................................................252
XIV. Caractères...........................................................................................................................................................253
ctype_alnum ......................................................................................................................................................254
ctype_alpha........................................................................................................................................................254
ctype_cntrl .........................................................................................................................................................254
ctype_digit .........................................................................................................................................................254
ctype_lower .......................................................................................................................................................255
ctype_graph .......................................................................................................................................................255
ctype_print.........................................................................................................................................................255
ctype_punct .......................................................................................................................................................255
ctype_space .......................................................................................................................................................255
ctype_upper .......................................................................................................................................................256
ctype_xdigit .......................................................................................................................................................256
XV. DBA ....................................................................................................................................................................257
dba_close ...........................................................................................................................................................259
dba_delete..........................................................................................................................................................259
dba_exists ..........................................................................................................................................................259
dba_fetch ...........................................................................................................................................................259
dba_firstkey .......................................................................................................................................................260
dba_insert ..........................................................................................................................................................260
dba_nextkey.......................................................................................................................................................260
dba_popen .........................................................................................................................................................260
dba_open ...........................................................................................................................................................261
dba_optimize .....................................................................................................................................................261
dba_replace........................................................................................................................................................261
dba_sync............................................................................................................................................................261
XVI. Dates et heures ...................................................................................................................................................263
checkdate ...........................................................................................................................................................264
date ....................................................................................................................................................................264
getdate ...............................................................................................................................................................266
gettimeofday......................................................................................................................................................266
gmdate ...............................................................................................................................................................266
x
gmmktime..........................................................................................................................................................267
gmstrftime .........................................................................................................................................................267
localtime ............................................................................................................................................................267
microtime ..........................................................................................................................................................268
mktime...............................................................................................................................................................268
strftime ..............................................................................................................................................................269
time....................................................................................................................................................................271
strtotime.............................................................................................................................................................271
XVII. dBase ................................................................................................................................................................272
dbase_create ......................................................................................................................................................273
dbase_open ........................................................................................................................................................273
dbase_close........................................................................................................................................................274
dbase_pack ........................................................................................................................................................274
dbase_add_record..............................................................................................................................................274
dbase_replace_record ........................................................................................................................................274
dbase_delete_record ..........................................................................................................................................274
dbase_get_record...............................................................................................................................................275
dbase_get_record_with_names .........................................................................................................................275
dbase_numfields ................................................................................................................................................275
dbase_numrecords .............................................................................................................................................275
XVIII. DBM................................................................................................................................................................277
dbmopen ............................................................................................................................................................278
dbmclose............................................................................................................................................................278
dbmexists...........................................................................................................................................................278
dbmfetch............................................................................................................................................................278
dbminsert ...........................................................................................................................................................278
dbmreplace ........................................................................................................................................................279
dbmdelete ..........................................................................................................................................................279
dbmfirstkey........................................................................................................................................................279
dbmnextkey .......................................................................................................................................................279
dblist ..................................................................................................................................................................279
XIX. dbx .....................................................................................................................................................................281
dbx_close...........................................................................................................................................................282
dbx_connect ......................................................................................................................................................282
dbx_error ...........................................................................................................................................................283
dbx_query..........................................................................................................................................................284
dbx_sort .............................................................................................................................................................285
dbx_cmp_asc .....................................................................................................................................................286
dbx_cmp_desc ...................................................................................................................................................287
XX. DB++ functions...................................................................................................................................................288
dbplus_add ........................................................................................................................................................289
dbplus_aql .........................................................................................................................................................289
dbplus_chdir ......................................................................................................................................................289
dbplus_close ......................................................................................................................................................289
dbplus_curr........................................................................................................................................................289
dbplus_errcode ..................................................................................................................................................290
dbplus_first ........................................................................................................................................................290
dbplus_flush ......................................................................................................................................................290
dbplus_freealllocks............................................................................................................................................290
dbplus_freerlocks ..............................................................................................................................................291
dbplus_info........................................................................................................................................................291
dbplus_last.........................................................................................................................................................291
dbplus_lockrel ...................................................................................................................................................291
dbplus_next .......................................................................................................................................................292
dbplus_open ......................................................................................................................................................292
dbplus_prev .......................................................................................................................................................292
dbplus_restorepos..............................................................................................................................................293
dbplus_ropen .....................................................................................................................................................293
dbplus_runlink...................................................................................................................................................293
dbplus_rzap .......................................................................................................................................................293
xi
dbplus_savepos..................................................................................................................................................294
dbplus_setindex .................................................................................................................................................294
dbplus_setindexbynumber.................................................................................................................................294
dbplus_sql..........................................................................................................................................................294
dbplus_tremove .................................................................................................................................................295
dbplus_undo ......................................................................................................................................................295
dbplus_undoprepare ..........................................................................................................................................295
dbplus_unlockrel ...............................................................................................................................................295
dbplus_unselect .................................................................................................................................................296
dbplus_update....................................................................................................................................................296
dbplus_xlockrel .................................................................................................................................................296
dbplus_xunlockrel .............................................................................................................................................296
dbplus_change ...................................................................................................................................................297
dbplus_find ........................................................................................................................................................297
dbplus_freelock .................................................................................................................................................297
dbplus_getlock ..................................................................................................................................................297
dbplus_getunique ..............................................................................................................................................298
dbplus_rchperm .................................................................................................................................................298
dbplus_rcreate ...................................................................................................................................................298
dbplus_rcrtexact ................................................................................................................................................298
dbplus_rcrtlike...................................................................................................................................................299
dbplus_resolve...................................................................................................................................................299
dbplus_rkeys......................................................................................................................................................299
dbplus_rquery....................................................................................................................................................299
dbplus_rrename .................................................................................................................................................300
dbplus_rsecindex ...............................................................................................................................................300
dbplus_tcl ..........................................................................................................................................................300
XXI. Accès aux dossiers .............................................................................................................................................301
chroot.................................................................................................................................................................302
chdir...................................................................................................................................................................302
dir ......................................................................................................................................................................302
closedir ..............................................................................................................................................................302
getcwd ...............................................................................................................................................................303
opendir...............................................................................................................................................................303
readdir................................................................................................................................................................303
rewinddir ...........................................................................................................................................................304
XXII. DOM XML.......................................................................................................................................................305
xmldoc ...............................................................................................................................................................307
xmldocfile..........................................................................................................................................................307
xmltree...............................................................................................................................................................307
domxml_root .....................................................................................................................................................307
domxml_add_root .............................................................................................................................................308
domxml_dumpmem ..........................................................................................................................................308
domxml_attributes.............................................................................................................................................308
domxml_get_attribute .......................................................................................................................................309
domxml_set_attribute........................................................................................................................................309
domxml_children ..............................................................................................................................................309
domxml_new_child ...........................................................................................................................................310
domxml_new_xmldoc .......................................................................................................................................310
xpath_new_context............................................................................................................................................310
xpath_eval..........................................................................................................................................................310
XXIII. Gestion des erreurs..........................................................................................................................................311
error_log ............................................................................................................................................................312
error_reporting ..................................................................................................................................................312
restore_error_handler ........................................................................................................................................313
set_error_handler...............................................................................................................................................314
trigger_error ......................................................................................................................................................316
user_error ..........................................................................................................................................................316
XXIV. FrontBase ........................................................................................................................................................317
fbsql_affected_rows ..........................................................................................................................................318
xii
fbsql_autocommit..............................................................................................................................................318
fbsql_change_user .............................................................................................................................................318
fbsql_close.........................................................................................................................................................318
fbsql_connect ....................................................................................................................................................319
fbsql_create_db .................................................................................................................................................319
fbsql_data_seek .................................................................................................................................................320
fbsql_db_query..................................................................................................................................................320
fbsql_drop_db....................................................................................................................................................321
fbsql_errno ........................................................................................................................................................321
fbsql_error .........................................................................................................................................................321
fbsql_fetch_array...............................................................................................................................................322
fbsql_fetch_assoc ..............................................................................................................................................322
fbsql_fetch_field................................................................................................................................................323
fbsql_fetch_lengths ...........................................................................................................................................324
fbsql_fetch_object .............................................................................................................................................324
fbsql_fetch_row.................................................................................................................................................325
fbsql_field_flags ................................................................................................................................................325
fbsql_field_name ...............................................................................................................................................325
fbsql_field_len ...................................................................................................................................................326
fbsql_field_seek.................................................................................................................................................326
fbsql_field_table ................................................................................................................................................326
fbsql_field_type .................................................................................................................................................326
fbsql_free_result................................................................................................................................................327
fbsql_insert_id ...................................................................................................................................................327
fbsql_list_dbs ....................................................................................................................................................328
fbsql_list_fields .................................................................................................................................................328
fbsql_list_tables.................................................................................................................................................329
fbsql_next_result ...............................................................................................................................................329
fbsql_num_fields ...............................................................................................................................................330
fbsql_num_rows ................................................................................................................................................330
fbsql_pconnect ..................................................................................................................................................330
fbsql_query........................................................................................................................................................330
fbsql_result ........................................................................................................................................................331
fbsql_select_db..................................................................................................................................................332
fbsql_tablename ................................................................................................................................................332
fbsql_warnings ..................................................................................................................................................332
XXV. FilePro ..............................................................................................................................................................334
filepro ................................................................................................................................................................335
filepro_fieldname...............................................................................................................................................335
filepro_fieldtype ................................................................................................................................................335
filepro_fieldwidth ..............................................................................................................................................335
filepro_retrieve ..................................................................................................................................................335
filepro_fieldcount ..............................................................................................................................................335
filepro_rowcount ...............................................................................................................................................336
XXVI. Système de fichiers .........................................................................................................................................337
basename ...........................................................................................................................................................338
chgrp..................................................................................................................................................................338
chmod ................................................................................................................................................................338
chown ................................................................................................................................................................339
clearstatcache ....................................................................................................................................................339
copy ...................................................................................................................................................................339
delete .................................................................................................................................................................340
dirname..............................................................................................................................................................340
diskfreespace .....................................................................................................................................................340
disk_total_space ................................................................................................................................................341
fclose .................................................................................................................................................................341
feof ....................................................................................................................................................................341
fflush..................................................................................................................................................................341
fgetc ...................................................................................................................................................................342
fgetcsv ...............................................................................................................................................................342
xiii
fgets ...................................................................................................................................................................342
fgetss..................................................................................................................................................................343
file......................................................................................................................................................................343
file_exists...........................................................................................................................................................344
fileatime .............................................................................................................................................................344
filectime .............................................................................................................................................................344
filegroup.............................................................................................................................................................345
fileinode .............................................................................................................................................................345
filemtime............................................................................................................................................................345
fileowner............................................................................................................................................................345
fileperms ............................................................................................................................................................346
filesize................................................................................................................................................................346
filetype ...............................................................................................................................................................346
flock ...................................................................................................................................................................346
fopen..................................................................................................................................................................347
fpassthru ............................................................................................................................................................348
fputs ...................................................................................................................................................................348
fread...................................................................................................................................................................349
fscanf .................................................................................................................................................................349
fseek ..................................................................................................................................................................350
fstat ....................................................................................................................................................................350
ftell ....................................................................................................................................................................351
ftruncate.............................................................................................................................................................351
fwrite .................................................................................................................................................................351
set_file_buffer....................................................................................................................................................352
is_dir..................................................................................................................................................................352
is_executable .....................................................................................................................................................352
is_file .................................................................................................................................................................353
is_link ................................................................................................................................................................353
is_readable.........................................................................................................................................................353
is_writable .........................................................................................................................................................353
is_writeable .......................................................................................................................................................354
is_uploaded_file ................................................................................................................................................354
link.....................................................................................................................................................................354
linkinfo ..............................................................................................................................................................354
mkdir .................................................................................................................................................................355
move_uploaded_file ..........................................................................................................................................355
pathinfo..............................................................................................................................................................355
pclose.................................................................................................................................................................356
popen .................................................................................................................................................................356
readfile ...............................................................................................................................................................357
readlink..............................................................................................................................................................357
rename ...............................................................................................................................................................357
rewind................................................................................................................................................................357
rmdir ..................................................................................................................................................................358
stat .....................................................................................................................................................................358
lstat ....................................................................................................................................................................359
realpath ..............................................................................................................................................................359
symlink ..............................................................................................................................................................359
tempnam ............................................................................................................................................................360
tmpfile................................................................................................................................................................360
touch ..................................................................................................................................................................360
umask ................................................................................................................................................................361
unlink.................................................................................................................................................................361
XXVII. Forms Data Format ........................................................................................................................................362
fdf_open ............................................................................................................................................................363
fdf_close ............................................................................................................................................................363
fdf_create...........................................................................................................................................................363
fdf_save .............................................................................................................................................................364
fdf_get_value.....................................................................................................................................................364
xiv
fdf_set_value .....................................................................................................................................................364
fdf_next_field_name..........................................................................................................................................364
fdf_set_ap ..........................................................................................................................................................364
fdf_set_status.....................................................................................................................................................365
fdf_get_status ....................................................................................................................................................365
fdf_set_file.........................................................................................................................................................365
fdf_get_file ........................................................................................................................................................365
fdf_set_flags ......................................................................................................................................................365
fdf_set_opt.........................................................................................................................................................366
fdf_set_submit_form_action .............................................................................................................................366
fdf_set_javascript_action...................................................................................................................................366
fdf_set_encoding ...............................................................................................................................................366
XXVIII. FTP ...............................................................................................................................................................368
ftp_connect ........................................................................................................................................................369
ftp_login ............................................................................................................................................................369
ftp_pwd..............................................................................................................................................................369
ftp_cdup.............................................................................................................................................................369
ftp_chdir ............................................................................................................................................................369
ftp_mkdir ...........................................................................................................................................................369
ftp_rmdir............................................................................................................................................................370
ftp_nlist..............................................................................................................................................................370
ftp_rawlist..........................................................................................................................................................370
ftp_systype ........................................................................................................................................................370
ftp_pasv .............................................................................................................................................................370
ftp_get................................................................................................................................................................371
ftp_fget ..............................................................................................................................................................371
ftp_put ...............................................................................................................................................................371
ftp_fput ..............................................................................................................................................................371
ftp_size ..............................................................................................................................................................372
ftp_mdtm ...........................................................................................................................................................372
ftp_rename.........................................................................................................................................................372
ftp_delete ...........................................................................................................................................................372
ftp_site ...............................................................................................................................................................372
ftp_quit ..............................................................................................................................................................373
XXIX. Fonctions.........................................................................................................................................................374
call_user_func_array .........................................................................................................................................375
call_user_func ...................................................................................................................................................375
create_function ..................................................................................................................................................375
func_get_arg......................................................................................................................................................377
func_get_args ....................................................................................................................................................378
func_num_args ..................................................................................................................................................378
function_exists...................................................................................................................................................379
get_defined_functions .......................................................................................................................................379
register_shutdown_function ..............................................................................................................................380
register_tick_function........................................................................................................................................380
unregister_tick_function....................................................................................................................................380
XXX. GNU Gettext ....................................................................................................................................................382
bindtextdomain..................................................................................................................................................383
dcgettext ............................................................................................................................................................383
dgettext ..............................................................................................................................................................383
gettext ................................................................................................................................................................383
textdomain .........................................................................................................................................................383
XXXI. GMP................................................................................................................................................................385
gmp_init ............................................................................................................................................................386
gmp_intval.........................................................................................................................................................386
gmp_strval .........................................................................................................................................................386
gmp_add ............................................................................................................................................................387
gmp_sub ............................................................................................................................................................387
gmp_mul............................................................................................................................................................387
gmp_div_q.........................................................................................................................................................387
xv
gmp_div_r .........................................................................................................................................................387
gmp_div_qr .......................................................................................................................................................388
gmp_div.............................................................................................................................................................388
gmp_mod...........................................................................................................................................................388
gmp_divexact ....................................................................................................................................................388
gmp_cmp ...........................................................................................................................................................389
gmp_neg ............................................................................................................................................................389
gmp_abs ............................................................................................................................................................389
gmp_sign ...........................................................................................................................................................389
gmp_fact............................................................................................................................................................389
gmp_sqrt............................................................................................................................................................390
gmp_sqrtrm .......................................................................................................................................................390
gmp_perfect_square ..........................................................................................................................................390
gmp_pow ...........................................................................................................................................................390
gmp_powm........................................................................................................................................................390
gmp_prob_prime ...............................................................................................................................................390
gmp_gcd ............................................................................................................................................................391
gmp_gcdext .......................................................................................................................................................391
gmp_invert.........................................................................................................................................................391
gmp_legendre ....................................................................................................................................................391
gmp_jacobi ........................................................................................................................................................391
gmp_random......................................................................................................................................................392
gmp_and ............................................................................................................................................................392
gmp_or ..............................................................................................................................................................392
gmp_xor ............................................................................................................................................................392
gmp_setbit .........................................................................................................................................................392
gmp_clrbit .........................................................................................................................................................393
gmp_scan0.........................................................................................................................................................393
gmp_scan1.........................................................................................................................................................393
gmp_popcount ...................................................................................................................................................393
gmp_hamdist .....................................................................................................................................................393
XXXII. HTTP .............................................................................................................................................................394
header ................................................................................................................................................................395
headers_sent ......................................................................................................................................................396
setcookie............................................................................................................................................................396
XXXIII. Hyperwave....................................................................................................................................................398
hw_Array2Objrec..............................................................................................................................................401
hw_Children ......................................................................................................................................................401
hw_ChildrenObj ................................................................................................................................................401
hw_Close ...........................................................................................................................................................401
hw_Connect.......................................................................................................................................................401
hw_Cp ...............................................................................................................................................................402
hw_Deleteobject................................................................................................................................................402
hw_DocByAnchor.............................................................................................................................................402
hw_DocByAnchorObj.......................................................................................................................................402
hw_DocumentAttributes ...................................................................................................................................402
hw_DocumentBodyTag.....................................................................................................................................403
hw_DocumentContent.......................................................................................................................................403
hw_DocumentSetContent..................................................................................................................................403
hw_DocumentSize ............................................................................................................................................403
hw_ErrorMsg ....................................................................................................................................................403
hw_EditText ......................................................................................................................................................404
hw_Error............................................................................................................................................................404
hw_Free_Document ..........................................................................................................................................404
hw_GetParents...................................................................................................................................................404
hw_GetParentsObj.............................................................................................................................................404
hw_GetChildColl ..............................................................................................................................................405
hw_GetChildCollObj ........................................................................................................................................405
hw_GetRemote..................................................................................................................................................405
hw_GetRemoteChildren....................................................................................................................................405
xvi
hw_GetSrcByDestObj .......................................................................................................................................406
hw_GetObject....................................................................................................................................................406
hw_GetAndLock ...............................................................................................................................................407
hw_GetText .......................................................................................................................................................407
hw_GetObjectByQuery .....................................................................................................................................407
hw_GetObjectByQueryObj ...............................................................................................................................408
hw_GetObjectByQueryColl ..............................................................................................................................408
hw_GetObjectByQueryCollObj ........................................................................................................................408
hw_GetChildDocColl........................................................................................................................................408
hw_GetChildDocCollObj..................................................................................................................................408
hw_GetAnchors.................................................................................................................................................409
hw_GetAnchorsObj...........................................................................................................................................409
hw_Mv ..............................................................................................................................................................409
hw_Identify .......................................................................................................................................................409
hw_InCollections ..............................................................................................................................................410
hw_Info .............................................................................................................................................................410
hw_InsColl ........................................................................................................................................................410
hw_InsDoc ........................................................................................................................................................410
hw_InsertDocument ..........................................................................................................................................410
hw_InsertObject ................................................................................................................................................411
hw_mapid ..........................................................................................................................................................411
hw_Modifyobject ..............................................................................................................................................411
hw_New_Document..........................................................................................................................................413
hw_Objrec2Array..............................................................................................................................................413
hw_OutputDocument ........................................................................................................................................414
hw_pConnect.....................................................................................................................................................414
hw_PipeDocument ............................................................................................................................................414
hw_Root ............................................................................................................................................................414
hw_Unlock ........................................................................................................................................................414
hw_Who ............................................................................................................................................................415
hw_Username....................................................................................................................................................415
XXXIV. ICAP.............................................................................................................................................................416
icap_open ..........................................................................................................................................................417
icap_close ..........................................................................................................................................................417
icap_fetch_event................................................................................................................................................417
icap_list_events .................................................................................................................................................417
icap_store_event ................................................................................................................................................418
icap_delete_event ..............................................................................................................................................419
icap_snooze .......................................................................................................................................................419
icap_list_alarms.................................................................................................................................................419
XXXV. Iconv ..............................................................................................................................................................420
iconv ..................................................................................................................................................................421
iconv_get_encoding...........................................................................................................................................421
iconv_set_encoding ...........................................................................................................................................421
ob_iconv_handler ..............................................................................................................................................421
XXXVI. Images ..........................................................................................................................................................423
getimagesize ......................................................................................................................................................424
ImageAlphaBlending ........................................................................................................................................425
ImageArc ...........................................................................................................................................................425
imagefilledarc ....................................................................................................................................................425
ImageEllipse......................................................................................................................................................426
ImageFilledEllipse ............................................................................................................................................426
ImageChar .........................................................................................................................................................426
ImageCharUp ....................................................................................................................................................426
ImageColorAllocate ..........................................................................................................................................426
ImageColorDeAllocate......................................................................................................................................427
ImageColorAt....................................................................................................................................................427
ImageColorClosestAlpha ..................................................................................................................................427
ImageColorClosest ............................................................................................................................................428
ImageColorExact...............................................................................................................................................428
xvii
ImageColorExactAlpha .....................................................................................................................................428
ImageColorResolve ...........................................................................................................................................428
ImageColorResolveAlpha .................................................................................................................................428
ImageGammaCorrect ........................................................................................................................................429
ImageColorSet...................................................................................................................................................429
ImageColorsForIndex........................................................................................................................................429
ImageColorsTotal ..............................................................................................................................................429
ImageColorTransparent.....................................................................................................................................430
ImageCopy ........................................................................................................................................................430
ImageCopyMerge ..............................................................................................................................................430
ImageCopyMergeGray ......................................................................................................................................430
ImageCopyResized............................................................................................................................................431
ImageCopyResampled.......................................................................................................................................431
ImageCreate ......................................................................................................................................................431
imagecreatefromgif ...........................................................................................................................................431
ImageCreateTrueColor ......................................................................................................................................432
ImageTrueColorToPalette .................................................................................................................................432
ImageCreateFromJPEG.....................................................................................................................................433
ImageCreateFromPNG......................................................................................................................................433
ImageCreateFromWBMP..................................................................................................................................434
ImageCreateFromString ....................................................................................................................................434
ImageDashedLine..............................................................................................................................................434
ImageDestroy ....................................................................................................................................................435
ImageFill ...........................................................................................................................................................435
ImageFilledPolygon ..........................................................................................................................................435
ImageFilledRectangle........................................................................................................................................435
ImageFillToBorder ............................................................................................................................................435
ImageFontHeight...............................................................................................................................................436
ImageFontWidth................................................................................................................................................436
ImageGif............................................................................................................................................................436
ImagePNG .........................................................................................................................................................437
ImageJPEG........................................................................................................................................................438
ImageWBMP.....................................................................................................................................................438
ImageInterlace ...................................................................................................................................................438
ImageLine..........................................................................................................................................................438
ImageLoadFont .................................................................................................................................................439
ImagePolygon....................................................................................................................................................439
ImagePSBBox ...................................................................................................................................................439
ImagePSEncodeFont .........................................................................................................................................440
ImagePSFreeFont ..............................................................................................................................................440
ImagePSLoadFont .............................................................................................................................................440
ImagePsExtendFont...........................................................................................................................................441
ImagePsSlantFont..............................................................................................................................................441
ImagePSText .....................................................................................................................................................441
ImageRectangle .................................................................................................................................................442
ImageSetPixel....................................................................................................................................................442
imagesetbrush....................................................................................................................................................442
ImageSetTile .....................................................................................................................................................443
ImageSetThickness............................................................................................................................................443
ImageString .......................................................................................................................................................443
ImageStringUp ..................................................................................................................................................444
ImageSX............................................................................................................................................................444
ImageSY............................................................................................................................................................444
ImageTTFBBox ................................................................................................................................................444
ImageTTFText...................................................................................................................................................445
ImageTypes .......................................................................................................................................................446
read_exif_data ...................................................................................................................................................446
XXXVII. IMAP ..........................................................................................................................................................448
imap_8bit...........................................................................................................................................................449
imap_alerts ........................................................................................................................................................449
xviii
imap_append .....................................................................................................................................................449
imap_base64......................................................................................................................................................449
imap_binary.......................................................................................................................................................450
imap_body .........................................................................................................................................................450
imap_check........................................................................................................................................................450
imap_clearflag_full............................................................................................................................................451
imap_close.........................................................................................................................................................451
imap_createmailbox ..........................................................................................................................................451
imap_delete .......................................................................................................................................................452
imap_deletemailbox ..........................................................................................................................................453
imap_errors........................................................................................................................................................453
imap_expunge ...................................................................................................................................................453
imap_fetch_overview ........................................................................................................................................453
imap_fetchbody .................................................................................................................................................454
imap_fetchheader ..............................................................................................................................................454
imap_fetchstructure ...........................................................................................................................................455
imap_get_quota .................................................................................................................................................456
imap_getmailboxes............................................................................................................................................457
imap_getsubscribed ...........................................................................................................................................458
imap_header ......................................................................................................................................................458
imap_headerinfo................................................................................................................................................458
imap_headers.....................................................................................................................................................459
imap_last_error..................................................................................................................................................460
imap_listmailbox...............................................................................................................................................460
imap_listsubscribed ...........................................................................................................................................460
imap_mail..........................................................................................................................................................460
imap_mail_compose..........................................................................................................................................461
imap_mail_copy ................................................................................................................................................461
imap_mail_move ...............................................................................................................................................462
imap_mailboxmsginfo.......................................................................................................................................462
imap_mime_header_decode..............................................................................................................................463
imap_msgno ......................................................................................................................................................463
imap_num_msg .................................................................................................................................................463
imap_num_recent ..............................................................................................................................................464
imap_open .........................................................................................................................................................464
imap_ping..........................................................................................................................................................465
imap_qprint .......................................................................................................................................................465
imap_renamemailbox ........................................................................................................................................466
imap_reopen ......................................................................................................................................................466
imap_rfc822_parse_adrlist ................................................................................................................................466
imap_rfc822_parse_headers..............................................................................................................................467
imap_rfc822_write_address ..............................................................................................................................467
imap_scanmailbox.............................................................................................................................................467
imap_search.......................................................................................................................................................468
imap_set_quota..................................................................................................................................................468
imap_setflag_full ...............................................................................................................................................469
imap_sort ...........................................................................................................................................................470
imap_status........................................................................................................................................................470
imap_subscribe..................................................................................................................................................471
imap_uid............................................................................................................................................................471
imap_undelete ...................................................................................................................................................471
imap_unsubscribe..............................................................................................................................................471
imap_utf7_decode .............................................................................................................................................472
imap_utf7_encode .............................................................................................................................................472
imap_utf8 ..........................................................................................................................................................472
XXXVIII. Informix.....................................................................................................................................................473
ifx_connect ........................................................................................................................................................475
ifx_pconnect ......................................................................................................................................................475
ifx_close ............................................................................................................................................................475
ifx_query ...........................................................................................................................................................476
xix
ifx_prepare ........................................................................................................................................................477
ifx_do ................................................................................................................................................................477
ifx_error.............................................................................................................................................................478
ifx_errormsg ......................................................................................................................................................478
ifx_affected_rows ..............................................................................................................................................478
ifx_getsqlca .......................................................................................................................................................479
ifx_fetch_row ....................................................................................................................................................479
ifx_htmltbl_result ..............................................................................................................................................480
ifx_fieldtypes .....................................................................................................................................................481
ifx_fieldproperties .............................................................................................................................................481
ifx_num_fields...................................................................................................................................................482
ifx_num_rows....................................................................................................................................................482
ifx_free_result ...................................................................................................................................................482
ifx_create_char ..................................................................................................................................................482
ifx_free_char .....................................................................................................................................................482
ifx_update_char .................................................................................................................................................483
ifx_get_char.......................................................................................................................................................483
ifx_create_blob..................................................................................................................................................483
ifx_copy_blob....................................................................................................................................................483
ifx_free_blob .....................................................................................................................................................483
ifx_get_blob ......................................................................................................................................................484
ifx_update_blob.................................................................................................................................................484
ifx_blobinfile_mode ..........................................................................................................................................484
ifx_textasvarchar ...............................................................................................................................................484
ifx_byteasvarchar ..............................................................................................................................................484
ifx_nullformat....................................................................................................................................................485
ifxus_create_slob...............................................................................................................................................485
ifx_free_slob......................................................................................................................................................485
ifxus_close_slob ................................................................................................................................................485
ifxus_open_slob ................................................................................................................................................485
ifxus_tell_slob ...................................................................................................................................................486
ifxus_seek_slob .................................................................................................................................................486
ifxus_read_slob .................................................................................................................................................486
ifxus_write_slob ................................................................................................................................................486
XXXIX. InterBase ......................................................................................................................................................487
ibase_connect ....................................................................................................................................................488
ibase_pconnect ..................................................................................................................................................488
ibase_close ........................................................................................................................................................489
ibase_query........................................................................................................................................................489
ibase_fetch_row.................................................................................................................................................489
ibase_fetch_object .............................................................................................................................................489
ibase_field_info .................................................................................................................................................490
ibase_free_result................................................................................................................................................490
ibase_prepare.....................................................................................................................................................490
ibase_execute.....................................................................................................................................................490
ibase_trans .........................................................................................................................................................491
ibase_commit ....................................................................................................................................................491
ibase_rollback....................................................................................................................................................491
ibase_free_query ...............................................................................................................................................491
ibase_timefmt ....................................................................................................................................................492
ibase_num_fields ...............................................................................................................................................492
ibase_errmsg......................................................................................................................................................493
XL. Ingres II................................................................................................................................................................494
ingres_connect...................................................................................................................................................495
ingres_pconnect.................................................................................................................................................495
ingres_close .......................................................................................................................................................495
ingres_query ......................................................................................................................................................496
ingres_num_rows ..............................................................................................................................................497
ingres_num_fields .............................................................................................................................................497
ingres_field_name .............................................................................................................................................497
xx
ingres_field_type ...............................................................................................................................................497
ingres_field_nullable .........................................................................................................................................498
ingres_field_length ............................................................................................................................................498
ingres_field_precision .......................................................................................................................................498
ingres_field_scale ..............................................................................................................................................498
ingres_fetch_array .............................................................................................................................................499
ingres_fetch_row ...............................................................................................................................................499
ingres_fetch_object ...........................................................................................................................................500
ingres_rollback ..................................................................................................................................................500
ingres_commit ...................................................................................................................................................501
ingres_autocommit ............................................................................................................................................501
XLI. IRC .....................................................................................................................................................................502
ircg_pconnect ....................................................................................................................................................503
ircg_set_current .................................................................................................................................................503
ircg_join ............................................................................................................................................................503
ircg_part ............................................................................................................................................................503
ircg_msg ............................................................................................................................................................504
ircg_notice .........................................................................................................................................................504
ircg_nick............................................................................................................................................................504
ircg_topic...........................................................................................................................................................504
ircg_channel_mode ...........................................................................................................................................504
ircg_html_encode ..............................................................................................................................................505
ircg_whois .........................................................................................................................................................505
ircg_kick............................................................................................................................................................505
ircg_ignore_add.................................................................................................................................................505
ircg_ignore_del..................................................................................................................................................505
ircg_disconnect..................................................................................................................................................506
ircg_is_conn_alive.............................................................................................................................................506
ircg_lookup_format_messages..........................................................................................................................506
ircg_register_format_messages .........................................................................................................................506
XLII. Java....................................................................................................................................................................508
java_last_exception_clear..................................................................................................................................510
java_last_exception_get ....................................................................................................................................510
XLIII. LDAP...............................................................................................................................................................511
ldap_add ............................................................................................................................................................513
ldap_bind ...........................................................................................................................................................513
ldap_close..........................................................................................................................................................513
ldap_compare ....................................................................................................................................................514
ldap_connect......................................................................................................................................................514
ldap_count_entries ............................................................................................................................................515
ldap_delete ........................................................................................................................................................515
ldap_dn2ufn.......................................................................................................................................................515
ldap_err2str........................................................................................................................................................515
ldap_errno..........................................................................................................................................................516
ldap_error ..........................................................................................................................................................516
ldap_explode_dn ...............................................................................................................................................517
ldap_first_attribute.............................................................................................................................................517
ldap_first_entry..................................................................................................................................................517
ldap_free_result .................................................................................................................................................517
ldap_get_attributes ............................................................................................................................................518
ldap_get_dn .......................................................................................................................................................518
ldap_get_entries ................................................................................................................................................518
ldap_get_option .................................................................................................................................................519
ldap_get_values .................................................................................................................................................519
ldap_get_values_len ..........................................................................................................................................520
ldap_list .............................................................................................................................................................520
ldap_modify ......................................................................................................................................................521
ldap_mod_add ...................................................................................................................................................521
ldap_mod_del ....................................................................................................................................................521
ldap_mod_replace .............................................................................................................................................522
xxi
ldap_next_attribute ............................................................................................................................................522
ldap_next_entry .................................................................................................................................................522
ldap_read ...........................................................................................................................................................522
ldap_rename ......................................................................................................................................................523
ldap_search........................................................................................................................................................523
ldap_set_option .................................................................................................................................................524
ldap_unbind .......................................................................................................................................................525
XLIV. Email ...............................................................................................................................................................526
mail....................................................................................................................................................................527
ezmlm_hash.......................................................................................................................................................528
XLV. Mathématiques ..................................................................................................................................................529
Abs ....................................................................................................................................................................530
Acos...................................................................................................................................................................530
Asin ...................................................................................................................................................................530
Atan ...................................................................................................................................................................530
Atan2 .................................................................................................................................................................530
base_convert ......................................................................................................................................................530
BinDec...............................................................................................................................................................531
Ceil ....................................................................................................................................................................531
Cos.....................................................................................................................................................................531
DecBin...............................................................................................................................................................532
DecHex..............................................................................................................................................................532
DecOct...............................................................................................................................................................532
deg2rad ..............................................................................................................................................................532
Exp ....................................................................................................................................................................532
Floor ..................................................................................................................................................................533
getrandmax ........................................................................................................................................................533
hexdec................................................................................................................................................................533
lcg_value ...........................................................................................................................................................534
Log ....................................................................................................................................................................534
Log10 ................................................................................................................................................................534
max ....................................................................................................................................................................534
min.....................................................................................................................................................................534
mt_rand..............................................................................................................................................................535
mt_srand ............................................................................................................................................................535
mt_getrandmax..................................................................................................................................................535
number_format ..................................................................................................................................................536
OctDec...............................................................................................................................................................536
pi........................................................................................................................................................................537
pow ....................................................................................................................................................................537
rad2deg ..............................................................................................................................................................537
rand....................................................................................................................................................................537
round..................................................................................................................................................................538
Sin......................................................................................................................................................................538
Sqrt ....................................................................................................................................................................538
srand ..................................................................................................................................................................539
Tan .....................................................................................................................................................................539
XLVI. Chaînes de caractères multi-octets...................................................................................................................540
mb_internal_encoding .......................................................................................................................................542
mb_http_input ...................................................................................................................................................542
mb_http_output .................................................................................................................................................542
mb_detect_order................................................................................................................................................542
mb_substitute_character....................................................................................................................................543
mb_output_handler............................................................................................................................................544
mb_preferred_mime_name ...............................................................................................................................544
mb_strlen ...........................................................................................................................................................545
mb_strpos ..........................................................................................................................................................545
mb_strrpos .........................................................................................................................................................545
mb_substr ..........................................................................................................................................................546
mb_strcut ...........................................................................................................................................................546
xxii
mb_strwidth.......................................................................................................................................................546
mb_strimwidth ..................................................................................................................................................546
mb_convert_encoding .......................................................................................................................................547
mb_detect_encoding..........................................................................................................................................547
mb_convert_kana ..............................................................................................................................................548
mb_encode_mimeheader...................................................................................................................................549
mb_decode_mimeheader...................................................................................................................................549
mb_convert_variables........................................................................................................................................550
mb_encode_numericentity ................................................................................................................................550
mb_decode_numericentity ................................................................................................................................551
mb_send_mail ...................................................................................................................................................551
XLVII. MCAL ............................................................................................................................................................553
mcal_open .........................................................................................................................................................555
mcal_popen .......................................................................................................................................................555
mcal_reopen ......................................................................................................................................................555
mcal_close .........................................................................................................................................................555
mcal_create_calendar ........................................................................................................................................555
mcal_rename_calendar......................................................................................................................................555
mcal_delete_calendar ........................................................................................................................................556
mcal_fetch_event...............................................................................................................................................556
mcal_list_events ................................................................................................................................................557
mcal_append_event ...........................................................................................................................................557
mcal_store_event...............................................................................................................................................557
mcal_delete_event .............................................................................................................................................557
mcal_snooze ......................................................................................................................................................557
mcal_list_alarms................................................................................................................................................558
mcal_event_init .................................................................................................................................................558
mcal_event_set_category ..................................................................................................................................558
mcal_event_set_title ..........................................................................................................................................558
mcal_event_set_description ..............................................................................................................................558
mcal_event_set_start .........................................................................................................................................559
mcal_event_set_end ..........................................................................................................................................559
mcal_event_set_alarm .......................................................................................................................................559
mcal_event_set_class ........................................................................................................................................559
mcal_is_leap_year .............................................................................................................................................559
mcal_days_in_month ........................................................................................................................................560
mcal_date_valid.................................................................................................................................................560
mcal_time_valid ................................................................................................................................................560
mcal_day_of_week............................................................................................................................................560
mcal_day_of_year .............................................................................................................................................560
mcal_date_compare...........................................................................................................................................561
mcal_next_recurrence .......................................................................................................................................561
mcal_event_set_recur_none ..............................................................................................................................561
mcal_event_set_recur_daily ..............................................................................................................................561
mcal_event_set_recur_weekly ..........................................................................................................................561
mcal_event_set_recur_monthly_mday..............................................................................................................562
mcal_event_set_recur_monthly_wday ..............................................................................................................562
mcal_event_set_recur_yearly ............................................................................................................................562
mcal_fetch_current_stream_event.....................................................................................................................562
mcal_event_add_attribute..................................................................................................................................563
mcal_expunge....................................................................................................................................................563
XLVIII. Cryptage ........................................................................................................................................................564
mcrypt_get_cipher_name ..................................................................................................................................567
mcrypt_get_block_size......................................................................................................................................567
mcrypt_get_key_size.........................................................................................................................................567
mcrypt_create_iv ...............................................................................................................................................567
mcrypt_cbc ........................................................................................................................................................568
mcrypt_cfb ........................................................................................................................................................568
mcrypt_ecb ........................................................................................................................................................569
mcrypt_ofb ........................................................................................................................................................569
xxiii
mcrypt_list_algorithms......................................................................................................................................570
mcrypt_list_modes ............................................................................................................................................570
mcrypt_get_iv_size ...........................................................................................................................................570
mcrypt_encrypt..................................................................................................................................................571
mcrypt_decrypt..................................................................................................................................................571
mcrypt_module_open........................................................................................................................................571
mcrypt_generic_init ..........................................................................................................................................572
mcrypt_generic..................................................................................................................................................572
mdecrypt_generic ..............................................................................................................................................572
mcrypt_generic_end ..........................................................................................................................................573
mcrypt_enc_self_test.........................................................................................................................................573
mcrypt_enc_is_block_algorithm_mode ............................................................................................................573
mcrypt_enc_is_block_algorithm .......................................................................................................................574
mcrypt_enc_is_block_mode..............................................................................................................................574
mcrypt_enc_get_block_size ..............................................................................................................................574
mcrypt_enc_get_key_size .................................................................................................................................574
mcrypt_enc_get_supported_key_sizes..............................................................................................................574
mcrypt_enc_get_iv_size....................................................................................................................................574
mcrypt_enc_get_algorithms_name ...................................................................................................................575
mcrypt_enc_get_modes_name ..........................................................................................................................575
mcrypt_module_self_test ..................................................................................................................................575
mcrypt_module_is_block_algorithm_mode......................................................................................................575
mcrypt_module_is_block_algorithm ................................................................................................................575
mcrypt_module_is_block_mode .......................................................................................................................576
mcrypt_module_get_algo_block_size...............................................................................................................576
mcrypt_module_get_algo_key_size..................................................................................................................576
mcrypt_module_get_algo_supported_key_sizes...............................................................................................576
XLIX. Hash.................................................................................................................................................................577
mhash_get_hash_name......................................................................................................................................578
mhash_get_block_size ......................................................................................................................................578
mhash_count......................................................................................................................................................578
mhash ................................................................................................................................................................578
mhash_keygen_s2k ...........................................................................................................................................579
L. Microsoft SQL Server ............................................................................................................................................580
mssql_close .......................................................................................................................................................581
mssql_connect ...................................................................................................................................................581
mssql_data_seek................................................................................................................................................581
mssql_fetch_array .............................................................................................................................................581
mssql_fetch_field ..............................................................................................................................................582
mssql_fetch_object............................................................................................................................................582
mssql_fetch_row ...............................................................................................................................................582
mssql_field_length ............................................................................................................................................583
mssql_field_name..............................................................................................................................................583
mssql_field_seek ...............................................................................................................................................583
mssql_field_type................................................................................................................................................583
mssql_free_result ..............................................................................................................................................583
mssql_get_last_message....................................................................................................................................583
mssql_min_error_severity .................................................................................................................................584
mssql_min_message_severity ...........................................................................................................................584
mssql_num_fields..............................................................................................................................................584
mssql_num_rows...............................................................................................................................................584
mssql_pconnect .................................................................................................................................................584
mssql_query ......................................................................................................................................................585
mssql_result.......................................................................................................................................................585
mssql_select_db ................................................................................................................................................585
LI. Ming pour Flash ....................................................................................................................................................586
SWFMovie ........................................................................................................................................................588
SWFMovie->output ..........................................................................................................................................588
SWFMovie->save..............................................................................................................................................588
SWFMovie->add ...............................................................................................................................................588
xxiv
SWFMovie->remove.........................................................................................................................................589
SWFMovie->setbackground .............................................................................................................................589
SWFMovie->setrate ..........................................................................................................................................589
SWFMovie->setdimension................................................................................................................................589
SWFMovie->setframes .....................................................................................................................................589
SWFMovie->nextframe.....................................................................................................................................590
SWFMovie->streammp3 ...................................................................................................................................590
SWFDisplayItem ...............................................................................................................................................590
SWFDisplayItem->moveTo ..............................................................................................................................591
SWFDisplayItem->move...................................................................................................................................591
SWFDisplayItem->scaleTo ...............................................................................................................................591
SWFDisplayItem->scale ...................................................................................................................................591
SWFDisplayItem->rotateTo ..............................................................................................................................592
SWFDisplayItem->Rotate.................................................................................................................................593
SWFDisplayItem->skewXTo ............................................................................................................................593
SWFDisplayItem->skewX ................................................................................................................................594
SWFDisplayItem->skewYTo ............................................................................................................................594
SWFDisplayItem->skewY ................................................................................................................................594
SWFDisplayItem->setDepth .............................................................................................................................594
SWFDisplayItem->remove ...............................................................................................................................595
SWFDisplayItem->setName .............................................................................................................................595
SWFDisplayItem->setRatio ..............................................................................................................................595
SWFDisplayItem->addColor ............................................................................................................................596
SWFDisplayItem->multColor...........................................................................................................................596
SWFShape .........................................................................................................................................................597
SWFShape->setLine..........................................................................................................................................598
SWFShape->addFill ..........................................................................................................................................599
SWFShape->setLeftFill.....................................................................................................................................600
SWFShape->setRightFill ..................................................................................................................................601
SWFShape->movePenTo ..................................................................................................................................601
SWFShape->movePen.......................................................................................................................................601
SWFShape->drawLineTo ..................................................................................................................................602
SWFShape->drawLine ......................................................................................................................................602
SWFShape->drawCurveTo................................................................................................................................602
SWFShape->drawCurve....................................................................................................................................602
SWFGradient.....................................................................................................................................................602
SWFGradient->addEntry ..................................................................................................................................603
SWFBitmap.......................................................................................................................................................604
SWFBitmap->getWidth.....................................................................................................................................605
SWFBitmap->getHeight....................................................................................................................................605
SWFFill .............................................................................................................................................................606
SWFFill->moveTo.............................................................................................................................................606
SWFFill->scaleTo .............................................................................................................................................606
SWFFill->rotateTo ............................................................................................................................................606
SWFFill->skewXTo ..........................................................................................................................................606
SWFFill->skewYTo ..........................................................................................................................................607
SWFMorph........................................................................................................................................................607
SWFMorph->getshape1 ....................................................................................................................................608
SWFMorph->getshape2 ....................................................................................................................................608
SWFText............................................................................................................................................................608
SWFText->setFont ............................................................................................................................................609
SWFText->setHeight.........................................................................................................................................609
SWFText->setSpacing.......................................................................................................................................609
SWFText->setColor...........................................................................................................................................609
SWFText->moveTo ...........................................................................................................................................610
SWFText->addString.........................................................................................................................................610
SWFText->getWidth .........................................................................................................................................610
SWFFont ...........................................................................................................................................................610
swffont->getwidth .............................................................................................................................................611
SWFTextField ...................................................................................................................................................611
xxv
SWFTextField->setFont ....................................................................................................................................611
SWFTextField->setbounds................................................................................................................................612
SWFTextField->align........................................................................................................................................612
SWFTextField->setHeight.................................................................................................................................612
SWFTextField->setLeftMargin .........................................................................................................................612
SWFTextField->setrightMargin ........................................................................................................................612
SWFTextField->setMargins ..............................................................................................................................613
SWFTextField->setindentation .........................................................................................................................613
SWFTextField->setLineSpacing .......................................................................................................................613
SWFTextField->setcolor ...................................................................................................................................613
SWFTextField->setname...................................................................................................................................613
SWFTextField->addstring .................................................................................................................................614
SWFSprite .........................................................................................................................................................614
SWFSprite->add................................................................................................................................................615
SWFSprite->remove..........................................................................................................................................615
SWFSprite->setframes ......................................................................................................................................615
SWFSprite->nextframe .....................................................................................................................................615
SWFbutton.........................................................................................................................................................615
SWFbutton->addShape .....................................................................................................................................618
SWFbutton->setUp............................................................................................................................................618
SWFbutton->setOver.........................................................................................................................................618
SWFbutton->setDown.......................................................................................................................................618
SWFbutton->setHit ...........................................................................................................................................618
SWFbutton->addAction ....................................................................................................................................619
SWFbutton->setAction......................................................................................................................................619
SWFAction ........................................................................................................................................................619
LII. Fonctions diverses................................................................................................................................................628
connection_aborted ...........................................................................................................................................629
connection_status ..............................................................................................................................................629
connection_timeout ...........................................................................................................................................629
define .................................................................................................................................................................629
constant..............................................................................................................................................................630
defined ...............................................................................................................................................................630
die ......................................................................................................................................................................630
eval ....................................................................................................................................................................631
exit .....................................................................................................................................................................631
get_browser .......................................................................................................................................................631
highlight_file .....................................................................................................................................................632
highlight_string .................................................................................................................................................633
ignore_user_abort..............................................................................................................................................634
iptcparse ............................................................................................................................................................634
leak ....................................................................................................................................................................634
pack ...................................................................................................................................................................634
show_source ......................................................................................................................................................635
sleep...................................................................................................................................................................636
uniqid.................................................................................................................................................................636
unpack ...............................................................................................................................................................636
usleep.................................................................................................................................................................637
LIII. mnoGoSearch .....................................................................................................................................................638
udm_add_search_limit ......................................................................................................................................639
udm_cat_path ....................................................................................................................................................639
udm_cat_list ......................................................................................................................................................640
Udm_Alloc_Agent ............................................................................................................................................641
udm_api_version ...............................................................................................................................................641
udm_clear_search_limits...................................................................................................................................642
Udm_Errno........................................................................................................................................................642
Udm_Error ........................................................................................................................................................642
Udm_Find..........................................................................................................................................................642
Udm_Free_Agent ..............................................................................................................................................643
udm_free_ispell_data ........................................................................................................................................643
xxvi
Udm_Free_Res..................................................................................................................................................643
udm_get_doc_count ..........................................................................................................................................643
Udm_Get_Res_Field .........................................................................................................................................644
Udm_Get_Res_Param .......................................................................................................................................644
udm_load_ispell_data........................................................................................................................................645
udm_set_agent_param.......................................................................................................................................646
LIV. mSQL .................................................................................................................................................................649
msql ...................................................................................................................................................................650
msql_affected_rows...........................................................................................................................................650
msql_close .........................................................................................................................................................650
msql_connect.....................................................................................................................................................650
msql_create_db..................................................................................................................................................651
msql_createdb....................................................................................................................................................651
msql_data_seek .................................................................................................................................................651
msql_dbname ....................................................................................................................................................651
msql_drop_db....................................................................................................................................................651
msql_dropdb......................................................................................................................................................652
msql_error .........................................................................................................................................................652
msql_fetch_array ...............................................................................................................................................652
msql_fetch_field ................................................................................................................................................652
msql_fetch_object .............................................................................................................................................653
msql_fetch_row .................................................................................................................................................653
msql_fieldname .................................................................................................................................................653
msql_field_seek .................................................................................................................................................653
msql_fieldtable ..................................................................................................................................................654
msql_fieldtype ...................................................................................................................................................654
msql_fieldflags ..................................................................................................................................................654
msql_fieldlen .....................................................................................................................................................654
msql_free_result ................................................................................................................................................654
msql_freeresult ..................................................................................................................................................655
msql_list_fields..................................................................................................................................................655
msql_listfields....................................................................................................................................................655
msql_list_dbs.....................................................................................................................................................655
msql_listdbs.......................................................................................................................................................655
msql_list_tables.................................................................................................................................................655
msql_listtables...................................................................................................................................................656
msql_num_fields ...............................................................................................................................................656
msql_num_rows ................................................................................................................................................656
msql_numfields .................................................................................................................................................656
msql_numrows ..................................................................................................................................................656
msql_pconnect...................................................................................................................................................657
msql_query ........................................................................................................................................................657
msql_regcase .....................................................................................................................................................657
msql_result ........................................................................................................................................................657
msql_select_db ..................................................................................................................................................658
msql_selectdb ....................................................................................................................................................658
msql_tablename.................................................................................................................................................658
LV. MySQL ................................................................................................................................................................659
mysql_affected_rows.........................................................................................................................................660
mysql_change_user ...........................................................................................................................................660
mysql_close .......................................................................................................................................................660
mysql_connect...................................................................................................................................................661
mysql_create_db................................................................................................................................................661
mysql_data_seek ...............................................................................................................................................662
mysql_db_name ................................................................................................................................................662
mysql_db_query ................................................................................................................................................663
mysql_drop_db..................................................................................................................................................663
mysql_errno.......................................................................................................................................................663
mysql_error .......................................................................................................................................................664
mysql_fetch_array .............................................................................................................................................664
xxvii
mysql_fetch_assoc ............................................................................................................................................665
mysql_fetch_field ..............................................................................................................................................665
mysql_fetch_lengths..........................................................................................................................................666
mysql_fetch_object ...........................................................................................................................................666
mysql_fetch_row ...............................................................................................................................................667
mysql_field_flags ..............................................................................................................................................667
mysql_field_name .............................................................................................................................................667
mysql_field_len .................................................................................................................................................668
mysql_field_seek ...............................................................................................................................................668
mysql_field_table ..............................................................................................................................................668
mysql_field_type ...............................................................................................................................................668
mysql_free_result ..............................................................................................................................................669
mysql_insert_id .................................................................................................................................................669
mysql_list_dbs...................................................................................................................................................669
mysql_list_fields................................................................................................................................................670
mysql_list_tables...............................................................................................................................................670
mysql_num_fields .............................................................................................................................................670
mysql_num_rows ..............................................................................................................................................670
mysql_pconnect.................................................................................................................................................671
mysql_query ......................................................................................................................................................671
mysql_result ......................................................................................................................................................672
mysql_select_db ................................................................................................................................................672
mysql_tablename...............................................................................................................................................673
LVI. Réseau.................................................................................................................................................................674
checkdnsrr .........................................................................................................................................................675
closelog..............................................................................................................................................................675
debugger_off......................................................................................................................................................675
debugger_on ......................................................................................................................................................675
define_syslog_variables.....................................................................................................................................675
fsockopen...........................................................................................................................................................675
gethostbyaddr ....................................................................................................................................................676
gethostbyname...................................................................................................................................................677
gethostbynamel..................................................................................................................................................677
getmxrr ..............................................................................................................................................................677
getprotobyname .................................................................................................................................................677
getprotobynumber .............................................................................................................................................678
getservbyname...................................................................................................................................................678
getservbyport .....................................................................................................................................................678
ip2long...............................................................................................................................................................678
long2ip...............................................................................................................................................................679
openlog ..............................................................................................................................................................679
pfsockopen.........................................................................................................................................................680
socket_get_status...............................................................................................................................................680
socket_set_blocking ..........................................................................................................................................680
socket_set_timeout ............................................................................................................................................680
syslog.................................................................................................................................................................681
LVII. ODBC unifié......................................................................................................................................................683
odbc_autocommit ..............................................................................................................................................684
odbc_binmode ...................................................................................................................................................684
odbc_close .........................................................................................................................................................684
odbc_close_all ...................................................................................................................................................685
odbc_commit .....................................................................................................................................................685
odbc_connect.....................................................................................................................................................685
odbc_cursor .......................................................................................................................................................686
odbc_do .............................................................................................................................................................686
odbc_error .........................................................................................................................................................686
odbc_errormsg...................................................................................................................................................686
odbc_exec ..........................................................................................................................................................687
odbc_execute .....................................................................................................................................................687
odbc_fetch_into .................................................................................................................................................687
xxviii
odbc_fetch_row .................................................................................................................................................688
odbc_field_name ...............................................................................................................................................688
odbc_field_num .................................................................................................................................................688
odbc_field_type .................................................................................................................................................689
odbc_field_len ...................................................................................................................................................689
odbc_field_precision .........................................................................................................................................689
odbc_field_scale ................................................................................................................................................689
odbc_free_result ................................................................................................................................................689
odbc_longreadlen ..............................................................................................................................................690
odbc_num_fields ...............................................................................................................................................690
odbc_pconnect...................................................................................................................................................690
odbc_prepare .....................................................................................................................................................690
odbc_num_rows ................................................................................................................................................691
odbc_result ........................................................................................................................................................691
odbc_result_all ..................................................................................................................................................691
odbc_rollback ....................................................................................................................................................692
odbc_setoption ..................................................................................................................................................692
odbc_tables........................................................................................................................................................692
odbc_tableprivileges..........................................................................................................................................693
odbc_columns....................................................................................................................................................694
odbc_columnprivileges......................................................................................................................................694
odbc_gettypeinfo ...............................................................................................................................................695
odbc_primarykeys .............................................................................................................................................695
odbc_foreignkeys ..............................................................................................................................................696
odbc_procedures................................................................................................................................................697
odbc_procedurecolumns....................................................................................................................................697
odbc_specialcolumns ........................................................................................................................................698
odbc_statistics ...................................................................................................................................................698
LVIII. Oracle 8 ............................................................................................................................................................700
ociDefineByName .............................................................................................................................................702
ociBindByName ................................................................................................................................................702
ociLogon............................................................................................................................................................703
ociPLogon .........................................................................................................................................................704
ociNLogon.........................................................................................................................................................704
ociLogOff ..........................................................................................................................................................706
ociexecute ..........................................................................................................................................................706
ociCommit.........................................................................................................................................................706
ociRollback........................................................................................................................................................706
ociNewDescriptor..............................................................................................................................................707
ociRowCount.....................................................................................................................................................708
ociNumCols.......................................................................................................................................................708
ociResult............................................................................................................................................................709
ociFetch .............................................................................................................................................................709
ociFetchInto.......................................................................................................................................................709
ociFetchStatement .............................................................................................................................................710
ociColumnIsNULL............................................................................................................................................710
ociColumnName................................................................................................................................................710
ociColumnSize ..................................................................................................................................................711
ociColumnType .................................................................................................................................................712
ociServerVersion ...............................................................................................................................................713
ociStatementType ..............................................................................................................................................713
ociNewCursor....................................................................................................................................................714
ociFreeStatement ...............................................................................................................................................715
ociFreeCursor ....................................................................................................................................................715
ociFreeDesc .......................................................................................................................................................715
ociparse..............................................................................................................................................................715
ociError..............................................................................................................................................................715
ociinternaldebug ................................................................................................................................................716
OCICancel .........................................................................................................................................................716
ocisetprefetch ....................................................................................................................................................716
xxix
OCIWriteLobToFile ..........................................................................................................................................716
OCISaveLobFile................................................................................................................................................716
OCISaveLob ......................................................................................................................................................717
OCILoadLob .....................................................................................................................................................717
OCIColumnScale ..............................................................................................................................................717
OCIColumnPrecision ........................................................................................................................................717
OCIColumnTypeRaw ........................................................................................................................................717
OCINewCollection............................................................................................................................................718
OCIFreeCollection ............................................................................................................................................718
OCICollAssign ..................................................................................................................................................718
OCICollAssignElem..........................................................................................................................................718
OCICollGetElem ...............................................................................................................................................718
OCICollMax......................................................................................................................................................718
OCICollSize ......................................................................................................................................................719
OCICollTrim .....................................................................................................................................................719
LIX. OpenSSL ............................................................................................................................................................720
openssl_error_string ..........................................................................................................................................723
openssl_free_key ...............................................................................................................................................723
openssl_get_privatekey .....................................................................................................................................723
openssl_get_publickey ......................................................................................................................................723
openssl_open .....................................................................................................................................................724
openssl_seal.......................................................................................................................................................724
openssl_sign ......................................................................................................................................................725
openssl_verify ...................................................................................................................................................725
openssl_pkcs7_decrypt......................................................................................................................................726
openssl_pkcs7_encrypt......................................................................................................................................727
openssl_pkcs7_sign ...........................................................................................................................................727
openssl_pkcs7_verify ........................................................................................................................................728
openssl_x509_checkpurpose .............................................................................................................................729
openssl_x509_free.............................................................................................................................................730
openssl_x509_parse ..........................................................................................................................................730
openssl_x509_read ............................................................................................................................................730
LX. Oracle...................................................................................................................................................................731
Ora_Bind ...........................................................................................................................................................732
Ora_Close..........................................................................................................................................................732
Ora_ColumnName ............................................................................................................................................732
Ora_ColumnSize ...............................................................................................................................................732
Ora_ColumnType ..............................................................................................................................................733
Ora_Commit......................................................................................................................................................733
Ora_CommitOff ................................................................................................................................................733
Ora_CommitOn .................................................................................................................................................733
Ora_Do ..............................................................................................................................................................734
Ora_Error ..........................................................................................................................................................734
Ora_ErrorCode ..................................................................................................................................................734
Ora_Exec ...........................................................................................................................................................734
Ora_Fetch ..........................................................................................................................................................735
Ora_Fetch_Into..................................................................................................................................................735
Ora_GetColumn ................................................................................................................................................735
Ora_Logoff........................................................................................................................................................735
Ora_Logon ........................................................................................................................................................736
Ora_pLogon ......................................................................................................................................................736
Ora_Numcols ....................................................................................................................................................736
Ora_Numrows ...................................................................................................................................................736
Ora_Open ..........................................................................................................................................................737
Ora_Parse ..........................................................................................................................................................737
Ora_Rollback ....................................................................................................................................................737
LXI. Ovrimos SQL .....................................................................................................................................................738
ovrimos_connect ...............................................................................................................................................739
ovrimos_close....................................................................................................................................................739
ovrimos_close_all..............................................................................................................................................739
xxx
ovrimos_longreadlen .........................................................................................................................................739
ovrimos_prepare................................................................................................................................................740
ovrimos_execute................................................................................................................................................740
ovrimos_cursor..................................................................................................................................................740
ovrimos_exec.....................................................................................................................................................741
ovrimos_fetch_into............................................................................................................................................741
ovrimos_fetch_row............................................................................................................................................742
ovrimos_result ...................................................................................................................................................742
ovrimos_result_all .............................................................................................................................................743
ovrimos_num_rows ...........................................................................................................................................744
ovrimos_num_fields ..........................................................................................................................................744
ovrimos_field_name ..........................................................................................................................................744
ovrimos_field_type............................................................................................................................................744
ovrimos_field_len..............................................................................................................................................745
ovrimos_field_num............................................................................................................................................745
ovrimos_free_result...........................................................................................................................................745
ovrimos_commit................................................................................................................................................745
ovrimos_rollback...............................................................................................................................................745
LXII. Entrées/sorties ...................................................................................................................................................747
flush ...................................................................................................................................................................748
ob_start ..............................................................................................................................................................748
ob_gzhandler .....................................................................................................................................................749
ob_get_contents.................................................................................................................................................749
ob_get_length ....................................................................................................................................................749
ob_end_flush .....................................................................................................................................................750
ob_end_clean.....................................................................................................................................................750
ob_implicit_flush...............................................................................................................................................750
LXIII. PDF..................................................................................................................................................................751
pdf_add_annotation ...........................................................................................................................................756
pdf_add_bookmark............................................................................................................................................756
pdf_add_launchlink ...........................................................................................................................................756
pdf_add_locallink..............................................................................................................................................756
pdf_add_note .....................................................................................................................................................756
pdf_add_outline.................................................................................................................................................756
pdf_add_pdflink ................................................................................................................................................757
pdf_add_weblink ...............................................................................................................................................757
pdf_arc...............................................................................................................................................................757
pdf_attach_file ...................................................................................................................................................757
pdf_begin_page .................................................................................................................................................757
pdf_circle...........................................................................................................................................................758
pdf_clip..............................................................................................................................................................758
pdf_close ...........................................................................................................................................................758
pdf_closepath ....................................................................................................................................................758
pdf_closepath_fill_stroke ..................................................................................................................................758
pdf_closepath_stroke.........................................................................................................................................759
pdf_close_image................................................................................................................................................759
pdf_concat .........................................................................................................................................................759
pdf_continue_text..............................................................................................................................................759
pdf_curveto........................................................................................................................................................759
pdf_delete ..........................................................................................................................................................760
pdf_end_page ....................................................................................................................................................760
pdf_endpath .......................................................................................................................................................760
pdf_fill ...............................................................................................................................................................760
pdf_fill_stroke ...................................................................................................................................................760
pdf_findfont .......................................................................................................................................................761
pdf_get_buffer ...................................................................................................................................................761
pdf_get_font ......................................................................................................................................................761
pdf_get_fontname..............................................................................................................................................761
pdf_get_fontsize ................................................................................................................................................761
pdf_get_image_height .......................................................................................................................................762
xxxi
pdf_get_image_width........................................................................................................................................762
pdf_get_parameter.............................................................................................................................................762
pdf_get_value ....................................................................................................................................................762
pdf_lineto ..........................................................................................................................................................762
pdf_moveto........................................................................................................................................................762
pdf_new .............................................................................................................................................................763
pdf_open............................................................................................................................................................763
pdf_open_CCITT ..............................................................................................................................................763
pdf_open_file.....................................................................................................................................................763
pdf_open_gif .....................................................................................................................................................764
pdf_open_image ................................................................................................................................................764
pdf_open_image_file .........................................................................................................................................764
pdf_open_png....................................................................................................................................................764
pdf_open_jpeg ...................................................................................................................................................764
pdf_open_tiff .....................................................................................................................................................765
pdf_place_image ...............................................................................................................................................765
pdf_rect..............................................................................................................................................................765
pdf_restore.........................................................................................................................................................765
pdf_rotate ..........................................................................................................................................................766
pdf_save.............................................................................................................................................................766
pdf_scale............................................................................................................................................................766
pdf_setdash........................................................................................................................................................766
pdf_setflat ..........................................................................................................................................................767
pdf_setfont.........................................................................................................................................................767
pdf_setgray ........................................................................................................................................................767
pdf_setgray_fill..................................................................................................................................................767
pdf_setgray_stroke ............................................................................................................................................767
pdf_setlinecap....................................................................................................................................................768
pdf_setlinejoin ...................................................................................................................................................768
pdf_setlinewidth ................................................................................................................................................768
pdf_setmiterlimit ...............................................................................................................................................768
pdf_setpolydash.................................................................................................................................................768
pdf_setrgbcolor..................................................................................................................................................769
pdf_setrgbcolor_fill ...........................................................................................................................................769
pdf_setrgbcolor_stroke ......................................................................................................................................769
pdf_set_border_color ........................................................................................................................................769
pdf_set_border_dash .........................................................................................................................................769
pdf_set_border_style .........................................................................................................................................770
pdf_set_char_spacing ........................................................................................................................................770
pdf_set_duration................................................................................................................................................770
pdf_set_font.......................................................................................................................................................770
pdf_set_horiz_scaling........................................................................................................................................771
pdf_set_info.......................................................................................................................................................771
pdf_set_leading .................................................................................................................................................771
pdf_set_parameter .............................................................................................................................................771
pdf_set_text_pos................................................................................................................................................772
pdf_set_text_rendering......................................................................................................................................772
pdf_set_text_matrix...........................................................................................................................................772
pdf_set_value.....................................................................................................................................................772
pdf_set_word_spacing.......................................................................................................................................772
pdf_show ...........................................................................................................................................................773
pdf_show_boxed................................................................................................................................................773
pdf_show_xy .....................................................................................................................................................773
pdf_skew ...........................................................................................................................................................773
pdf_stringwidth .................................................................................................................................................774
pdf_stroke..........................................................................................................................................................774
pdf_translate ......................................................................................................................................................774
pdf_open_memory_image.................................................................................................................................774
LXIV. Verisign Payflow Pro Paiement .......................................................................................................................776
pfpro_init ...........................................................................................................................................................777
xxxii
pfpro_cleanup....................................................................................................................................................777
pfpro_process ....................................................................................................................................................777
pfpro_process_raw ............................................................................................................................................778
pfpro_version.....................................................................................................................................................778
LXV. Options PHP et informations ............................................................................................................................780
assert..................................................................................................................................................................781
assert-options.....................................................................................................................................................781
extension_loaded ...............................................................................................................................................781
dl........................................................................................................................................................................782
getenv ................................................................................................................................................................782
get_cfg_var........................................................................................................................................................782
get_current_user ................................................................................................................................................782
get_magic_quotes_gpc ......................................................................................................................................783
get_magic_quotes_runtime ...............................................................................................................................783
getlastmod .........................................................................................................................................................783
getmyinode ........................................................................................................................................................783
getmypid............................................................................................................................................................784
getmyuid............................................................................................................................................................784
getrusage............................................................................................................................................................784
ini_alter..............................................................................................................................................................785
ini_get................................................................................................................................................................785
ini_restore..........................................................................................................................................................785
ini_set ................................................................................................................................................................785
phpcredits ..........................................................................................................................................................787
phpinfo ..............................................................................................................................................................788
phpversion .........................................................................................................................................................789
php_logo_guid...................................................................................................................................................789
php_sapi_name..................................................................................................................................................789
php_uname ........................................................................................................................................................790
putenv ................................................................................................................................................................790
set_magic_quotes_runtime................................................................................................................................791
set_time_limit....................................................................................................................................................791
zend_logo_guid .................................................................................................................................................791
get_defined_constants .......................................................................................................................................791
get_loaded_extensions.......................................................................................................................................792
get_extension_funcs ..........................................................................................................................................793
get_required_files ..............................................................................................................................................793
get_included_files..............................................................................................................................................793
zend_version......................................................................................................................................................794
LXVI. POSIX .............................................................................................................................................................796
posix_kill...........................................................................................................................................................797
posix_getpid ......................................................................................................................................................797
posix_getppid ....................................................................................................................................................797
posix_getuid ......................................................................................................................................................797
posix_geteuid ....................................................................................................................................................797
posix_getgid ......................................................................................................................................................797
posix_getegid.....................................................................................................................................................798
posix_setuid.......................................................................................................................................................798
posix_setgid.......................................................................................................................................................798
posix_getgroups ................................................................................................................................................798
posix_getlogin ...................................................................................................................................................798
posix_getpgrp ....................................................................................................................................................799
posix_setsid .......................................................................................................................................................799
posix_setpgid.....................................................................................................................................................799
posix_getpgid ....................................................................................................................................................799
posix_getsid.......................................................................................................................................................799
posix_uname......................................................................................................................................................800
posix_times........................................................................................................................................................800
posix_ctermid ....................................................................................................................................................800
posix_ttyname ...................................................................................................................................................801
xxxiii
posix_isatty........................................................................................................................................................801
posix_getcwd.....................................................................................................................................................801
posix_mkfifo......................................................................................................................................................801
posix_getgrnam .................................................................................................................................................801
posix_getgrgid ...................................................................................................................................................801
posix_getpwnam................................................................................................................................................802
posix_getpwuid .................................................................................................................................................802
posix_getrlimit ..................................................................................................................................................803
LXVII. PostgreSQL ....................................................................................................................................................804
pg_Close............................................................................................................................................................805
pg_cmdTuples ...................................................................................................................................................805
pg_Connect........................................................................................................................................................805
pg_DBname.......................................................................................................................................................806
pg_end_copy .....................................................................................................................................................806
pg_ErrorMessage ..............................................................................................................................................806
pg_Exec .............................................................................................................................................................806
pg_Fetch_Array.................................................................................................................................................807
pg_Fetch_Object ...............................................................................................................................................807
pg_Fetch_Row...................................................................................................................................................808
pg_FieldIsNull...................................................................................................................................................809
pg_FieldName ...................................................................................................................................................809
pg_FieldNum.....................................................................................................................................................809
pg_FieldPrtLen..................................................................................................................................................810
pg_FieldSize......................................................................................................................................................810
pg_FieldType.....................................................................................................................................................810
pg_FreeResult....................................................................................................................................................810
pg_GetLastOid ..................................................................................................................................................810
pg_Host .............................................................................................................................................................811
pg_loclose..........................................................................................................................................................811
pg_locreate ........................................................................................................................................................811
pg_loexport........................................................................................................................................................811
pg_loimport .......................................................................................................................................................811
pg_loopen ..........................................................................................................................................................812
pg_loread ...........................................................................................................................................................812
pg_loreadall .......................................................................................................................................................812
pg_lounlink........................................................................................................................................................812
pg_lowrite..........................................................................................................................................................812
pg_NumFields ...................................................................................................................................................813
pg_NumRows....................................................................................................................................................813
pg_Options ........................................................................................................................................................813
pg_pConnect......................................................................................................................................................813
pg_Port ..............................................................................................................................................................813
pg_put_line........................................................................................................................................................814
pg_Result...........................................................................................................................................................814
pg_set_client_encoding .....................................................................................................................................814
pg_client_encoding ...........................................................................................................................................815
pg_trace .............................................................................................................................................................815
pg_tty.................................................................................................................................................................815
pg_untrace .........................................................................................................................................................816
LXVIII. Exécution de programmes externes ..............................................................................................................817
escapeshellarg....................................................................................................................................................818
escapeshellcmd..................................................................................................................................................818
exec....................................................................................................................................................................818
passthru..............................................................................................................................................................819
system................................................................................................................................................................819
LXIX. Printer functions ..............................................................................................................................................820
printer_open ......................................................................................................................................................821
printer_abort ......................................................................................................................................................821
printer_close ......................................................................................................................................................821
printer_write ......................................................................................................................................................821
xxxiv
printer_list .........................................................................................................................................................822
printer_set_option..............................................................................................................................................822
printer_get_option .............................................................................................................................................824
printer_create_dc ...............................................................................................................................................824
printer_delete_dc ...............................................................................................................................................824
printer_start_doc................................................................................................................................................825
printer_end_doc.................................................................................................................................................825
printer_start_page..............................................................................................................................................825
printer_end_page ...............................................................................................................................................825
printer_create_pen .............................................................................................................................................826
printer_delete_pen .............................................................................................................................................826
printer_select_pen .............................................................................................................................................826
printer_create_brush..........................................................................................................................................827
printer_delete_brush..........................................................................................................................................827
printer_select_brush ..........................................................................................................................................827
printer_create_font ............................................................................................................................................828
printer_delete_font ............................................................................................................................................829
printer_select_font.............................................................................................................................................829
printer_logical_fontheight .................................................................................................................................829
printer_draw_roundrect .....................................................................................................................................830
printer_draw_rectangle......................................................................................................................................830
printer_draw_elipse ...........................................................................................................................................831
printer_draw_text ..............................................................................................................................................832
printer_draw_line ..............................................................................................................................................832
printer_draw_chord ...........................................................................................................................................832
printer_draw_pie ...............................................................................................................................................833
printer_draw_bmp .............................................................................................................................................834
LXX. Pspell.................................................................................................................................................................835
pspell_add_to_personal .....................................................................................................................................836
pspell_add_to_session .......................................................................................................................................836
pspell_check ......................................................................................................................................................836
pspell_clear_session ..........................................................................................................................................836
pspell_config_create..........................................................................................................................................837
pspell_config_ignore .........................................................................................................................................838
pspell_config_mode ..........................................................................................................................................838
pspell_config_personal......................................................................................................................................839
pspell_config_repl .............................................................................................................................................839
pspell_config_runtogether .................................................................................................................................839
pspell_config_save_repl ....................................................................................................................................840
pspell_new.........................................................................................................................................................840
pspell_new_config.............................................................................................................................................841
pspell_new_personal .........................................................................................................................................841
pspell_save_wordlist .........................................................................................................................................842
pspell_store_replacement ..................................................................................................................................843
pspell_suggest ...................................................................................................................................................843
LXXI. Readline (GNU) ..............................................................................................................................................844
readline ..............................................................................................................................................................845
readline_add_history .........................................................................................................................................845
readline_clear_history .......................................................................................................................................845
readline_completion_function...........................................................................................................................845
readline_info......................................................................................................................................................845
readline_list_history ..........................................................................................................................................846
readline_read_history ........................................................................................................................................846
readline_write_history.......................................................................................................................................846
LXXII. Recode (GNU) ...............................................................................................................................................847
recode_string .....................................................................................................................................................848
recode ................................................................................................................................................................848
recode_file .........................................................................................................................................................848
LXXIII. Expressions régulières compatibles Perl ......................................................................................................849
preg_match ........................................................................................................................................................850
xxxv
preg_match_all ..................................................................................................................................................850
preg_replace ......................................................................................................................................................852
preg_replace_callback .......................................................................................................................................854
preg_split ...........................................................................................................................................................854
preg_quote .........................................................................................................................................................855
preg_grep...........................................................................................................................................................855
options de recherche..........................................................................................................................................856
syntaxe des masques..........................................................................................................................................857
LXXIV. Expressions régulières ..................................................................................................................................870
ereg ....................................................................................................................................................................871
ereg_replace.......................................................................................................................................................871
eregi ...................................................................................................................................................................872
eregi_replace .....................................................................................................................................................872
split ....................................................................................................................................................................872
spliti...................................................................................................................................................................873
sql_regcase ........................................................................................................................................................873
LXXV. Satellite CORBA client extension .................................................................................................................875
OrbitObject........................................................................................................................................................876
OrbitEnum .........................................................................................................................................................876
OrbitStruct .........................................................................................................................................................877
satellite_caught_exception ................................................................................................................................877
satellite_exception_id........................................................................................................................................878
satellite_exception_value ..................................................................................................................................878
LXXVI. Sémaphores et gestion de la mémoire partagée............................................................................................879
sem_get..............................................................................................................................................................880
sem_acquire.......................................................................................................................................................880
sem_release .......................................................................................................................................................880
shm_attach.........................................................................................................................................................880
shm_detach........................................................................................................................................................881
shm_remove ......................................................................................................................................................881
shm_put_var ......................................................................................................................................................881
shm_get_var ......................................................................................................................................................881
shm_remove_var ...............................................................................................................................................882
LXXVII. SESAM .......................................................................................................................................................883
sesam_connect...................................................................................................................................................887
sesam_disconnect ..............................................................................................................................................887
sesam_settransaction .........................................................................................................................................887
sesam_commit ...................................................................................................................................................888
sesam_rollback ..................................................................................................................................................889
sesam_execimm.................................................................................................................................................889
sesam_query ......................................................................................................................................................890
sesam_num_fields .............................................................................................................................................891
sesam_field_name .............................................................................................................................................891
sesam_diagnostic...............................................................................................................................................892
sesam_fetch_result ............................................................................................................................................893
sesam_affected_rows.........................................................................................................................................894
sesam_errormsg.................................................................................................................................................894
sesam_field_array..............................................................................................................................................895
sesam_fetch_row ...............................................................................................................................................896
sesam_fetch_array .............................................................................................................................................898
sesam_seek_row................................................................................................................................................899
sesam_free_result ..............................................................................................................................................899
LXXVIII. Sessions......................................................................................................................................................901
session_start ......................................................................................................................................................904
session_destroy..................................................................................................................................................904
session_name.....................................................................................................................................................904
session_module_name.......................................................................................................................................904
session_save_path .............................................................................................................................................905
session_id ..........................................................................................................................................................905
session_register .................................................................................................................................................905
xxxvi
session_unregister .............................................................................................................................................906
session_unset .....................................................................................................................................................906
session_is_registered .........................................................................................................................................906
session_get_cookie_params ..............................................................................................................................907
session_set_cookie_params...............................................................................................................................907
session_decode ..................................................................................................................................................907
session_encode ..................................................................................................................................................907
session_set_save_handler ..................................................................................................................................908
session_cache_limiter........................................................................................................................................909
LXXIX. Mémoire partagée.........................................................................................................................................910
shmop_open ......................................................................................................................................................911
shmop_read .......................................................................................................................................................911
shmop_write ......................................................................................................................................................911
shmop_size ........................................................................................................................................................912
shmop_delete.....................................................................................................................................................912
shmop_close ......................................................................................................................................................913
LXXX. Shockwave Flash ...........................................................................................................................................914
swf_openfile ......................................................................................................................................................915
swf_closefile......................................................................................................................................................915
swf_labelframe ..................................................................................................................................................916
swf_showframe .................................................................................................................................................916
swf_setframe .....................................................................................................................................................916
swf_getframe .....................................................................................................................................................916
swf_mulcolor.....................................................................................................................................................916
swf_addcolor .....................................................................................................................................................917
swf_placeobject .................................................................................................................................................917
swf_modifyobject..............................................................................................................................................917
swf_removeobject .............................................................................................................................................918
swf_nextid .........................................................................................................................................................918
swf_startdoaction ..............................................................................................................................................918
swf_actiongotoframe .........................................................................................................................................918
swf_actiongeturl ................................................................................................................................................918
swf_actionnextframe .........................................................................................................................................918
swf_actionprevframe .........................................................................................................................................919
swf_actionplay ..................................................................................................................................................919
swf_actionstop...................................................................................................................................................919
swf_actiontogglequality ....................................................................................................................................919
swf_actionwaitforframe.....................................................................................................................................919
swf_actionsettarget............................................................................................................................................920
swf_actiongotolabel ..........................................................................................................................................920
swf_enddoaction................................................................................................................................................920
swf_defineline ...................................................................................................................................................920
swf_definerect ...................................................................................................................................................920
swf_definepoly ..................................................................................................................................................920
swf_startshape ...................................................................................................................................................921
swf_shapelinesolid ............................................................................................................................................921
swf_shapefilloff .................................................................................................................................................921
swf_shapefillsolid..............................................................................................................................................921
swf_shapefillbitmapclip ....................................................................................................................................921
swf_shapefillbitmaptile .....................................................................................................................................922
swf_shapemoveto ..............................................................................................................................................922
swf_shapelineto .................................................................................................................................................922
swf_shapecurveto ..............................................................................................................................................922
swf_shapecurveto3 ............................................................................................................................................922
swf_shapearc .....................................................................................................................................................923
swf_endshape ....................................................................................................................................................923
swf_definefont ...................................................................................................................................................923
swf_setfont ........................................................................................................................................................923
swf_fontsize ......................................................................................................................................................923
swf_fontslant .....................................................................................................................................................924
xxxvii
swf_fonttracking................................................................................................................................................924
swf_getfontinfo .................................................................................................................................................924
swf_definetext ...................................................................................................................................................924
swf_textwidth ....................................................................................................................................................924
swf_definebitmap ..............................................................................................................................................925
swf_getbitmapinfo.............................................................................................................................................925
swf_startsymbol ................................................................................................................................................925
swf_endsymbol..................................................................................................................................................925
swf_startbutton ..................................................................................................................................................925
swf_addbuttonrecord .........................................................................................................................................926
swf_oncondition ................................................................................................................................................926
swf_endbutton ...................................................................................................................................................927
swf_viewport .....................................................................................................................................................927
swf_ortho...........................................................................................................................................................927
swf_ortho2.........................................................................................................................................................927
swf_perspective .................................................................................................................................................927
swf_polarview ...................................................................................................................................................928
swf_lookat .........................................................................................................................................................928
swf_pushmatrix .................................................................................................................................................928
swf_popmatrix...................................................................................................................................................928
swf_scale ...........................................................................................................................................................929
swf_translate......................................................................................................................................................929
swf_rotate ..........................................................................................................................................................929
swf_posround ....................................................................................................................................................929
LXXXI. SNMP ...........................................................................................................................................................930
snmpget .............................................................................................................................................................931
snmpset..............................................................................................................................................................931
snmpwalk ..........................................................................................................................................................931
snmpwalkoid .....................................................................................................................................................932
snmp_get_quick_print .......................................................................................................................................932
snmp_set_quick_print .......................................................................................................................................932
LXXXII. Sockets ........................................................................................................................................................934
accept_connect ..................................................................................................................................................936
bind....................................................................................................................................................................936
close...................................................................................................................................................................936
connect ..............................................................................................................................................................936
listen ..................................................................................................................................................................937
read ....................................................................................................................................................................937
socket.................................................................................................................................................................937
strerror ...............................................................................................................................................................938
write...................................................................................................................................................................938
LXXXIII. Chaîne de caractères ..................................................................................................................................939
AddCSlashes .....................................................................................................................................................940
AddSlashes ........................................................................................................................................................940
bin2hex ..............................................................................................................................................................940
chop ...................................................................................................................................................................940
chr......................................................................................................................................................................941
chunk_split ........................................................................................................................................................941
convert_cyr_string .............................................................................................................................................941
count_chars........................................................................................................................................................942
crc32 ..................................................................................................................................................................942
crypt...................................................................................................................................................................942
echo ...................................................................................................................................................................943
explode ..............................................................................................................................................................944
get_html_translation_table ................................................................................................................................944
get_meta_tags....................................................................................................................................................945
hebrev ................................................................................................................................................................945
hebrevc ..............................................................................................................................................................946
htmlentities ........................................................................................................................................................946
htmlspecialchars ................................................................................................................................................946
xxxviii
implode..............................................................................................................................................................947
join.....................................................................................................................................................................947
levenshtein.........................................................................................................................................................947
localeconv..........................................................................................................................................................948
ltrim ...................................................................................................................................................................950
md5....................................................................................................................................................................950
metaphone .........................................................................................................................................................950
nl2br ..................................................................................................................................................................950
ord......................................................................................................................................................................951
parse_str ............................................................................................................................................................951
print ...................................................................................................................................................................951
printf ..................................................................................................................................................................952
quoted_printable_decode ..................................................................................................................................952
QuoteMeta .........................................................................................................................................................952
rtrim ...................................................................................................................................................................952
sscanf .................................................................................................................................................................953
setlocale .............................................................................................................................................................953
similar_text........................................................................................................................................................954
soundex..............................................................................................................................................................954
sprintf ................................................................................................................................................................955
strncasecmp .......................................................................................................................................................956
strcasecmp .........................................................................................................................................................956
strchr..................................................................................................................................................................957
strcmp ................................................................................................................................................................957
strcoll .................................................................................................................................................................957
strcspn................................................................................................................................................................958
strip_tags ...........................................................................................................................................................958
StripCSlashes ....................................................................................................................................................958
StripSlashes .......................................................................................................................................................958
stristr..................................................................................................................................................................959
strlen ..................................................................................................................................................................959
strnatcmp ...........................................................................................................................................................959
strnatcasecmp ....................................................................................................................................................960
strncmp ..............................................................................................................................................................960
str_pad ...............................................................................................................................................................960
strpos .................................................................................................................................................................961
strrchr ................................................................................................................................................................962
str_repeat ...........................................................................................................................................................962
strrev..................................................................................................................................................................962
strrpos ................................................................................................................................................................963
strspn .................................................................................................................................................................963
strstr ...................................................................................................................................................................963
strtok..................................................................................................................................................................964
strtolower...........................................................................................................................................................964
strtoupper...........................................................................................................................................................965
str_replace .........................................................................................................................................................965
strtr ....................................................................................................................................................................966
substr .................................................................................................................................................................966
substr_count ......................................................................................................................................................967
substr_replace....................................................................................................................................................967
trim ....................................................................................................................................................................968
ucfirst .................................................................................................................................................................968
ucwords .............................................................................................................................................................969
wordwrap...........................................................................................................................................................969
LXXXIV. Sybase........................................................................................................................................................971
sybase_affected_rows........................................................................................................................................972
sybase_close ......................................................................................................................................................972
sybase_connect..................................................................................................................................................972
sybase_data_seek ..............................................................................................................................................972
sybase_fetch_array ............................................................................................................................................973
xxxix
sybase_fetch_field .............................................................................................................................................973
sybase_fetch_object ..........................................................................................................................................973
sybase_fetch_row ..............................................................................................................................................974
sybase_field_seek ..............................................................................................................................................974
sybase_free_result .............................................................................................................................................974
sybase_get_last_message ..................................................................................................................................974
sybase_min_client_severity...............................................................................................................................974
sybase_min_error_severity................................................................................................................................975
sybase_min_message_severity ..........................................................................................................................975
sybase_min_server_severity..............................................................................................................................975
sybase_num_fields ............................................................................................................................................975
sybase_num_rows .............................................................................................................................................976
sybase_pconnect................................................................................................................................................976
sybase_query .....................................................................................................................................................976
sybase_result .....................................................................................................................................................976
sybase_select_db ...............................................................................................................................................977
LXXXV. URL.............................................................................................................................................................978
base64_decode ..................................................................................................................................................979
base64_encode ..................................................................................................................................................979
parse_url ............................................................................................................................................................979
rawurldecode .....................................................................................................................................................979
rawurlencode .....................................................................................................................................................979
urldecode ...........................................................................................................................................................980
urlencode ...........................................................................................................................................................980
LXXXVI. Variables ....................................................................................................................................................982
doubleval ...........................................................................................................................................................983
empty .................................................................................................................................................................983
gettype ...............................................................................................................................................................983
get_defined_vars................................................................................................................................................984
get_resource_type..............................................................................................................................................984
intval..................................................................................................................................................................985
is_array ..............................................................................................................................................................985
is_bool ...............................................................................................................................................................985
is_double ...........................................................................................................................................................985
is_float ...............................................................................................................................................................985
is_int ..................................................................................................................................................................986
is_integer ...........................................................................................................................................................986
is_long ...............................................................................................................................................................986
is_null ................................................................................................................................................................986
is_numeric .........................................................................................................................................................986
is_object ............................................................................................................................................................987
is_real ................................................................................................................................................................987
is_resource.........................................................................................................................................................987
is_scalar .............................................................................................................................................................987
is_string .............................................................................................................................................................988
isset....................................................................................................................................................................988
print_r ................................................................................................................................................................989
serialize..............................................................................................................................................................989
settype................................................................................................................................................................989
strval ..................................................................................................................................................................990
unserialize..........................................................................................................................................................990
unset ..................................................................................................................................................................991
var_dump...........................................................................................................................................................992
LXXXVII. WDDX .....................................................................................................................................................994
wddx_serialize_value ........................................................................................................................................995
wddx_serialize_vars ..........................................................................................................................................995
wddx_packet_start.............................................................................................................................................995
wddx_packet_end..............................................................................................................................................995
wddx_add_vars..................................................................................................................................................996
wddx_deserialize ...............................................................................................................................................996
xl
LXXXVIII. Analyseur syntaxique XML....................................................................................................................997
xml_parser_create ...........................................................................................................................................1004
xml_set_object ................................................................................................................................................1004
xml_set_element_handler................................................................................................................................1004
xml_set_character_data_handler .....................................................................................................................1005
xml_set_processing_instruction_handler ........................................................................................................1006
xml_set_default_handler .................................................................................................................................1007
xml_set_unparsed_entity_decl_handler ..........................................................................................................1007
xml_set_notation_decl_handler ......................................................................................................................1008
xml_set_external_entity_ref_handler..............................................................................................................1009
xml_parse ........................................................................................................................................................1009
xml_get_error_code ........................................................................................................................................1010
xml_error_string..............................................................................................................................................1010
xml_get_current_line_number ........................................................................................................................1010
xml_get_current_column_number ..................................................................................................................1011
xml_get_current_byte_index...........................................................................................................................1011
xml_parse_into_struct .....................................................................................................................................1011
xml_parser_free...............................................................................................................................................1014
xml_parser_set_option ....................................................................................................................................1014
xml_parser_get_option....................................................................................................................................1015
utf8_decode .....................................................................................................................................................1015
utf8_encode .....................................................................................................................................................1015
LXXXIX. XSLT........................................................................................................................................................1017
xslt_closelog....................................................................................................................................................1018
xslt_create........................................................................................................................................................1018
xslt_errno.........................................................................................................................................................1018
xslt_error .........................................................................................................................................................1018
xslt_fetch_result ..............................................................................................................................................1018
xslt_free ...........................................................................................................................................................1018
xslt_openlog ....................................................................................................................................................1019
xslt_output_begintransform.............................................................................................................................1019
xslt_output_endtransform................................................................................................................................1019
xslt_process .....................................................................................................................................................1019
xslt_run............................................................................................................................................................1021
xslt_set_sax_handler .......................................................................................................................................1021
xslt_transform..................................................................................................................................................1021
XC. YAZ ...................................................................................................................................................................1022
yaz_addinfo .....................................................................................................................................................1024
yaz_close .........................................................................................................................................................1024
yaz_connect .....................................................................................................................................................1024
yaz_errno .........................................................................................................................................................1024
yaz_error..........................................................................................................................................................1024
yaz_hits............................................................................................................................................................1025
yaz_element.....................................................................................................................................................1025
yaz_database....................................................................................................................................................1025
yaz_present......................................................................................................................................................1025
yaz_range ........................................................................................................................................................1025
yaz_record .......................................................................................................................................................1026
yaz_search .......................................................................................................................................................1026
yaz_syntax .......................................................................................................................................................1027
yaz_scan ..........................................................................................................................................................1027
yaz_scan_result ...............................................................................................................................................1028
yaz_ccl_conf....................................................................................................................................................1028
yaz_ccl_parse ..................................................................................................................................................1028
yaz_itemorder..................................................................................................................................................1029
yaz_wait...........................................................................................................................................................1030
XCI. NIS ...................................................................................................................................................................1032
yp_get_default_domain ...................................................................................................................................1033
yp_order ..........................................................................................................................................................1033
yp_master ........................................................................................................................................................1033
xli
yp_match .........................................................................................................................................................1034
yp_first.............................................................................................................................................................1034
yp_next ............................................................................................................................................................1034
XCII. Zip (décompression) .......................................................................................................................................1036
zip_close..........................................................................................................................................................1037
zip_entry_close................................................................................................................................................1037
zip_entry_compressedsize...............................................................................................................................1037
zip_entry_compressionmethod........................................................................................................................1037
zip_entry_filesize ............................................................................................................................................1037
zip_entry_name ...............................................................................................................................................1038
zip_entry_open ................................................................................................................................................1038
zip_entry_read .................................................................................................................................................1038
zip_open ..........................................................................................................................................................1038
zip_read ...........................................................................................................................................................1039
XCIII. Zlib (Compression)........................................................................................................................................1040
gzclose .............................................................................................................................................................1041
gzeof ................................................................................................................................................................1041
gzfile ................................................................................................................................................................1041
gzgetc ..............................................................................................................................................................1041
gzgets...............................................................................................................................................................1041
gzgetss .............................................................................................................................................................1042
gzopen .............................................................................................................................................................1042
gzpassthru........................................................................................................................................................1042
gzputs ..............................................................................................................................................................1043
gzread ..............................................................................................................................................................1043
gzrewind ..........................................................................................................................................................1043
gzseek ..............................................................................................................................................................1044
gztell ................................................................................................................................................................1044
gzwrite .............................................................................................................................................................1044
readgzfile .........................................................................................................................................................1044
gzcompress ......................................................................................................................................................1045
gzuncompress ..................................................................................................................................................1045
gzdeflate ..........................................................................................................................................................1045
gzinflate ...........................................................................................................................................................1046
gzencode..........................................................................................................................................................1046
V. PEAR: the PHP Extension and Application Repository..........................................................................................1047
24. A propos de PEAR..............................................................................................................................................1047
Qu’est ce que PEAR? ......................................................................................................................................1048
25. Style de codage PEAR ........................................................................................................................................1049
Indentation.......................................................................................................................................................1050
Structures de contrôle......................................................................................................................................1050
Appels de fonctions .........................................................................................................................................1050
Définitions de fonctions ..................................................................................................................................1051
Commentaires..................................................................................................................................................1051
Inclusion de code.............................................................................................................................................1052
Balises de code PHP........................................................................................................................................1052
Entête de fichier...............................................................................................................................................1052
Balises CVS.....................................................................................................................................................1053
URL d’exemple ...............................................................................................................................................1053
Noms des constantes .......................................................................................................................................1053
XCIV. Manuel de référence PEAR...........................................................................................................................1054
PEAR...............................................................................................................................................................1055
PEAR_Error ....................................................................................................................................................1057
xlii
VI. FAQ: Frequently Asked Questions ...........................................................................................................................1059
26. General Information............................................................................................................................................1059
27. Mailing lists ........................................................................................................................................................1061
28. Obtaining PHP ....................................................................................................................................................1063
29. Connecting to databases......................................................................................................................................1066
30. Installation...........................................................................................................................................................1070
31. Build Problems ...................................................................................................................................................1073
32. Using PHP...........................................................................................................................................................1077
33. PHP and HTML ..................................................................................................................................................1081
34. PHP and other languages ....................................................................................................................................1083
35. Common Problems .............................................................................................................................................1085
36. Migrating from PHP 2 to PHP 3 .........................................................................................................................1087
37. Migrating from PHP 3 to PHP 4 .........................................................................................................................1089
38. Miscellaneous Questions ....................................................................................................................................1091
VII. Appendices ................................................................................................................................................................1093
A. Migration de PHP/FI 2.0 à PHP 3.0.....................................................................................................................1093
A propos des incompatibilités en 3.0 ..............................................................................................................1094
Balises PHP .....................................................................................................................................................1094
Syntaxe if..endif ..............................................................................................................................................1094
Syntaxe while ..................................................................................................................................................1095
Types d’expression ..........................................................................................................................................1095
Les messages d’erreur ont changé...................................................................................................................1096
Evaluation rapide des booléens .......................................................................................................................1096
La valeur TRUE/FALSE comme retour de fonctions ........................................................................................1096
Diverses incompatibilités ................................................................................................................................1097
B. Migration de PHP 3.0 à PHP 4.0..........................................................................................................................1098
Ce qui a changé en PHP 4.0 ............................................................................................................................1099
Comportement de l’analyseur .........................................................................................................................1099
Rapport d’erreur ..............................................................................................................................................1099
Changement de configuration ................................................................................................................1099
Nouveaux messages d’erreurs ...............................................................................................................1099
Initialiseur........................................................................................................................................................1100
empty("0") ...................................................................................................................................................1100
Fonctions manquantes .....................................................................................................................................1100
Fonctions manquantes pour des raisons de structure.............................................................................1100
Fonctions et extensions obsolètes ..........................................................................................................1100
Nouveau statut pour unset() ..................................................................................................................1100
Extensions PHP 3.0 .........................................................................................................................................1101
Substitution de variables dans les chaînes.......................................................................................................1101
Cookies............................................................................................................................................................1101
C. Développement PHP ............................................................................................................................................1102
Créer une fonction PHP 3................................................................................................................................1103
Prototypes de fonctions..........................................................................................................................1103
Arguments de fonctions .........................................................................................................................1103
Fonctions à nombre d’arguments variable.............................................................................................1103
Utiliser les arguments d’une fonction....................................................................................................1103
Gestion de la mémoire dans une fonction..............................................................................................1104
Affecter une variable dans la table des symboles ..................................................................................1104
Retourne une valeur simple ...................................................................................................................1106
Retourner des valeurs complexes...........................................................................................................1107
Utiliser la liste des ressources................................................................................................................1108
Utiliser la table des ressources persistantes. ..........................................................................................1108
Ajouter des directives de configuration à l’exécution............................................................................1109
Appeler des fonctions utilisateurs ...................................................................................................................1110
HashTable *function_table ....................................................................................................................1110
pval *object............................................................................................................................................1110
pval *function_name..............................................................................................................................1110
pval *retval.............................................................................................................................................1110
int param_count .....................................................................................................................................1110
xliii
pval *params[] .......................................................................................................................................1110
Rapport d’erreurs.............................................................................................................................................1110
E_NOTICE ............................................................................................................................................1111
E_WARNING ........................................................................................................................................1111
E_ERROR..............................................................................................................................................1111
E_PARSE...............................................................................................................................................1111
E_CORE_ERROR .................................................................................................................................1111
E_CORE_WARNING ...........................................................................................................................1111
E_COMPILE_ERROR ..........................................................................................................................1111
E_COMPILE_WARNING ....................................................................................................................1111
E_USER_ERROR .................................................................................................................................1111
E_USER_WARNING............................................................................................................................1111
E_USER_NOTICE ................................................................................................................................1112
D. Débuggeur PHP....................................................................................................................................................1113
A propos du débuggeur ...................................................................................................................................1114
Utiliser le débuggeur PHP...............................................................................................................................1114
Protocole du débuggeur...................................................................................................................................1114
E. Mot réservés en PHP ............................................................................................................................................1116
F. Types des ressources PHP ....................................................................................................................................1119
G. Liste d’alias ..........................................................................................................................................................1143
xliv
Préface
PHP, est un acronyme récursif, qui signifie "PHP: Hypertext Preprocessor" : c’es un langage de script HTML, exécuté coté
serveur. L’essentiel de sa syntaxe est emprunté aux langages C, Java et Perl, avec des améliorations spécifiques. L’objet de
ce langage est de permettre aux développeurs web d’écrire des pages dynamiques rapidement.
Notez qu’aujourd’hui, les capacités de PHP vont bien au-dela de la génération de pages personnelles : PHP génère des
pages PDF, des images ou même des animations Flash à la volée. PHP-GTK (http://gtk.php.net/) permet à PHP de faire des
scripts utilisant des interfaces X.
A propos de ce manuel
Ce manuel est écrit en XML avec DocBook XML DTD (http://www.nwalsh.com/docbook/xml/), en utilisant DSSSL
(http://www.jclark.com/dsssl/) (Document Style and Semantics Specification Language) pour l’affichage. Les outils
utilisés pour les formats HTML et TeX sont Jade (http://www.jclark.com/jade/), écrit par James Clark
(http://www.jclark.com/bio.htm) et The Modular DocBook Stylesheets (http://nwalsh.com/docbook/dsssl/) écrit par
Norman Walsh (http://nwalsh.com/). Nous utilisons aussi Microsoft HTML Help Workshop
(http://msdn.microsoft.com/library/en-us/htmlhelp/html/vsconhh1start.asp) pour générer le format HTML.
Vous pouvez télécharger le manuel courant dans divers langages et formats, y compris en texte seul, HTML, PDF,
PalmPilot DOC, PalmPilot iSilo et WinHelp, depuis http://www.php.net/docs.php. Les manuels sont mis à jour
quotidiennement.
La version française est traduite quotidiennement et disponible chez Nexen (nexen.net/ (http://www.nexen.net/)). Ce
manuel a été généré à partir de la documentation originale en anglais du PHP Documentation Group, au format XML,
grâce à une version adaptée de texi (http://www.texinfo.com/).
Vous pouvez avoir d’autres informations sur le téléchargement des sources XML de cette documentation à
http://cvs.php.net/. La documentation est stockée dans le module phpdoc.
i
Partie I. Comment Commencer
Chapitre 1. Introduction
1
Chapitre 1. Introduction
Qu’est ce que PHP?
PHP (officiellement "PHP: Hypertext Preprocessor") est un langage de script HTML, qui fonctionne coté serveur.
Réponse simple et claire, mais qu’est ce que cela veut dire? Un exemple :
Exemple 1-1. Exemple d’introduction
<html>
<head>
<title>Exemple</title>
</head>
<body>
<?php
echo "Bonjour, je suis un script PHP!";
?>
</body>
</html>
Il est à noter la différence avec les autres scripts CGI écrit dans d’autres langages tels que le Perl ou le C : Au lieu d’écrire
un programme avec de nombreuses lignes de commandes afin d’afficher une page HTML, vous écrivez une page HTML
avec du code inclus à l’intérieur afin de réaliser une action précise (dans ce cas là, afficher du texte). Le code PHP est
inclus entre une balise de début et une balise de fin qui permettent au navigateur de passer en "mode PHP".
Ce qui distingue le PHP des langages de script comme le Javascript est que le code est exécuté sur le serveur. Si vous avez
un script similaire sur votre serveur, le client ne reçoit que le résultat du script, sans aucun moyen d’avoir accès au code qui
a produit ce résultat. Vous pouvez configurer votre serveur web afin qu’il analyse tous vos fichiers HTML comme des
fichiers PHP. Ainsi, il n’y a aucun moyen de distinguer les pages qui sont produites dynamiquement des pages statiques.
Que peut faire PHP?
Le langage PHP possède les même fonctionnalités que les autres langages permettant d’écrire des scripts CGI, comme
collecter des données, générer dynamiquement des pages web ou bien envoyer et recevoir des cookies.
La plus grande qualité et le plus important avantage du langage PHP est le support d’un grand nombre de bases de
données. Réaliser une page web dynamique interfacant une base de donnés est extrêmement simple. Les bases de données
suivantes sont supportées par PHP:
Adabas D
InterBase
PostgreSQL
dBase
FrontBase
Sesam
Empress
mSQL
Solid
FilePro (lecutre seule) Direct MS-SQL
Sybase
Hyperwave
MySQL
Velocis
IBM DB2
ODBC
Unix dbm
Informix
Oracle (OCI7 et OCI8)
Ingres
Ovrimos
Le langage PHP inclus le support des services utilisant les protocoles tels que IMAP, SNMP, NNTP, POP3 ou encore
HTTP. Vous pouvez également ouvrir des connections et interagir en utilisant d’autres protocoles.
La génèse du PHP
Le langage PHP a été conçu durant l’automne 1994 par Rasmus Lerdorf. Les premières versions (qui restèrent privées)
étaient utilisées afin de savoir qui venait consulter son CV en ligne. La première version publique fut disponible au début
de l’année 1995. Elle fut connue sous le nom de "Personal Sommaire Page Tools". Elle était composée d’un analyseur
extrêmement simple qui ne reconnaissait que quelques macros spéciales et d’un petit nombre d’utilitaires couramment
utilisés dans les pages web. Un livre d’or, un compteur, etc... L’analyseur fut réécrit durant l’été 1995 et fut appelé PHP/FI
Version 2. FI etaient les initiales d’un autre package que Rasmus avait écrit qui interprétait les formulaires HTML. C’est
alors qu’il combina le "Personnal Sommaire Page tools" avec le "Form Interpreter" et il y ajouta le support de mSQL: c’est
comme cela que naquît PHP/FI. PHP/FI grandit de manière spectaculaire et de nombreuses personnes commencèrent à
contribuer à son amélioration.
2
Chapitre 1. Introduction
Il est relativement peu aisé de donner des statistiques, mais on estime que PHP/FI est utilisé sur 15 000 sites web dans le
monde entier, fin 1996. Ce chiffre atteint 50 000 durant l’été 1997. L’été 1997 voit aussi un profond changement dans le
développemnt du PHP: d’un projet personnel (celui de Ramsus), on passe alors à une projet d’équipe. L’analyseur fut de
nouveau réécrit par Zeev Suraski et Andi Gutmans et ce nouvel analyseur forma la base de la version 3 du PHP. Une
grande partie du code de PHP/FI fut complètement réécrit alors que l’autre partie fut portée pour donner le PHP Version 3.
La dernière version de PHP (PHP 4) utilise le moteur d’analyse Zend (http://www.zend.com/) pour atteindre de nouveaux
niveaux de performance, et supporter un nombre encore plus grand de librairies et extensions. Il tourne de manière native
sur tous les serveurs web les plus répandus.
Aujourd’hui (Janvier 2001) PHP 3 ou PHP 4 sont distribués avec de nombreux produits commerciaux comme "C2’s
StrongHold web server" et "RedHat Linux" et il est admis (d’après les chiffres de NetCraft (http://www.netcraft.com/), et
leurs statistiques Netcraft Web Server Survey (http://www.netcraft.com/survey/)) que le PHP est utilisé sur 5 100 000 sites
web dans le monde entier. Pour comparaison, ce chiffre est légèrement supérieur au nombre de serveurs tournant sous
Microsoft Information server (IIS) : 5.03 millions.
Enfin, à l’heure oú ce document est rédigé, la nouvelle génération du PHP est en cours de création. Elle utilisera les
qualités de Zend (http://www.zend.com/) pour améliorer les performances et améliorera le support des serveurs web autres
que Apache.
3
Chapitre 2. Installation
4
Chapitre 2. Installation
Télécharger la dernière version
Les codes source et les exécutables compilés de certains OS (y compris Windows), sont disponibles à http://www.php.net/.
Nous recommandons l’utilisation du miroir (http://www.php.net/mirrors.php) le plus proche pour accélérer les
chargements.
Installation sous UNIX
Cette section va vous guider lors du processus d’installation et de configuration de PHP sous Unix. Commencez par étudier
les sections spécifiques à votre plate-forme ou à votre serveur web avant de passer à l’installation.
Pré-requis :
•
Connaissance de base d’UNIX (savoir faire un "make" et compiler en C, si besoin).
•
Un compilateur ANSI C (pour les codes sources)
•
flex (pour les codes sources)
•
bison (pour les codes sources)
•
Un serveur web
•
Tous les composants nécessaires aux extensions (librairie GD, PDF, etc...)
Il y a plusieurs façons d’installer PHP sur une plate-forme UNIX : soit un processus de compilation-configuration, ou bien
avec des packages déjà tout prêts. Cette documentation se concentre sur la première solution.
La première partie du processus est faite en ligne de commande, grâce aux options du script configure. Cette section
présente l’utilisation des options les plus courantes, mais il y en a beaucoup d’autres à essayer. Reportez-vous à la liste
complète des options de configuration pour une liste exhaustive. Voici les différentes méthodes d’installation de PHP :
•
Comme module Apache
•
Comme module fhttpd
•
Pour l’utiliser avec AOLServer, NSAPI, phttpd, Pi3Web, Roxen, thttpd, ou Zeus.
•
Comme exécutable CGI
Référence Module Apache
PHP peut être compilé de nombreuses manières différentes, mais la plus populaire est le module Apache. La liste suivante
est un récapitulatif de l’installation.
Exemple 2-1. Instructions d’installation PHP 4 (Version Module Apache)
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
gunzip apache_1.3.x.tar.gz
tar xvf apache_1.3.x.tar
gunzip php-x.x.x.tar.gz
tar xvf php-x.x.x.tar
cd apache_1.3.x
./configure --prefix=/www
cd ../php-x.x.x
./configure --with-mysql --with-apache=../apache_1.3.x --enable-track-vars
make
make install
cd ../apache_1.3.x
./configure --activate-module=src/modules/php4/libphp4.a
make
make install
cd ../php-x.x.x
cp php.ini-dist /usr/local/lib/php.ini
"Editez votre fichier httpd.conf ou srm.conf et ajoutez : "
5
Chapitre 2. Installation
AddType application/x-httpd-php .php
18. "Utilisez votre procédure habituelle pour redémarrer le serveur Apache.
(vous devez arrêter puis redémarrer le serveur, et pas seulement forcer
le serveur à relire la configuration initiale).
Compilation
Lorsque PHP est configuré, vous êtes prêts à compiler l’exécutable CGI. La commande make doit prendre tout en charge.
Si ce n’est pas le cas et que vous restez bloqué, reportez-vous aux problèmes courants.
Installation sous Linux
Cette section contient les notes et conseils d’installation de PHP sur les distributions Linux.
Utilisation des packages
De nombreuses distributions Linux disposent d’un système d’installation par package, comme le fameux RPM. Ils vous
permettent de faire des installations standard, mais si vous avez des configurations spécifiques (comme par exemple un
serveur sécurisé, ou un pilote de base de données exotique), vous aurez probablement à compiler vous-même votre PHP et
votre serveur web. Si vous n’êtes pas familier avec la compilation de vos propres logiciels, il vaut mieux rechercher le
package qui pourra répondre à vos besoins.
Installation sous HP-UX
Cette section contient les notes et conseils d’installation de PHP sur les distributions HP-UX.
Exemple 2-2. Instructions d’installation pour HP-UX 10
From: [email protected]
04-Jan-2001 09:49
(Ces conseils sont destinés à PHP 4.0.4 et Apache v1.3.9)
Vous voulez installer PHP et Apache sur une HP-UX 10.20?
1. Vous aurez besoin de gzip. Téléchargez la distribution compilée à
http://hpux.connect.org.uk/ftp/hpux/Gnu/gzip-1.2.4a/gzip-1.2.4a-sd-10.20.depot.Z,
puis décompressez la, et utilisez swinstall pour installer.
2. Vous aurez besoin de gcc. Téléchargez une distribution compilée à
http://gatekeep.cs.utah.edu/ftp/hpux/Gnu/gcc-2.95.2/gcc-2.95.2-sd-10.20.depot.gz,
puis décompressez la, et utilisez swinstall pour installer.
3. Vous aurez besoin de GNU binutils.
Téléchargez une distribution compilée à
http://hpux.connect.org.uk/ftp/hpux/Gnu/binutils-2.9.1/binutils-2.9.1-sd-10.20.depot.gz
, puis décompressez la, et utilisez swinstall pour installer.
4. Vous aurez besoin de bison. Téléchargez une distribution compilée à
http://hpux.connect.org.uk/ftp/hpux/Gnu/bison-1.28/bison-1.28-sd-10.20.depot.gz
, puis décompressez la, et utilisez swinstall pour installer.
5. Vous aurez besoin de flex. Téléchargez une distribution source sur l’un
des miroirs http://www.gnu.org. Il se trouve dans le dossier non-gnu du site FTP.
Téléchargez le fichier, décompressez leur,
puis utilisez tar -xvf avec. Allez dans le nouveau dossier flex ainsi créé,
et exécutez la commande "./configure", puis faites un "make", puis un "make install".
Si vous avez des erreurs à cette étape, c’est probablement par ce que gcc et
les autres ne sont pas inscrites dans votre PATH. Ajoutez les.
Maintenant, la partie délicate.
6. Téléchargez les sources d’Apache et de PHP.
7. Décompressez les avec gunzip puis faites "tar -xvf" avec les deux archives.
Nous devons modifier quelques fichiers avant de les compiler.
8. Premièrement, le fichier de configuration doit être modifié car il
semble oublier qu’il est sur une machine HP-UX. Il y a des méthodes plus
rusées, mais le plus simple et le plus efficace est d’ajouter
6
Chapitre 2. Installation
"lt_target=hpux10.20" à la ligne 47286 du script de configuration.
9. Le fichier d’Apache GuessOS doit être modifié. Sous
apache_1.3.9/src/helpers, modifier la ligne 89, en remplaçant
"echo "hp${HPUXMACH}-hpux${HPUXVER}"; exit 0"
par :
"echo "hp${HPUXMACH}-hp-hpux${HPUXVER}"; exit 0"
10. Il n’est pas possible d’installer PHP sous forme de shared object sous
HP-UX, ce qui fait que vous devez le compiler en statique. Suivez
simplement les instructions de la section Apache.
11. PHP et Apache sont maintenant compilés correctement, mais Apache ne démarre pas.
Vous devez créer un nouvel utilisateur Apache, par exemple www, ou apache.
Puis, modifiez les lignes 252 et 253 de conf/httpd.conf pour remplacer
User nobody
Group nogroup
par vos valeurs, par exemple :
User www
Group sys
Il n’est pas possible d’éxécuter Apache avec l’utilisateur nobody sous
HP-UX. A partir de ce moment là, PHP et Apache doivent fonctionner.
J’espère que cela aidera quelqu’un.
Paul Mckay.
Installation sous Solaris
Cette section contient les notes et conseils d’installation de PHP sur les distributions Solaris.
Logiciels nécessaires
L’installation Solaris oublie généralement les compilateurs C, et leurs utilitaires. Voici la liste des outils nécessaires :
•
gcc (recommandé, mais d’autres compilateurs C peuvent fonctionner)
•
make
•
flex
•
bison
•
m4
•
autoconf
•
automake
•
perl
•
gzip
•
tar
De plus, vous devrez aussi installer (et peut être aussi compiler) toutes les librairies nécessaires aux extensions (MySQL,
ORACLE..).
Utilisation des packages
Vous pouvez simplifier l’installation Solaris en utilisant pkgadd pour installer la plupart des composants.
Installations Unix/OpenBSD
Cette section contient les notes spécifiques à l’installation de PHP sous OpenBSD (http://www.openbsd.org/).
7
Chapitre 2. Installation
Utilisation des ports
Ceci est la méthode recommandée d’installation de PHP sous OpenBSD, car elle prend en compte les dernières
modifications et mises à jour de sécurité. Pour utiliser cette méthode, assurez vous que vous avez bien ports tree
(http://www.openbsd.org/ports.html) récent. Choisissez alors simplement la version que vous souhaitez installer, et utilisez
la commande make install. Ci-dessous, voici un exemple.
Exemple 2-3. Exemple d’installation de PHP sous OpenBSD avec Ports
$ cd /usr/ports/www/php4
$ make show VARNAME=FLAVORS
(choisissez les versions que vous souhaitez sur votre liste).
$ env FLAVOR="imap gettext ldap mysql gd" make install
$ /usr/local/sbin/php4-enable
Utilisation des Packages
Il existe des packages pré-compilés disponibles en téléchargement à OpenBSD (http://www.openbsd.org/). Ils s’intègrent
automatiquement avec la version d’Apache installée sur votre OS. Cependant, comme il y a un grand nombre d’options
(appelées flavors) disponibles, vous trouverez peut-être plus facile de le compiler à partir de l’arbre de ports. Lisez le
manuel packages(7) (http://www.openbsd.org/cgi-bin/man.cgi?query=packages) pour plus de détails sur les packages
disponibles (en anglais).
Installation sous Mac OS X
Cette section contient les notes et conseils d’installation de PHP sur les distributions Mac OS X.
Utilisation des packages
Il existe quelques versions pré-packagée et pré-compilées de PHP pour Mac OS X. Ils permettent de réaliser rapidement
des installations standard, mais si vous avez des configurations personnelles, (comme un serveur sécurisé SSL ou un pilote
de base de données exotique), vous devrez compiler PHP et/ou votre serveur web vous-même. Si vous n’êtes pas familier
avec la compilation de vos propres logiciels, il vaut mieux rechercher le package qui pourra répondre à vos besoins.
Lightyear Design (http://homepage.mac.com/LightyearDesign/MacOSX/Packages/) propose une version pré-compilé de
PHP pour OS X tout comme Tenon Intersystems (http://www.tenon.com/products/webten/).
Compilation pour serveur OS X
Il existe deux versions légèrement différentes de Mac OS X, client et serveur. Cette installation est faite pour le OS X
Serveur.
Exemple 2-4. Installation sous Mac OS X serveur
1. Téléchargez la dernière version de Apache et PHP
2. Décompressez puis désarchivez la, puis configurez Apache comme ceci :
./configure --exec-prefix=/usr \
--localstatedir=/var \
--mandir=/usr/share/man \
--libexecdir=/System/Library/Apache/Modules \
--iconsdir=/System/Library/Apache/Icons \
--includedir=/System/Library/Frameworks/Apache.framework/Versions/1.3/Headers \
--enable-shared=max \
--enable-module=most \
--target=apache
4. Vous aurez peut être besoin d’ajouter ces lignes ci, pour optimiser la
compilation :
setenv OPTIM=-O2
5. Puis, allez dans le dossier source de PHP 4, et configurez le :
./configure --prefix=/usr \
8
Chapitre 2. Installation
--sysconfdir=/etc \
--localstatedir=/var \
--mandir=/usr/share/man \
--with-xml \
--with-apache=/src/apache_1.3.12
Si vous avez d’autres composants (MySQL, GD, etc.), n’oubliez pas de les
ajouter à ce moment la. Pour l’option --with-apache, ajoutez le chemin
jusqu’au dossier source d’Apache, par exemple "/src/apache_1.3.12".
6. Exécutez un "make"
7. Exécutez un "make install"
Cette commande ajoutera un dossier dans le dossier Apache :
src/modules/php4.
8. Maintenant, reconfigurez Apache pour compiler PHP 4.
./configure --exec-prefix=/usr \
--localstatedir=/var \
--mandir=/usr/share/man \
--libexecdir=/System/Library/Apache/Modules \
--iconsdir=/System/Library/Apache/Icons \
--includedir=/System/Library/Frameworks/Apache.framework/Versions/1.3/Headers \
--enable-shared=max \
--enable-module=most \
--target=apache \
--activate-module=src/modules/php4/libphp4.a
Vous pouvez rencontrer un message qui vous dira que libmodphp4.a est
obsolète. Si c’est le cas, allez dans le dossier
src/modules/php4 de votre dossier Apache et exécutez la commande suivante :
ranlib libmodphp4.a
Puis, revenez à la racine de la distribution Apache, et recommencez la
configuration. Cela aura mis à jour la table de liens.
9. Exécutez un "make"
10. Exécutez un "make install"
11. Copiez et renommez le fichier php.ini-dist de votre distribution PHP 4
dans votre dossier "bin":
cp php.ini-dist /usr/local/bin/php.ini
ou (si vous n’avez pas de dossier local)
cp php.ini-dist /usr/bin/php.ini
D’autres exemples pour Mac OS X client (http://www.stepwise.com/Articles/Workbench/Apache-1.3.14-MacOSX.html) et
Mac OS X server (http://www.stepwise.com/Articles/Workbench/Apache-1.3.14-MacOSX.html) sont disponibles à
Stepwise (http://www.stepwise.com/).
Compilation pour MacOS X client
Ces conseils sont gracieusement fourni par Marc Liyanage (http://www.entropy.ch/software/macosx).
Le module PHP pour Apache est inclus dans Mac OS X. Cette version inclus le support des bases de données MySQL et
PostgreSQL.
NOTE: Soyez prudent avec cette manipulation, vous risquez de mettre votre serveur Apache à terre!
Insctructions :
•
1. Ouvrez un terminal
•
2. Tapez "wget http://www.diax.ch/users/liyanage/software/macosx/libphp4.so.gz", attendez la fin du téléchargement.
•
3. Tapez "gunzip libphp4.so.gz"
•
4. Tapez "sudo apxs -i -a -n php4 libphp4.so"
Maintenant, tapez "sudo open -a TextEdit /etc/httpd/httpd.conf" TextEdit ouvrira le fichier de configuration.
Recherchez ces deux lignes, vers la fin du fichier (Utilisez la commande Find)
*
*
#AddType application/x-httpd-php .php
#AddType application/x-httpd-php-source .phps
9
Chapitre 2. Installation
Supprimez les deux marques de commentaires (#), puis sauvez le fichier, et quittez TextEdit.
Finalement, tapez "sudo apachectl graceful" pour redémarrer le serveur Apache.
PHP devrait fonctionner. Vous pouvez le tester en placant un script dans le dossier "Sites". Par exemple, le fichier
"test.php", qui contient la simple ligne : "<?php phpinfo() ?>".
Ouvrez l’URL 127.0.0.1/~your_username/test.php dans votre navigateur. Vous obtiendrez le tableau de bord de
PHP.
Liste complète des options de configuration
Cette section rassemble la liste complète des options de configuration supportées par PHP 3 et PHP 4, à utiliser avec le
fichier configure, lors de la configuration sous Unix. Certaines options sont disponibles sous PHP 3, d’autres sous PHP 4
et certains sous PHP 3 et PHP 4, comme inidiqué. Il y a de nombreuses options dont le nom a changé entre PHP 3 et PHP
4. Ces options ont des liens entre elles : si vous vous souvenez d’un nom d’option en PHP 3, regardez si le nom a changé.
•
Base de données
•
E-commerce
•
Images
•
Divers
•
Réseau
•
Comportement PHP
•
Serveur
•
Texte et langue
•
XML
Base de données
--with-adabas[=DIR]
PHP 3, PHP 4: Inclut le support Adabas D. DIR est le dossier d’installation de Adabas (par défaut, /usr/local).
Adabas home page (http://www.adabas.com/)
--enable-dba=shared
PHP 3: Option non disponible en PHP 3
PHP 4: Compile DBA comme module partagé
--enable-dbx
PHP 3: Option non disponible en PHP 3
PHP 4: Inclut le support DBX.
--enable-dbase
PHP 3: Option non disponible; utilisez plutôt --with-dbase instead.
PHP 4: Active la librairie dbase livrée avec PHP. Aucune librairie supplémentaire n’est nécessaire.
10
Chapitre 2. Installation
--with-dbase
PHP 3: Active la librairie dbase livrée avec PHP. Aucune librairie supplémentaire n’est nécessaire.
PHP 4: Option non disponible; utilisez plutôt --enable-dbase instead.
--with-db2[=DIR]
PHP 3, PHP 4: Active le support Berkeley DB2.
--with-db3[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Active le support Berkeley DB3.
--with-dbm[=DIR]
PHP 3, PHP 4: Active le support DBM.
--with-dbmaker[=DIR]
PHP 3: Option non disponible en PHP 3.
PHP 4: Inclut le support DBMaker. DIR est le dossier d’installation DBMaker (par défaut, c’est le dossier de la
dernière installation DBMaker, comme /home/dbmaker/3.6).
--with-empress[=DIR]
PHP 3, PHP 4: Inclut le support Empress. DIR est le dossier d’installation Empress (par défaut, $EMPRESSPATH).
--enable-filepro
PHP 3: Option non disponible; utilisez plutôt --with-filepro instead.
PHP 4: Active la librairie filePro (lecture seule) livrée avec PHP. Aucune librairie supplémentaire n’est nécessaire.
--with-fbsql[=DIR]
PHP 3: Option non disponible.
PHP 4: Inclut le support de FrontBase SQL. DIR est le chemin jusqu’à l’installation de FrontBase base. Par défaut,
c’est le dossier standard d’installation Frontbase. L’installation dépend de votre OS : Solaris: /opt/FrontBase,
WinNT: \usr\FrontBase, Linux: /usr/frontbase, Mac OSX: /Library/FrontBase.
--with-filepro
PHP 3: Inclut le support IBM DB2. Aucune librairie supplémentaire n’est nécessaire.
PHP 4: Option non disponible; utilisez plutôt --enable-filepro.
--with-gdbm[=DIR]
PHP 3, PHP 4: Active le support GDBM.
--with-hyperwave
PHP 3, PHP 4: Active le support Hyperwave.
--with-ibm-db2[=DIR]
PHP 3, PHP 4: Inclut le support IBM DB2. DIR est le dossier d’installation de DB2 (par défaut,
/home/db2inst1/sqllib).
IBM DB2 (http://www.ibm.com/db2/)
11
Chapitre 2. Installation
--with-informix[=DIR]
PHP 3, PHP 4: Inclut le support Informix. DIR est le dossier d’installation d’Informix (par défaut, aucune valeur).
--with-ingres[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Inclut le support Ingres II. DIR est le dossier d’installation d’Ingres (par défaut, /II/ingres).
--with-interbase[=DIR]
PHP 3, PHP 4: Inclut le support InterBase. DIR est le dossier d’installation d’InterBase (par défaut,
/usr/interbase).
Fonctions Interbase
Interbase (http://www.interbase.com/)
--with-ldap[=DIR]
PHP 3: Inclut le support LDAP. DIR est le dossier d’installation de LDAP (par défaut /usr et /usr/local).
PHP 4: Inclut le support LDAP. DIR est le dossier d’installation de LDAP. (par défaut; /usr/local/ldap).
Plus de détails sur LDAP sont disponibles à RFC1777 (http://www.faqs.org/rfcs/rfc1777.html) et RFC1778
(http://www.faqs.org/rfcs/rfc1778.html).
--with-msql[=DIR]
PHP 3, PHP 4: Active le support mSQL. DIR est le dossier d’installation de mSQL (par défaut /usr et
/usr/local/Hughes, pour la version 2.0). configure détecte automatiquement la version de mSQL qui fonctionne.
PHP supporte les versions 1.0 et 2.0, mais si vous compilez PHP avec mSQL 1.0, vous ne pourrez accéder qu’à des
bases mSQL 1.0, et vice-versa.
Voir aussi Configuration mSQL dans le fichier de configuration.
mSQL (http://www.hughes.com.au/)
--with-mysql[=DIR]
PHP 3: Inclut le support MySQL. DIR est le dossier d’installation de MySQL (par défaut, il cherche dans différents
dossiers où MySQL a coutume d’être installé).
PHP 4: Inclut le support MySQL. DIR est le dossier de l’installation MySQL. S’il est omis, la librairie MySQL livrée
en standard avec PHP sera utilisée par défaut.
Voir aussi Configuration MySQL dans le fichier de configuration.
MySQL (http://www.mysql.com/)
--with-ndbm[=DIR]
PHP 3, PHP 4: Active le support NDBM.
--with-ovrimos
PHP 3, PHP 4: Inclut le support Ovrimos.
--with-oci8[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Inclut le support Oracle-oci8. DIR est le dossier d’installation de Oracle-oci8 (par défaut, ORACLE_HOME).
12
Chapitre 2. Installation
--with-oracle[=DIR]
PHP 3: Inclut le support Oracle database. DIR est le dossier d’installation de Oracle (par défaut, $ORACLE_HOME).
PHP 4: Inclut le support Oracle-oci7. DIR est le dossier d’installation de Oracle-oci7 (par défaut, ORACLE_HOME).
Inclut le support Oracle. Ce support a été testé et permet de travailler avec les versions d’Oracle de 7.0 à 7.3. Le
paramètre est le dossier ORACLE_HOME. Vous n’avez pas à spécifier ce paramètre si votre environnement Oracle a
été configuré.
Oracle (http://www.oracle.com/)
--with-pgsql[=DIR]
PHP 3: Inclut le support PostgresSQL. DIR est le dossier d’installation de PostgresSQL (par défaut,
/usr/local/pgsql).
PHP 4: Inclut le support PostgreSQL. DIR est le dossier d’installation de PostgreSQL (par défaut,
/usr/local/pgsql). Pour compiler en "dl", utilisez la valeur "shared", ou "shared,DIR", pour compiler en "dl",
mais spécifier DIR malgré tout.
Voir aussi Postgres dans le fichier de configuration.
PostgreSQL (http://www.postgresql.org/)
--with-solid[=DIR]
PHP 3, PHP 4: Inclut le support Solid. DIR est le dossier d’installation de Solid (par défaut, /usr/local/solid).
Solid (http://www.solidtech.com/)
--with-sybase-ct[=DIR]
PHP 3, PHP 4: Inclut le support Sybase-CT. DIR est le dossier d’installation de Sybase (par défaut, /home/sybase).
Voir aussi Sybase-CT dans le fichier de configuration.
--with-sybase[=DIR]
PHP 3, PHP 4: Inclut le support Sybase-DB. DIR est le dossier d’installation de Sybase (par défaut, /home/sybase).
Voir aussi Sybase dans le fichier de configuration.
Sybase (http://www.sybase.com/)
--with-openlink[=DIR]
PHP 3, PHP 4: Inclut le support OpenLink ODBC. DIR est le dossier d’installation d’OpenLink (par défaut
/usr/local/openlink). A partir de PHP 4.0.6, cette option n’est plus valable. Utilisez plutôt --with-iodbc si
vous voulez utiliser l’ODBC de OpenLink Software.
OpenLink Software (http://www.openlinksw.com/)
--with-iodbc[=DIR]
PHP 3, PHP 4: Inclut le support iODBC. DIR est le dossier d’installation d’iODBC (par défaut, /usr/local).
Cette fonctionnalité a d’abord été développée avec le gestionnaire iODBC Driver Manager, un pilote ODBC
librement distribuable, qui fonctionne sous divers UNIX.
FreeODBC (http://users.ids.net/~bjepson/freeODBC/) ou iODBC (http://www.iodbc.org/)
13
Chapitre 2. Installation
--with-custom-odbc[=DIR]
PHP 3, PHP 4: Inclut le support ODBC, avec une librairie tierce. Le paramètre DIR est le nom du dossier
d’installation de cette librairie. Par défaut, il vaut /usr/local.
Cette option implique qus vous avez défini CUSTOM_ODBC_LIBS lorsque vous éxécutez le script de configuration.
Vous devez aussi avoir une en-tête odbc.h valide dans vos dossiers d’Inclution. Si vous n’en avez pas, créez le, et
ajoutez-y vos en-têtes spécifiques. Votre en-tête peut aussi réclamer d’autres définitions, surtout si elle est
multi-plate-forme. Définissez les dans CFLAGS.
Par exemple, vous pouvez utilisez Sybase SQL Anywhere sous QNX comme ceci : CFLAGS=-DODBC_QNX
LDFLAGS=-lunix CUSTOM_ODBC_LIBS="-ldblib -lodbc" ./configure
--with-custom-odbc=/usr/lib/sqlany50
--disable-unified-odbc
PHP 3: Inactive le support unified ODBC. Uniquement valable si iODBC, Adabas, Solid, Velocis ou une interface
spéciale ODBC a été activée.
PHP 4: Option non disponible en PHP 4
Le module Unified ODBC est commun à toutes les bases de données ODBC, comme par exemple Solid, IBM DB2 et
Adabas D. Il fonctionne aussi avec les librairies ODBC normales. Des tests ont été menés avec iODBC, Solid, Adabas
D, IBM DB2 et Sybase SQL Anywhere. Il requiert une (et une seule) de ces extensions, ou l’extension Velocis, ou une
librairie ODBC spéciale. Cette option n’est possible qu’avec l’utilisation de l’une des options suivantes : --with-iodbc,
--with-solid, --with-ibm-db2, --with-adabas, --with-velocis, ou --with-custom-odbc.
Voir aussi Unified ODBC dans le fichier de configuration.
--with-unixODBC[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Inclut le support unixODBC. DIR est le dossier d’installation d’unixODBC (par défaut, /usr/local).
--with-velocis[=DIR]
PHP 3, PHP 4: Inclus le support Velocis. DIR est le dossier d’installation de Velocis (par défaut,
/usr/local/velocis).
Velocis (http://www.raima.com/)
E-commerce
--with-ccvs[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Ajoute le support CCVS. DIR est le dossier d’installation de CCVS.
--with-cybermut[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Inclut le support de Cybermut pour PHP 4. DIR est le dossier du SDK Cybermut, qui contient les deux fichiers
libcm-mac.a et cm-mac.h.
--with-mck[=DIR]
PHP 3: Inclut le support Cybercash MCK. DIR est le dossier d’installation de cybercash mck (par défaut,
/usr/src/mck-3.2.0.3-linux). Plus d’aide dans le dossier extra/cyberlib.
PHP 4: Option non disponible; utilisez plutôt --with-cybercash instead.
14
Chapitre 2. Installation
--with-cybercash[=DIR]
PHP 3: Option non disponible; utilisez plutôt --with-mck instead.
PHP 4: Inclut le support CyberCash. DIR est le dossier d’installation de CyberCash MCK.
--with-pfpro[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Active le support Verisign Payflow Pro.
Images
--enable-freetype-4bit-antialias-hack
PHP 3: Option non disponible en PHP 3
PHP 4: Inclut le support de FreeType2 (expérimental).
--with-gd[=DIR]
PHP 3: Inclut le support GD. DIR est le dossier d’installation de GD.
PHP 4: Inclut le support GD. DIR est le dossier d’installation de GD. Pour compiler en "dl", utilisez la valeur
"shared", ou "shared,DIR", pour compiler en "dl", mais spécifier DIR malgré tout.
--without-gd
PHP 3, PHP 4: Inactive le support GD .
--with-imagick[=DIR]
PHP 3: Inclut le support ImageMagick. DIR est le dossier d’installation de ImageMagick. S’il est omis, PHP essaiera
de le trouver de lui-même (expérimental).
PHP 4: Option non disponible en PHP 4
--with-jpeg-dir[=DIR]
PHP 3: dossier JPEG pour pdflib 2.0
PHP 4: dossier JPEG pour pdflib 3.x et 4.x
--with-png-dir[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: dossier PNG pour pdflib 3.x et 4.x
--enable-t1lib
PHP 3: Active le support t1lib.
PHP 4: Option non disponible; utilisez plutôt --with-t1lib
15
Chapitre 2. Installation
--with-t1lib[=DIR]
PHP 3: Option non disponible; utilisez plutôt --enable-t1lib.
PHP 4: Inclut le support T1lib.
--with-tiff-dir[=DIR]
PHP 3: dossier TIFF pour pdflib 2.0
PHP 4: dossier TIFF pour pdflib 3.x et 4.x
--with-ttf[=DIR]
PHP 3, PHP 4: Active le support FreeType.
--with-xpm-dir[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: dossier XPM pour GD-1.8+
Divers
Ces options seront classées ultérieurement, lorsqu’une catégorie adéquate apparaîtra.
--disable-bcmath
PHP 3: Inactive la librairie BCmath.
PHP 4: Option non disponible en PHP 4. La librairie BCmath n’est pas compilée par défaut. Utilisez --enable-bcmath
pour l’inclure.
--with-gmp
PHP 3, PHP 4 : Inclut le support GMP.
--disable-display-source
PHP 3: Compile sans afficher le support des sources
PHP 4: Option non disponible en PHP 4
--disable-libtool-lock
PHP 3: Option non disponible en PHP 3
PHP 4: Empêche le verrouillage (risque d’empêcher certaines compilations paralléles).
--disable-pear
PHP 3: Option non disponible en PHP 3
PHP 4: N’installe pas PEAR
--disable-pic
PHP 3: Option non disponible en PHP 3
PHP 4: Inactive PIC pour les shared objects
16
Chapitre 2. Installation
--disable-posix
PHP 3: Option non disponible en PHP 3; Utilisez plutôt --without-posix
PHP 4: Inactive les fonctions POSIX.
--disable-rpath
PHP 3: Option non disponible en PHP 3
PHP 4: Inactive le passage de chemins supplémentaires pour la recherche de librairie lors de l’exécution.
--disable-session
PHP 3: Option non disponible en PHP 3
PHP 4: Inactive le support session.
--enable-bcmath
PHP 3: Option non disponible en PHP 3; bcmath est compilée par défaut. Utilisez plutôt --disable-bcmath, pour
l’inactiver.
PHP 4: Active le support de l’extension bc maths. Voir aussi les fonctions BCMath.
--enable-c9x-inline
PHP 3: Option non disponible en PHP 3
PHP 4: Active les sémantiques C9x-inline
--enable-calendar
PHP 3: Option non disponible en PHP 3
PHP 4: Active le support des conversions calendaires
--enable-debug
PHP 3, PHP 4: Compile sans les symboles de débuggages
--enable-debugger
PHP 3: Compile avec les fonctions de débuggage à distance
PHP 4: Option non disponible en PHP 4
--enable-discard-path
PHP 3, PHP 4: Si cette option est activée, le CGI PHP peut être placé hors de l’arborescence web, pour que personne
ne puisse l’atteindre, même en contournant les .htaccess.
--enable-dmalloc
PHP 3, PHP 4: Active dmalloc
--enable-exif
PHP 3: Option non disponible en PHP 3
PHP 4: Active le support exif.
17
Chapitre 2. Installation
--enable-experimental-zts
PHP 3: Option non disponible en PHP 3
PHP 4: Cela risque fortement de ne plus compiler du tout!
--enable-fast-install[=PKGS]
PHP 3: Option non disponible en PHP 3
PHP 4: Optimise pour les installations rapides for fast installation (par défaut, no).
--enable-force-cgi-redirect
PHP 3, PHP 4: Active la vérification interne des redirections serveurs. Il est recommandé d’utiliser cette option si
vous avez compilé PHP en CGI.
--enable-inline-optimization
PHP 3: Option non disponible en PHP 3
PHP 4: Si vous avez beaucoup de mémoire disponible et que vous utilisez gcc, essayez donc ça.
--enable-libgcc
PHP 3: Option non disponible en PHP 3
PHP 4: Active explicitement les liens avec libgcc
--enable-maintainer-mode
PHP 3, PHP 4: Active des règles de make et de dépendances qui sont parfois absconses et ne servent pas aux
utilisateurs habituels (Bref, ne l’utilisez pas).
--enable-memory-limit
PHP 3, PHP 4: Compile avec le support de la limitation de mémoire (par défaut, no).
--enable-safe-mode
PHP 3, PHP 4: Active le SAFE_MODE (par défaut, yes).
--enable-satellite
PHP 3: Option non disponible en PHP 3
PHP 4: Active le support CORBA via Satellite (Requiert ORBit)
--enable-shared[=PKGS]
PHP 3: Option non disponible en PHP 3
PHP 4: Compile les librairies partagées (par défaut, yes).
--enable-sigchild
PHP 3, PHP 4: Active le gestionnaire SIGCHLD propre à PHP.
--enable-static[=PKGS]
PHP 3: Option non disponible en PHP 3
PHP 4: Compile les librairies en statique (par défaut, yes).
--enable-sysvsem
PHP 3, PHP 4: Active le support des sémaphores System V.
18
Chapitre 2. Installation
--enable-sysvshm
PHP 3, PHP 4: Active le support de partage de mémoire System V.
--enable-trans-sid
PHP 3: Option non disponible en PHP 3
PHP 4: Active la propagation transparente des identifiants de session.
--with-cdb[=DIR]
PHP 3, PHP 4: Active le support CDB.
--with-config-file-path=PATH
PHP 3: Indique le chemin dans lequel aller lire le fichier php3.ini. Par défaut, c’est /usr/local/lib.
PHP 4: Indique le chemin dans lequel allet lire le fichier php.ini. Par défaut, c’est /usr/local/lib.
--with-cpdflib[=DIR]
PHP 3: Inclut le support ClibPDF. DIR est le dossier d’installation de ClibPDF (par défaut, /usr/local).
PHP 4: Inclut le support ClibPDF.(requires cpdflib >= 2). DIR est le dossier d’installation de cpdfllib (par défaut,
/usr).
--with-esoob[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Inclut le support Easysoft OOB. DIR est le dossier d’installation de OOB (par défaut,
/usr/local/easysoft/oob/client).
--with-exec-dir[=DIR]
PHP 3, PHP 4: N’autorise que les exécutables placés dans le dossier DIR, lorsque le SAFE MODE est activé (par
défaut, c’est /usr/local/php/bin).
--with-fdftk[=DIR]
PHP 3, PHP 4: Inclut le support fdftk. DIR est le dossier d’installation de fdftk (par défaut, /usr/local).
--with-gnu-ld
PHP 3: Option non disponible en PHP 3
PHP 4: Suppose que le compilateur C utilise GNU ld (par défaut, no).
--with-icap[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Inclut le support ICAP.
--with-imap[=DIR]
PHP 3, PHP 4: Inclut le support IMAP. DIR est le dossier d’include d’IMAP (et aussi c-client.a).
--with-imsp[=DIR]
PHP 3: Inclut le support IMSP.(DIR est le dossier d’installation IMSP, là où il y a les dossiers d’include et libimsp.a).
PHP 4: Option non disponible en PHP 4
19
Chapitre 2. Installation
--with-java[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Inclut le support Java. DIR est le dossier d’installation du JDK). Cette extension peut uniquement être
compilée comme "dl".
--with-kerberos[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Inclut le support Kerberos dans IMAP.
--with-mcal[=DIR]
PHP 3, PHP 4: Inclut le support MCAL.
--with-mcrypt[=DIR]
PHP 3, PHP 4: Inclut le support mcrypt. DIR est le dossier d’installation de mcrypt.
--with-mhash[=DIR]
PHP 3, PHP 4: Inclut le support mhash. DIR est le dossier d’installation de mhash.
--with-mm[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Inclut le support mm pour le stockage de session.
--with-mod_charset
PHP 3, PHP 4: Active le transfert des tables depuis le module Apache mod_charset (Rus Apache).
--with-pdflib[=DIR]
PHP 3: Inclut le support pdflib (testé avec 0.6 et 2.0). DIR est le dossier d’installation de pdflib (par défaut, c’est
/usr/local).
PHP 4: Inclut le support pdflib 3.x/4.x. DIR est le dossier d’installation de pdflib. Par défaut, c’est /usr/local.
PHP 4 et PDFlib 3.x/4.x requiert les librairies JPEG et TIFF. Lors de la compilation du support PDFlib utilise les
options --with-jpeg-dir et --with-tiff-dir. Vous pouvez aussi utiliser --with-png-dir et --with-zlib-dir, pour compiler le
support PNG et Zlib avec PDFlib.
--enable-shared-pdflib
PHP 3, PHP 4: Inclut pdflib comme shared librairy.
--with-readline[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Inclut le support readline. DIR est le dossier d’installation de readline.
--with-regex=TYPE
PHP 3: Option non disponible en PHP 3
PHP 4: Type de librairie d’expressions régulières : système, apache, php
--with-servlet[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Inclut le support servlet. DIR est le dossier d’installation de JSDK. Ce SAPI demande que l’extension Java
soit compilée comme shared dl.
20
Chapitre 2. Installation
--with-ming
PHP 3: Option non disponible en PHP 3
PHP 4: Active le support Flash 4 avec Ming.
--with-swf[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Active le support SWF.
--with-system-regex
PHP 3: Inactive la librairie d’expressions régulières livrée avec PHP.
PHP 4: (Obsolète) Utilise la librairie d’expressions régulières système.
--with-tsrm-pth[=pth-config]
PHP 3: Option non disponible en PHP 3
PHP 4: Utilise GNU Pth.
--with-tsrm-pthreads
PHP 3: Option non disponible en PHP 3
PHP 4: Utilise les threads POSIX (par défaut).
--with-x
PHP 3: Utilise X Window System
PHP 4: Option non disponible en PHP 4
--with-bz2[=DIR]
PHP 4: Ajoute le support bzip2. DIR est le dossier d’installation de bzip2.
--with-zlib-dir[=DIR]
PHP 3: Dossier zlib pour pdflib 2.0 ou active le support zlib.
PHP 4: Dossier zlib pour pdflib 3.x/4.x ou active le support zlib.
--with-zlib[=DIR]
PHP 3, PHP 4: Inclut le support zlib. (requiert zlib >= 1.0.9). DIR est le dossier d’installation de zlib (par défaut,
/usr).
--with-zziplib[=DIR]
PHP 4: Inclut le support ZZIPlib (requiert ZZIPlib >= 0.10.6). DIR est le dossier d’installation de ZZIPliby (par
défaut, /usr/local).
La dernière version de ZZIPlib est disponible à http://zziplib.sourceforge.net/.
21
Chapitre 2. Installation
--without-pcre-regex
PHP 3: Inactive le support des expressions régulières Perl.
PHP 4: Inactive le support des expressions régulières Perl. Utilisez --with-pcre-regex=DIR pour spécifier le dossier
d’installation de PCRE, si vous n’utilisez pas la librairie livrée en standard.
--without-posix
PHP 3: N’Inclut pas lrs fonctions POSIX.
PHP 4: Option non disponible en PHP 4; utilisez plutôt --disable-posix.
Réseau
--with-curl[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Active le support CURL.
--enable-ftp
PHP 3: Option non disponible; utilisez plutôt --with-ftp
PHP 4: Active le support FTP.
--with-ftp
PHP 3: Inclut le support FTP.
PHP 4: Option non disponible; utilisez plutôt --enable-ftp instead
--disable-url-fopen-wrapper
PHP 3, PHP 4: Inactive le support des URL avec fopen().
Avertissement
Cette option n’est disponible que jusqu’à la version 4.0.3. Les versions plus récentes
fournissent un paramètre dans le fichier php.ini appelé allow_url_fopen, afin de vous
éviter de faire ce choix au moment de la compilation.
--with-mod-dav=DIR
PHP 3, PHP 4: Inclut le support DAV, grâce au module Apache mod_dav. DIR est le dossier d’installation de
mod_dav (valable uniquement pour les serveurs Apache).
--with-openssl[=DIR]
PHP 3, PHP 4: Inclut le support OpenSSL avec SNMP.
--with-snmp[=DIR]
PHP 3, PHP 4: Inclut le support SNMP. DIR est le dossier d’installation de SNMP (par défaut, il scanne un nombre
de dossiers habituels de l’installation SNMP). Utilisez la valeur de "shared" pour compiler sous forme de "dl", ou
"shared,DIR" pour compiler sous forme de "dl" tout en spécifiant un dossier.
--enable-ucd-snmp-hack
PHP 3, PHP 4: Active le hack UCD SNMP
22
Chapitre 2. Installation
--enable-sockets
PHP 3: Option non disponible en PHP 3
PHP 4: Active le support des sockets.
--with-yaz[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Inclut le support YAZ.(ANSI/NISO Z39.50). DIR est le dossier d’installation de YAZ (dossier bin).
--enable-yp
PHP 3: Option non disponible; utilisez plutôt --with-yp
PHP 4: Active le support YellowPages (YP).
--with-yp
PHP 3: Active le support YellowPages (YP).
PHP 4: Option non disponible; utilisez plutôt --enable-yp
--with-mnogosearch
PHP 3, PHP 4: Inclut le support mnoGoSearch.
Comportement PHP
--enable-magic-quotes
PHP 3, PHP 4: Active les magic quotes par défaut.
--disable-short-tags
PHP 3, PHP 4: Désactive la forme courte des balises PHP (<? ?>).
--enable-track-vars
PHP 3: Active le suivi des variables GET/POST/Cookie par défaut.
PHP 4: Option non disponible en PHP 4; à partir de PHP 4.0.2, cette option est toujours activée.
Serveur
--with-aolserver-src=DIR
PHP 3: Option non disponible en PHP 3
PHP 4: Indique le chemin jusqu’à la distribution source de AOLserver
--with-aolserver=DIR
PHP 3: Option non disponible en PHP 3
PHP 4: Indique le chemin jusqu’à la distribution installée de AOLserver.
--with-apache[=DIR]
PHP 3, PHP 4: Compile PHP en module Apache. DIR est le dossier d’installation supérieur d’Apache (par défaut,
/usr/local/etc/httpd.
23
Chapitre 2. Installation
--with-apxs[=FILE]
PHP 3, PHP 4: Compile PHP comme module partagé d’Apache module. FILE est le chemin optionnel jusqu’à
Apache apxs tool; par défaut, c’est apxs).
--enable-versioning
PHP 3: Tire profit du système de versionnage et de scoping fourni par Solaris 2.x et Linux
PHP 4: Exporte uniquement les symboles nécessaires. Voyez l’installation pour plus de détails.
--with-caudium[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Compile PHP sous forme de module Pike pour être utilisé avec le serveur web Caudium. DIR est le dossier
d’installation de Caudium (par défaut, $prefix/caudium/server. Le préfixe est paramétré par l’option --prefix
(par défaut, /usr/local).
--with-fhttpd[=DIR]
PHP 3, PHP 4: Compile PHP comme module fhttpd. DIR est le dossier d’installation de fhttpd (par défaut,
/usr/local/src/fhttpd).
--with-nsapi=DIR
PHP 3: Option non disponible en PHP 3
PHP 4: Indique le chemin jusqu’au serveur Netscape
--with-phttpd=DIR
PHP 3: Option non disponible en PHP 3
PHP 4:
--with-pi3web=DIR
PHP 3: Option non disponible en PHP 3
PHP 4: Compile PHP comme module pour Pi3Web.
--with-roxen=DIR
PHP 3: Option non disponible en PHP 3
PHP 4: Compile PHP comme module pour Pi3Web Pike. DIR est le dossier d’installation de Roxen (par défaut,
/usr/local/roxen/server).
--enable-roxen-zts
PHP 3: Option non disponible en PHP 3
PHP 4: Compile le module Roxen en utilisant Zend Thread Safety.
--with-thttpd=SRCDIR
PHP 3: Option non disponible en PHP 3
PHP 4:
24
Chapitre 2. Installation
--with-zeus=DIR
PHP 3: Option non disponible en PHP 3
PHP 4: Compile PHP comme module ISAPI pour Zeus.
Texte et langue
--with-aspell[=DIR]
PHP 3, PHP 4: Inclut le support ASPELL.
--with-gettext[=DIR]
PHP 3, PHP 4: Inclut le support GNU gettext. DIR est le dossier d’installation de gettext (par défaut, /usr/local).
--with-iconv[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Inclut le support iconv.
--with-pspell[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Inclut le support PSPELL.
--with-recode[=DIR]
PHP 3: Inclut le support GNU recode.
PHP 4: Inclut le support recode. DIR est le dossier d’installation de recode.
--enable-shmop
PHP 3, PHP 4 : Inclut le support shmop.
XML
--with-dom[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Active le support DOM. (requiert libxml >= 2.0). DIR est le dossier d’installation de libxml (par défaut,
/usr).
--enable-sablot-errors-descriptive
PHP 3: Option non disponible en PHP 3
PHP 4: Active les erreurs descriptives.
--with-sablot[=DIR]
PHP 3: Option non disponible en PHP 3
PHP 4: Active le support Sablotron.
25
Chapitre 2. Installation
--enable-wddx
PHP 3: Option non disponible en PHP 3
PHP 4: Active le support WDDX.
--disable-xml
PHP 3: Option non disponible en PHP 3; Les fonctions XML ne sont pas construites par défaut. Utilisez plutôt
--with-xml pour les activer.
PHP 4: Inactive le support XML, qui utilise la librairie expat, livrée avec PHP.
--with-xml
PHP 3: Active le support XML.
PHP 4: Option non disponible en PHP 4; Le support XML est activé par défaut. Utilisez plutôt --disable-xml pour
l’inactiver.
Installation sous Windows 9x/ME/NT/2000
Il y a deux méthodes principales pour installer PHP sous Windows : soit manuellement, soit avec InstallShield.
Si vous avez Microsoft Visual Studio, vous pouvez aussi compiler PHP à partir des sources.
Une fois que PHP est installé sur votre Windows, vous pouvez aussi ajouter diverses extensions.
InstallShield sous Windows
L’installeur Windows de PHP disponible depuis les pages de téléchargement (http://www.php.net/), installe la version CGI
de PHP, et configure les serveurs web IIS, PWS, et Xitami.
Installez votre serveur HTTP favori sur votre système et assurez-vous qu’il fonctionne.
Exécutez l’installeur et suivez les instructions fournies par le wizard. Deux types d’installation sont fournis : standard, qui
utilise toutes les configurations par défaut les plus pratiques, et avancée, qui pose un maximum de questions pour
paramétrer le plus finement.
Le wizard d’installation rassemble suffisamment d’informations pour configurer php.ini et le serveur web qui utilisera
PHP. Pour IIS, mais aussi PWS sous NT Workstation, une liste de l’arboresence web est affichée, et vous pouvez
sélectionner les dossiers qui utiliseront PHP.
Une fois l’installation terminée, l’installeur vous informera que vous devez redémarrer. Suivez ce conseil, ou commencez à
utiliser PHP immédiatement.
Instructions Générales d’installation
Ce guide vous permet d’installer et de configurer manuellement PHP sur vos stations Windows 9x/Me/NT/2000. La
première version de ce guide a été compilée par Bob Silva (mailto:[email protected]). La version originale
est disponible (en anglais) à http://www.umesd.k12.or.us/php/win32install.html.
Ce guide fournit une aide d’installation pour :
•
Personal Web Server (Version la plus récente recommandée)
•
Internet Information Server 3 ou 4
•
Apache 1.3.x
•
Omni HTTPd 2.0b1 et plus récent
•
Oreilly Website Pro
•
Xitami
26
Chapitre 2. Installation
PHP 4 pour Windows est décliné en deux versions : un exécutable CGI (php.exe), et plusieurs modules SAPI (par
exemple php4isapi.dll). Cette dernière forme est nouvelle pour PHP 4 et founit des performances améliorées ainsi que des
fonctionnalités supplémentaires. Notez cependant que les modules SAPI ne sont pas considéré comme ayant atteint une
qualité de production. La raison à cela est que les modules SAPI utilisent le système de thread sécurisé de PHP, ce qui est
nouveau en PHP 4, et qui n’a pas été testé et torturé suffisamment pour être considérés comme stable. Il y a encore
quelques bugs qui trainent. D’un autre côté, certains d’entre vous ont rapporté des résultats significativement meilleurs avec
les modules SAPI, même si nous ne connaissons actuellement personne qui le fasse fonctionner en production. En clair,
faites votre choix : soit vous avez absolument besoin de stabilité, et il vaut mieux laisser les performances SAPI de côté;
soit vous avez besoin de performances, et alors c’est l’occasion de tester en production et de nous rapporter vos résultats.
Si vous choisissez l’un des modules SAPI et utilisez Windows 95, pensez à télécharger la mise à jour DCOM à Microsoft
DCOM pages (http://download.microsoft.com/msdownload/dcom/95/x86/en/dcom95.exe). Pour le module ISAPI, comme
un serveur web compatible est nécessaire (testé avec IIS 4.0, PWS 4.0 et IIS 5.0). IIS 3.0 n’est pas supporté; vous devez
télécharger et installer le Windows NT 4.0 Option Pack avec IIS 4.0 si vous voulez le support natif de PHP.
Voici les différentes étapes d’installation avant les étapes spécifiques au serveur.
•
Extrayez la distribution dans le dossier de votre choix. "C:\PHP\" est une bonne idée.
L’exécutable binaire PHP, les modules SAPI, et certaines extensions utilisent des DLL externes. Assurez vous que ces
DLL sont dans votre distribution, et dans un dossier qui est cité dans le PATH Windows. Le mieux à faire est de copier
les fichiers ci-dessous dans votre dossier système, qui est généralement :
c:\windows\system pour Windows 95/98
c:\winnt\system32 pour Windows NT/2000
Les fichiers à copier sont :
’php4ts.dll’, s’il existe, écrasez le
Les fichiers ’dlls’ de votre distribution. Si vous les avez déjà installé, ne les remplacez pas, sauf si quelquechose ne fonctionne pas
•
•
•
Copiez le fichier ’php.ini-dist’ dans votre dossier ’%WINDOWS%’ sous Windows 95/98, ou vers votre dossier
’%SYSTEMROOT%’ sous Windows NT ou Windows 2000 et renommez le en ’php.ini’. Votre dossier
’%WINDOWS%’ ou ’%SYSTEMROOT%’ est généralement :
c:\windows pour Windows 95/98
c:\winnt ou c:\winnt40 pour les serveurs NT/2000
Editez votre fichier php.ini :
•
Vous devez changer votre option ’extension_dir’ pour qu’il pointe sur votre dossier d’installation PHP, ou vers
l’endroit où vous avez installé vos ’php_*.dll’. ex: c:\php
•
Si vous utilisez Omni Httpd, sautez l’étape suivante. Modifiez ’doc_root’ pour qu’il pointe sur votre racine de serveur
web. ex: c:\apache\htdocs ou c:\webroot.
•
Choisissez les modules que vous voulez charger lorsque PHP démarre. Vous pouvez décommenter les lignes
’extension=php_*.dll’ pour charger ces modules. Certains modules requièrent que des librairies supplémentaires
soient installées sur votre système. La FAQ (http://www.php.net/FAQ.php) PHP a plus d’informations sur ces
librairies. Vous pouvez aussi charger dynamiquement ces librairies avec dl("php_*.dll");. Voyez la section sur les
extensions Windows.
•
Sous PWS et IIS, vous pouvez modifier le fichier browscap.ini pour qu’il pointe sur :
c:\windows\system\inetsrv\browscap.ini sous Windows 95/98 et
c:\winnt\system32\inetsrv\browscap.ini sous NT. Plus de détails sur l’utilisation de browscap sont
accessibles sur ce miroir (http://php.netvision.net.il/browser-id.php3), sélectionnez le bouton "source" pour le voir en
action.
Compilation des sources
Avant de commencer, il est bon de se poser la question suivante : "Pourquoi la compilation de PHP sous Windows est si
difficile?". Deux raisons viennent immédiatement à l’esprit :
1. Windows ne dispose pas (encore) d’une grande communauté de développeurs qui partagent librement leurs sources.
La conséquence directe est que les investissements nécessaires en infrastructure pour supporter ce type de
27
Chapitre 2. Installation
développement n’ont pas été faits. Ce qui fait que le portage des utilitaires Unix a été la solution pour pallier ce
manque. Ne soyez donc pas surpris de rencontrer cette parenté de temps en temps.
2. La majorité des instructions que vous allez rencontrer sont du type : "faire et oublier". Alors, asseyez-vous
confortablement et suivez aussi scrupuleusement que possible les instructions.
Préparation
Avant de commencer, il faut télécharger un maximum de fichiers!
•
•
Pour commencer, téléchargez le Cygwin depuis le miroir cygwin (http://sources.redhat.com/cygwin/download.html) le
plus proche. Cela vous donnera les utilitaires GNU les plus populaires, utilisés durant le processus de compilation.
Téléchargez le reste des utilitaires de compilation dont vous aurez besoin depuis le site PHP à
http://www.php.net/extra/win32build.zip (http://www.php.net/extra/win32build.zip).
•
Téléchargez le code source du DNS utilisé par PHP à http://www.php.net/extra/bindlib_w32.zip
(http://www.php.net/extra/bindlib_w32.zip). Il remplacera le fichier resolv.lib inclut dans win32build.zip.
•
Si vous n’avez pas d’utilitaire de dézippage, vous devez en télécharger un. Une version libre est disponible à InfoZip
(http://www.cdrom.com/pub/infozip/UnZip.html).
Finalement, vous aurez besoin des sources PHP 4 elles-mêmes!! Les dernières versions sont accessibles sur le serveur CVS
anonyme (http://www.php.net/anoncvs.php). Si vous téléchargez une version intermédiaire (http://snaps.php.net/) ou la
source (http://www.php.net/downloads.php), vous devez non seulement extraire les fichiers, mais aussi convertir les
nouvelles lignes en leur équivalent windows (crlf) dans les fichiers *.dsp et *.dsw avant que Microsoft Visual C++ ne
soit capable de les comprendre.
Note : Placez les dossiers Zend et TSRM dans le dossier php4 pour que les projets puissent les trouver durant la
compilation.
Mettre tout ensemble
•
•
Suivez les instructions pour installer l’utilitaire d’unzip de votre choix.
Exécutez setup.exe et suivez les instructions d’installation. Si vous décidez d’installer dans un autre dossier que
c:\cygnus, indiquez le au processus de compilation en modifiant la variable d’environnement Cygwin. Sous Windows
95/98, modifier une variable d’environnement se fait en ajoutant une ligne dans le fichier autoexec.bat. Sous
Windows NT, allez dans le menu "Démarrer => Paramètres => Panneau de contrôle => Système " ("My Computer =>
Control Panel => System ") et sélectionnez l’onglet "environnement" ("environment").
Avertissement
Créez un dossier temporaire pour Cygwin, sinon de nombreuses commandes (comme bison)
échoueront. Sous Windows 95/98, mkdir C:\TMP. Sous Windows NT, mkdir
%SystemDrive%\tmp.
•
•
Créez un dossier et dézippez win32build.zip dedans.
Lancez Microsoft Visual C++, et allez dans le menu "select Tools => Options". Dans le dialogue, sélectionnez l’onglet
"directories". Assurez-vous que cygwin\bin, win32build\include, et win32build\lib sont bien dans les menus
déroulants "Executables", "Include", et "Library". (Pour ajouter une entrée, sélectionnez une ligne blanche, et tapez).
Une entrée typique ressemble à ceci :
•
c:\cygnus\bin
•
c:\php-win32build\include
•
c:\php-win32build\lib
Pressez "OK", et sortez de Visual C++.
28
•
Chapitre 2. Installation
Créez un autre dossier et dézippez bindlib_w32.zip dedans. Décidez si vous avez besoin des symboles de
débuggage (bindlib - Win32 Debug) ou non (bindlib - Win32 Release). Compilez la configuration adéquate :
•
Pour les utilisateurs de GUI, lancez VC++, puis sélectionnez le menu "File => Open Workspace" et "bindlib". Puis
sélectionnez "Build=>Set Active Configuration" et sélectionnez la configuration voulue. Enfin, sélectionnez
"Build=>Rebuild All".
•
Pour les utilisateurs en ligne de commande, assurez-vous que vous avez enregistré les variables d’environnement
C++, ou que vous avez exécuté vcvars.bat. Exécutez maintenant l’une des commandes suivantes :
•
•
msdev bindlib.dsp /MAKE "bindlib - Win32 Debug"
•
msdev bindlib.dsp /MAKE "bindlib - Win32 Release"
A ce stade, vous avez une librairie resolv.lib utilisable, soit dans votre dossier Debug, soit sans le dossier
Release. Copiez ce fichier dans votre dossier win32build\lib, en remplaçant le fichier du même nom.
Compilation
La meilleure façon de compiler est de commander par la version CGI/exécutable.
•
Pour les utilisateurs GUI, lancez VC++, puis sélectionnez le menu "File => Open Workspace" et sélectionnez "php4ts".
Ensuite, sélectionnez le menu "Build=>Set Active Configuration", et sélectionnez la configuration voulue. Finalement,
sélectionnez le menu "Build=>Rebuild All".
•
Pour les utilisateurs en ligne de commande, assurez-vous que vous avez enregistré les variables d’environnement C++,
ou que vous avez exécuté vcvars.bat. Exécutez maintenant l’une des commandes suivantes :
•
msdev php4ts.dsp /MAKE "php4ts - Win32 Debug_TS"
•
msdev php4ts.dsp /MAKE "php4ts - Win32 Release_TS"
•
A ce stade, vous avez une librairie php.exe utilisable, soit dans votre dossier Debug_TS soit sans le dossier
Release_TS.
Répétez les instructions ci-dessus avec php4isapi.dsp (qui est dans sapi\isapi) pour compiler le code nécessaire
pour intégrer PHP avec Microsoft IIS.
Installation des extensions sous Windows
Après avoir installé PHP et votre serveur web sous Windows, vous voudrez sÛrement ajouter quelques extensions bien
pratiques. La table suivante liste une partie des extensions disponibles. Comme indiqué dans le manuel, vous pouvez
choisir quelles extensions vous voulez charger en décommentant la ligne ’extension=php_*.dll’ dans le fichier php.ini.
Vous pouvez aussi charger dynamiquement un module avec la fonction dl().
Les fichiers DLLs des extensions PHP sont préfixés par ’php_’ en PHP 4, et ’php3_’ en PHP 3. Cela évite la confusion des
extensions PHP et de leurs librairies.
Note : En PHP 4.0.4pl1, les extensions BCMath, BCMath,Calendar, COM, FTP, MySQL, ODBC, PCRE, Sessions,
WDDX et XML sont activées par défaut. Vous n’avez rien à faire pour qu’elles soient inclues. Lisez le fichier
README.txt ou install.txt dans votre distribution pour connaître la liste des modules par défaut.
Tableau 2-1. Extensions PHP
php_bz2.dll
Fonctions de compression Bzip2
php_calendar.dll
Fonctions de conversions calendaires (Depuis PHP 4.03,
elles sont activées par défaut)
php_cpdf.dll
Fonctions ClibPDF
29
Chapitre 2. Installation
php_crypt.dll
Fonctions de cryptage
php_ctype.dll
Fonctions ctype
php_curl.dll
Fonctions CURL
php_cybercash.dll
Fonctions de paiement Cybercash
php_db.dll
Fonctions DBM
php_dba.dll
Fonctions dbm-style
php_dbase.dll
Fonctions DBase
php3_dbm.dll
Librairie d’émulation GDBM via Berkely DB2
php_domxml.dll
Fonctions DOM XML
php_dotnet.dll
Fonctions .NET
php_exif.dll
Entêtes EXIF des images JPEG
php_fbsql.dll
Fonctions FrontBase
php_fdf.dll
Fonction FDF (Forms Data Format)
php_filepro.dll
Lecture des bases filepro
php_ftp.dll
Fonctions FTP(Depuis PHP 4.0.3, elles sont activées par
défaut)
php_gd.dll
Bibliothèque GD (pour les manipulations d’images)
php_gettext.dll
Fonctions GNU Gettext
php_hyperwave.dll
Fonctions HyperWave
php_iconv.dll
Fonctions de conversions ICONV
php_ifx.dll
Fonctions Informix
php_iisfunc.dll
Fonctions IIS
php_imap.dll
Fonctions IMAP 4(en PHP 3: php3_imap4r1.dll)
php_ingres.dll
Fonctions Ingres II
php_interbase.dll
Fonctoins InterBase
php_java.dll
Extension Java
php_ldap.dll
Fonctions LDAP
php_mhash.dll
Fonctions Mhash
php_ming.dll
Fonctions Ming pour Flash
php_msql.dll
Fonctions mSQL
php3_msql1.dll
Fonctions mSQL 1
php3_msql2.dll
Fonctions mSQL 2
php_mssql.dll
Fonctions MSSQL (anciennement php_mssql70.dll, requiert
MSSQL DB-Libraries)
php3_mysql.dll
Fonctions MySQL (Activées par défaut en PHP 4)
php_nsmail.dll
Fonctions Netscape mail
php3_oci73.dll
Fonctions Oracle
php_oci8.dll
Fonctions Oracle 8
php_openssl.dll
Fonctions OpenSSL
php_oracle.dll
Fonctions Oracle
php_pdf.dll
Fonctions PDF
php_pgsql.dll
Fonctions PostgreSQL
php_printer.dll
Fonctions d’impression
php_sablot.dll
Focntions XSLT
php_snmp.dll
Fonctions SNMP get et walk (NT uniquement!)
30
Chapitre 2. Installation
php_sybase_ct.dll
Fonctions Sybase
php_yaz.dll
Fonctions YAZ
php_zlib.dll
Fonctions ZLib
Installation du serveur Apache
Cette section contient des notes spécifiques pour l’installation de PHP avec Apache, aussi bien pour la version Unix que
Windows.
Détails pour l’installation de PHP sous Apache sous Unix.
Vous pouvez sélectionner des options à ajouter au fichier configure à la ligne 8 depuis la liste complète des options de
configuration.
Exemple 2-5. Instructions d’installation (version module)
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
gunzip apache_1.3.x.tar.gz
tar xvf apache_1.3.x.tar
gunzip php-x.x.x.tar.gz
tar xvf php-x.x.x.tar
cd apache_1.3.x
./configure --prefix=/www
cd ../php-x.x.x
./configure --with-mysql --with-apache=../apache_1.3.x --enable-track-vars
make
make install
cd ../apache_1.3.x
for PHP 3: ./configure --activate-module=src/modules/php3/libphp3.a
for PHP 4: ./configure --activate-module=src/modules/php4/libphp4.a
13. make
14. make install
Au lieu de cette étape, vous pouvez aussi copier le binaire
httpd et remplacer votre exécutable actuel. Assurez-vous tout
de même que le serveur est bien éteint.
15. cd ../php-x.x.x
16. for PHP 3: cp php3.ini-dist /usr/local/lib/php3.ini
for PHP 4: cp php.ini-dist /usr/local/lib/php.ini
Vous pouvez éditer votre fichier php.ini pour modifier
certaines options PHP. Si vous préférez placer ce fichier ailleurs,
utilisez --with-config-file-path=/path lors de l’étape 8.
17. Editez votre fichier httpd.conf ou srm.conf file et ajoutez :
Pour PHP 3:
AddType application/x-httpd-php3 .php3
Pour PHP 4:
AddType application/x-httpd-php .php
Vous pouvez choisir n’importe quelle extension que vous voulez ici. .php
est uniquement une suggestion. Vous pouvez aussi inclure .html.
18. Utilisez votre procédure habituelle pour démarrer votre serveur Apache.
(vous devez l’éteindre et le redémarrer, pas seulement lui envoyer
un signal HUP ou USR1.)
Suivant votre installation d’Apache et votre variante d’Unix, il existe de nombreuses façons d’arrêter et redémarrer
Apache. Voici une liste des commandes typiques, pour différentes installations. Remplacez /path/to/ par le chemin
d’accès à vos applications sur votre système.
1. Nombreuses variantes Linux SysV :
/etc/rc.d/init.d/httpd restart
2. Avec les scripts apachectl :
/path/to/apachectl stop
/path/to/apachectl start
31
Chapitre 2. Installation
3. httpdctl et httpsdctl (utilisant OpenSSL), similaire à apachectl:
/path/to/httpsdctl stop
/path/to/httpsdctl start
4. En utilisant mod_ssl, ou un autre seveur SSL, manuellement :
/path/to/apachectl stop
/path/to/apachectl startssl
Les exécutables apachectl et http(s)dctl peuvent être situés dans différents dossiers. Si votre système a locate ou
whereis ou which, utilisez-les pour retrouver vos programmes.
Différents exemples de compilation PHP pour Apache suivent :
./configure --with-apxs --with-pgsql
Cette commande va créer une librairie partagée libphp4.so qui sera chargée par Apache avec une ligne LoadModule
dans le fichier httpd.conf. Le support PostgreSQL est aussi inclut dans libphp4.so.
./configure --with-apxs --with-pgsql=shared
Cette commande va créer une autre librairie partagée libphp4.so, mais va aussi créer une librairie partagée pgsql.so
qui sera chargée dans PHP avec les options de configurations du fichier php.ini ou par chargement dynamique avec dl().
./configure --with-apache=/path/to/apache_source --with-pgsql
Cette commande va créer une autre librairie partagée libmodphp4.a, un fichier mod_php4.c et quelques fichiers
compagnons dans le dossier src/modules/php4 de dossier Apache. Puis, vous devez compiler Apache avec
--activate-module=src/modules/php4/libphp4.a et le système de compilation d’Apache va créer un fichier
libphp4.a et le lien statiquement avec httpd. Le support PostgreSQL est alors inclut directement dans l’exécutable
httpd, ce qui fait que le résultat final est un fichier unique httpd, qui inclus Apache et PHP.
./configure --with-apache=/path/to/apache_source --with-pgsql=shared
Identique à la version précédente, mais au lieu d’inclure le support PostgreSQL directement dans l’exécutable final httpd,
vous allez obtenir une librairie partagée pgsql.so que vous pouvez charger dans PHP soit grâce au fichier de
configuration php.ini ou dynamiquement avec dl().
Lorsque vous faites le choix entre les différents modes de compilation de PHP, vous devez prendre en compte leurs
avantages et inconvénients respectifs. Les objets partagés permettent de compiler PHP et Apache de manière séparée, et
vous n’aurez pas à compiler l’ensemble pour faire évoluer PHP. La compilation statique permet de charger et d’éxécuter
plus rapidement PHP. Pour plus d’informations, voyez webpage on DSO support (http://www.apache.org/docs/dso.html).
Détails sur l’installation de PHP sous Windows avec Apache 1.3.x
Il y a deux méthodes pour faire fonctionner PHP avec Apache 1.3.x sous Windows. La première est d’utiliser l’exécutable
CGI (php.exe), l’autre est d’utiliser les modules Apache DLL. Dans les deux cas, vous devez arrêter le serveur Apache,
éditer votre fichier srm.conf ou httpd.conf pour configurer Apache.
Bien qu’il puisse y avoir quelques différences de configurations de PHP sous Apache, le processus reste simple et à la
portée du néophyte. Reportez-vous aux documentations Apache pour plus de détails sur ces directives.
Si vous avez dézippé le package dans C:\PHP\ comme indiqué dans Instructions Générales d’installation, vous devez
insérer les lignes suivantes dans votre fichier srm.conf ou httpd.conf pour qu’il fonctionne en CGI :
•
ScriptAlias /php/ "c:/php/"
32
Chapitre 2. Installation
•
AddType application/x-httpd-php .php .phtml
•
Action application/x-httpd-php "/php/php.exe"
N’oubliez pas de redémarrer le serveur, avec la commande NET STOP APACHE suivie de NET START APACHE.
Si vous voulez utiliser PHP comme module Apache, vous devez déplacer le fichier php4ts.dll dans le dossier
windows/system (pour Windows 9x/Me) ou winnt/system32 (pour Windows NT/2000), en écrasant les anciennes
versions. Puis, vous devez ajouter les deux lignes suivantes dans le fichier de configuration Apache :
•
LoadModule php4_module c:/php/sapi/php4apache.dll
•
AddType application/x-httpd-php .php .phtml
Pour utiliser les fonctionnalités de mise en évidence du code source, créez simplement un script PHP et ajoutez le code
suivant : <?php show_source("original_php_script.php"); ?>. Remplacez le fichier
original_php_script.php par le fichier que vous voulez afficher : c’est la seule manière de le faire.
Note : Sous Win-Apache tous les antislash des noms de chemins tels que "c:\directory\file.ext", doivent être
convertis en slash.
CGI/ Installation pour exécution en ligne de commande
Par défaut, PHP est compilé comme une CGI. Si vous voulez que votre serveur web supporte le PHP, compiler le PHP
comme un CGI permet d’obtenir de meilleures performances. Cependant, la version CGI permet aux utilisateurs de lancer
des scripts PHP sous leur UID respectives. Lisez attentivement le chapitre consacré à la sécurité si vous souhaitez utiliser
cette solution.
Tests
Si vous avez compilé PHP comme programme CGI, vous pouvez tester votre produit en tapant : make test. C’est toujours
une bonne chose de tester le résultat d’une compilation. Cela vous permet de repérer des problèmes entre PHP et votre
plate-forme, bien plus facilement que si vous attendez.
Performances
Si vous avez compilé PHP comme programme CGI, vous pouvez évaluer les performances de PHP 3 avec la commande
make bench. Notez que si le safe mode est activé (par défaut), vous ne risquez pas de voir l’évaluation s’arrêter une fois
les 30 secondes réglementaires écoulées. En effet, la fonction set_time_limit() ne peut pas être utilisée si le safe mode
fonctionne. Utilisez l’option max_execution_time pour contrôler le temps d’éxécution de vos scripts. make bench ignore
le fichier de configuration file.
Note : make bench n’est disponible qu’en PHP 3.
Installation avec les serveurs fhttpd
Pour compiler PHP comme un module fhttpd, répondre "yes" à la question "Build as an fhttpd module ?" (cela correspond
à l’option de configuration --with-fhttpd=DIR et spécifier la racine de la distribution fhttpd. Le répertoire par défaut
est: /usr/local/src/fhttpd. Si vous utilisez fhttpd, compiler PHP en module vous permettra d’obtenir des
performances supérieures, plus de contrôle et la possibilité d’exécution à distance.
33
Chapitre 2. Installation
Installation sur serveur Caudium
PHP 4 peut être compilé comme module Pike pour le serveur web Caudium. Notez que ce mode n’est pas supporté en PHP
3. Suivez simplement les instructions suivantes pour installer PHP 4 sur un serveur Caudium.
Exemple 2-6. Instructions d’installation Caudium
1.
Assurez-vous que vous avez un serveur Caudium installé avant de tenter
l’installation PHP 4. Pour que PHP 4 fonctionne correctement, vous devez
installer Pike 7.0.268 ou plus récent. Pour cet exemple, nous supposerons
que vous avez installé Caudium dans le dossier /opt/caudium/server/.
2. Renommez le dossier en php-x.y.z (où x.y.z est le numéro de version).
3. ./configure --with-caudium=/opt/caudium/server
4. make
5. make install
6. Redémarrez Caudium s’il était en fonctionnement
7. Connectez-vous à l’interface de configuration graphique et allez
dans le serveur virtuel auquel vous voulez ajouter le support PHP.
8. Cliquez sur "Add Module" et recherchez puis ajoutez le module
"PHP 4 Script Support".
9. Si la documentation dit que ’PHP 4 interpreter isn’t
available’, assurez-vous que vous avez bien redémarré le serveur.
Si vous l’avez fait, vérifiez le fichier
/opt/caudium/logs/debug/default.1 : il contient peut-être des
erreurs liées à PHP4.so. De même, assurez-vous
que caudium/server/lib/[pike-version]/PHP4.so
est présent.
10. Configurez le module "PHP Script Support" si nécessaire.
Vous pouvez bien sÛr compiler votre module Caudium avec les diverses extensions disponibles. Voyez la liste complète
des options de configuration pour une liste exhaustive.
Note : Lorsque vous ajoutez le support MySQL à PHP 4, vous devez-vous assurer que le client MySQL normal est
utilisé. Sinon, il peut y avoir des conflits avec Pike, qui dispose déjà du support MySQL. Vous pouvez le faire en
spécifiant le dossier d’installation de MySQL grâce à l’option --with-mysql.
Installation avec les serveurs IIS/PWS
Cette section contient des notes sur l’installation de PHP avec IIS ( Microsoft Internet Information Server) : PWS/IIS 3,
PWS 4 ou plus récent et IIS 4 ou plus récent.
Windows et PWS/IIS 3
La méthode recommandée pour configurer ces serveurs est d’utiliser le fichier INF inclus dans la distribution
(php_iis_reg.inf). Vous pouvez éditer ce fichier, pour vous assurer que les extenstions et les dossiers d’installation de
PHP sont bien ceux de votre configuration. Ou alors, vous pouvez suivre les instructions suivantes :
Avertissement
ATTENTION: Ces instructions requièrent la manipulation du fichier de registry de Windows. Une erreur
peut laisser votre système dans un état instable. Nous vous recommandons vivement de sauvegarder
ce fichier en lieu sÛr. L’équipe de développement et les traducteurs de cette documentation ne pourront
pas être tenus responsable d’un quelconque dommage qui pourrait survenir dans votre registry.
•
•
Lancez Regedit.
Naviguez jusqu’à : HKEY_LOCAL_MACHINE /System /CurrentControlSet /Services /W3Svc /Parameters
/ScriptMap.
•
Dans le menu "edit", sélectionnez : New->String Value.
34
Chapitre 2. Installation
•
•
Entrez l’extension que vous voulez utiliser pour les scripts PHP. ex: .php
Double cliquez sur la chaîne, et entrez le chemin jusqu’à php.exe dans le champ "value data". ex: c:\php\php.exe
%s %s. Les ’%s %s’ sont TRES importants, PHP ne fonctionnera pas sans.
•
Répétez ces instructions pour toutes les extensions que vous voulez associer aux scripts PHP.
•
Naviguez jusqu’à : HKEY_CLASSES_ROOT
•
Dans le menu edit, sélectionnez: New->Key.
•
Donnez le nom de votre extension à la clé : ex: .php
•
Sélectionnez le nom de la nouvelle clée dans le panneau de droite, et double cliquez dans "default value", puis entrez
phpfile.
•
Répétez ces instructions pour toutes les extensions que vous avez associées aux scripts PHP.
•
Créez une autre New->Key sous HKEY_CLASSES_ROOT et nommez-la phpfile.
•
Sélectionnez la nouvelle clé phpfile et dans le panneau de doite, double cliquez dans "default value" et entrez PHP
Script.
•
Faites un clic droit dans phpfile et sélectionnez New->Key, appelez-le Shell.
•
Faites un clic droit dans Shell et sélectionnez New->Key, appelez-le open.
•
Faites un clic droit dans open et sélectionnez New->Key, appelez-le command.
•
Sélectionnez la nouvelle clé command et dans le panneau de droite, faites un double clic dans "default value", puis
entrez le chemin jusqu’à php.exe. ex: c:\php\php.exe -q %1. (n’oubliez pas le %1).
•
Quittez Regedit.
•
Si vous utilisez PWS sous Windows, redémarrez pour prendre en compte la nouvelle registry.
Les utilisateurs de PWS et IIS 3 sont prêts à utiliser leur serveur. Avec IIS 3, vous pouvez utiliser un outil
(http://www.genusa.com/iis/iiscfg.html) bien pratique de Steven Genusa pour configurer votre carte des scripts.
Windows et PWS 4 ou plus récent
Pour installer PHP sous Windows avec PWS 4 ou plus récent, vous avez deux options : l’une est d’avoir PHP sous forme
de CGI, l’autre est d’utiliser les modules SAPI, sous forme de DLL.
Si vous optez pour le CGI, faites ceci :
•
Editez le fichier pws-php4cgi.reg (dans le dossier sapi) pour indiquer la localisation de votre fichier php.exe. Les
slash doivent être échappés. Par exemple :
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parameters\Script Map]
".php"="C:\\PHP\\php.exe"
•
Dans le gestionnaire PWS Manager, faites un clic droit sur les dossiers qui supporteront PHP, et sélectionnez
"Properties". Cochez l’option "Execute" et confirmez.
Si vous optez pour les modules ISAPI, faites ceci :
•
Editez le fichier pws-php4isapi.reg (dans le dossier sapi) pour indiquer la localisation de votre fichier
php4isapi.dll. Les slash doivent être échappés. Par exemple :
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parameters\Script Map]
".php"="C:\\PHP\\sapi\\php4isapi.dll"
•
Dans le gestionnaire PWS Manager, faites un clic droit sur les dossiers qui supporteront PHP, et sélectionnez
"Properties". Cochez l’option "Execute" et confirmez.
35
Chapitre 2. Installation
Windows NT/2000 et IIS 4 ou plus récent
Pour installer PHP sous Windows NT/2000 serveyr avec IIS 4 ou plus récent, vous avez deux options : l’une est d’avoir
PHP sous forme de CGI, l’autre est d’utiliser les modules SAPI, sous forme de DLL.
Dans les deux cas, vous devez lancer la console "Microsoft Management" (elle peut aussi s’appeler "Internet Services
Manager". Elle est située soit dans "Windows NT 4.0 Option Pack" ou dans "Control Panel=>Administrative Tools" sous
Windows 2000). Puis, faites un clic droit sur votre dossier web (qui apparaitra probablement comme Default Web
Server), et sélectionnez "Properties".
Si vous optez pour le CGI, faites ceci :
•
Sous "Home Directory", "Virtual Directory", ou "Directory", cliquez sur le bouton "Configuration", et sélectionnez
l’onglet "App Mappings".
•
Cliquez sur "Add", puis dans la boîte "Executable", tapez : c:\php\php.exe %s %s (en supposant que vous avez
dézippé PHP dans c:\php\). Vous DEVEZ ajouter %s %s à la fin : PHP ne fonctionnera pas correctement sans.
•
Dans la boîte "Extension", tapez le nom de l’extension que vous voulez associer aux scripts PHP. Laissez "Method
exclusions" vide, et cochez "Script engine". Répétez les étapes 3 et 4 pour chaque extension que vous souhaitez associer
aux scripts PHP. (.php et .phtml sont les plus répandus.)
•
Configurer la sécurité nécessaire (dans "Internet Service Manager"), et si votre serveur NT utilise NTFS, ajoutez les
droits adéquats pour I_USR_, au dossier qui contient php.exe.
Si vous optez pour les modules ISAPI, faites ceci :
•
Si vous ne voulez pas effectuer des authentifications HTTP avec PHP, vous pouvez (et devez) sauter cette étape. Avec
ISAPI Filters, ajoutez un nouveau filtre ISAPI. Utilisez PHP comme nom de filtre, et ajoutez simplement le chemin
jusqu’à php4isapi.dll.
•
Sous "Home Directory", cliquez sur le bouton "Configuration". Ajoutez une nouvelle entrée dans "Application
Mappings". Utilisez le chemin jusqu’à php4isapi.dll comme "Executable", indiquez ".php" comme extension,
laissez "Method exclusions" vide, et cochez "Script engine".
•
Arrêtez totalement IIS
•
Démarrez IIS
Installation sous Netscape et iPlanet Enterprise Serveur
Pour compiler PHP avec NES ou iPlanet web, ajoutez le dossier d’installation dans l’option de configuration
--with-nsapi = DIR . Par défaut, le dossier est /opt/netscape/suitespot/. Lisez aussi le fichier
/php-xxx-version/sapi/nsapi/nsapi-readme.txt pour plus de détails.
Exemple 2-7. Installation de Netscape Enterprise sous Solaris
Instructions pour Sun Solaris 2.6 avec Netscape Enterprise Server 3.6
From: [email protected]
1. Installez les packages suivants depuis le serveur www.sunfreeware.com
ou un miroir ad hoc :
flex-2_5_4a-sol26-sparc-local
gcc-2_95_2-sol26-sparc-local
gzip-1.2.4-sol26-sparc-local
perl-5_005_03-sol26-sparc-local
bison-1_25-sol26-sparc-local
make-3_76_1-sol26-sparc-local
m4-1_4-sol26-sparc-local
autoconf-2.13
automake-1.4
mysql-3.23.24-beta (if you want mysql support)
tar-1.13 (GNU tar)
36
Chapitre 2. Installation
2. Assurez-vous que le path inclut bien les dossiers nécessaires :
PATH=.:/usr/local/bin:/usr/sbin:/usr/bin:/usr/ccs/bin
export PATH
3. gunzip php-x.x.x.tar.gz (si vous avez une distribution .gz, ou bien allez en 4)
4. tar xvf php-x.x.x.tar
5. cd ../php-x.x.x
6. Pour les étapes suivantes, assurez-vous que /opt/netscape/suitespot/ correspond
bien à votre installation du serveur netscape. Sinon, indiquez le chemin
correct :
/configure
--with-mysql=/usr/local/mysql
--with-nsapi=/opt/netscape/suitespot/
--enable-track-vars --enable-libgcc
7. make
8. make install
Après avoir fait l’installation de base et lu les fichiers readme.txt, vous pouvez avoir besoin de faire des configurations
supplémentaires.
D’abord, vous devez ajouter des chemins dans la variable LD_LIBRARY_PATH pour que PHP trouve toutes les librairies
partagées. Le mieux est de le faire dans le script de démarrage de votre serveur Netscape. Les utilisateurs Windows
peuvent probablement ignorer cette étape. Le script de démarrage est situé dans :
/path/to/server/https-servername/start
Vous pouvez aussi avoir besoin d’éditer les fichiers de configuration qui sont situés dans :
/path/to/server/https-servername/config/.
Exemple 2-8. Exemple de configuration pour Netscape Enterprise
Instructions de configuration for Netscape Enterprise Server
From: [email protected]
1. Ajoutez les lignes suivantes dans mime.types:
type=magnus-internal/x-httpd-php exts=php
2. Ajoutez les lignes suivantes dans obj.conf. shlib peut dépendre de
votre OS, pour Unix c’est quelque chose de proche de
/opt/netscape/suitespot/bin/libphp4.so.
Il est conseillé de placer les lignes suivantes après les
lignes de types mime :
Init fn="loadmodules" funcs="php4_init,php4_close,php4_execute,php4_auth_trans" shlib="/php4/nsapiPHP4.dll"
Init fn=php4_init errorString="Failed to initialize PHP!"
<object name="default">
.
.
.
.#NOTE La ligne suivante doit être placée après toutes
.#les lignes ’ObjectType’
.# et avant les lignes ’AddLog’
Service fn="php4_execute" type="magnus-internal/x-httpd-php"
.
.
</Object>
<Object name="x-httpd-php">
ObjectType fn="force-type" type="magnus-internal/x-httpd-php"
Service fn=php4_execute
</Object>
Configuration d’authentification
L’authentification PHP ne peut pas être utilisée avec d’autre authentification.
TOUTES LES FORMES D’AUTHENTIFICATION SONT PASSEES AU SCRIPT PHP.
Pour configurer l’authentification PHP pour le serveur entier, ajoutez
la ligne suivante :
<Object name="default">
AuthTrans fn=php4_auth_trans
.
.
.
37
Chapitre 2. Installation
.
</Object>
Pour configurer l’authentification PHP pour un dossier, ajoutez
la ligne suivante :
<Object ppath="d:\path\to\authenticated\dir\*">
AuthTrans fn=php4_auth_trans
</Object>
Si vous utilisez Netscape Enterprise 4.x, alors, il faut utiliser ceci :
Exemple 2-9. Exemple de configuration pour Netscape Enterprise 4.x
Placez ces lignes après les types MIME, et tout le reste ressemble
à l’exemple ci-dessus :
From: Graeme Hoose ([email protected])
Init fn="load-modules" shlib="/path/to/server4/bin/libphp4.so"
funcs="php4_init,php4_close,php4_execute,php4_auth_trans"
Init fn="php4_init" LateInit="yes"
Installation OmniHTTPd
Cette section contient des notes et conseils spécifiques à OmniHTTPd.
OmniHTTPd 2.0b1 et plus récent pour Windows
La méthode la plus simple pour configurer le serveur est :
•
Step 1: Installez Omni server.
•
Step 2: Faites un clic-droit sur l’icone bleue d’OmniHTTPd, sur le bureau, et sélectionnez Properties
•
Step 3: Cliquez sur Web Server Global Settings
•
Step 4: Dans l’onglet ’External’, entrez: virtual = .php | actual = c:\path-to-php-dir\php.exe, et
utilisez le bouton "Add".
•
Step 5: Dans l’onglet Mime, entrez: virtual = wwwserver/stdcgi | actual = .php et utilisez le bouton "Add".
•
Step 6: Cliquez sur OK.
Réptez les étapes 2 à 6 pour chaque extension que vous voulez associer à PHP.
Note : Certains package OmniHTTPd sont livrés avec le support PHP déjà intégré. Vous pouvez choisir au moment de
la configuration de faire un paramétrage poussé et de décocher le support PHP. Nous vous conseillons d’utiliser les
dernières versions de PHP. Certains serveurs OmniHTTPd sont encore livrés avec des versions beta de PHP : il est
recommandé de ne pas les installer, mais d’installer votre propre version. Si le serveur est déjà sur votre machine,
vous pouvez utiliser le bouton "Replace" dans les étapes 4 et 5 pour en choisir un nouveau et à jour.
Installation Oreilly Website Pro Server
Cette section contient les conseils d’installation spécifiques à Oreilly Website Pro.
38
Chapitre 2. Installation
Oreilly Website Pro 2.5 et plus récent pour Windows
Cette liste décrit comment installer PHP comme CGI exécutable ou module ISAPI avec Oreilly Website Pro sous Windows.
•
Editez les "Server Properties" et sélectionnez l’onglet "Mapping".
•
Dans la "List" sélectionnez "Associations" et entrez le nom de l’extension voulue (".php") et le chemin jusqu’à
l’exécutable (ex. c:\php\php.exe) ou la DLL ISAPI (ex. c:\php\sapi\php4isapi.dll).
•
Sélectionnez "Content Types", ajoutez la même extension ".php" et entrez le "content type". Si vous choisissez la forme
CGI, entrez "wwwserver/shellcgi"; si vous choisissez la forme module ISAPI, entrez "wwwserver/isapi" (sans les
guillemets).
Installation Xitami
Cette section contient les conseils d’installation spécifiques à Xitami.
Xitami pour Windows
Cette liste décrit comment installer PHP comme CGI exécutable ou module ISAPI avec Xitami sous Windows.
•
Assurez-vous que le serveur web fonctionne, et allez dans la console d’administration du serveur (généralement
http://127.0.0.1/admin), puis cliquez sur "Configuration".
•
Naviguez dans les "Filters", et ajoutez l’extension que vous souhaitez (souvent ".php") dans le champs "File extensions".
•
Dans la commande "Filter", ajoutez le nom et le chemin de votre exécutable PHP (souvent c:\php\php.exe).
•
Cliquez sur le bouton "Save".
Autres serveurs web
PHP peut être compilé pour fonctionner avec de nombreux autres serveurs web. Reportez-vous à Options particulières aux
serveurs web pour une liste complète des options de configuration. Les exécutables PHP CGI sont compatibles avec la
majorité des serveurs supportant les interfaces CGI.
Des problèmes?
Lisez la FAQ
Certains problèmes sont récurrents : les plus communs sont listés dans la FAQ PHP, disponible à
http://www.php.net/FAQ.php.
Rapports de Bug
Si vous pensez avoir trouvé un bug dans PHP, n’oubliez pas de le signaler. L’équipe de développement PHP ne le connaît
peut être pas, et si vous ne le signaler pas, vos chances de voir le bug corrigé sont nulles. Vous pouvez rapporter des bugs
grâce au système de suivi, accessible à http://bugs.php.net/.
Lisez les Bugs-Dos-And-Donts (http://bugs.php.net/bugs-dos-and-donts.php) (Les bugs : ce qu’il faut faire, et ce qu’il ne
faut pas faire) avant d’envoyer n’importe quel rapport!
39
Chapitre 2. Installation
Autres problèmes
Si vous êtes complètement bloqués, quelqu’un sur la liste de diffusion PHP pourra probablement vous aider. Essayez de
consulter les archives, au cas où quelqu’un aurait déjà rencontré votre problème. Les archives sont toujours accessibles à :
http://www.php.net/. Pour souscrire à la liste de diffusion, envoyez un mail vide à [email protected]
(mailto:[email protected]). L’adresse de la mailing liste : [email protected].
Si vous voulez obtenir de l’aide sur la liste de diffusion PHP, essayez d’être concis et clair, et pensez à donner tous les
détails sur votre environnement (OS, version de PHP, serveur web, CGI ou module, safe mode...), et n’hésitez pas à
envoyer suffisamment de code pour que nous puissions reproduire l’erreur.
40
Chapitre 3. Configuration
41
Chapitre 3. Configuration
Le fichier de configuration
Le fichier de configuration (appelé php3.ini dans la version 3.0 du PHP, et simplement php.ini dans la version 4.0) est
lu par le PHP au démarrage. Si vous avez compilé PHP en module, le fichier n’est lu qu’une seule fois, au lancement du
démon HTTP. Pour la version CGI le fichier est lu à chaque invocation.
Lorsque vous utilisez le module Apache vous pouvez aussi changer les paramètres de configurations en utilisant les
directives dans les fichiers de configuration d’Apache et dans les fichiers .htaccess.
Dans la version 3.0, à chaque directive de configuration présente dans le fichier de configuration d’Apache correspond une
directive de configuration dans le fichier php3.ini à l’exception des directives préfixées par "php3_".
Dans la version 4.0, il n’y a seulement que quelques directives dans le fichier de configuration d’Apache qui vous
permettent de modifier la configuration de PHP.
php_value name value
Cette directive affecte une valeur à la variable spécifiée.
php_flag name on|off
Cette directive est utilisée pour activer ou désactiver une option.
php_admin_value name value
Cette directive affecte une valeur à la variable spécifiée. La directive "Admin" ne peut être utilisée que dans le fichier
de configuration d’Apache, et non dans un fichier .htaccess.
php_admin_flag name on|off
Cette directive est utilisée pour activer ou désactiver l’option précédente.
Vous pouvez voir l’état de votre configuration en utilisant la fonction phpinfo(). Vous pouvez aussi accéder aux valeurs de
votre configuration de manière individuelle en utilisant la fonction get_cfg_var().
Directives de configuration générale
allow_url_fopen boolean
Cette option autorise les accès au réseau des fonctions fopen(). Par défaut, l’accès est autorisé aux procédures d’accès
distants, avec les protocoles FTP, NNTP, et certaines extensions telles ques zlib.
Note : Cette option a été introduite immédiatement après la version 4.0.3. Pour les versions jusqu’à la 4.0.3
inclus, vous pouvez désactiver cette fonctionnalité au moment de la compilation en utilisant la configuration
--disable-url-fopen-wrapper.
asp_tags booléen
Active l’utilisation des balises de type ASP <% %>, en plus des traditionnelles balises <?php ?> . Cela inclus
l’utilisation du raccourcis <%= $value %>. Pour plus d’informations, reportez vous à inclusion dans le HTML.
Note : Le support des balises ASP a été ajouté dans la version 3.0.4.
auto_append_file chaîne de caractères
Spécifie le nom d’un fichier qui sera automatiquement ajouté après le fichier principal. Le fichier est inclus comme si
il avait été appelé avec la fonction include(), donc include_path est utilisé.
Le mot réservé NONE désactive l’auto-appending.
Note : Si le script s’arrête par la fonction exit(), auto-append ne fonctionnera pas.
42
Chapitre 3. Configuration
auto_prepend_file chaîne de caractères
Spécifie le nom d’un fichier qui sera automatiquement ajouté avant le fichier principal. Le fichier est inclus comme si
il avait été appelé avec la fonction include(), donc include_path est utilisé.
Le mot réservé NONE désactive l’auto-appending.
cgi_ext chaîne de caractères
(NDT : aucune documentation n’est fournie).
display_errors booléen
Cette directive détermine si les erreurs doivent être affichées à l’écran au format HTML ou non.
doc_root string
Le dossier racine de PHP. Utilisée uniquement si elle est définie. Si PHP est configuré en safe mode, aucun fichier en
dehors de ce dossier ne sera accessible.
engine boolean
Cette directive ne sert vraiment que si PHP est un module Apache. Elle sert aux sites qui veulent activer ou désactiver
l’analyse des fichiers par PHP, dossier par dossier. En mettant php3_engine off au bon endroit, dans le fichier
httpd.conf, PHP peut être activé ou desactivé.
error_log string
Nom du fichier oú les erreurs seront enregistrées. Si la valeur spéciale syslog est utilisée, les erreurs sont envoyées
au système standard d’historique. Sous UNIX, c’est syslog(3) et sous Windows NT c’est l’historique d’événements.
L’historique système n’est pas supporté sous Windows 95.
error_reporting integer
Fixe le niveau d’erreur. Ce paramètre est un entier, représentant un champs de bits. Ajoutez les valeurs suivantes pour
choisir le niveau que vous désirez :
Tableau 3-1. Niveau de rapport d’erreur
valeur du bit
niveau choisi
1
erreurs normales
2
alertes normales
4
erreurs d’analyseur (parser errors)
8
alertes non critiques
Par défaut, la valeur est de 7 (erreurs normales, alertes normales et erreurs d’analyseur sont affichées).
open_basedir string
Limite l’espace oú PHP peut ouvrir des fichiers.
Lorsqu’un script essaie d’ouvrir un fichier avec les fonctions fopen ou gzopen (par exemple), la localisation du fichier
est vérifiée. Si ce fichier est hors du dossier cité dans cette directive, PHP refusera de l’ouvrir. Tous les liens
symboliques sont résolus, et subissent aussi la restriction.
La valeurs spéciale . indique que le dossier courant du script est utilisé comme open_basedir.
Sous Windows, séparez les noms de dossiers par un point virgule (;). Sur les autres systèmes, séparez les noms de
dossiers par des deux points (:). Lorsque PHP est un module Apache, la valeur de la directive open_basedir des
dossiers parents sont automatiquement hérités par les fils.
Note : Le support pour les dossiers multiples a été ajouté dans 3.0.7.
La valeur par défaut est : libre accès à tous les fichiers.
43
Chapitre 3. Configuration
gpc_order chaîne de caractères
Etablit l’ordre de préséance des méthodes GET/POST/COOKIE. Par défaut, cette directive est établie à "GPC". En
affectant "GP" à cette directive, PHP ignorera les cookies, et écrasera toute méthode GET utilisée par une méthode
POST avec des variables du même nom.
ignore_user_abort chaîne de caractères
Désactivée par défaut. Si cette directive est activée, alors tous les scripts lancés iront jusqu’à leur terme, même si le
client se déconnecte en plein milieu. Voir aussi la fonction ignore_user_abort().
include_path string
Spécifie une liste de dossier oú les fonctions require(), include() et fopen_with_path (NDtraducteur : cette fonction
semble avoir disparue) iront chercher les fichiers. Le format est le même que celui de la variable d’environnement
PATH : une liste de dossiers, séparés par des deux points (:) sous UNIX, et des points virgules (;), sous Windows.
Exemple 3-1. UNIX include_path
include_path=.:/home/httpd/php-lib
Exemple 3-2. Windows include_path
include_path=".;c:\www\phplib"
La valeur par défaut pour cette directive est ., c’est à dire le dossier courant.
isapi_ext string
(Aucune documentation n’est fournie)
log_errors boolean
Indique oú les messages d’erreur générés doivent être écrits. Cette fonction est spécifique aux serveurs.
magic_quotes_gpc boolean
Fixe le mode magic_quotes pour les opérations GPC (Get/Post/Cookie). Lorsque magic_quotes est activé, tous les
caractères ’ (guillemets simples), " (guillemets doubles), \ (antislash) et NUL sont échappés avec un antislash. Si
magic_quotes_sybase fonctionne aussi, les guillemets simples seront échappés avec un autre guillemet simple, plutôt
qu’un antislash.
magic_quotes_runtime boolean
Si magic_quotes_runtime est activé, toutes les fonctions qui retournent des données d’une source externe, y
compris les bases de données et les fichiers texte, verront leur guillemets échappés avec un antislash. Si
magic_quotes_sybase est aussi activé, les guillemets simples seront échappés avec un autre guillemet simple,
plutôt qu’un antislash.
magic_quotes_sybase boolean
Si magic_quotes_sybase est activé, les guillemets simples seront échappés avec un autre guillemet simple,
plutôt qu’un antislash, si magic_quotes_gpc ou magic_quotes_runtime est activé.
max_execution_time integer
Fixe le temps maximal d’éxécution d’un script, en secondes. Cela permet d’éviter que des scripts en boucles infinies
ne saturent le serveur.
memory_limit entier
Grâce à cette option, vous pouvez donner la quantité maximale de mémoire qu’un script peut allouer. Cela permet de
reserver toute la mémoire d’un serveur à un seul script.
nsapi_ext chaîne de caractères
Aucune documentation n’est fournie.
44
Chapitre 3. Configuration
register_globals boolean
Cette option active l’enregistrement des variables EGPCS (Environement, GET, POST, Cookie, Serveur), en tant que
variables globales. Vous pouvez désactiver cette fonction si vous ne voulez pas truffer vos scripts avec des valeurs
utilisateurs. Cette option est surtout utile lorsqu’elle est utilisée conjointement avec track_vars - dans ce cas, vous
pouvez accéder à toutes les variables EGPCS grâce aux tableaux $HTTP_ENV_VARS, $HTTP_GET_VARS,
$HTTP_POST_VARS, $HTTP_COOKIE_VARS, et $HTTP_SERVER_VARS.
short_open_tag booléen
Active ou désactive l’utilisation des balises courtes, (<? ?>). Si vous voulez utiliser PHP et XML en même temps,
vous devez désactiver cette option. Si cette option est désactivée, vous devez utiliser la forme longue des tags,
(<?php ?>).
sql.safe_mode booléen
Aucune documentation n’est fournie.
track_errors booléen
Si cette option est activée, le dernier message d’erreur sera placé dans la variable globale $php_errormsg.
track_vars booléen
Si cette option est activée, lors de l’appel des méthodes GET, POST et l’utilisation des cookies, les variables sont
disponibles dans des tableaux associatifs globaux appelés respectivement $HTTP_GET_VARS,
$HTTP_POST_VARS et $HTTP_COOKIE_VARS.
upload_tmp_dir chaîne de caractères
Indique le répertoire utilisé lors du chargement d’un fichier sur un serveur. Ce répertoire doit être accessible en
lecture pour l’utilisateur qui lance le script PHP.
user_dir chaîne de caractères
Répertoire oú sont stockés les fichiers PHP dans le répertoire d’un utilisateur. Par exemple, public_html.
warn_plus_overloading booléen
Si cette option est activée, PHP émet un warning lorsque l’opérateur plus (+) est utilisé sur une chaîne de caractères.
Cela permet de réperer plus facilement les scripts qui doivent être réécrits en utilisant l’opérateur de concaténation (.)
plutôt que l’opérateur plus.
Configuration des directives concernant le mail
SMTP chaîne de caractères
Sous Windows, adresse IP ou nom que PHP doit utiliser pour envoyer du mail avec la fonction mail().
sendmail_from chaîne de caractères
Sous Windows, valeur du champs "From:" qui doit être utilisée lors de l’envoie de mail.
sendmail_path chaîne de caractères
Localisation du programme de sendmail, habituellement /usr/sbin/sendmail ou /usr/lib/sendmail.
configure essaye de repérer la présence de sendmail par lui même, et affecte ce résultat par défaut. En cas de
problème de localisation, vous pouvez établir une nouvelle valeur par défaut ici.
Tout système n’utilisant pas sendmail doit établir cette directive à la valeur chemin du programme de substitution qui
remplace le serveur de mail, si celui-ci existe, par exemple, Qmail (http://www.qmail.org/). Dans ce cas la, vous devez
mettre: /var/qmail/bin/sendmail.
Directives de configuration du "Safe Mode"
safe_mode booléen
Cette directive active ou désactive l’option "safe mode". Lisez le chapitre sécurité pour plus d’informations.
45
Chapitre 3. Configuration
safe_mode_exec_dir chaîne de caractères
Si l’option "SAFE MODE" est activée, system() et les autres fonctions exécutant des programmes systèmes refusent
de se lancer si ces programmes ne sont pas placés dans ce répertoire.
Directives de configuration de débbugage.
debugger.host chaîne de caractères
Adresse IP ou nom de l’hôte utilisé pour le déboggage.
debugger.port chaîne de caractères
Numéro du port utilisé pour le déboggage.
debugger.enabled booléen
Activation ou désactivation du debugger.
Directives de chargement des extensions
enable_dl booléen
Cette directive n’est réellement utile que dans le cas d’une compilation comme module Apache. Vous pouvez activer
le chargement dynamique des extensions avec la fonction dl(), et cela de manière locale à chaque serveur virtuel ou à
chaque répertoire.
La principale raison qui pousse à désactiver le chargement dynamique est un problème de sécurité. Lorsque le
chargement dynamique est activé, il est possible d’ignorer les directives safe mode ou "open_basedir".
Par défaut, il est possible d’utiliser le chargement dynamique, sauf lorsque la directive safe mode est activée. En effet,
il est alors impossible d’utiliser la fonction dl().
extension_dir chaîne de caractères
Définit le répertoire dans lequel le PHP doit chercher les extensions lors du chargement dynamique.
extension chaîne de caractères
Définit les extensions qui doivent être chargées lors du démarrage du PHP.
MySQL Configuration Directives
mysql.allow_persistent booléen
Active ou désactive les connexions persistentes à la base de données MySQL.
mysql.default_host chaîne de caractères
Adresse par défaut du serveur, à utiliser lors de la connexion à un serveur MySQL, si aucun hôte n’est spécifié.
mysql.default_user chaîne de caractères
Utilisateur par défaut, à utiliser lors de la connexion à un serveur MySQL, si aucun utilisateur n’est spécifié.
mysql.default_password chaîne de caractères
Mot de passe par défaut, à utiliser lors de la connexion à un serveur MySQL, si aucun mot de passe n’est spécifié.
mysql.max_persistent entier
Nombre maximum de connexions persistantes à une base de donnée MySQL, par processus.
mysql.max_links entier
Nombre de connexion maximum à une base de donnée MySQL, par processus, incluant les connexions persistantes
46
Chapitre 3. Configuration
Directives de configuration mSQL
msql.allow_persistent booléen
Active ou désactive les connexions persistentes à la base de données mSQL.
msql.max_persistent entier
Nombre maximum de connexions persistantes à une base de donnée mSQL, par processus.
msql.max_links entier
Nombre maximum de connexions à une base de donnée mSQL, par processus, incluant les connexions persistantes.
Directives de configuration Postgres
pgsql.allow_persistent booléen
Active ou désactive les connexions persistantes à la base de données Postgres.
pgsql.max_persistent entier
Nombre maximum de connexions persistantes à une base de données Postgres, par processus.
pgsql.max_links entier
Nombre maximal de connexions à une base de donnée Postgres, par processus, incluant les connexions persistantes.
Directives de configuration SESAM
sesam_oml string
Nom de la librairieBS2000 PLAM contenant les pilotes de connexion SESAM. Obligatoire pour les fonctions
SESAM. La librairie BS2000 PLAM doit être configurée avec ACCESS=READ,SHARE=YES car elle doit être
accessible à l’utilisateur Apache.
sesam_configfile string
Nom du fichier de configuration de l’application SESAM. Obligatoire pour les fonctions SESAM. Le fichier BS2000
doit être accessible être accessible à l’utilisateur Apache.
Le fichier de configuration de l’application va contenir la configuration sur le schéma suivant (voir le manuel
SESAM) :
CNF=B
NAM=K
NOTYPE
sesam_messagecatalog string
Nom du catalogue de messages SESAM. Dans la plus part des cas, cette directive n’est pas nécessaire. Seulement, si
le fichier de messages SESAM n’est pas installé dans la table de messages BS2000, il faut indiquer sa localisation
avec cette directive.
Le catalogue de messages doit être paramétré avec ACCESS=READ,SHARE=YES car elle doit être accessible à
l’utilisateur Apache.
Directives de configuration Sybase
sybase.allow_persistent booléen
Active ou désactive les connexions persistentes à la base de données Sybase.
47
Chapitre 3. Configuration
sybase.max_persistent entier
Nombre maximum de connexions persistantes à une base de données Sybase par processus.
sybase.max_links entier
Nombre maximum de connexions à une base de données Sybase, par processus, incluant les connexions persistantes.
Sybase-CT Configuration Directives
sybct.allow_persistent booléen
Active ou désactive les connexions persistantes à la base de données Sybase-CT. Par défaut, cette option est activée.
sybct.max_persistent entier
Nombre maximum de connexions persistantes à une base de données Sybase-CT par processus. Par défaut, cette
option est à -1, ce qui signifie que le nombre de connexion est illimité.
sybct.max_links entier
Nombre maximum de connexions à une base de données Sybase-CT, par processus, incluant les connexions
persistantes. Par défaut, cette option est à -1, ce qui signifie que le nombre de connexions est illimitée.
sybct.min_server_severity entier
Les messages en provenance du serveur d’un niveau d’erreur égal à sybct.min_server_severity seront considérés
comme des alertes (warnings). Cette valeur peut être modifiée à l’intérieur du script en appelant la fonction
sybase_min_server_severity (NDtraducteur : cette fonction semble ne pas exister). Par défaut, cette valeur vaut 10.
sybct.min_client_severity entier
Les messages en provenance de la librairie client avec un niveau d’erreur égal ou supérieur à
sybct.min_client_severity seront considérés comme des alertes. Cette valeur peut être modifiée à l’intérieur du script
en appelant la fonction sybase_min_client_severity (NDtraducteur : cette fonction semble ne pas exister). Par défaut,
cette valeur vaut 10, ce qui annule tout rapport d’erreur.
sybct.login_timeout entier
Délai de validité d’une tentative de connexion. Il est à noter que si max_execution_time est dépassé avant que la
connexion n’éxpire, le script sera terminé avant le message d’erreur. Par défaut, cette valeur vaut 1 minute.
sybct.timeout entier
Temps maximum en secondes avant qu’une tentative de requête "select_db" ou "query" non aboutie renvoie une
erreur. Il est à noter que si max_execution_time est dépassé avant que la requête n’éxpire, votre script sera terminé
avant le message d’erreur. Par défaut, il n’y a pas de limite.
sybct.hostname chaîne de caractères
Nom de l’hôte à partir duquel vous vous connectez, afin d’être affiché par la fonction sp_who (NDtraducteur : cette
fonction semble ne pas exister). Par défaut, cette valeur égale à 0.
Directives de configuration Informix
ifx.allow_persistent booléen
Active les connexions persistantes à une base de données Informix.
ifx.max_persistent entier
Nombre maximum de connexions persistantes à une base de données Informix, par processus.
ifx.max_links entier
Nombre maximum de connexions à une base de données Informix par processus, en incluant les connexions
persistantes.
ifx.default_host chaîne de caractères
Hôte par défaut oú se connecter si aucun hôte n’est spécifié par les fonctions ifx_connect() ou ifx_pconnect().
48
Chapitre 3. Configuration
ifx.default_user chaîne de caractères
Utilisateur par défaut si aucun utilisateur n’est spécifié par les fonctions ifx_connect() ou ifx_pconnect().
ifx.default_password chaîne de caractères
Mot de passe par défaut si aucun mot de passe n’est spécifié par les fonctions ifx_connect() ou ifx_pconnect().
ifx.blobinfile booléen
Lorsque cette option est activée, les colonnes de type "blob" seront retournées dans un fichier. Par défaut, elles seront
retournées en mémoire. Il est possible de modifier dynamiquement cette valeur grâce à la fonction
ifx_blobinfile_mode().
ifx.textasvarchar booléen
Lorsque cette option est activée, les colonnes de type "TEXT" seront retournées dans une chaîne de caractères. Par
défaut, elles seront retournées en mémoire. Il est possible de modifier dynamiquement cette valeur grâce à la fonction
ifx_textasvarchar().
ifx.byteasvarchar booléen
Lorsque cette option est activée, les colonnes de type "BYTE" seront retournées dans une chaîne de caractères. Par
défaut, elles seront retournées en mémoire. Il est possible de modifier dynamiquement cette valeur grâce à la fonction
ifx_textasvarchar().
ifx.charasvarchar booléen
Lorsque cette option est activée, les espaces en fin de chaîne de caractères seront conservés lors d’une commande
FETCH.
ifx.nullformat booléen
Lorsque cette option est activée, les colonnes de valeur NULL seront retournées comme des chaînes de caractères
vides. Il est possible de modifier dynamiquement cette valeur grâce à la fonction ifx_nullformat().
Directives de configuration pour les calculs mathématiques.
bcmath.scale entier
Nombre de chiffres après la virgule pour toutes les fonctions de précision mathématique arbitraire.
Directives de configuration du navigateur.
browscap chaîne de caractères
Nom du fichier de descriptif des clients HTML. Voir aussi get_browser().
Directives de configuration du driver ODBC unifié
uodbc.default_db chaîne de caractères
Source de données ODBC à utiliser par défaut avec les fonctions odbc_connect() ou odbc_pconnect().
uodbc.default_user chaîne de caractères
Nom d’utilisateur défaut avec les fonctions odbc_connect() ou odbc_pconnect().
uodbc.default_pw chaîne de caractères
Mot de passe par défaut dans les fonctions odbc_connect() ou odbc_pconnect().
uodbc.allow_persistent booléen
Cette option active ou désactive les connexions persistantes à la base de données, via le canal ODBC.
uodbc.max_persistent entier
Nombre maximum de connexions persistantes autorisées à la base de données.
49
Chapitre 3. Configuration
uodbc.max_links entier
Nombre maximum de connexions (persistantes ou non), par processus, à la base de données.
50
Chapitre 4. Sécurité
51
Chapitre 4. Sécurité
PHP est un langage puissant et l’interpréteur, qu’il soit inclus dans le serveur web ou bien compilé en version CGI, est
capable d’accéder aux fichiers, d’exécuter des commandes et d’ouvrir des connexions réseaux. Toutes ces propriétés
rendent fragile la sécurité d’un serveur web. Le langage PHP a été pensé afin d’être un langage beaucoup plus sécurisé
pour écrire des CGI que le Perl ou le langage C. De plus, une sélection rigoureuse des options de compilation et
d’exécution vous permettra d’obtenir un équilibre parfait entre liberté et sécurité.
Etant donné qu’il y a de nombreux moyens d’utiliser le langage PHP, il y a de nombreuses directives de configuration afin
d’en contrôler le comportement. Un grand nombre d’options permettent d’utiliser le PHP dans de nombreuses situations,
mais cela signifie aussi qu’il y a certaines combinaisons d’options de compilation et d’exécution qui fragilisent la sécurité
du serveur. Ce chapitre explique comme les différentes options de configurations peuvent être combinées, tout en
conservant une sécurité maximum.
La flexibilité de configuration de PHP est épaulée par la flexibilité du code. PHP peut être compilé pour constituer une
application serveur complète, avec toutes les fonctionnalités d’un shell, ou il peut encore être utilisé comme simple SSI
(server side include) avec peu de risque, dans un environnement à sécurité renforcée. Comment créer cet environnement et
le sécuriser est largement à la charge du développeur PHP.
Ce chapitre commence par expliquer les différentes options de configuration et les situations dans lesquelles elles peuvent
être utilisées en toute sécurité. Puis, viennent les considérations de niveaux de sécurité, et les conseils généraux.
Binaires CGI
Faiblesses connues
Utiliser le PHP comme un CGI exécutable vient la majorité du temps du fait que l’on ne veut pas l’utiliser comme un
module du serveur web, (comme Apache), ou bien que l’on souhaite l’utiliser en combinaison d’un CGI complémentaire,
afin de créer un environnement de script sécurisé (en utilisant des techniques de chroot ou setuid). Une telle décision
signifie habituellement que vous installez votre exécutable dans le répertoire cgi-bin de votre serveur web. CERT CA-96.11
(http://www.cert.org/advisories/CA-96.11.interpreters_in_cgi_bin_dir.html) recommande effectivement de placer
l’interpréteur à l’intérieur du répertoire cgi-bin. Même si le binaire PHP peut être utilisé comme interpréteur indépendant,
PHP a été pensé afin de rendre impossible les attaques que ce type d’installation induit.
•
Accès au système de fichier: http://ma.machine/cgi-bin/php?/etc/passwd
Lorsque la requête est passée dans une url, après le point d’interrogation (?), elle est envoyée à l’interpréteur comme une
ligne de commande par l’interface CGI. Habituellement, l’interpréteur ouvre le fichier spécifié et l’exécute.
Lorsqu’il est invoqué comme exécutable CGI, le PHP refuse d’interpréter les arguments de la ligne de commande.
•
Accès d’un document web sur le serveur : http://my.host/cgi-bin/php/secret/doc.html
Le "path information" dans l’url, situé juste après le nom du binaire PHP, /secret/doc.html est utilisé par convention
pour spécifier le nom du fichier qui doit être ouvert et interprété par le programe CGI. Habituellement, des directives de
configuration du serveur web (pour le serveur Apache: Action) sont utilisées pour rediriger les requêtes afin d’obtenir un
document http://my.host/secret/script.php par l’interpréteur PHP. Dans une telle configuration, le serveur
web vérifie d’abord s’il a accès au répertoire /secret, et après cette vérification redirige la requête vers
http://my.host/cgi-bin/php/secret/script.php. Malheureusement, si la requête est faite directement sous
cette forme, aucune vérification d’accès n’est faite par le serveur web pour le fichier /secret/script.php, mais
uniquement pour le fichier /cgi-bin/php. De cette manière, n’importe quel utilisateur qui peut accéder au fichier
/cgi-bin/php peut aussi accéder aux documents protégés sur le serveur web.
Avec le PHP, l’option de compilation --enable-force-cgi-redirect et les options d’exécution doc_root et user_dir peuvent
être utilisées pour prévenir ce genre d’attaques, si des restrictions d’accès sont appliquées sur les documents du serveur.
Voir ci-dessous pour des explications plus complètes sur les différentes combinaisons.
Cas 1: Tous les fichiers sont publics
Si votre serveur n’a aucun document dont l’accès est restreint par un mot de passe ou un système de vérification de
l’adresse IP, vous n’avez aucun besoin de ce type de configuration. Si votre serveur web ne permet pas les redirections, ou
si votre serveur web n’a aucun besoin de communiquer avec le binaire PHP de manière sécurisée, vous pouvez utiliser
52
Chapitre 4. Sécurité
l’option de compilation --disable-force-cgi-redirect. Vous devez quand même vérifier qu’aucun script ne fait appel au PHP,
de manière directe, http://my.host/cgi-bin/php/dir/script.php ou bien de manière indirecte, par redirection,
http://my.host/dir/script.php.
Les redirections peuvent être configurées dans les fichiers de configuration d’Apache en utilisant les directives
"AddHandler" et "Action" (voir ci-dessous).
Cas 2: Utilisation de la directive de compilation --enable-force-cgi-redirect
Cette option de compilation prévient quiconque d’appeler directement un script avec l’url
http://my.host/cgi-bin/php/secretdir/script.php. Dans ce cas là, PHP parsera le fichier uniquement s’il y a
eu redirection.
Habituellement, le serveur web Apache réalise une redirection grâce aux directives suivantes :
Action.php-script /cgi-bin/php
AddHandler.php-script .php
Cette option a uniquement été testée avec Apache et compte sur Apache pour affecter la variable d’environnement
non-standart REDIRECT_STATUS pour les requêtes redirigées. Dans le cas où votre serveur web ne supporte pas le
renseignement du PHP, pour savoir si la requête a été redirigée ou non, vous ne pouvez pas utiliser cette option de
compilation. Vous devez alors utiliser une des autres méthodes d’exploitation de la version binaire CGI du PHP, comme
exposé ci-dessous.
Cas 3: Utilisation du "doc_root" ou du "user_dir"
Ajouter un contenu interactif dans votre serveur web, comme des scripts ou des exécutables, est souvent considéré comme
une pratique non-sécurisée. Si, par erreur, le script n’est pas exécuté mais affiché comme une page HTML classique, il peut
en résulter un vol de propriété intellectuelle ou des problèmes de sécurité à propos des mots de passe notamment. Donc, la
majorité des administrateurs préfèrent mettre en place un répertoire spécial pour les scripts qui soit uniquement accessible
par le biais du binaire CGI du PHP, et donc, tous les fichiers de ce répertoire seront interprétés et non affichés tels quels.
Aussi, si vous ne pouvez pas utiliser la méthode présentée ci-dessus, il est nécessaire de mettre en place un répertoire
"doc_root" différent de votre répertoire "document root" de votre serveur web.
Vous pouvez utiliser la directive doc_root dans le fichier de configuration, ou vous pouvez affecter la variable
d’environnement PHP_DOCUMENT_ROOT. Si cette variable d’environnement est affectée, le binaire CGI du PHP
construira toujours le nom de fichier à ouvrir avec doc_root et le "path information" de la requête, et donc vous serez
sÛr qu’aucun script n’est exécuté en dehors du répertoire prédéfini (à l’exception du répertoire désigné par la directive
user_dir Voir ci-dessous).
Une autre option possible ici est la directive user_dir. Lorsque la directive n’est pas activée, seuls les fichiers contenus dans
le répertoire doc_root peuvent être ouverts. Ouvrir un fichier possédant l’url http://my.host/~user/doc.php ne
correspond pas à l’ouverture d’un fichier sous le répertoire racine de l’utilisateur mais à l’ouverture du fichier
~user/doc.php sous le repertoire "doc_root" (oui, un répertoire commence par un tilde [~]).
Si la directive "user_dir" est activée à la valeur public_php par exemple, une requête du type
http://my.host/~user/doc.php ouvrira un fichier appelé doc.php sous le répertoire appelé public_php sous le
répertoire racine de l’utilisateur. Si le répertoire racine des utilisateurs est /home/user, le fichier exécuté sera
/home/user/public_php/doc.php.
user_dir et doc_root sont deux directives totalement indépendantes et donc vous pouvez contrôler l’accès au
répertoire "document root" séparément des répertoires "user directory".
Cas 4: L’exécutable PHP à l’extérieur de l’arborescence du serveur
Une solution extrêmement sécurisée consiste à mettre l’exécutable PHP à l’extérieur de l’arborescence du serveur web.
Dans le répertoire /usr/local/bin, par exemple. Le problème de cette méthode est que vous aurez à rajouter la ligne
suivante :
#!/usr/local/bin/php
53
Chapitre 4. Sécurité
dans tous les fichiers contenant des tags PHP. Vous devrez aussi rendre le binaire PHP exécutable. Dans ce cas-là, traitez le
fichier exactement comme si vous aviez un autre script écrit en Perl ou en sh ou en un autre langage de script qui utilise #!
comme mécanisme pour lancer l’interpréteur lui-même.
Pour que l’exécutable PHP prenne en compte les variables d’environnement PATH_INFO et PATH_TRANSLATED
correctement avec cette configuration, vous devez utiliser l’option de compilation --enable-discard-path.
Module Apache
Lorsque le PHP est compilé en tant que module Apache, ce module hérite des permissions accordées à l’utilisateur faisant
tourner Apache ( par défaut, l’utilisateur "nobody"). Par exemple, si vous utilisez PHP pour accéder à une base de données,
à moins que la base n’ait un système de droits d’accès interne, vous devrez rendre la base accessible à l’utilisateur
"nobody". Cela signifie qu’un script mal intentionné peut accéder à la base, la modifier sans authentification. Il est aussi
possible qu’un robot accède à la page d’administration, et détruise toutes les pages. Vous devez aussi protéger vos bases de
données avec les autorisations Apache, ou définir votre propre modèle d’accès avec LDAP, .htaccess, etc... et inclure ce
code dans tous vos scripts PHP.
Souvent, lorsqu’on a établi les droits de l’utilisateur PHP (ici, l’utilisateur Apache) pour minimiser les risques, on
s’aperçoit que PHP ne peut plus écrire des virus dans les fichiers des utilisateurs. Ou encore, de modifier une base de
données privée. Il est aussi incapable de modifier des fichiers qu’il devrait pouvoir modifier, ou effectuer certaines
transactions.
Une erreur fréquente de sécurité est de donner à l’utilisateur Apache les droits de superadministrateur.
Donner de telles permissions à l’utilisateur Apache est extrêmement dangereux, et peut compromettre tout le système, telle
que l’utilisation des sudo ou du chroot. Pour les professionnels de la sécurité, une telle utilisation est à exclure d’office.
Sécurité des fichiers
PHP est soumis aux règles de sécurité intrinsèques de la plupart des systèmes serveurs : il respecte notamment les droits
des fichiers et des dossiers. Une attention particulière doit être portée aux fichiers ou dossiers qui sont accessibles à tout le
monde, afin de s’assurer qu’ils ne divulguent pas d’informations critiques.
Puisque PHP a été fait pour permettre aux utilisateurs d’accéder aux fichiers, il est possible de créer un script qui vous
permet de lire des fichiers tels que /etc/password, de modifier les connexions ethernet, lancer des impressions de
documents, etc... Cela implique notamment que vous devez-vous assurer que les fichiers accédés par les scripts sont bien
ceux qu’il faut.
Considérez le script suivant, où l’utilisateur indique qu’il souhaite effacer un fichier dans son dossier racine. Nous
supposons que PHP est utilisé comme interface web pour gérer les fichiers, et que l’utilisateur Apache est autorisé à effacer
les fichiers dans le dossier racine des utilisateurs.
Exemple 4-1. Une erreur de vérification de variable conduit à ...
<?php
// efface un fichier dans un dossier racine
$username = $user_submitted_name;
$homedir = "/home/$username";
$file_to_delete = "$userfile";
unlink ($homedir/$userfile);
echo "$file_to_delete a été effacé!";
?>
Etant donné que le nom de l’utilisateur est à fournir, des intrus peuvent envoyer un nom d’utilisateur autre que le leur, et
effacer des documents dans les comptes des autres utilisateurs. Dans ce cas, vous souhaiterez utiliser une autre forme
d’authentification. Considérez ce qui pourrait se passer si les utilisateurs passent "../etc/" et "passwd" comme arguments!
Le code serait éxécuté tel que :
54
Chapitre 4. Sécurité
Exemple 4-2. Une attaque du système de fichiers!
<?php
// efface un fichier n’importe où sur le disque dur,
// où l’utilisateur PHP a accès. Si PHP a un accès root :
$username = "../etc/";
$homedir = "/home/../etc/";
$file_to_delete = "passwd";
unlink ("/home/../etc/passwd");
echo "/home/../etc/passwd" has been deleted!";
?>
Il y a deux mesures primordiales à prendre pour éviter ces manoeuvres :
•
Limiter les permissions du l’utilisateur web PHP.
•
Vérifier toutes les variables liées aux chemins et aux fichiers qui sont fournie.
Voici le script renforcé :
Exemple 4-3. Une vérification renforcée
<?php
// Efface un fichier sur le disque où l’utilisateur à le droit d’aller
$username = get_env("REMOTE_USER");
// utilise un mécanisme d’authentification
$homedir = "/home/$username";
$file_to_delete = basename("$userfile");
// supprime le chemin excédentaire
unlink ($homedir/$file_to_delete);
$fp = fopen("/home/logging/filedelete.log","+a"); //note l’effacement
$logstring = "$HTTP_REMOTE_USER $homedir $file_to_delete";
fputs ($fp, $logstring);
fclose($fp);
echo "$file_to_delete a été éffacé!";
?>
Vous pouvez-vous protéger avec une vérification telle que :
Exemple 4-4. Vérification de noms de fichier sécurisée
<?php
$username = $HTTP_REMOTE_USER;
$homedir = "/home/$username";
if (!ereg(’^[^./][^/]*$’, $userfile))
die(’Erreur de nom de fichier’); //meurt, ne pas traiter!
//etc...
?>
Suivant votre système d’exploitation, vous devrez protéger un grand nombre de fichiers, notamment les entrées de
périphériques, (/dev/ ou COM1), les fichiers de configuration (fichiers /etc/ et .ini), les lieux de stockages d’informations
(/home/, My Documents), etc. Pour cette raison, il est généralement plus sÛr d’établir une politique qui interdit TOUT sauf
ce que vous autorisez.
Rapport d’erreur
Une tactique d’attaque standard consiste à faire faire des erreurs au système, et lire les variables d’environnement et de
contexte qui sont retournées. Cela permet au pirate de lire de nombreuses informations sur le serveur, et de détecter des
faiblesses du serveur.
Les erreurs PHP qui sont normalement retournées peuvent être très pratiques pour un développeur qui essaie de débugger
un script, car elles donnent de précieux renseignements tels que quelle fonction a échoué, quel fichier n’a pas été trouvé,
55
Chapitre 4. Sécurité
quel script PHP a buggé, et quelle ligne est en faute. Toutes ces informations sont exploitables. Il est commun aux
développeurs PHP d’utiliser les fonctions show_source(), highlight_string(), ou highlight_file() comme outils de
débuggage, mais sur un site en production, cela expose des variables cachées, des syntaxes non vérifiées ou d’autres
informations dangereuses.
Par exemple, le style d’erreur indique sur quel système PHP fonctionne. Si un pirate affiche une page html, et essaye de la
tester (pour rechercher des faiblesses du système), il peut déterminer sur quel système PHP a été compilé.
Une erreur de fonction indique si un système supporte une base de données spécifique, ou bien indique comment la page a
été générée. Cela peut orienter l’intrus vers les ports de cette base de données ou bien vers une attaque liée à cette
application. En envoyant des données erronées, par exemple, un pirate peut déterminer l’ordre d’authentification dans un
script (à partir des lignes d’erreurs), et d’essayer de les exploiter ailleurs, dans le script.
Une erreur de fichier, ou une erreur générale PHP peut indiquer quelles sont les permissions du serveur web, ainsi que la
structure et l’organisation des fichiers. Les gestionnaires d’erreurs utilisateurs peuvent aussi aggraver ce problème, en
permettant l’exploitation facile d’informations préalablement cachées.
Il y a trois solutions majeures à ces problèmes : la première est de scruter toutes les fonctions, et essayer de traiter toutes
les erreurs. La deuxième est d’inactiver le rapport d’erreur, dès que le script est en production. La troisième est d’utiliser
les fonctions de gestions des erreurs. Suivant votre politique de sécurité, vous pouvez utiliser un panachage savant des trois
méthodes.
Données transmises par les internautes
Les plus grandes faiblesses de nombreux programmes PHP ne viennent pas du langage lui-même, mais de son utilisation
en omettant les caractéristiques de sécurité. Pour cette raison, vous devez toujours prendre le temps de prendre en compte
les implications d’une fonction, et de cerner toutes les applications d’une utilisation exotiques des paramètres.
Exemple 4-5. Utilisation dangereuse de variables
<?php
// efface un fichier à la racine d’un utilisateur... ou peut être
// de quelqu’un d’autre?
unlink ($evil_var);
// Note l’accès de ce fichier ... ou pas?
fputs ($fp, $evil_var);
// Exécute une commande triviale... ou pas?
system ($evil_var);
exec ($evil_var);
?>
Il est vivement recommandé d’examiner minutieusement votre code pour vous assurer qu’il n’y a pas de variables
envoyées par le client web, et qui ne sont pas suffisamment vérifiées avant utilisation.
•
Est-ce que ce script n’affectera que les fichiers prévus?
•
Est-il possible que des valeurs incohérentes soient exploitées ici?
•
Est-ce que ce script peut être utilisé dans un but différent?
•
Est-ce que ce script peut être utilisé malicieusement, en conjonction avec d’autres?
•
Est-ce que toutes les actions seront notées?
En répondant de manière adéquate à ces questions lors de l’écriture de vos scripts (plutôt qu’après), vous éviterez une
réécriture inopportune pour raison de sécurité. En commençant vos projets avec ces recommandations en tête, vous ne
garantirez pas la sécurité de votre système, mais vous contribuerez à l’améliorer.
Vous pouvez aussi envisager de supprimer l’acquisition automatique des variables d’environnement, les guillemets
magiques (magic_quotes), ou encore toute option qui pourrait vous conduire à mésévaluer la validité, la source ou la valeur
d’une variable. En travaillant avec error_reporting(E_ALL), vous pouvez être averti que certaines variables sont utilisées
avant d’être exploitées, ou vérifiées (et donc, vous pourrez traiter des valeurs exotiques à la source).
56
Chapitre 4. Sécurité
Considérations générales
Un système complètement sécurisé est virtuellement impossible. De ce fait, une approche qui équilibre les risques et
l’ergonomie est souvent retenue. Si toutes les variables envoyées par l’utilisateur nécessitaient deux formes d’identification
biométriques (comme par exemple un scanner de la rétine, et une empreinte digitale), vous pourriez avoir un niveau de
sécurité élevé. Cela prendrait aussi une demi-heure pour remplir les conditions de sécurité, ce qui pousserait les utilisateurs
à éviter d’utiliser votre système.
La meilleure sécurité est celle qui protège votre système, sans empêcher les utilisateurs de faire leur travail. En général, les
attaques exploitent des trous de sécurité entre diverses couches d’identification : cet empilement devient trop complexe, et
finalement, peu fiable.
Une phrase qui vaut la peine d’être retenue : un système est aussi fiable que son maillon le plus faible. Si toutes les
transactions sont exhaustivement notées (heure, lieu, type, etc...) mais que l’utilisateur n’est authentifié que par un cookie,
la validité de votre système de surveillance est intimement liée à la validité du cookie (et donc, sévèrement réduite).
Lors de vos tests, gardez à l’esprit que vous ne pourrez pas tester toutes les configurations, mais probablement les plus
simples. Les données en entrées auxquelles vous pouvez vous attendre ne seront rien comparées aux données incohérentes
d’un employé négligent, un pirate disposant d’autant de temps qu’il veut, ou du chat de la maison marchant sur le clavier. Il
est donc bon de regarder le code logiquement, de chercher où des données incohérentes peuvent être introduites, modifiées,
réduites ou amplifiées.
L’Internet est rempli de personnes qui tentent de se faire une renommée en piratant vos programmes, en bloquant votre site,
en envoyant des contenus inappropriés, qui rendent vos journées si "spéciales". Peut importe que vous ayez un grand
portail ou un petit web, vous pouvez être la cible pour tout quidam avec une connexion. Vous êtes une cible potentielle dès
que vous êtes connecté vous-même. Certains programmes de piratage ne font pas dans la demi-mesure, et testent
systématiquement des millions d’IP, à la recherche de victimes : ne soyez pas la prochaine.
Etre à jour
PHP, comme de nombreux systèmes de grande taille, est constamment testé et amélioré. Chaque nouvelle version
rassemble des modifications majeures et mineures, aussi bien pour renforcer la sécurité, que pour réparer les problèmes de
conceptions de configuration, et d’autres points qui peuvent affecter la sécurité globale et la stabilité de votre système.
Comme les autres langages de scripts systèmes, la meilleure approche est de mettre à jour souvent PHP, et de rester à
l’écoute des dernières versions et des modifications qu’elles apportent.
57
Partie II. Référence
Chapitre 5. La syntaxe de base
58
Chapitre 5. La syntaxe de base
Le passage du HTML au PHP
Lorsque PHP commence à traiter un fichier, il ne fait qu’afficher le texte HTML qu’il rencontre. Si vous renommez un
fichier .html en .php, il fonctionnera exactement comme avant.
Si vous voulez insérer des commandes PHP dans votre fichier, vous devez indiquer à PHP le début d’une telle séquence, en
passant en mode PHP. Il y a quatre moyens pour passer du mode HTML au mode PHP :
Exemple 5-1. Le passage du HTML au PHP
1. <? echo ("Ceci est un exemple d’affichage à l’écran en PHP, sous forme d’expression SGML.\n"); ?>
<?= expression ?> Raccourci de "<? echo expression ?>"
2. <?php echo("Si vous voulez afficher du XML ou du XHTML, faites comme ceci.\n"); ?>
3. <script language="php">
echo ("Certains éditeurs HTML (comme FrontPage)
n’acceptent pas les expressions telles que celle-ci.");
</script>
4. <% echo ("Vous pouvez aussi utiliser le style ASP comme délimiteur."); %>
<%= $variable; # ceci est un raccourci pour "<%%echo .." %>
La deuxième méthode est généralement utilisée, car elle permet une implémentation aisée de PHP avec la prochaine
génération de XHTML.
La première possibilité n’est valable que si vous l’avez activée. Soit en faisant appel à la fonction short_tags() (NdT :
semble avoir disparu), soit en utilisant l’option d’exécution short_open_tag dans le fichier de configuration, soit en utilisant
l’option de compilation --enable-short-tags.
La quatrième possibilité est seulement disponible si vous l’avez activée en utilisant soit l’option d’exécution asp_tags, soit
en utilisant l’option de compilation --enable-asp-tags.
Note : Le support de la quatrième possibilité, ASP-style, a été ajouté dans la version 3.0.4.
La marque de fermeture d’un bloc (?>) comprend la nouvelle ligne suivante, s’il y en a une.
PHP vous permet d’utiliser des structures telles que :
Exemple 5-2. Méthode avancée
<?php
if ( boolean-expression ) {
?>
<strong>Ceci est vrai.</strong>
<?php
}
else
{
?>
<strong>Ceci est faux.</strong>
<?php
}
?>
Cela fonctionne comme on peut s’y attendre, car PHP traite le texte entre ?> et <?php comme une fonction echo(), sans
remplacer les variables éventuelles par leur valeur.
59
Chapitre 5. La syntaxe de base
Le séparateur d’instruction
Les instructions sont séparées comme en C ou en Perl par un point virgule à chaque fin d’instruction.
La balise de fin (?>) implique la fin d’un instruction, et donc ajoute implicitement un point virgule. Les deux exemples
suivants sont équivalents.
<?php
echo "Ceci est un test";
?>
<?php echo "Ceci est un test" ?>
Commentaires
Le PHP supporte les commentaires comme en C, C++ et Shell Unix. Par exemple:
<?php
echo "Ceci est un test"; // Ceci est un commentaire sur une ligne comme en C++
/* Ceci est un commentaire sur plusieurs lignes,
comme en C et C++ */
echo "Ceci est encore un test";
echo "Enfin, le test final"; # Ceci est un commentaire comme en Shell Unix
?>
Le premier type de commentaire ne commente que jusqu’à la fin de la ligne ou bien jusqu’à la fin du bloc, cela dépend du
premier rencontré.
<h1>Ceci est un <?php echo "simple";?> exemple.</h1>
<p>
La ligne du dessus affichera ’Ceci est un simple exemple’.
Faites attention à ne pas emboîter les commentaires de type ’C’, ce qui arrive de temps en temps lorsque vous voulez
commenter une grande partie de code.
<?php
/*
echo "Ceci est un test"; /* Ce commentaire va poser un problème */
*/
?>
60
Chapitre 6. Les types
61
Chapitre 6. Les types
Introduction
PHP supporte les 8 types basiques suivants :
PHP supporte quatres types scalaires :
•
booléen
•
entier
•
nombre à virgule flottante
•
chaîne de caractères
PHP supporte deux types composés :
•
tableau
•
objet
PHP supporte deux types spéciaux :
•
ressource
•
null
Note : Dans ce manuel, vous rencontrerez souvant le type mixed. C’est un pseudo-type, qui indique que le paramètre
peut indifféremment prendre plusieurs types.
Habituellement, le type d’une variable n’est pas déclaré par le programmeur. Il est décidé au moment de l’exécution par le
PHP, en fonction du contexte dans lequel la variable est utilisée.
Si vous voulez forcer une variable à être convertie en un certain type, vous devez transtyper (cast) la variable ou utiliser la
fonction settype().
Il est à noter qu’une variable peut se comporter de manière différente suivant les situations, en fonction du type qui lui est
affecté. Pour plus d’informations, voir le paragraphe transtypage.
Booléens
C’est le type le plus simple. Un booléen exprime les valeurs de vrai TRUE ou FALSE.
Vous pouvez utiliser les constantes ’TRUE’ et ’FALSE’ pour spécifier une valeur de type boolean. Généralement, vous les
créerez avec un des operateurs qui retourne une valeur boolean, pour le passer à une structure de contrôle.
<?php
if ($action == "show_version"){
// == is an operator
// qui retourne un booléen
echo "La version est 1.23";
}
// ceci n’est pas nécessaire
if ($show_separators == true){
echo "<hr>\n";
}
// ceci est plus pratique
if ($show_separators){
echo "<hr>\n";
}
?>
62
Chapitre 6. Les types
Note : Le type booéen a été introduit en PHP 4.
Conversion en booléen
Reportez-vous au chapitre "Définition du type" pour plus d’informations sur les conversions.
Lors des conversions de valeurs de type boolean, les valeurs suivantes sont considérées comme fausse (FALSE) :
•
Le booléen FALSE
•
L’entier 0 (zéro)
•
Le nombre à virgule flottante 0.0 (zéro)
•
La chaîne vide, et la chaîne "0"
•
Le tableau vide (aucun élément)
•
L’objet vide (aucun élément)
•
La constante spéciale NULL
Toutes les autres valeurs sont considérées comme vraies (TRUE (y compris les ressources).
Avertissement
-1 est considéré comme vrai!
Entiers
Un entier est un nombre de l’ensemble des entiers naturels Z : Z = {...., -2, -1, 0, 1, 2, ...}. Il est possible de spécifier les
nombres entiers (integers) de toutes les manières suivantes : décimale (base 10), hexadécimale (base 16), octale (base 8)
éventuellement précédé du signe moins (-).
Pour utiliser la notation octale, vous devez préfixer le nombre avec un zéro; pour utiliser la notation hexadécimale, vous
devez préfixer le nombre avec 0x.
<?php
$a =
$a =
$a =
$a =
1234;
-123;
0123;
0x12;
#
#
#
#
#
nombre entier
nombre entier
nombre entier
nombre entier
(équivalent à
en base 10
négatif
en base 8, octale (équivalent à 83 en base 10)
en base 16, hexadécimale
18 en base 10)
?>
La taille des entiers dépend de la plate-forme de support, mais la valeur maximale est généralement de 2 milliards et des
poussières (c’est un entier signé de 32 bits). PHP ne supporte pas les entiers non signés.
Note : En PHP, il n’existe pas de type fraction. 1/2 se transforme en nombre à virgule flottante 0.5.
Dépassement de capacité des entiers
Si un nombre est hors de l’intervalle de validité des entiers, il sera interprété comme un float.
<?php
$large_number = 2147483647;
var_dump($large_number);
// affiche : int(2147483647)
63
Chapitre 6. Les types
$large_number = 2147483648;
var_dump($large_number);
// affiche : float(2147483648)
?>
De même, si une fonction ou un opérateur retourne un entier qui est hors des limites de validité des entiers, il sera aussi
automatiquement converti en float.
<?php
$million = 1000000;
$large_number = 50000 * $million;
var_dump($large_number);
// affiche : float(50000000000)
?>
Avertissement
Malheureusement, il y a un bug dans le moteur (toujours présent en 4.0.6 et probablement résolu en
4.0.7) ce qui fait que PHP que fonctionne pas toujours bien lorsque des nombres négatifs sont utilisés.
Lorsque les deux opérandes sont positifs, il n’y a pas de problèmes. Par exemple : -50000 *
$million, conduit à -429496728.
Conversion en entiers
Pour explicitement convertir une valeur en integer, utilisez les opérateurs de transtypage (int) ou (integer).
Cependant, dans la plupart des situations, vous n’en aurez pas besoin, car une valeur sera automatiquement convertie si un
opérateur, un fonction ou tout autre élément du langage requiert un entier.
Reportez-vous à la section définition de type pour plus d’informations sur les conversions.
Depuis un booléen
FALSE devient 0 (zéro), et TRUE devient 1 (un).
Depuis un nombre à virgule flottante
Lors de conversion entre nombre à virgule flottante et un entier, le nombre sera arrondi à la valeur inférieure s’il est positif,
et supérieure s’il est négatif (conversion dite ’vers zéro’).
Si le nombre est hors de l’intervalle de validité des entiers, (généralement +/- 2.15e+9 = 2^31), le résultat est indéfinit,
car les nombres à virgules flottante n’ont pas assez de précision pour fournir une valeur exacte pour un entier.
Avertissement
Aucune alerte, même pas le plus petit message ne sera affiché dans ce cas.
Avertissement
Ne transformez jamais une fraction inconnue en entier, car cela peut conduire à des résultats
irrationnels.
<?php
echo (int) ( (0.1+0.7) * 10 );
// affiche 7!
?>
Pour plus d’informations, reportez-vous aux alertes liées aux nombres à virgule flottante.
64
Chapitre 6. Les types
From strings
Reportez-vous à la section des conversions de chaînes.
Conversion d’autres types
La conversion d’autres types en entier est indéfinie. Actuellement, PHP convertit d’abord la valeur en booléen.
Attention
Mais, ne vous fiez pas à ce comportement, car il est susceptible de changer sans préavis!
Voir aussi : Nombres de grande taille et Nombres à virgules flottantes.
Les nombres à virgule flottante
Les nombres à virgule flottante (connus aussi sous le vocable de "double" ou "float" "nombre rééls") peuvent être
spécifiés en utilisant la syntaxe suivante:
<?php
$a = 1.234;
$a = 1.2e3;
?>
Précision des nombres à virgule flottante
Il est fréquent que de simples fractions décimales telles que 0.1 ou 0.7 ne puissent être converties au
format interne binaire sans une légère perte de précision. Cela peut conduire à des résultats étonnants
: par exemple, floor((0.1+0.7)*10) retournera 7 au lieu de 8 car le résultat de la représentation
interne est 7.9999999999....
Tout ceci est lié au fait qu’il est impossible d’exprimer certaines fractions en un nombre fini de chiffres.
Par exemple 1/3 s’écrira 0.3333333... en mode décimal.
Ne faites donc jamais confiance aux nombres à virgule jusqu’à leur dernière décimale, et ne comparez
jamais ces nombres avec l’opérateur d’égalité. Si vous avez besoin d’une précision particulière,
reportez-vous au traitement des nombres de grande taille avec les librairies BC ou GMP.
Les chaînes de caractères
Les chaînes de caractères sont des séquences de caractères. En PHP, un caractère est un octet, et il y en 256 de possibles.
PHP n’a pas (encore?) de support natif d’Unicode.
Note : La taille n’est pas un problème majeur pour une chaîne. Elle peut devenir très grande sans problème. Il n’y a a
pas à s’en faire pour cela.
Syntax
Une chaîne peut être spécifiée de trois manières différentes :
•
guillemets simples
•
guillemets doubles
•
syntaxe HereDoc
65
Chapitre 6. Les types
guillemets simples
Le moyen le plus simple de spécifier une chaîne de caractères est d’utiliser les guillemets simples : ’.
Pour spécifier un guillemet simple littéral, vous devez l’échapper avec un anti-slash (\), comme dans de nombreux
langages. Si un anti-slash doit apparaître dans votre chaîne ou bien en fin de chaîne, il faudra le doubler. Notez que si vous
essayez d’échapper n’importe quel autre caractère, l’anti-slash sera conservé! Il n’y a pas besoin d’échapper d’autres
caractères que le guillemets lui-même.
Note : En PHP 3, une alerte sera affichée si cela arrive avec un niveau de rapport d’erreur de E_NOTICE.
Note : Contrairement aux autres syntaxes, les variables présentes dans la chaîne ne seront PAS remplacées par leurs
valeurs.
<?php
echo ’Ceci est une chaîne simple’;
echo ’Vous pouvez inclure des nouvelles lignes dans une chaîne,
comme ceci.’;
echo ’Arnold a coutume de dire : "I\’ll be back"’;
// affiche : ... "I’ll be back"
echo ’Etes vous sÛr de vouloir effacer le dossier C:\\*.*?’;
// affiche : Etes vous sÛr de vouloir effacer le dossier C:\*.*?
echo ’Etes vous sÛr de vouloir effacer le dossier C:\*.*?’;
// affiche : Etes vous sÛr de vouloir effacer le dossier C:\*.*?
echo ’Je suis en train de mettre une nouvelle ligne comme ceci : \n’;
// affiche : Je suis en train de mettre une nouvelle ligne comme ceci : \n
?>
Guillemets doubles
Si la chaîne est entourés de guillemets doubles, PHP va comprendre certaines séquences de caractères :
Tableau 6-1. Les caractères spéciaux
Séquence
Valeur
\n
Nouvelle ligne (linefeed, LF ou 0x0A (10) en ASCII)
\r
Retour à la ligne(carriage return, CR ou 0x0D (13) en ASCII)
\t
Tabulation horizontale (HT ou 0x09 (9) en ASCII)
\\
Antislash
\$
Caractère $
\"
Guillemets doubles
\[0-7]{1,3}
Une séquence de caractères qui permet de rechercher un
nombre en notation octale.
\x[0-9A-Fa-f]{1,2}
Une séquence de caractères qui permet de rechercher un
nombre en notation hexadécimale.
Si vous essayez d’utiliser l’anti-slash sur n’importe quelle autre séquence, l’anti-slash sera affiché dans votre chaîne.
Le plus important des chaînes à guillemets doubles est le fait que les variables qui s’y trouvent seront remplacées par leurs
valeurs. Voir la section sur le traitement des variables dans les chaînes pour plus de détails.
Syntaxe Heredoc
Un autre moyen de délimiter les chaînes est d’utiliser la syntaxe de "Here doc" (en français, documentation ici): <«, suivi
d’un identifiant arbitraire, puis de la chaîne. Cette séquence se termine par l’identifiant initial, placé en premier sur une
66
Chapitre 6. Les types
nouvelle ligne.
L’identifiant utilisé doit suivre les mêmes règles que les étiquettes PHP : il ne doit contenir uniquement que des caractères
alpha-numériques, et des soulignés ("_"), et enfin, commencer par un caractère alphabétique ou un souligné.
Avertissement
Il est très important de noter que la ligne qui contient l’identifiant de fermeture ne doit contenir aucun
autre caractère, hormis, éventuellement, un point-virgule ;. Cela signifie notamment que l’identifiant ne
doit pas être indenté, et qu’il n’y a aucun caractère blanc entre le retour à la ligne et l’identifiant, ou bien
entre l’identifiant et le ;.
Le plus dur est peut être qu’il ne faut pas qu’il y ait un retour à la ligne ((\r) à la fin de cette ligne, mais
seulement un form-feed (\n). Puisque Microsoft Windows utilise la séquence \r\n comme terminaison
de ligne, la syntaxe heredoc risque de ne pas fonctionner là. Cependant, la plupart des éditeurs PHP
fournissent une sauvegarde au format UNIX.
La syntaxe Here doc se comporte exactement comme une chaîne à guillemets doubles, sans les guillemets doubles. Cela
signifie que vous n’avez pas à échapper les guillemets (simples ou doubles) dans cette syntaxe. Les variables sont
remplacées par leur valeur, et le même soin doit leur être apporté que dans les chaînes à guillemets doubles.
Exemple 6-1. Exemple de chaîne HereDoc
<?php
$str = <«EOD
Exemple de chaîne
s’étalant sur
plusieurs lignes
avec la syntaxe heredoc
EOD;
/* Exemple plus complexe, avec des variables. */
class foo {
var $foo;
var $bar;
function foo() {
$this->foo = ’Foo’;
$this->bar = array(’Bar1’, ’Bar2’, ’Bar3’);
}
}
$foo = new foo();
$name = ’MonNom’;
echo <«EOT
Mon nom est "$name". J’affiche des $foo->foo.
Maintenant, j’affiche un {$foo->bar[1]}.
Ceci se traduit par un ’A’ majuscule: \x41
EOT;
?>
Note : Le support Here doc a été ajouté en PHP 4.
Traitement des variables dans les chaînes
Lorsqu’une chaîne est spécifiée avec des guillemets doubles, ou en utilisant la syntaxe heredoc, les variables qu’elle
contient sont remplacées par leur valeur.
Il y a deux types de syntaxe, une simple et une complexe. La syntaxe simple est la plus courante, et la plus pratique : elle
fournit un moyen d’utiliser les variables, que ce soit des chaînes, des tableaux ou des membres d’objets.
La syntaxe complexe a été introduite en PHP 4 et peut être reconnue grâce aux accolades entourant les expressions.
67
Chapitre 6. Les types
Syntaxe simple
Dès qu’un signe dollar $ est rencontré, l’analyseur PHP va lire autant de caractère qu’il peut pour former un nom de
variable valide. Entourez le nom de la variable avec des accolades pour indiquer explicitement son nom.
<?php
$boisson = ’vin’;
echo "Du $boisson, du pain et du fromage!’;
// OK, car "," n’est pas autorisé dans les noms de variables
echo "Il a goÛté plusieurs $vins";
// Pas OK, car ’s’ peut entrer dans un nom de variable, et PHP recherche $boissons
echo "Il a goÛté plusieurs ${vin}s";
// OK
?>
Similairement, vous pouvez aussi utiliser un élément de tableau, ou un membre d’objet. Pour les éléments de tableau, le
crochet fermant ’]’ marquera la fin du nom de la variable. Pour les membres d’objets, les mêmes règles que ci-dessus
s’appliquent. Cependant, il n’existe pas de truc comme pour les variables simples.
$fruits = array( ’fraise’ => ’rouge’ , ’banane’ => ’jaune’ );
echo "Une banane est $fruits[banane].";
// OK
echo "Ce carré est large de $carre->largeur mètres.";
// OK
echo "Ce carré est large de $carre->largeur00 mètres..";
// pas OK
// pour résoudre ce problème, voyez syntaxe complexe.
Pour tout ce qui sera plus compliqué, voyez la syntaxe complexe.
Syntaxe complexe
La syntaxe est dite "complexe" car elle permet l’utilisation d’ expressions complexes, et non pas parcequ’elle serait
obscure. Nuance.
En fait, vous pouvez inclure n’importe quelle valeur qui est dans l’espace de nom avec cette syntaxe. Il suffit d’écrire une
expression exactement comme si elle était hors de la chaîne, puis de l’entourer d’accolades {}. Puisque vous ne pouvez pas
échapper les accolades, cette syntaxe ne commence qu’à partir du signe dollar, qui suit immédiatement l’accolade
ouvrante. Par exemple, vous pouvez utiliser "{\$" pour obtenir un "{$" littéral. Voici quelques exemples :
<?php
$super = ’fantastique’;
echo "C’est { $super}";
// ne fonctionne pas,
// affiche "C’est { fantastique}"
echo "C’est {$super}";
// fonctionne,
// affiche "C’est fantastique"
echo "Ce carré a {$square->width}00 centimètres de large.";
echo "Ceci fonctionne : {$tableau[4][3]}";
echo "Ceci échoue : {$tableau[foo][3]}";
// pour la même raison que $tableau[bar] ne fonctionne pas hors d’une chaîne
echo "Essayez plutôt comme ceci : {$tableau[’foo’][3]}";
echo "Vous pouvez même écrire {$objet->valeurs[3]->nom}";
echo "Voici la valeur de la variable nommée $name: {${$name}}";
// cela fonctionne, mais c’est vivement déconseillé.
// Et pour finir, on peut combiner avec des fonctions
$inv = ’Bordeaux’;
echo "Je reprendrai bien un verre de cet excellent {${ strrev(’niv’) }}, hips";
?>
68
Chapitre 6. Les types
Accès aux caractères d’une chaîne
Les caractères d’une chaîne sont accessibles en spécifiant leur offset (le premier caractère est d’offset 0) entre accolade,
après le nom de la variable.
Note : Pour assurer la compatibilité ascendante, vous pouvez toujours accéder aux caractères avec des crochets.
Mais cette syntaxe est obsolète en PHP 4.
Exemple 6-2. Exemples de chaînes
<?php
/* Affectation d’une chaîne. */
$str = "Ceci est une chaîne";
/* Concaténation. */
$str = $str . " avec un peu plus de texte";
/* Une autre méthode de concaténation. */
$str .= " et une nouvelle ligne à la fin.\n";
/* Cette chaîne finira comme : ’<p>Nombre: 9</p>’ */
$num = 9;
$str = "<p>Nombre: $num</p>";
/* Celle-ci sera ’<p>Nombre: $num</p>’ */
$num = 9;
$str = ’<p>Nombre: $num</p>’;
/* Premier caractère d’une chaîne */
$str = ’Ceci est un test.’;
$first = $str{0};
/* Dernier caractère d’une chaîne. */
$str = ’This is still a test.’;
$last = $str{strlen($str)-1};
?>
Fonctions et opérateurs pratiques
Les chaînes peuvent être concaténées avec l’opérateur ’.’ (point). Notez que l’opérateur d’addition ’+’ (plus) ne
fonctionnera pas. Reportez-vous à la section opérateurs de chaînes.
Il y a une grande quantité de fonctions pratiques pour modifier les chaînes.
Reportez-vous à la section chaînes de caractères pour les fonctions les plus générales, à Expressions régulières Perl et
Expressions régulières POSIX extendues pour les recherches et remplacements.
Il y a aussi les fonctions sur les URL, ainsi que des fonctions de chiffrage (mcrypt et mhash).
Finalement, si vous ne trouvez toujours pas votre bonheure, il y a les fonctions de types de caractères.
Conversion de type
Lorsqu’une chaîne de caractère est évaluée comme une valeur numérique, le résultat et le type de la variable sont
déterminés comme suit.
La chaîne de caractères est de type "double" si elle contient un des caractère ’.’, ’e’ ou ’E’. Sinon, elle est de type entier
("integer").
La valeur est définie par la première partie de la chaîne. Si la chaîne de caractères débute par une valeur numérique cette
valeur sera celle utilisée. Sinon, la valeur sera égale à 0 (zéro).
Lorsque la première expression est une chaîne de caractères, le type de la variable dépend de la seconde expression.
<?php
$foo = 1 + "10.5";
// $foo est du type
float (11.5)
69
Chapitre 6. Les types
$foo
$foo
$foo
$foo
$foo
$foo
$foo
=
=
=
=
=
=
=
1 + "-1.3e3";
1 + "bob-1.3e3";
1 + "bob3";
1 + "10 Small Pigs";
1 + "10 Little Piggies";
"10.0 pigs " + 1;
"10.0 pigs " + 1.0;
//
//
//
//
//
//
//
$foo
$foo
$foo
$foo
$foo
$foo
$foo
est
est
est
est
est
est
est
du
du
du
du
du
du
du
type
type
type
type
type
type
type
float (-1299)
integer (1)
integer (1)
integer (11)
integer (11)
integer (11)
float (11)
?>
Pour plus d’informations sur les conversions de type, voir les pages de man à propos de la fonction strtod(3).
Si vous voulez testez l’un des exemples de cette section, vous pouvez faire un copier/coller et l’insérer dans un script pour
voir comment il se comporte.
<?php
echo "\$foo==$foo; type is " . gettype( $foo ) . "<br>\n";
?>
Les tableaux
Un tableau PHP est en fait une association ordonnée (map). Une association est un type qui fait correspondre des valeurs à
des clés. Ce type est optimisé de diverses façons, qui font que vous pouvez le manipuler comme un tableau à indices réels,
une liste (vecteur), ou un table de hachage (qui est une implémentation d’association), dictionnaire, collection, pile, queue
et encore d’autres. Comme une valeur peut elle-même être un tableau, vous pouvez simuler facilement un arbre.
Les détails d’implémentation de ces structures sont hors du champs de ce manuel, mais vous trouverez ici un exemple de
toutes ces structures.
Syntaxe
Créer un tableau array()
Un tableau array peut être créé avec la fonction array(). Cette fonction prend en argument des structures key => value,
séparées par des virgules.
Une clé key est soit un entier positif ou bien une chaîne. Si une clé est la représentation standard d’un entier positif, elle
sera interprété comme tel. (i.e. ’8’ sera interprété comme 8, tandis que ’08’ sera interprété comme ’08’).
Une valeur peut être n’importe quoi.
Omettre des clés
Si vous omettez une clé lors de la spécification d’un tableau, l’indice maximum + 1 sera utilisé comme clé par défaut. Si
aucun indice numérique n’a été généré, ce sera 0. Si vous spécifiez une qui a déjà été assigné, la nouvelle valeur écrasera la
précédente.
array( [key =>]
value
, ...
)
// key is either string
ou entier integer positif
// value peut être n’importe quoi
70
Chapitre 6. Les types
La syntaxe à crochets
Vous pouvez aussi modifier un tableau existant en lui assignant simplement des valeurs.
L’assignement de valeurs de tableau se fait en spécifiant la clé entre crochets. Si vous omettez la clé ("$tableau[]"), la
valeur sera ajoutée à la fin du tableau.
$arr[key] = value;
$arr[] = value;
// key est soit une chaîne, soit un entier
// value peut être n’importe quoi
Si $arr n’existe pas, il sera créé. Cela en fait une alternative pour créer un tableau. Pour modifier une valeur, assignez lui
une nouvelle valeur. Pour supprimer une valeur, utilisez la fonction unset().
Fonctions pratiques
Il y a toute une panoplie de fonctions pratiques pour travailler avec les tableau : array-functions.
L’élément de langage foreach est spécifiquement dédiée aux tableau : elle permet de passer en revue simplement les
valeurs d’un tableau.
Exemples
Le type tableau de PHP est très souple. Voici quelques exemples d’utilisation :
<?php
// ceci
$a = array( ’couleur’ => ’rouge’
, ’gout’ => ’sucre’
, ’forme’ => ’rond’
, ’nom’ => ’pomme’
,
4
// cette clé sera 0
);
// est complétement équivalent à
$a[’couleur’] = ’rouge’;
$a[’gout’] =
’sucre’;
$a[’forme’] =
’rond’;
$a[’nom’] =
’pomme’;
$a[]
= 4;
// cette clé sera 0
$b[] = ’a’;
$b[] = ’b’;
$b[] = ’c’;
// va créer le tableau array( 0 => ’a’ , 1 => ’b’ , 2 => ’c’ )
// ou plus simplement array(’a’ , ’b’ , ’c’ )
?<
Exemple 6-3. Utilisation de array()
<?php
// Array comme correspondance
$map = array( ’version’
=> 4
, ’OS’
=> ’Linux’
, ’langue’
=> ’français’
, ’short_tags’ => TRUE
// valeur strictement numériques
$array = array( 7
, 8
, 0
, 156
, -10
);
71
Chapitre 6. Les types
);
// ceci est la même chose que
$switching = array(
, 5
=>
, 3
=>
, ’a’ =>
,
, ’8’ =>
, ’02’ =>
, 0
=>
);
array( 0 => 7, 1 => 8, ...)
10 // clé = 0
6
7
4
11 // clé = 6 (index maximum : 5)
2 // clé = 8 (entier!)
77 // clé = ’02’
12 // la valeur de la clé 10 sera remplacée par 12
// empty array
$empty = array();
?<
Exemple 6-4. Collection
<?php
$couleurs = array(’rouge’,’bleu’,’vert’,’jaune’);
foreach ( $couleurs as $couleur ){
echo "Aimez-vous la couleur $couleur?\n";
}
/* Affiche :
Aimez-vous la couleur rouge?
Aimez-vous la couleur bleu?
Aimez-vous la couleur vert?
Aimez-vous la couleur jaune?
*/
?>
Notez qu’il n’est pas possible actuellement de modifier les valeurs d’un tableau avec une telle boucle. Une solution pour
cela est :
Exemple 6-5. Collection
<?php
foreach( $couleurs as $cle => $couleur ){
// ne marche pas
//$couleur = strtoupper($couleur);
//marche :
$couleurs[$cle] = strtoupper($couleur);
}
print_r($couleur);
/* Affiche :
Array
(
[0] => ROUGE
[1] => BLEU
[2] => VERT
[3] => JAUNE
)
*/
?>
Cet exemple crée un tableau d’index minimal 1.
72
Chapitre 6. Les types
Exemple 6-6. Tableau en 1
<?php
$firstquarter = array(1 => ’Janvier’, ’Février’, ’Mars’);
print_r($firstquarter);
/* Affiche:
Array
(
[1] => ’Janvier’
[2] => ’Février’
[3] => ’Mars’
)
*/
?>
Exemple 6-7. Remplissage d’un tableau
<?php
// remplis un tableau avec les noms de fichiers d’un dossier
$handle = opendir(’.’);
while ( $file = readdir($handle) ){
$files[] = $file;
}
closedir($handle);
?>
Les tableaux sont ordonnés. Vous pouvez modifier l’ordre des valeurs avec de nombreuses fonctions de classement. Voyez
les fonctions de tableaux.
Exemple 6-8. Tri de tableaux
<?php
sort($files);
print_r($files);
?>
Comme une valeur de tableau peut être n’importe quoi, elle peut aussi être un autre tableau. Comme cela, vous pouvez
avoir des tableaux multi-dimensionnels, ou récursifs.
Exemple 6-9. Tableaux multi-dimensionnels, et récursifs
<?php
$fruits = array ( "fruits"
=> array ( "a" => "orange"
, "b" => "banane"
, "c" => "pomme"
)
, "nombres" => array ( 1
, 2
, 3
, 4
, 5
, 6
)
, "trous"
=> array ( "premier"
, 5 => "second"
, "troisième"
)
);
?>
73
Chapitre 6. Les types
Attention aux tableaux
Pourquoi est ce que $foo[bar] est invalide?
Dans vos vieux scripts, vous pouvez avoir utilisé la syntaxe suivante :
<?php
$foo[bar] = ’ennemi’;
echo $foo[bar];
?>
Cela est mauvais, mais ca marche. Pourquoi est-ce mauvais? La raison est que PHP réclame une expression entre les
crochets (comme indiqué dans la section sur la syntaxe des tableaux). Cela signifie que vous pouvez écrire quelque chose
comme :
<?php
echo $arr[ foo(true) ];
?>
Ceci est un exemple d’utilisation de retour de fonction dans un index de tableau. PHP reconnait aussi les constantes, et
vous pouvez avoir déjà rencontré E_*.
<?php
$error_descriptions[E_ERROR] = "Une erreur fatale est survenue";
$error_descriptions[E_WARNING] = "PHP a généré une alerte";
$error_descriptions[E_NOTICE] = "Ceci est juste une note grâcieuse";
?>
Notez que E_ERROR est aussi un identifiant vlaide, tout comme bar dans le premier exemple. Mais le dernier exemple
revient à écrire :
<?php
$error_descriptions[1] = "Une erreur fatale est survenue";
$error_descriptions[2] = "PHP a généré une alerte";
$error_descriptions[8] = "Ceci est juste une note grâcieuse";
?>
car E_ERROR égale 1, etc.
Alors, comment se fait-tile que $foo[bar] fonctionne? C’est parce que bar est attendu comme une constante. Cependant,
dans ce cas, aucune constante n’a pour nom bar. PHP suppose alors que vous voulez dire bar littéralement, c’est-à-dire la
chaîne "bar", mais que vous avez oublié les guillements.
Alors, pourquoi est-ce mal?
Dans le futur, l’équipe de développement peut vouloir ajouter une nouvelle constante et vous vous retrouverez dans la
panade. Par exemple, vous ne pouvez déjà pas utiliser les constantes empty et default, car ce sont des mots reservés.
Et, pour en mettre une autre couche, cette syntaxe est tout simplement obsolète, et risque de ne plus fonctionner du tout un
jour ou l’autre.
Note : Lorsque vous activez le rapport d’erreur avec error_reporting() avec E_ALL, PHP générera des notes à chaque
fois que cette syntaxe est utilisée. Essayez donc error_reporting(E_ALL); dans vos scripts, pour voir).
Note : Dans une chaîne à guillements doubles, une autre syntaxe est valide. Voyez la section sur Traitement des
variables dans les chaînes pour plus de détails.
74
Chapitre 6. Les types
Les objets
Initialisation d’un objet
Pour initialiser un objet, vous devez utiliser la commande "new" afin de créer linstance de l’objet.
<?php
class foo {
function faire_foo () {
echo "Faisant foo.";
}
}
$bar = new foo;
$bar->faire_foo();
?>
Ressources
Une ressource (resource en anglais), est un type spécial, qui représente une référence sur une ressource externe. Les
ressources sont créées par des fonctions dédiées. Reportez vous à l’annexe ressource pour une liste exhaustive des
fonctions créant et utilisant ces ressources.
Note : Le type ressource a été introduit en PHP 4.
Libérer des ressources
Grâce au système de comptabilisation des références introduit en PHP 4 (avec le moteur Zend), PHP détecte
automatiquement qu’une ressource n’est plus utilisée (comme Java). Dans ce cas, toutes les ressources systèmes utilisées
par cette ressource sont libérées automatiquement.
Note : Les connexions persistantes représentent un cas particulier, elles ne seront PAS détruites. Voyez connexions
persistantes.
La valeur NULL
La valeur spéciale NULL représente l’absence de valeur. Une variable avec la valeur NULL n’a pas de valeur.
Syntaxe
Il y a seulement une valeur de type NULL, et c’est la constante NULL, insensible à la casse.
<?php
$var = Null;
?>
Note : La valeur NULL a été introduite en PHP 4.
75
Chapitre 6. Les types
Définition du type
PHP ne nécessite pas de déclaration explicite du type d’une variable. Le type d’une variable est déterminé par le contexte
d’utilisation. Par exemple, si vous assignez une chaîne de caractères à la variable var, var devient une chaîne de caractère.
Si vous assignez un nombre entier à var, elle devient un entier.
Un exemple de convertisseur automatique de type est l’opérateur ’+’. Si un des opérandes est de type double, alors tous les
opérandes sont évalués comme des variables de type double et le résultat est de type double. Sinon, tous les opérandes sont
évalués comme des variables de type entier et le résultat sera du type entier. Il est à noter que cela NE CHANGE PAS le
type des opérandes. Le seul changement est la manière dont les opérandes sont évaluées.
<?php
$foo
$foo
$foo
$foo
$foo
?>
= "0"; // $foo est une chaîne de caractères (ASCII 48)
+= 2;
// $foo est maintenant du type entier (2)
= $foo + 1.3; // $foo est maintenant du type double (3.3)
= 5 + "10 Petits cochons"; // $foo est du type entier (15)
= 5 + "10 cochonnets";
// $foo est du type entier (15)
Si les deux derniers exemples vous semblent obscurs ou si vous voulez forcer une variable a être évaluée avec un certain
type, reportez-vous au paragraphe Conversion de type ci-dessous. Si vous voulez changer le type d’une variable,
intéressez-vous à aux fonctions de conversion de chaînes.
Si vous voulez forcer le type d’une variable, vous pouvez vous reporter à la section transtypage. Si vous voulez changer le
type d’une variable, utilisez settype().
Pour tester les exemples de cette section, il suffit d’en faire un copier/coller, et d’insérer les lignes dans un script PHP.
<?php
echo "\$foo==$foo; le type est " . gettype( $foo ) . "<br>\n";
?>
Note : Le comportement de la conversion automatique est actuellement indéfinie.
<?php
$a = 1;
$a[0] = "f";
?>
// $a est un entier
// $a devient un tableau, et $a[0] contient "f"
Bien que dans l’exemple ci-dessus, il semble évident que $a va devenir un tableau, dont le premier élément est ’f’,
considérez l’exemple suivant :
<?php
$a = "1";
$a[0] = "f";
?>
// $a est une chaîne
// Qu’est ce qu’une position dans une chaîne ? que se passe t il?
Etant donné que PHP supporte l’indexation de chaîne avec des offsets identiques à celles des tableaux, l’exemple
ci-dessus conduit à un problème : est ce que $a est un tableau, dont le premier élément est "f", ou bien est ce que "f"
est le premier élément de la chaîne de caractères $a?
Pour cette raison, aussi bien pour PHP 3.0.12 que PHP 4.0b3-RC4, le résultat de la conversion automatique est
considéré comme indéfinie. Des solutions sont en cours de discussion.
76
Chapitre 6. Les types
Transtypage
La conversion de type en PHP fonctionne de la même manière qu’en C: le nom du type désiré est écrit entre parenthèses
devant la variable à transtyper ("cast").
<?php
$foo = 10;
// $foo est un entier
$bar = (double) $foo;
// $bar est un double
?>
Les conversions autorisées sont:
•
(int), (integer) - type entier
•
(bool), (boolean) - booléen
•
(real), (double), (float) - type double
•
(string) - ctype chaîne
•
(array) - type tableau
•
(object) - type objet
Il est à noter que les tabulations et les espaces sont autorisés à l’intérieur des parenthèses, donc les lignes suivantes sont
équivalentes:
<?php
$foo = (int) $bar;
$foo = ( int ) $bar;
?>
Le transtypage n’a pas toujours de résultat prévisible. Pour plus d’informations, voyez :
•
Conversion en booléen
•
Conversion en entier
Avertissement
Pour transformer facilement une variable en chaîne, entourez la simplement de guillements doubles.
Lors de la conversion d’un tableau en chaîne, le résultat sera le mot Array (tableau, en anglais). Lors de la conversion d’un
objet en chaîne, le résultat sera le mot Object (objet, en anglais). Dans les deux cas, une alerte sera affichée.
Lorsque vous transtypez un scalaire ou une chaîne en tableau, la variable verra son contenu affecté au premier élément du
tableau.
<?php
$var = ’ciao’;
$arr = (array) $var;
echo $arr[0]; // affiche ’ciao’
?>
Lorsque vous transtypez un scalaire ou une chaîne en objet, la valeur de la variable sera transformée en attribut de l’objet.
L’attribut s’appellera ’scalar’:
<?php
$var = ’ciao’;
$obj = (object) $var;
77
Chapitre 6. Les types
echo $obj->scalar;
// affiche ’ciao’
?>
78
Chapitre 7. Les variables
79
Chapitre 7. Les variables
Essentiel
En PHP, les variables sont représentées par un signe dollar "$" suivi du nom de la variable. Le nom est sensible à la casse
(ie : $x != $X).
Les noms de variables suivent les mêmes règles de nommage que les autres entités PHP. Un nom de variable valide doit
commencer par une lettre ou un souligné (_), suivi de lettres, chiffres ou soulignés. Exprimé sous la forme d’une
expression régulière, cela donne : ’[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*’
Note : Dans nos propos, une lettre peut être une des lettres minuscules (a à z) ou majuscules (A à Z), et les
caractères ASCII de 127 à 255 (0x7f-0xff).
<?php
$var = "Jean";
$Var = "Paul";
echo "$var, $Var";
// affiche "Jean, Paul"
$4site = ’pas encore’;
// invalide : commence par un nombre
$_4site = ’pas encore’;
// valide : commence par un souligné
$maïs = ’jaune’;
// valide; ’ï’ est ASCII 239.
?>
En PHP 3, les variables sont toujours assignées par valeur. C’est-à-dire, lorsque vous assignez une expression à une
variable, la valeur de l’expression est recopiée dans la variable. Cela signifie, par exemple, qu’après avoir assigné la valeur
d’une variable à une autre, modifier l’une des variables n’aura pas d’effet sur l’autre. Pour plus de détails sur ce genre
d’assignation, reportez-vous à Expressions.
PHP 4 permet aussi d’assigner les valeurs aux variables par référence. Cela signifie que la nouvelle variable ne fait que
référencer (en d’autres terme, "devient un alias de", ou encore "pointe sur") la variable originale. Les modifications de la
nouvelle variable affecteront l’ancienne, et vice versa. Cela signifie aussi qu’aucune copie n’est faite : l’assignation est
donc beaucoup plus rapide. Cela se fera notamment sentir dans des boucles, ou lors d’assignation de grands objets
(tableaux).
Pour assigner par référence, ajoutez simplement un & (ET commercial) au début de la variable qui est assignée (la variable
source). Dans l’exemple suivant, "Mon nom est Pierre" s’affichera deux fois :
<?php
$foo = ’Pierre’;
$bar = &$foo;
//
$bar = "Mon nom est Pierre";
echo $foo;
//
echo $bar;
?>
// Assigne la valeur ’Pierre’ à $foo
Référence $foo avec $bar.
// Modifie $bar...
$foo est aussi modifiée
Une chose importante à noter est que seules les variables nommées peuvent être assignées par référence.
<?php
$foo = 25;
$bar = &$foo;
$bar = &(24 * 7);
function test() {
return 25;
}
$bar = &test();
?>
// assignation valide .
// assignation invalide : référence une expression sans nom
// assignation invalide.
80
Chapitre 7. Les variables
Variables prédéfinies
PHP fourni un grand nombre de variables prédéfinies. Cependant, beaucoup de ces variables ne peuvent pas être présentées
ici, car elles dépendent du serveur sur lequel elles tournent, de la version du serveur, et de la configuration du serveur, ou
encore d’autres facteurs. Certaines de ces variables ne seront pas accessibles lorsque PHP fonctionne en exécutable.
Malgré ces données, voici une liste de variables prédéfinies, qui seront accessibles avec une installation ad hoc de PHP3,
fonctionnant en module, sous Apache (http://www.apache.org/) 1.3.6.
Pour la liste complète des variables prédéfinies (et d’autres informations pratiques) reportez-vous (et usez) de phpinfo().
Note : Cette liste n’est pas exhaustive et ne le sera pas. C’est simplement un aperçu des variables prédéfinies qui
peuvent être accessibles dans les scripts.
Variables Apache
Ces variables sont créées par le serveur Apache (http://www.apache.org/). Si vous utilisez un autre serveur web, il n’est pas
sur que celui-ci vous fournira les mêmes variables. Il peut ne pas les fournir, en fournir d’autres. Cependant, un bon
nombre de ces variables font partie de l’interface CGI 1.1 (http://hoohoo.ncsa.uiuc.edu/cgi/env.html), et on peut s’attendre
à les retrouver.
Notez que peu d’entre elles seront accessibles lorsque PHP est appelé en ligne de commande, (et elles n’auront alors peut
être pas de sens)
$GATEWAY_INTERFACE
Numéro de révision de l’interface CGI du serveur : i.e. ’CGI/1.1’.
$SERVER_NAME
Le nom du serveur hôte qui éxécute le script suivant. Si le script est exécuté sur un hôte virtuel, ce sera la valeur
définie pour cet hôte virtuel.
$SERVER_SOFTWARE
Chaîne d’identification du serveur, qui est donnée dans les en-têtes lors de la réponse aux requêtes.
$SERVER_PROTOCOL
Nom et révision du protocole de communication : i.e. ’HTTP/1.0’;
$REQUEST_METHOD
Méthode de requête utilisée pour accéder à la page; i.e. ’GET’, ’HEAD’, ’POST’, ’PUT’.
$QUERY_STRING
La chaîne de requête, si elle existe, qui est utilisée pour accéder à la page.
$DOCUMENT_ROOT
La racine sous laquelle le script courant est exécuté, comme défini dans la configuration du serveur.
$HTTP_ACCEPT
Contenu de l’en-tête Accept: de la requête courante, s’il y en a une.
$HTTP_ACCEPT_CHARSET
Contenu de l’en-tête Accept-Charset: de la requête courante, s’elle existe. Par exemple :
’iso-8859-1,*,utf-8’.
$HTTP_ACCEPT_ENCODING
Contenu de l’en-tête Accept-Encoding: de la requête courante, si elle existe. Par exemple : ’gzip’.
$HTTP_ACCEPT_LANGUAGE
Contenu de l’en-tête Accept-Language: de la requête courante, si elle existe. Par exemple : ’en’.
$HTTP_CONNECTION
Contenu de l’en-tête Connection: de la requête courante, si elle existe. Par exemple : ’Keep-Alive’.
81
Chapitre 7. Les variables
$HTTP_HOST
Contenu de l’en-tête Host: de la requête courante, si elle existe.
$HTTP_REFERER
L’adresse de la page (si elle existe) qui a conduit le client à la page courante. Cette valeur est affectée par le client, et
tous les clients ne le font pas.
$HTTP_USER_AGENT
Contenu de l’en-tête User_Agent: de la requête courante, si elle existe. C’est une chaîne qui décrit le client HTML
utilisé pour voir la page courante. Par exemple : Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Entre
autres choses, vous pouvez utiliser cette valeur avec get_browser() pour optimiser votre page en fonction des
capacités du client.
$REMOTE_ADDR
L’adresse IP du client qui demande la page courante.
$REMOTE_PORT
Le port utilisé par la machine cliente pour communiquer avec le serveur web.
$SCRIPT_FILENAME
Le chemin absolu jusqu’au script courant.
$SERVER_ADMIN
La valeur donnée à la directive SERVER_ADMIN (pour Apache), dans le fichier de configuration. Si le script est
exécuté par un hôte virtuel, ce sera la valeur définie par l’hôte virtuel.
$SERVER_PORT
Le port de la machine serveur utilisé pour les communications. Par défaut, c’est ’80’. En utilisant SSL, par exemple,
il sera remplacé par le numéro de port HTTP sécurisé.
$SERVER_SIGNATURE
Chaîne contenant le numéro de version du serveur et le nom d’hôte virtuel, qui sont ajoutés aux pages générées par le
serveur, si cette option est activée.
$PATH_TRANSLATED
Chemin dans le système de fichier (pas le document root-) jusqu’au script courant, une fois que le serveur a fait une
chemin traduction virtuel->réel.
$SCRIPT_NAME
Contient le nom du script courant. Cela sert lorsque les pages doivent s’appeler elles-mêmes.
$REQUEST_URI
L’URI qui a été fourni pour accéder à cette page. Par exemple : ’/index.html’.
Variables d’environnement
Ces variables sont importées dans l’espace de nom global de PHP, depuis l’environnement sous lequel PHP fonctionne.
Beaucoup d’entre elles sont fournies par le shell qui exécute PHP et différents systèmes étant susceptibles de disposer de
différents shells, une liste définitive est impossible à établir. Reportez-vous à la documentation de votre shell, pour
connaître la liste des variables d’environnement prédéfinies.
Les autres variables d’environment incluent les variables CGI, placées ici, quelquefois la méthode d’éxécution de PHP
(CGI ou module).
Variables PHP
82
Chapitre 7. Les variables
Ces variables sont créées par PHP lui_même. Les variables $HTTP_*_VARS ne sont disponibles que si l’option de
configuration track_vars a été activée. Lorsque c’est le cas, ces variables existent toujours, même si ce sont des tableaux
vides. Cela évite les usurpations mal intentionnées de ces variables.
Note : Depuis PHP 4.0.3, track_vars est toujours activé, quelle que soit la configuration.
Si la directive register_globals est activée, alors ces variables seront aussi disponibles comme variables globales du script :
c’est-à-dire, indépendamment des tableaux $HTTP_*_VARS. Cette fonctionnalité doit être utilisée avec précautions, et de
préférence, désactivée. Si $HTTP_*_VARS est sécurisé, les équivalents globaux peuvent être écrasés par les données
d’entrée de l’utilisateur, avec des intrusions possibles. Si vous ne pouvez pas désactiver register_globals, vous devez
prendre toutes les dispositions possibles pour vous assurer que les données utilisées sont sÛres.
$argv
Tableau des arguments passées au script. Lorsque le script est appelé en ligne de commande, cela donne accès aux
arguments, comme en langage C. Lorsque le script est appelé avec la méthode GET, ce tableau contiendra la chaîne de
requête.
$argc
Contient le nombre de paramètres de la ligne de commande passés au script (si le script fonctionne en ligne de
commande).
$PHP_SELF
Le nom du fichier du script en cour d’éxécution, par rapport au document root. Si PHP fonctionne en ligne de
commande, cette variable n’est pas disponible.
$HTTP_COOKIE_VARS
Un tableau associatif des variables passées au script courant via les HTTP cookies. Uniquement possible si le suivi
des variables a été activé avec la directive générale track_vars ou avec la directive locale <? php_track_vars ?>.
$HTTP_GET_VARS
Un tableau associatif des variables passées au script courant via les HTTP GET. Uniquement possible si le suivi des
variables a été activé avec la directive générale track_vars ou avec la directive locale <? php_track_vars ?>.
$HTTP_POST_VARS
Un tableau associatif des variables passées au script courant via les HTTP POST. Uniquement possible si le suivi des
variables a été activé avec la directive générale track_vars ou avec la directive locale <? php_track_vars ?>.
$HTTP_POST_FILES
Un tableau associatif contenant les informations sur les fichiers téléchargés avec la méthode HTTP POST.
Reportez-vous au chapitre Téléchargement par méthode POST pour plus de détails sur le contenu de
$HTTP_POST_FILES.
$HTTP_POST_FILES n’est disponible que dans les versions 4.0.0 et plus récentes de PHP.
$HTTP_ENV_VARS
Un tableau associatif des variables passées au script par l’environnement parent.
$HTTP_SERVER_VARS
Un tableau associatif des variables passées au script par le serveur HTTP. Ces variables sont analogues aux variables
décrites ci-dessus.
Portée des variables
83
Chapitre 7. Les variables
La portée d’une variable dépend du contexte dans lequel la variable est définie. Pour la majorité des variables, la portée
concerne la totalité d’un script PHP. Mais, lorsque vous définissez une fonction, la portée d’une variable définie dans cette
fonction est locale à la fonction. Par exemple:
<?php
$a = 1;
include "b.inc";
?>
Ici, la variable $a sera accessible dans le script inclus b.inc. Cependant, dans les fonctions définies par l’utilisateur, une
nouvelle définition de cette variable sera donnée, limitée à la fonction. Toute variable utilisée dans une fonction est par
définition, locale. Par exemple :
<?php
$a = 1; /* portée globale */
function test() {
echo $a; /* portée locale */
}
test();
?>
Le script n’affichera rien à l’écran car la fonction echo() utilise la variable locale $a, et celle-ci n’a pas été assignée
préalablement dans la fonction. Vous pouvez noter que ce concept diffère un petit peu du langage C dans lequel une
variable globale est automatiquement accessible dans les fonctions, à moins d’être redéfinie localement dans la fonction.
Cela peut poser des problèmes si vous redéfinissez des variables globales localement. En PHP, une variable globale doit
être déclarée à l’intérieur de chaque fonction afin de pouvoir être utilisée dans cette fonction. Par exemple:
<?php
$a = 1;
$b = 2;
function somme() {
global $a, $b;
$b = $a + $b;
}
somme();
echo $b;
Le script ci-dessus va afficher la valeur "3". En déclarant globales les variables $a et $b locales de la fonction somme(),
toutes les références à ces variables concerneront les variables globales. Il n’y a aucune limite au nombre de variables
globales qui peuvent être manipulées par une fonction.
Une deuxième méthode pour accéder aux variables globales est d’utiliser le tableau associatif prédéfini $GLOBALS. Le
précédent exemple peut être réécrit de la manière suivante:
<?php
$a = 1;
$b = 2;
function somme() {
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}
somme();
echo $b;
?>
Le tableau $GLOBALS est un tableau associatif avec le nom des variables globales comme clef et les valeurs des éléments
du tableau comme valeur des variables.
Une autre caractéristique importante de la portée des variables est la notion de variable static. Une variable statique a une
portée locale uniquement, mais elle ne perd pas sa valeur lorsque le script appelle la fonction. Prenons l’exemple suivant:
<?php
function test() {
$a = 0;
84
Chapitre 7. Les variables
echo $a;
$a++;
}
?>
Cette fonction est un peu inutile car à chaque fois qu’elle est appelée, elle initialise $a à 0 et affiche "0". L’incrémentation
de la variable ($a++) ne sert pas à grand chose, car dès que la fonction est terminée la variable disparaît. Pour faire une
fonction de comptage utile, c’est-à-dire qui ne perdra pas la trace du compteur, la variable $a est déclarée comme une
variable statique:
<?php
function test() {
static $a = 0;
echo $a;
$a++;
}
?>
Maintenant, à chaque fois que la fonction Test() est appelée, elle affichera une valeur de $a incrémentée de 1.
Les variables statiques sont essentielles lorsque vous faites des appels récursifs à une fonction. Une fonction récursive est
une fonction qui s’appelle elle-même. Il faut faire attention lorsque vous écrivez une fonction récursive car il est facile de
faire une boucle infinie. Vous devez vérifier que vous avez bien une condition qui permet de terminer votre récursivité. La
fonction suivante compte récursivement jusqu’à 10:
<?php
function test() {
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
test();
}
$count--;
}
?>
Les variables dynamiques
Il est pratique d’avoir parfois des noms de variables qui sont variables. C’est-à-dire un nom de variable qui est affectée et
utilisée dynamiquement. Une variable classique est affecté avec l’instruction suivante:
<?php
$a = "bonjour";
?>
Une variable dynamique prend la valeur d’une variable et l’utilise comme nom d’une autre variable. Dans l’exemple
ci-dessous, bonjour peut être utilisé comme le nom d’une variable en utilisant le "$$" précédent la variable. C’est-à-dire
<?php
$$a = "monde";
?>
A ce niveau, deux variables ont été définies et stockées dans l’arbre des symboles PHP: $a avec comme valeur "bonjour" et
$bonjour avec comme valeur "monde". Alors, l’instruction
<?php
echo "$a ${$a}";
?>
85
Chapitre 7. Les variables
produira le même affichage que :
<?php
echo "$a $bonjour";
?>
c’est-à-dire : bonjour monde.
Afin de pouvoir utiliser les variables dynamiques avec les tableaux, vous avez à résoudre un problème ambigu. Si vous
écrivez $$a[1], le parseur a besoin de savoir si vous parler de la variable qui a pour nom $a[1] ou bien si vous voulez
l’index [1] de la variable $$a. La syntaxe pour résoudre cette ambiguïté est la suivante: ${$a[1]} pour le premier cas, et
${$a}[1] pour le deuxième.
Variables externes à PHP
Formulaires HTML (GET et POST)
Lorsqu’un formulaire est envoyé à un script PHP, toutes les variables du formulaire seront automatiquement disponibles
dans le script. Par exemple, considérons le formulaire suivant:
Exemple 7-1. Exemple avec un formulaire simple
<form action="foo.php3" method="post">
Name: <input type="text" name="name"><br>
<input type="submit">
</form>
Lorsque ce formulaire est envoyé, le PHP va créer la variable $name, qui contiendra la valeur que vous avez entrée dans le
champs Name: du formulaire.
Le PHP permet aussi l’utilisation des tableaux dans le contexte de formulaire, mais seulement des tableaux à une seule
dimension. Comme cela, vous pouvez rassembler des variables ou utiliser cette fonctionnalité pour récupérer les valeurs
d’un choix multiple :
Exemple 7-2. Variables complexes de formulaire
<form action="array.php" method="post">
Name: <input type="text" name="personal[name]"><br>
Email: <input type="text" name="personal[email]"><br>
Beer: <br>
<select multiple name="vin[]">
<option value="medoc">Médoc
<option value="chablis">Chablis
<option value="riesling">Riesling
</select>
<input type="submit">
</form>
Si l’option "track_vars" est activée, soit par l’option de compilation track_vars, soit par la directive de configuration <?
php_track_vars ?>, les variables transmises par les méthodes POST et GET pourront aussi être trouvées dans le
tableau associatif global $HTTP_POST_VARS ou $HTTP_GET_VARS suivant la méthode utlisée.
86
Chapitre 7. Les variables
Bouton "submit" sous forme d’image
Lorsque vous envoyez le résultat d’un formulaire, vous pouvez utiliser une image au lieu du bouton "submit" standard en
utilisant un tag :
<input type=image src="image.gif" name="sub">
Lorsqu’un utilisateur clique sur l’image, le formulaire sera transmis au serveur avec deux variables de plus, sub_x et sub_y.
Ces deux variables contiennent les coordonnées de l’endroit où l’utilisateur à cliqué. Les utilisateurs expérimentés
remarqueront que les noms de variables sont transmis avec une virgule à la place du caractère "_", mais le PHP fait la
conversion automatiquement.
HTTP Cookies
Le PHP supporte les cookies HTTP de manière totalement transparente, comme défini dans les Netscape’s Spec
(http://www.netscape.com/newsref/std/cookie_spec.html). Les cookies sont un mécanisme permettant de stocker des
données sur la machine cliente à des fins d’authentification de l’utilisateur. Vous pouvez établir un cookie grâce à la
fonction setcookie(). Les cookies font partie intégrante du "header" HTTP, et donc la fonction setcookie() doit être appelée
avant que le moindre affichage ne soit envoyé au navigateur. C’est la même restriction que pour la fonction header(). Tout
cookie envoyé depuis le client sur le serveur sera automatiquement stocké sous forme de variable, comme pour la méthode
POST ou GET.
Si vous souhaitez assigner plusieurs valeurs à un seul cookie, il vous faut ajouter les caractères [] au nom de votre cookie.
Par exemple :
<?php
setcookie ("MonCookie[]", "test", time()+3600);
?>
Il est à noter qu’un cookie remplace le cookie précédent par un cookie de même nom tant que le "path" ou le domaine sont
identiques. Donc, pour une application de caddie, vous devez implémenter un compteur et l’incrémenter au fur et à mesure.
C’est-à-dire:
Exemple 7-3. Exemple avec setcookie()
<?php
$compte++;
SetCookie ("Compte", $compte, time()+3600);
SetCookie ("Caddie[$compte]", $item, time()+3600);
?>
Variables d’environnement
Le PHP fait en sorte que les variables d’environnement soient accessibles directement comme des variables PHP normales.
<?php
echo $HOME;
/* Affiche la valeur de la variable d’environnement HOME,
si celle-ci est affectée. */
?>
Même si le PHP crée les variables lors de l’utilisation des méthodes GET, POST et cookie, il est de temps en temps
préférable de transmettre explicitement la valeur de la variable afin d’être sÛr de la valeur. La fonction getenv() peut être
utilisée pour récupérer la valeur des variables d’environnement. Vous pouvez aussi affecter une variable d’environnement
grâce à la fonction putenv().
87
Chapitre 7. Les variables
Cas des points dans les noms de variables
Typiquement, PHP ne modifie pas les noms des variables lorsqu’elles sont passées à un script. Cependant, il faut noter que
les points (.) ne sont pas autorisés dans les noms de variables PHP. Pour cette raison, jetez un oeil sur :
<?php
$varname.ext;
?>
/* nom de variable invalide */
Dans ce cas, l’analyseur croit voir la variable nommée $varname, suivie par l’opérateur de concaténation, et suivi encore
par la chaîne non-guillemetée (une chaîne sans guillemets, et qui n’a pas de signification particulière). Visiblement, ce
n’est pas ce qu’on attendait...
Pour cette raison, il est important de noter que PHP remplacera automatiquement les points des noms de variables entrantes
par des soulignés (underscore).
Détermination du type des variables
Parceque le PHP détermine le type des variables et les convertit (généralement) comme il faut, ce n’est pas toujours le type
de variable que vous souhaitez. PHP inclut des fonctions permettant de déterminer le type d’une variable : gettype(),
is_long(), is_double(), is_string(), is_array() et is_object().
88
Chapitre 8. Les constantes
89
Chapitre 8. Les constantes
Une constante est un identifiant (un nom) qui représente une valeur simple. Comme leur nom le suggère, cette valeur ne
peut jamais être modifiée durant l’exécution du script (les constantes magiques __FILE__ et __LINE__ sont les seules
exception). Le nom d’une constante est sensible à la casse, apr défaut. Par convention, les constantes sont toujours en
majuscules.
Les noms de constantes suivent les mêmes règles que n’importe quel nom en PHP. Un nom de constante valide commence
par une lettre ou un souligné (_), suivi d’un nombre quelconque de lettre, chiffres ou soulignés. Sous forme d’expression
régulière, cela peut s’exprimer comme ceci : [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
Note : Dans cette documentation, une lettre peut être un des caractères suivants : de a à z, de A à Z et tous les
caractères ASCII de 127 à 255 (0x7f-0xff).
Les constantes sont accessibles de manière globale.
Syntaxe
Vous pouvez définir une constante en utilisant la fonction define(). Une fois qu’une constante est définie, elle ne peut
jamais être modifiée, ou détruite.
Seuls les types de données scalaires peuvent être placés dans une constante : c’est à dire les types booléen, entier, double et
chaîne de caractères (soit boolean, integer, double et string).
Vous povuez accéder à la valeur d’une constante en spécifiant simplement son nom. Contrairement aux variables, vous ne
devez PAS préfixer le nom de la constante avec $. Vous pouvez aussi utiliser la fonction constant(), pour lire
dynamiquement la valeur d’une constante, si vous obtenez le nom de cette constante dynamiquement (retour de fonction,
par exemple). Utilisez la fonction get_defined_constants() pour connaître la liste de toutes les fonctions définies.
Note : Les constantes et les variables globales utilisent deux espaces de noms différents. Ce qui implique que TRUE et
$TRUE sont généralement différents (en tous cas, ils peuvent avoir des valeurs différentes).
Lorsque vous utilisez une constante non définie, PHP suppose que vous utilisez le nom de la constante. Une note sera
générée. Utilisez la fonction defined() pour savoir si une constante existe ou pas.
Il y a des différences entre les constantes et les variables :
•
Les constantes ne commencent pas par le signe ($);
•
Les constantes sont définies et accessibles à tout endroit du code, globalement.
•
Les constantes ne peuvent pas être redéfinies ou indéfinies une fois qu’elles ont été définies.
•
Les constantes ne peuvent contenir que des scalaires.
Exemple 8-1. Definir une constante
<?php
define("CONSTANTE", "Bonjour le monde.");
echo CONSTANTE; // affiche "Bonjour le monde."
echo Constante; // affiche "Constante" et une note.
?>
Constantes prédéfinies
Les constantes prédéfinies sont toujours disponibles. En voici la liste :
__FILE__ (insensible à la casse)
90
Chapitre 8. Les constantes
Le nom du fichier qui est actuellement exécuté. Si cette constante est utilisée dans le cadre d’un fichier "inclus"
(après utilisation de require()), alors le nom du fichier inclus est renvoyée, et non le nom du fichier parent.
__LINE__ (insensible à la casse)
Le numéro de la ligne qui est actuellement exécutée. Si cette constante est utilisée dans le cadre d’un fichier "inclus"
(après utilisation de require()), c’est la position dans le fichier inclus qui est renvoyé.
PHP_VERSION
La chaîne de caractères de présentation de la version du PHP qui est actuellement utilisée. Par exemple ’4.0.0’.
PHP_OS
Nom du système d’exploitation qui est utilisé par la machine qui fait tourner le PHP. Parmi les valeurs possibles :
"AIX", "Darwin" (MacOS), "Linux", "SunOS", "WIN32", "WINNT". Note : cette liste n’est pas exhaustive.
TRUE
La valeur vraie booléenne, TRUE.
FALSE
La valeur faux booléenne, FALSE.
E_ERROR
Dénote une erreur autre qu’une erreur d’analyse ("parse error") qu’il n’est pas possible de corriger.
E_WARNING
Dénote un contexte dans lequel le PHP trouve que quelque chose ne va pas. Mais l’exécution se poursuit tout de
même. Ces alertes-là peuvent être récupérées par le script lui-même. Un exemple serait une expression régulière
(regexp) invalide dans la fonction ereg().
E_PARSE
L’analyseur a rencontré une forme syntaxique invalide dans le script. Correction de l’erreur impossible.
E_NOTICE
Quelque chose s’est produit, qui peut être ou non une erreur. L’exécution continue. Par exemple, le cas de guillemets
doubles (") non refermés, ou bien la tentative d’accéder à une variable qui n’est pas encore affectée.
E_ALL
Toutes les constantes E_* rassemblées en une seule. Si vous l’utilisez avec error_reporting(), toutes les erreurs et les
problèmes que PHP rencontrera seront notifiés.
Les constantes E_* sont généralement utilisées avec la fonction error_reporting().
Vous pouvez définir d’autres constantes en utilisant la fonction define().
Il est à noter que ce sont des constantes, et non pas des macros comme en C. Seulement les données scalaires peuvent être
représentées par des constantes.
Exemple 8-2. Définition de constantes
<?php
define("CONSTANTE", "Bonjour le monde.");
echo CONSTANTE;
// affiche "Bonjour le monde."
?>
Exemple 8-3. Utilisation des constantes __FILE__ et __LINE__
<?php
function rapport_erreur($file, $line, $message) {
echo "Une erreur est survenue dans le fichier $file à la ligne $line: $message.";
}
rapport_erreur(__FILE__,__LINE__, "Y a un problème!");
91
Chapitre 8. Les constantes
?>
92
Chapitre 9. Les expressions
93
Chapitre 9. Les expressions
Les expressions sont la partie la plus importante du PHP. En PHP, presque tout ce que vous écrivez est une expression. La
manière la plus simple de définir une expression est : "tout ce qui a une valeur".
Les formes les plus simples d’expressions sont les constantes et les variables. Lorsque vous écrivez "$a = 5", vous assignez
la valeur ’5’ à la variable $a. Bien évidemment, ’5’ vaut 5 ou, en d’autres termes, ’5’ est une expresssion avec pour valeur 5
(dans ce cas, ’5’ est un intier constant).
Après cette assignation, vous pouvez considérer que $a a pour valeur 5 et donc, écrire $b = $a, revient à écrire $b = 5. En
d’autres termes, $a est une expression avec de valeur 5. Si tout fonctionne correctement, c’est exactement ce qui arrive.
Un exemple plus complexe concerne les fonctions. Par exemple, considérons la fonction suivante :
<?php
function foo () {
return 5;
}
?>
Considérant que vous êtes familier avec le concept de fonction, (si ce n’est pas le cas, jetez un oeil au chapitre concernant
les fonctions), vous serez d’accord que $c = foo() est équivalent à $c = 5, et vous aurez tout à fait raison. Les fonctions sont
des expressions qui ont la valeur de leur "valeur de retour". Si foo() renvoie 5, la valeur de l’expression ’foo()’ est 5.
Habituellement, les fonctions ne font pas que renvoyer une valeur constante mais réalisent des traitements.
Bien sur, les valeurs en PHP n’ont pas à être des valeurs numériques, comme c’est souvent le cas. PHP supporte 3 types de
variables scalaires : les valeurs entières, les nombres à virgule flottante et les chaînes de caractères. (une variable scalaire
est une variable que vous ne pouvez pas scinder en morceau, au contraire des tableaux par exemple). PHP supporte aussi
deux types composés : les tableaux et les objets. Chacun de ces types de variables peuvent être affectés ou renvoyés par une
fonction.
Les utilisateurs de PHP/FI 2 ne verront aucun changement. Malgré tout, PHP va plus loin dans la gestion des expressions,
comme le font d’autres langages. PHP est un langage orienté expression, dans le sens oú presque tout est une expression.
Considérons l’exemple dont nous avons déjà parlé, ’$a = 5’. Il est facile de voir que il y a deux valeurs qui entrent en jeux
ici, la valeur numérique constante ’5’ et la valeur de la variable $a qui est mis à jour à la valeur 5. Mais, la vérité est qu’il y
a une autre valeur qui entre en jeu ici et c’est la valeur de l’assignement elle-même. L’assignement lui-même est assigné à
une valeur, dans ce cas-là 5. En pratique, cela signifie que ’$a = 5’ est une expression qui a pour valeur 5. Donc, en écrire
’$b = ($a = 5)’ revient à écrire ’$a = 5; $b = 5;’ (un point virgule marque la fin d’une instruction). Comme les assignements
sont analysés de droite à gauche, vous pouvez aussi bien écrire ’$b = $a = 5’.
Un autre bon exemple du langage orienté expression est la pré-incrémentation et la post-incrémentation, (ainsi que la
décrémentation). Les utilisateurs de PHP/FI 2 et ceux de nombreux autres langages sont habitués à la notation "variable++"
et "variable--". Ce sont les opérateurs d’incrémentation et de décrémentation. En PHP/FI 2, l’instruction ’$a++’ n’a aucune
valeur (c’est-à-dire que ce n’est pas une expression) et vous ne pouvez donc pas l’utiliser. PHP ajoute les possibilités
d’incrémentation et de décrémentation comme c’est le cas dans le langage C. En PHP, comme en C, il y a deux types
d’opérateurs d’incrémentation (pré-incrémentation et post-incrémentation). Les deux types d’opérateur d’incrémentation
jouent le même rôle (c’est-à-dire qu’il incrémente la variable). La différence vient de la valeur de l’opérateur
d’incrémentation. L’opérateur de pré-incrémentation, qui s’écrit ’++$variable’, évalue la valeur incrémentée (PHP
incrémente la variable avant de lire la valeur de cette variable, d’oú le nom de ’pré-incrémentation’). L’opérateur de
post-incrémentation, qui s’écrit ’$variable++’, évalue la valeur de la variable avant de l’incrémenter. (PHP incrémente la
variable après avoir lu sa valeur, d’oú le nom de ’post-incrémentation’).
Un type d’expression très commun est l’expression de comparaison. Ces expressions sont évaluées à 0 ou 1, autrement dit
FALSE ou TRUE (respectivement). PHP supporte les opérateurs de comparaison > (plus grand que), => (plus grand ou
égal), == (égal à), < (plus petit que), <= (plus petit ou égal). Ces expressions sont utilisées de manière courante dans les
instructions conditionnelles, comme l’instruction if.
Pour le dernier exemple d’expression, nous allons parler des combinaisons d’opérateurs/assignement. Vous savez que si
vous voulez incrémenter la variable $a d’une unité, vous devez simplement écrire ’$a++’. Mais si vous voulez ajouter la
valeur ’3’ à votre variable ? Vous pouvez écrire plusieurs fois ’$a++’, mais ce n’est pas la meilleure des méthodes. Un
pratique plus courante est d’écrire ’$a = $a + 3’. L’expression ’$a + 3’ correspond à la valeur $a plus 3, et est de nouveau
assignée à la variable $a. Donc le résultat est l’incrémentation de 3 unités. En PHP, comme dans de nombreux autres
langages comme le C, vous pouvez écrire cela de manière plus concise, manière qui avec le temps se révélera plus claire et
plus rapide à comprendre. Ajouter 3 à la valeur de la variable $a peut s’écrire ’$a += 3’. Cela signifie précisement : "on
prend la valeur de la variable $a, on ajoute la valeur 3 et on assigne cette valeur à la variable $a". Et pour être plus concis et
94
Chapitre 9. Les expressions
plus clair, cette expression est plus rapide. La valeur de l’expression ’$a += 3’, comme l’assignement d’une valeur
quelconque, est la valeur assignée. Il est à noter que ce n’est pas 3 mais la combinaison de la valeur de la variable $a plus la
valeur 3. (c’est la valeur qui est assignée à la variable $a). N’importe quel opérateur binaire peu utiliser ce type
d’assignement, par exemple ’$a -= 5’ (soustraction de 5 de la valeur de la variable $a), ’$b *= 7’ (multiplication de la
valeur de la variable $b par 7).
Il y a une autre expression qui peut paraître complexe si vous ne l’avez pas vu dans d’autre langage, l’opérateur
conditionnel ternaire:
<?php
$first ? $second : $third
?>
Si la valeur de la première sous-expression est vraie, (différente de 0), alors la deuxième sous-expression est évaluée et
constitue le résultat de l’expression conditonnelle. Sinon, c’est la troisème sous-expression qui est évaluée et qui constitue
le résultat de l’expression.
Les exemples suivants devraient vous permettre de mieux comprendre la pré- et post- incrémentation et le concept des
expressions en général:
<?php
function double($i) {
return $i*2;
}
$b = $a = 5;
/* assigne la valeur 5 aux variables $a et $b */
$c = $a++;
/* post-incrémentation de la variable $a et assignation de
la valeur à la variable $c */
$e = $d = ++$b;
/* Pré-incrémentation, et assignation de la valeur aux
variables $d et $e */
/* à ce niveau, les variables $d et $e sont égales à 6 */
$f = double($d++); /* assignation du double de la valeur de $d à la variable $f ($f vaut 12),
puis incrémentation de la valeur de $d */
$g = double(++$e); /* assigne deux fois la valeur de $e après
incrémentation, 2*7 = 14 to $g */
$h = $g += 10;
/* Tout d’abord, $g est incrémentée de 10, et donc $g vaut 24.
Ensuite, la valeur de $g, (24) est assignée à la variable $h,
qui vaut donc elle aussi 24. */
?>
Au début de ce chapitre, nous avons dit que nous allions décrire les différents types d’instructions, et donc, comme promis,
nous allons voir que les expressions peuvent être des instructions. Mais, attention, toutes les expressions ne sont pas des
instructions. Dans ce cas-là, une instruction est de la forme ’expr’ ’;’, c’est-à-dire, une expression suivie par un
point-virgule. L’expression ’$b = $a = 5;’, ’$a = 5’ est valide, mais ce n’est pas une instruction en elle-même. ’$b = $a = 5’
est une instruction valide.
La dernière chose qui mérite d’être mentionnée est la véritable valeur des expressions. Lorsque vous faîtes des tests sur une
variable, dans une boucle conditionnelle par exemple, cela ne vous intéresse pas de savoir qu’elle est la valeur exacte de
l’expression. Mais vous voulez seulement savoir si le résultat signifie TRUE ou FALSE (PHP n’a pas de type booléen). La
véritable valeur d’une expression en PHP est calculée de la même manière qu’en Perl. Toute valeur numérique différente
de 0 est considérée comme étant TRUE. Une chaîne de caractères vide et la chaîne de caractère 0 sont considérées comme
FALSE. Toutes les autres valeurs sont vraies. Avec les types de variables non-scalaires (les tableaux et les objets), s’ils ne
contiennent aucun élément, renvoient FALSE, sinon, ils renvoient TRUE.
PHP propose une implémentation complète et détaillée des expressions. PHP documente toutes ses expressions dans le
manuel que vous êtes en train de lire. Les exemples qui vont suivre devraient vous donner une bonne idée de ce qu’est une
expression et comment construire vos propres expressions. Dans tout ce qui va suivre, nous écrirons expr pour indiquer
toute expression PHP valide.
95
Chapitre 10. Les opérateurs
96
Chapitre 10. Les opérateurs
Les opérateurs arithmétiques
Vous rappelez-vous des opérations élémentaires apprises à l’école ?
Tableau 10-1. Opérations élémentaires
Exemple
Nom
Résultat
$a + $b
Addition
Somme de $a et $b.
$a - $b
Soustraction
Différence de $a et $b.
$a * $b
Multiplication
Produit de $a et $b.
$a / $b
Division
Quotient de $a et $b.
$a % $b
Modulo
Reste de $a divisé par $b.
L’opérateur de division ("/") retourne une valeur entière (le résultat d’une division entière) si les deux opérandes sont
entiers (ou bien des chaînes converties en entier. Si l’un des opérandes est un nombre à virgule flottante, ou bien le résultat
d’une opération qui retourne une valeur non entière, un nombre à virgule flottante sera retourné.
Les opérateurs d’assignation
L’opérateur d’assignation le plus simple est le signe "=". Le premier réflexe est de penser que ce signe veut dire "égal à". Ce
n’est pas le cas. Il signifie que l’opérande de gauche se voit affecter la valeur de l’expression qui est à droite du signe égal.
La valeur d’une expression d’assignation est la valeur assignée. Par exemple, la valeur de l’expression ’$a = 3’ est la valeur
3. Cela permet d’utiliser des astuces telles que :
<?php
$a = ($b = 4) + 5;
// $a est maintenant égal à 9, et $b vaut 4.
?>
En plus du simple opérateur d’assignation, il existe des "opérateurs combinés" pour tous les opérateurs arithmétiques et
pour les opérateurs sur les chaînes de caractères. Cela permet d’utiliser la valeur d’une variable dans une expression et
d’affecter le résultat de cette expression à cette variable. Par exemple:
<?php
$a = 3;
$a += 5;
// affecte la valeur 8 à la variable $a.
// correspond à l’instruction ’$a = $a + 5’);
$b = "Bonjour ";
$b .= " tout le monde!";
// affecte la valeur "Bonjour tout le monde!" à
// la variable $b
// identique à $b = $b." tout le monde!";
?>
On peut noter que l’assignation copie le contenu de la variable originale dans la nouvelle variable (assignation par valeur),
ce qui fait que les changements de valeur d’une variable ne modifieront pas la valeur de l’autre. Cela peut se revéler
important lors de la copie d’un grand tableau durant une boucle. PHP 4 supporte aussi l’assignation par référence, en
utilisant la syntaxe $var = &$othervar;, mais ce n’était pas possible en PHP 3. ’L’assignation par référence’ signifie
que les deux variables contiennent les mêmes données, et que la modification de l’une affecte l’autre. D’un autre côté, la
recopie est très rapide.
97
Chapitre 10. Les opérateurs
Opérateurs sur les bits
Les opérateurs sur les bits vous permettent de manipuler les bits dans un entier.
Tableau 10-2. Les opérateurs sur les bits
Exemple
Nom
Résultat
$a & $b
ET (AND)
Les bits positionnés à 1 dans $a ET dans
$b sont positionnés à 1.
$a | $b
OU (OR)
Les bits positionnés à 1 dans $a OU $b
sont sont positionnés à 1.
$a ^ $b
Xor
Les bits positionnés à 1 dans $a OU
dans $b sont positionnés à 1.
~ $a
NON (Not)
Les bits qui sont positionnés à 1 dans $a
sont positionnés à 0, et vice versa.
$a << $b
Décalage à gauche
Décale les bits de $a dans $b par la
gauche (chaque décalage équivaut à une
multiplication par 2).
$a >> $b
Décalage à droite
Décalage des bits de $a dans $b par la
droite (chaque décalage équivaut à une
division par 2).
Opérateurs de comparaison
Les opérateurs de comparaison, comme leur nom l’indique, vous permettent de comparer deux valeurs.
Tableau 10-3. Opérateurs de comparaison
Exemple
Nom
Résultat
$a == $b
Egal
Vrai si $a est égal à $b.
$a === $b
Identique
Vrai si $a est égal à $b et qu’ils sont de
même type (PHP 4 seulement).
$a != $b
Différent
Vrai si $a est différent de $b.
$a <> $b
Différent
Vrai si $a est différent de $b.
$a < $b
Plus petit que
Vrai si $a est plus petit strictement que
$b.
$a > $b
Plus grand
Vrai si $a est plus grand strictement que
$b.
$a <= $b
Inférieur ou égal
Vrai si $a est plus petit ou égal à $b.
$a >= $b
Supérieur ou égal
Vrai si $a est plus grand ou égal à $b.
Un autre opérateur conditionnel est l’opérateur ternaire (":?"), qui fonctionne comme en langage C.
<?php
(expr1) ? (expr2) : (expr3);
?>
Cette expression renvoie la valeur de l’expression expr2 si l’expression expr1 est vraie, et l’expression expr3 si
l’expression expr1 est fausse.
Opérateur de contrôle d’erreur
PHP supporte un opérateur de contrôle d’erreur : c’est @. Lorsque cet opérateur est ajouté en préfixe d’une expression
PHP, les messages d’erreur qui peuvent être générés par cette expression seront ignorés.
98
Chapitre 10. Les opérateurs
Si l’option track_errors est activée, les messages d’erreurs générés par une expression seront sauvés dans la variable
globale $php_errormsg. Cette variable sera écrasée à chaque erreur. Il faut alors la surveiller souvent pour pouvoir l’utiliser.
<?php
/* Erreur intentionnelle (le fichier n’existe pas): */
$my_file = @file (’non_persistent_file’) or
die ("Impossible d’ouvrir le fichier : L’erreur est : ’$php_errormsg’");
// Cela fonctionne avec n’importe quelle expression, pas seulement les fonctions
$value = @$cache[$key];
// la ligne ci-dessus n’affichera pas d’alerte si la clé $key du tableau n’existe pas
?>
Note : L’opérateur @ ne fonctionne qu’avec les expressions. La règle générale de fonctionnement est la suivante : si
vous pouvez prendre la valeur de quelquechose, vous pouvez le préfixer avec @. Par exemple, vous pouvez ajouter @
aux variables, fonctions, à include(), aux constantes, etc... Vous ne pourrez pas le faire avec des éléments de langage
tels que les classes, if et foreach, etc...
Note : La plupart des fonctions d’accès aux bases de données ne retournent pas d’erreur PHP. Il faut y accéder avec
une fonction du type base_de_donnees_get_error().
Voir aussi error_reporting().
Opérateur d’exécutions
PHP supporte un opérateur d’exécution : guillemets obliques ("“"). Notez bien la différence entre les guillemets simples
(sur la touche 4), et ceux-ci (sur la touche de la livre anglaise). PHP essaiera d’exécuter le contenu de ces guillemets
obliques comme une commande shell. Le résultat sera retourné (i.e. : il ne sera pas simplement envoyé à la sortie standard,
il peut être assigné à une variable).
<?php
$output = ‘ls -al‘;
echo "<pre>$output</pre>";
?>
Note : Cet opérateur est désactivé lorsque le safe mode est activé.
Voir aussi system(), passthru(), exec(), popen() et escapeshellcmd().
Opérateurs d’incrémentation/Décrémentation
PHP supporte les opérateurs de pré et post incrémentation et décrémentation, comme en C.
Tableau 10-4. Opérateurs d’incrémentation/Décrémentation
Exemple
Nom
Résultat
++$a
Pré-incrémente
Incrémente $a de 1, puis retourne $a.
$a++
Post-incrémente
Retourne $a, puis l’incrémente de 1.
--$a
Pré-décrémente
Décrémente $a de 1, puis retourne $a.
$a--
Post-décrémente
Retourne $a, puis décrémente $a de 1.
Voici un exempla simple
99
Chapitre 10. Les opérateurs
<?php
echo
$a =
echo
echo
echo
$a =
echo
echo
echo
$a =
echo
echo
echo
$a =
echo
echo
?>
"<h3>Post-incrémentation</h3>";
5;
"Devrait valoir 5: " . $a++ . "<br>\n";
"Devrait valoir 6: " . $a . "<br>\n";
"<h3>Pré-incrémentation</h3>";
5;
"Devrait valoir 6: " . ++$a . "<br>\n";
"Devrait valoir 6: " . $a . "<br>\n";
"<h3>Post-décrémentation</h3>";
5;
"Devrait valoir 5: " . $a-- . "<br>\n";
"Devrait valoir 4: " . $a . "<br>\n";
"<h3>Pré-décrémentation</h3>";
5;
"Devrait valoir 4: " . --$a . "<br>\n";
"Devrait valoir 4: " . $a . "<br>\n";
Les opérateurs logiques
Tableau 10-5. Les opérateurs logiques
Exemple
Nom
Résultat
$a and $b
ET (And)
Vrai si $a ET $b sont vrais.
$a or $b
OU (Or)
Vrai si $a OU $b est vrai
$a xor $b
XOR (Xor)
Vrai si $a OU $b est vrai, mais pas les
deux en même temps.
! $a
NON (Not)
Vrai si $a est faux.
$a && $b
ET (And)
Vrai si $a ET $b sont vrais.
$a || $b
OU (Or)
Vrai si $a OU $b est vrai.
La raison pour laquelle il existe deux types de "ET" et de "OU" est qu’ils ont des priorités différentes. Voir le paragraphe
précédence d’opérateurs.
La précédence des opérateurs
La priorité des opérateurs spécifie l’ordre dans lequel les valeurs doivent être analysées. Par exemple, dans l’expression 1 +
5 * 3, le résultat est 16 et non 18, car la multiplication ("*") à une priorité supérieure par rapport à à l’addition ("+").
Le tableau suivant dresse une liste de la priorité des différents opérateurs dans un ordre croissant de priorité.
Tableau 10-6. Précédence des opérateurs
Associativité
Opérateurs
gauche
,
gauche
or
gauche
xor
gauche
and
droite
print
gauche
= += -= *= /= .= %= &= |= ^= ~= <<=>>=
gauche
?:
gauche
||
100
Chapitre 10. Les opérateurs
Associativité
Opérateurs
gauche
&&
gauche
|
gauche
^
gauche
&
non-associative
== != ===
non-associative
< <= > >=
gauche
<< >>
gauche
+-.
gauche
*/%
droite
! ~ ++ -- (int) (double) (string) (array) (object) @
droite
[
non-associative
new
Opérateurs de chaînes
Il y a deux opérateurs de chaînes. Le premier est l’opérateur de concaténation (’.’), qui retourne la concaténation de ses
deux arguments. Le second est l’opérateur d’assignation concaténant (’.=’). Reportez-vous à Opérateurs d’assignations
pour plus de détails.
<?php
$a = "Bonjour ";
$b = $a . "Monde!";
// $b contient "Bonjour Monde!"
$a = "Bonjour ";
$a = $a . "Monde!";
// $a contient "Bonjour Monde!"
?>
101
Chapitre 11. Les structures de contrôle
102
Chapitre 11. Les structures de contrôle
Tous les scripts PHP sont une suite d’instructions. Une instruction peut être une assignation, un appel de fonction, une
instruction conditionnelle ou bien une instruction qui ne fait rien (une instruction vide). Une instruction se termine
habituellement par un point virgule (";"). De plus, plusieurs instructions peuvent être regroupées en bloc, délimité par des
accolades ("{}"). Un bloc est considéré comme une instruction. Les différents types d’instruction sont décrits dans ce
chapitre.
if
L’instruction if est une des plus importantes instructions de tous les langages, PHP inclus. Elle permet l’exécution
conditionnelle d’une partie de code. Les fonctionnalités de l’instruction if sont les mêmes en PHP qu’en C :
<?php
if (expression)
commandes
?>
Comme nous l’avons vu dans le paragraphe consacré aux expressions, expr est évaluée à sa vraie valeur. Si l’expression
expr est TRUE, PHP exécutera l’instruction et si elle est FALSE, l’instruction sera ignorée.
L’exemple suivant affiche la phrase a est plus grand que b si $a est plus grand que $b:
<?php
if ($a > $b)
print "a est plus grand que b";
?>
Souvent, vous voulez que plusieurs instructions soient exécutées après un branchement conditionnel. Bien évidemment, il
n’est pas obligatoire de répéter l’instruction conditionnelle autant de fois que vous avez d’instructions à exécuter. A la
place, vous pouvez rassembler toutes les instructions dans un bloc. L’exemple suivant affiche a est plus grand que
b, et assigne la valeur de la variable $a à la variable $b:
<?php
if ($a > $b) {
print "a est plus grand que b";
$b = $a;
}
?>
Vous pouvez imbriquer indéfiniment des instructions if les unes dans les autres, ce qui permet une grande flexibilité dans
l’exécution d’une partie de code suivant un grand nombre de conditions.
else
Souvent, vous voulez exécuter une instruction si une condition est remplie, et une autre instruction si cette condition n’est
pas remplie. C’est à cela que sert else. else fonctionne après un if et exécute les instructions correspondantes au cas oú
l’expression du if est FALSE. Dans l’exemple suivant, ce bout de code affiche a est plus grand que b si la variable
$a est plus grande que la variable $a, et a est plus petit que b sinon:
<?php
if ($a > $b) {
print "a est plus grand que b";
} else {
print "a est plus petit que b";
}
?>
103
Chapitre 11. Les structures de contrôle
Les instructions après le else ne sont exécutées que si l’expression du if est FALSE, et si elle n’est pas suivi par
l’expression elseif.
elseif
elseif, comme son nom l’indique, est une combinaison de if et de else. Comme l’expression else, il permet
d’exécuter une instruction aprè un if dans le cas oú le "premier" if est évalué comme FALSE. Mais, à la différence de
l’expression else, il n’exécutera l’instruction que si l’expression condionnelle elseif est évaluée comme TRUE.
L’exemple suivant affichera a est plus grand que b, a est égal à b ou a est plus petit que b:
<?php
if ($a > $b)
print "a
} elseif ($a
print "a
} else {
print "a
}
?>
{
est plus grand que b";
== $b) {
est égal à b";
est plus petit que b";
Vous pouvez avoir plusieurs elseif qui s’imbriquent les uns dans les autres, après un if initial. Le premier elseif qui
sera évalué à TRUE sera exécuté. En PHP, vous pouvez aussi écrire "else if" en deux mots et son comportement sera
identique à la version en un seul mot.
L’expression elseif est exécutée seulement si le if précédent et tout autre elseif précédent est évalués comme FALSE,
et que votre elseif est évalué à TRUE.
Syntaxe alternative
Avertissement
Cette syntaxe alternative est obsolète depuis PHP 4. Elle génère un code qui est tout simplement
illisible, et il est très difficile de la combiner avec la syntaxe normale. Bien que cela ne soit pas à l’ordre
du jour aujourd’hui, cette syntaxe risque de disrparaitre à terme. Soyez prévenus.
Le PHP propose une autre manière de rassembler des instructions à l’intérieur d’un bloc, pour les fonctions de contrôle if,
while, for, foreach et switch. Dans chaque cas, le principe est de remplacer l’accolade d’ouverture par deux points (:)
et l’accolade de fermeture par, respectivement, endif;, endwhile;, endfor;, ou endswitch;.
<?php if ($a == 5): ?>
A vaut 5
<?php endif; ?>
Dans l’exemple ci-desssus, le block HTML "A = 5" est inclus à l’intérieur d’un if en utilisant cette nouvelle syntaxe. Ce
code HTML ne sera affiché que si la variable $a est égale à 5.
Cette autre syntaxe fonctionne aussi avec le else et elseif. L’exemple suivant montre une structure avec un if, un
elsif et un else utilisant cette autre syntaxe:
<?php
if ($a == 5):
print "a égale 5";
print "...";
elseif ($a == 6):
print "a égale 6";
104
Chapitre 11. Les structures de contrôle
print "!!!";
else:
print "a ne vaut ni 5 ni 6";
endif;
?>
Allez voir while, for, et if pour d’autres exemples.
while
La boucle while est le moyen le plus simple d’implémenter une boucle en PHP. Cette boucle se comporte de la même
manière qu’en C. L’exemple le plus simple d’une boucle while est le suivant :
<?php
while (expression) commandes
?>
La signification d’une boucle while est très simple. Le PHP exécute l’instruction tant que l’expression de la boucle while
est évaluée comme TRUE. La valeur de l’expression est vérifiée à chaque début de boucle, et, si la valeur change durant
l’exécution de l’instruction, l’exécution ne s’arrêtera qu’à la fin de l’itération (chaque fois que le PHP exécute l’instruction,
on appelle cela une itération). De temps en temps, si l’expression du while est FALSE avant la première itération,
l’instruction ne sera jamais exécutée.
Comme avec le if, vous pouvez regrouper plusieurs instructions dans la même boucle while en les regroupant à
l’intérieur de parenthèses ou en utilisant la syntaxe suivante:
<?php
while (expression): commandes ... endwhile;
?>
Les exemples suivants sont identiques, et affichent tous les nombres de 1 à 10:
<?php
/* exemple 1 */
$i = 1;
while ($i <= 10) {
print $i++; /* La valeur affiche est $i avant l’incrémentation
(post-incrémentation) */
}
/* exemple 2 */
$i = 1;
while ($i <= 10):
print $i;
$i++;
endwhile;
?>
do..while
Les boucles do..while ressemblent beaucoup aux boucles while, mais l’expression est testée à la fin de chaque itération
plutôt qu’au début. La principale différence par rapport à la boucle while est que la première itération de la boucle
do..while est toujours exécutée (l’expression n’est testée qu’à la fin de l’itération), ce qui n’est pas le cas lorsque vous
utilisez une boucle while (l’expression est vérifiée au début de chaque itération).
105
Chapitre 11. Les structures de contrôle
Il n’y a qu’une syntaxe possible pour les boucles do..while:
<?php
$i = 0;
do {
print $i;
} while ($i>0);
?>
La boucle ci-dessus ne va être exécutée qu’une seule fois, car lorsque l’expression est évaluée, elle vaut FALSE (car la
variable $i n’est pas plus grande que 0) et l’exécution de la boucle s’arrête.
Les utilisateurs familiers du C sont habitués à une utilisation différente des boucles do..while , qui permet de stopper
l’exécution de la boucle au milieu des instructions, en l’encapsulant dans un do..while(0) la fonction break. Le code
suivant montre une utilisation possible:
<?php
do {
if ($i < 5) {
print "i n’est pas suffisamment grand";
break;
}
$i *= $factor;
if ($i < $minimum_limit) {
break;
}
print "i est bon";
...process i...
} while(0);
?>
Ne vous inquiétez pas si vous ne comprenez pas tout correctement. Vous pouvez écrire des scripts très très puissants sans
utiliser cette fonctionnalité.
for
Les boucles for sont les boucles les plus complexes en PHP. Elles fonctionnent comme les boucles for du langage C. La
syntaxe des boucles for est la suivante:
<?php
for (expr1; expr2; expr3) statement
?>
La première expression (expr1) est évaluée (exécutée), quoi qu’il arrive au début de la boucle.
Au début de chaque itération, l’expression expr2 est évaluée. Si l’évaluation vaut TRUE, la boucle continue et
l’instruction est exécutée. Si l’évaluation vaut FALSE, l’exécution de la boucle s’arrête.
A la fin de chaque itération, l’expression expr3 est évaluée (exécutée).
Les expressions peuvent éventuellement être laissées vides. Si l’expression expr2 est laissée vide, cela signifie que c’est
une boucle infinie (PHP considère implicitement qu’elle vaut TRUE, comme en C). Cela n’est pas vraiment très utile, à
moins que vous souhaitiez terminer votre boucle par l’instruction conditionnelle break.
Considérons les exemples suivants. Tous affichent les chiffres de 1 à 10:
<?php
/* exemple 1 */
for ($i = 1; $i <= 10; $i++) {
106
Chapitre 11. Les structures de contrôle
print $i;
}
/* exemple 2 */
for ($i = 1;;$i++) {
if ($i > 10) {
break;
}
print $i;
}
/* exemple 3 */
$i = 1;
for (;;) {
if ($i > 10) {
break;
}
print $i;
$i++;
}
/* exemple 4 */
for ($i = 1; $i <= 10; print $i, $i++) ;
?>
Bien évidemment, le premier exemple est le plus simple de tous (ou peut être le quatrième), mais vous pouvez aussi pensez
qu’utiliser une expression vide dans une boucle for peut être utile parfois.
PHP supporte aussi la syntaxe alternative suivante pour les boucles for :
<?php
for (expr1; expr2; expr3): statement; ...; endfor;
?>
Les autres langages ont l’instruction foreach pour accéder aux éléments d’un tableau. PHP 3 ne dispose pas d’une telle
fonction; PHP 4 en dispose (voir foreach). En PHP 3, vous pouvez combiner while avec list() et each() pour obtenir le
même résultat. Reportez-vous aux exemples de la documentation.
foreach
PHP 4 (mais pas PHP 3) inclut une commande foreach, comme en Perl ou d’autres langages. C’est un moyen simple de
passer en revue un tableau. Il y a deux syntaxes possibles : la seconde est une extension mineure mais pratique de la
première:
<?php
foreach(array_expression as $value) commandes
foreach(array_expression as $key => $value) commandes
?>
La première forme passe en revue le tableau array_expression. A chaque itération, la valeur de l’élément courant est
assignée à $value et le pointeur interne de tableau est avancé d’un élément (ce qui fait qu’à la prochaine itération, on
accédera à l’élément suivant).
La deuxième forme fait exactement la même chose, mais c’est la clé de l’élément courant qui est assigné à la variable $key.
Lorsque foreach démarre, le pointeur interne de fichier est automatiquement ramené au premier élément du tableau. Cela
signifie que vous n’aurez pas à faire appel à reset() avant foreach.
Note : De plus, notez que foreach travaille sur une copie du tableau spécifié, et pas sur le tableau lui-même. Par
conséquent, le pointeur de tableau n’est pas modifié, comme il le serait avec le fonction each(), et les modifications
faites dans le tableau ne seront pas prises en compte dans le tableau original.
107
Chapitre 11. Les structures de contrôle
Note : foreach n’accepte pas l’opérateur de supppression des erreurs @.
Vous pouvez remarquer que les exemples suivants fonctionnent de manière identique :
<?php
reset($arr);
while (list(, $value) = each ($arr)) {
echo "Valeur: $value<br>\n";
}
foreach ($arr as $value) {
echo "Valeur: $value<br>\n";
}
?>
Les exemples suivants sont aussi fonctionnellement identiques :
<?php
reset($arr);
while (list($key, $value) = each ($arr)) {
echo "Clé: $key; Valeur: $value<br>\n";
}
foreach ($arr as $key => $value) {
echo "Clé: $key; Valeur: $value<br>\n";
}
?>
Voici quelques exemples de plus :
<?php
/* exemple 1: valeurs seules */
$a = array (1, 2, 3, 17);
foreach ($a as $v) {
print "Valeur courante de \$a: $v.\n";
}
/* exemple 2: valeurs (avec la clé correspondante) */
$a = array (1, 2, 3, 17);
$i = 0; /* pour l’illustration uniquement */
foreach($a as $v) {
print "\$a[$i] => $v.\n";
}
/* exemple 3: clé et valeur */
$a = array (
"un" => 1,
"deux" => 2,
"trois" => 3,
"dix-sept" => 17
);
foreach($a as $k => $v) {
print "\$a[$k] => $v.\n";
}
/* exemple 4: tableaux multi-dimensionnels */
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";
foreach($a as $v1) {
foreach ($v1 as $v2) {
print "$v2\n";
}
}
108
Chapitre 11. Les structures de contrôle
/* exemple 5: tableaux dynamique */
foreach(array(1, 2, 3, 4, 5) as $v) {
print "$v\n";
}
?>
break
L’instruction break permet de sortir d’une structure for, while, foreach ou switch.
break accepte un argument numérique optionnel qui vous indiquera combien de structures emboitées ont été interrompues.
<?php
$i = 0;
while ($i < 10) {
if ($arr[$i] == "stop") {
break; /* Vous pouvez aussi écrire ’break 1;’ ici. */
}
$i++;
}
/* Utilisation de l’argument optionnel. */
$i = 0;
while ( ++$i ) {
switch ( $i ) {
case 5:
echo "à 5<br>\n";
break 1; /* Ne sort que du switch. */
case 10:
echo "à 10; quitting<br>\n";
break 2; /* Sort du switch et du while. */
default:
break;
}
}
?>
continue
L’instruction continue est utilisée dans une boucle afin d’éluder les instructions de l’itération courante afin de passer
directement à l’itération suivante.
continue accepte un argument numérique optionnel qui vous indiquera combien de structures emboitées ont été ignorées.
<?php
while (list ($cle, $valeur) = each ($arr)) {
if (!($cle % 2)) { // évite les membres impairs
continue;
}
fonction_quelconque($valeur);
}
$i = 0;
while ($i++ < 5) {
echo "Dehors<br>\n";
while (1) {
echo " Milieu<br>\n";
while (1) {
echo " Intérieur<br>\n";
continue 3;
109
Chapitre 11. Les structures de contrôle
}
echo "Ceci n’est jamais atteint.<br>\n";
}
echo "Ceci non plus.<br>\n";
}
?>
switch
L’instruction switch équivaut à une série d’instructions if. En de nombreuses occasions, vous aurez besoin de comparer
la même variable (ou expression) avec un grand nombre de valeurs différentes, et d’exécuter différentes parties de code
suivant la valeur à laquelle elle est égale. C’est exactement à cela que sert l’instruction switch.
Les deux exemples suivants sont deux manières différentes d’écrire la même chose, l’une en utilisant une séries de if, et
l’autre en utilisant l’instruction switch:
<?php
if ($i == 0) {
print "i égale 0";
}
if ($i == 1) {
print "i égale 1";
}
if ($i == 2) {
print "i égale 2";
}
switch ($i) {
case 0:
print "i égale 0";
break;
case 1:
print "i égale 1";
break;
case 2:
print "i égale 2";
break;
}
?>
Il est important de comprendre que l’instruction switch exécute chacune des clauses dans l’ordre. L’instruction switch
est exécutée ligne par ligne. Au début, aucun code n’est exécuté. Seulement lorsqu’un case est vérifié, PHP exécute alors
les instructions correspondantes. PHP continue d’exécuter les instructions jusqu’à la fin du bloc d’instructions du switch,
ou bien dès qu’il trouve l’instruction break. Si vous ne pouvez pas utiliser l’instruction break à la fin de l’instruction
case, PHP continuera à exécuter toutes les instructions qui suivent. Par exemple :
<?php
switch ($i) {
case 0:
print "i égale 0";
case 1:
print "i égale 1";
case 2:
print "i égale 2";
}
?>
110
Chapitre 11. Les structures de contrôle
Dans cet exemple, si $i est égal à 0, PHP va exécuter quand même toutes les instructions qui suivent. Si $i est égal à 1,
PHP exécutera les deux dernières instructions. Et seulement si $i est égal à 2, vous obtiendrez le résultat escompté,
c’est-à-dire, l’affiche de "i égal 2". Donc, l’important est de ne pas oublier l’instruction break (même s’il est possible que
vous l’omettiez dans certaines circonstances).
Dans une commande switch, une condition n’est évaluée qu’une fois, et le résultat est comparé à chaque case. Dans une
structure elseif, les conditions sont évaluées à chaque comparaison. Si votre condition est plus compliquée qu’une
simple comparaison, ou bien fait partie d’une boucle, switch sera plus rapide.
La liste de commandes d’un case peut être vide, auquel cas PHP utilisera la liste de commandes du cas suivant.
<?php
switch ($i) {
case 0:
case 1:
case 2:
print "i est plus petit que 3 mais n’est pas négatif";
break;
case 3:
print "i égale 3";
}
?>
Un case spécial est default. Ce cas est utilisé lorsque tous les case ont échoués. Il doit être le dernier cas listé. Par
exemple :
<?php
switch ($i) {
case 0:
print "i
break;
case 1:
print "i
break;
case 2:
print "i
break;
default:
print "i
}
?>
égale 0";
égale 1";
égale
2";
n’est ni égal à 2, ni à 1, ni à 0.";
Une autre chose à mentionner est que l’instruction case peut être une expression à de type scalaire, c’est-à-dire nombre
entier, nombre à virgule flottante et chaîne de caractères. Les tableaux sont sans intérêt dans ce contexte-là.
La syntaxe alternative pour cette structure de contrôle est la suivante : pour plus d’informations, voir syntaxes alternatives).
<?php
switch ($i):
case 0:
print "i
break;
case 1:
print "i
break;
case 2:
print "i
break;
default:
print "i
endswitch;
égale 0";
égale 1";
égale 2";
n’est ni égal à 2, ni à 1, ni à 0";
111
Chapitre 11. Les structures de contrôle
?>
declare
L’élément de langage declare sert à ajouter des directives d’éxécutions dans un bloc de code. La syntaxe de declare est
similaire à la syntaxe des autres fonctions de contrôle :
<?php
declare (directive) statement
?>
L’expression directive permet de contrôler l’intervention du bloc declare. Actuellement, une seule directive est
reconnue : la directive ticks (Voir plus bas pour plus de détails) sur les ticks).
L’expression statement du bloc de declare sera exécutée. Comment elle sera exécutée, et quels effets cela aura dépend
de la directive utilisée dans le bloc directive.
Ticks
Un tick est un événement qui intervient toutes les N commandes bas niveau, exécutées par l’analyseur dans le bloc de
declare. La valeur de N est spécifiée avec la syntaxe ticks=N dans le bloc de directive declare.
Un événement qui intervient à chaque tick est spécifié avec la fonction register_tick_function(). Reportez vous à
l’exemple ci-dessous pour plus de détails. Notez que plus d’un événement peut intervenir par tick.
<PRE>
<?php
// Un fonction qui enregistre l’heure à laquelle elle est appelée
function profile($dump = FALSE){
static $profile;
// Retourne les horaires stockés dans le profile, et l’efface
if ($dump) {
$temp = $profile;
unset ($profile);
return ($temp);
}
$profile[] = microtime ();
}
// Enregistre un gestionnaire de tick
register_tick_function("profile");
// Initialise la fonction avant le bloc de déclaration
profile();
// Exécute un bloc de code, et appele un tick toutes les deux secondes
declare (ticks=2) {
for ($x = 1; $x < 50; ++$x) {
echo similar_text(md5($x), md5($x*$x)), "<br>";
}
}
?>
Pour voir le résultat :
<?php
// Affiche les données de la variable $profile
print_r(profile(TRUE));
?>
</pre>
112
Chapitre 11. Les structures de contrôle
Cet exemple profile le code PHP dans le bloc de déclaration, et enregistre l’heure de chaque commande bas niveau. Cette
information peut être réutilisée pour débusquer les segments de code lents. Vous pouvez implémenter d’autres méthodes,
mais les ticks sont plus rapides et plus efficaces.
Les ticks sont bien pratiques pour débugger, implémenter un multi-tâches simple, des entrées sorties en tâche de fond, ou
bien d’autres choses, avec PHP.
Voir aussi register_tick_function() et unregister_tick_function().
require()
La commande require() se remplace elle-même par le contenu du fichier spécifié, comme les préprocesseurs C le font avec
la commande #include.
Il est important de noter que lorsqu’un fichier est include() ou require(), les erreurs d’analyse apparaîtront en HTML tout
au début du fichier, et l’analyse du fichier parent ne sera pas interrompue. Pour cette raison, le code qui est dans le fichier
doit être placé entre les balises habituelles de PHP.
require() n’est pas vraiment une fonction PHP : c’est plus une instruction du langage. Elle ne fonctionne pas comme les
fonctions standards. Par exemple, require() est indépendante des structures de contrôle (cela ne sert à rien de la placer dans
une condition, elle sera toujours exécutée). De plus, elle ne retourne aucune valeur. Lire une valeur retournée par un
require() retourne une erreur d’analyse.
Contrairement à include(), require() va toujours lire dans le fichier cible, même si la ligne n’est jamais exécutée. Si vous
souhaitez une inclusion conditionnelle, utilisez include(). La condition ne va jamais affecter require(). Cependant, si la
ligne de require() n’est jamais exécutée, le code du fichier ne le sera jamais non plus.
Les boucles n’affectent pas le comportement de require(). Même si le code contenu dans le fichier source est appelé dans
la boucle, require() n’est exécuté qu’une fois.
Cela signifie qu’on ne peut pas mettre un require() dans une boucle, et s’attendre à ce qu’il inclue du code à chaque
itération. Pour cela, il faut utiliser include().
<?php
require(’header.inc’);
?>
Attention : include() et require() ajoutent le contenu du fichier cible dans le script lui-même. Elles n’utilisent pas le
protocole HTTP ou tout autre protocole. Toute variable qui est dans le champs du script sera accessible dans le fichier
d’inclusion, et vice-versa.
<?php
require ("file.inc?varone=1&vartwo=2");
/* Ne fonctionne pas. */
$varone = 1;
$vartwo = 2;
require ("file.inc");
/* $varone et $vartwo seront accessibles à file.inc */
?>
Ne vous laissez pas abuser par le fait que vous pouvez requérir ou inclure des fichiers via HTTP en utilisant la
fonctionnalité de gestion des fichiers distants ce qui est au dessus reste vrai.
En PHP 3, il est possible d’exécuter une commande return depuis un fichier inclut, tant que cette commande intervient au
niveau global du fichier inclus. Elle ne doit intervenir dans aucun bloc (entre accolade {}). En PHP 4, cette possibilité a été
supprimée. Si vous en avez besoin, utilisez plutôt include().
113
Chapitre 11. Les structures de contrôle
include()
La fonction include() inclus et évalue le fichier spécifié en argument.
Il est important de noter que lorsqu’un fichier est include() ou require(), les erreurs d’analyse apparaîtront en HTML tout
au début du fichier, et l’analyse du fichier parent ne sera pas interrompue. Pour cette raison, le code qui est dans le fichier
doit être placé entre les balises habituelles de PHP.
Cela se produit à chaque fois que la fonction include() est rencontrée. Donc, vous pouvez utiliser la fonction include()
dans une boucle pour inclure un nombre infini de fois un fichier, ou même des fichiers différents.
<?php
$files = array (’premier.inc’, ’second.inc’, ’troisieme.inc’);
for ($i = 0; $i < count($files); $i++) {
include $files[$i];
}
?>
include() diffère de require() car le fichier inclus est ré-évaluée à chaque fois que la commande est exécutée, tandis que
require() est remplacée par le fichier cible lors de la première exécution, que son contenu soit utilisé ou non. De plus, cela
se fait même s’il est placé dans une structure conditionnelle, comme dans un if).
Parceque la fonction include() nécessite une construction particulière, vous devez l’inclure dans un bloc si elle est incluse
dans une structure conditionnelle.
<?php
/* Ceci est faux, et ne fonctionnera pas comme on l’attend. */
if ($condition)
include($file);
else
include($other);
/* Ceci est CORRECT. */
if ($condition) {
include($file);
} else {
include($other);
}
?>
En PHP 3, il est possible d’exécuter une commande return depuis un fichier inclus, tant que cette commande intervient
au niveau global du fichier inclus. Elle ne doit intervenir dans aucun bloc (entre accolade {}). En PHP 4, cette possibilité a
été supprimée. Cependant, PHP 4 vous autorise à retourner des valeurs d’un fichier inclus. Vous pouvez traiter include()
comme une fonction normale, qui retourne une valeur. Mais cela génère une erreur d’analyse en PHP 3.
Exemple 11-1. include() en PHP 3 et PHP 4
On suppose que le fichier test.inc existe, et est placé dans le même dossier que le fichier principal :
<?php
echo "Avant le retour<br>\n";
if (1) {
return 27;
}
echo "Après le retour <br>\n";
?>
On suppose que le fichier main.html contient ceci :
<?php
$retval = include (’test.inc’);
echo "Fichier inclus: ’$retval’<br>\n";
?>
114
Chapitre 11. Les structures de contrôle
Lorsque main.html est appelé en PHP 3, il va générer une erreur d’analyse (parse error) à la ligne 2; vous ne pouvez pas
vous attendre à un retour sur une fonction include() en PHP 3. En PHP 4, cependant,le résultat sera :
Avant le retour
Ficher inclus : ’27’
Supposons maintenant que main.html a été modifié et contient maintenant le code suivant :
<?php
include (’test.inc’);
echo "Retour dans le main.html<br>\n";
?>
En PHP 4, l’affichage sera :
Avant le retour
Retour dans le main.html
Au contraire, PHP 3 affichera :
Avant le retour
27Retour dans le main.html
Parse error: parse error in /home/torben/public_html/phptest/main.html on line 5
L’erreur d’analyse ci-dessus est le résultat du fait que la commande return est dans un bloc qui n’est pas une fonction,
dans test.inc. Lorsque le return est sorti du bloc, l’affichage devient :
Avant le retour
27Retour dans le main.html
Le ’27’ est du au fait que PHP 3 ne supporte pas le return dans ces fichiers.
Il est important de noter que lorsqu’un fichier est include() ou require(), les erreurs d’analyse apparaîtront en HTML tout
au début du fichier, et l’analyse du fichier parent ne sera pas interrompue. Pour cette raison, le code qui est dans le fichier
doit être placé entre les balises habituelles de PHP.
<?php
include
$varone
$vartwo
include
?>
("file.inc?varone=1&vartwo=2"); /* ne fonctionne pas. */
= 1;
= 2;
("file.inc"); /* $varone et $vartwo sont accessibles dans file.inc */
Ne vous laissez pas abuser par le fait que vous pouvez requérir ou inclure des fichiers via HTTP en utilisant la
fonctionnalité de gestion des fichiers distants ce qui est au dessus reste vrai.
Voir aussi readfile(), require() et virtual().
require_once()
La commande require_once() se remplace elle-même par le fichier spécifié, un peu comme les commandes de
préprocesseur C #include, et ressemble sur ce point à require(). La principale différence est qu’avec require_once(),
vous êtes assurés que ce code ne sera ajouté qu’une seule fois, évitant de ce fait les redéfinitions de variables ou de
fonctions, génératrices d’alertes.
Par exemple, si vous créez les deux fichiers d’inclusion utils.inc et foolib.inc
115
Chapitre 11. Les structures de contrôle
Exemple 11-2. utils.inc
<?php
define(PHPVERSION, floor(phpversion()));
echo "LES GLOBALES SONT SYMPAS\n";
function goodTea() {
return "Le Earl Grey est délicieux!";
}
?>
Exemple 11-3. foolib.inc
<?php
require ("utils.inc");
function showVar($var) {
if (PHPVERSION == 4) {
print_r($var);
} else {
dump_var($var);
}
}
// Une série de fonctions
?>
Puis, vous écrivez un script cause_error_require.php
Exemple 11-4. cause_error_require.php
<?php
require("foolib.inc");
/* Ceci génère une erreur*/
require("utils.inc");
$foo = array("1",array("complex","quaternion"));
echo "Ce code requiert utils.inc une deuxième fois, car il est requis \n";
echo "dans foolib.inc\n";
echo "Utilisation de GoodTea: ".goodTea()."\n";
echo "Affichage de foo: \n";
showVar($foo);
?>
Lorsque vous exécutez le script ci-dessus, le résultat sera (sous PHP 4.01pl2):
GLOBALS ARE NICE
GLOBALS ARE NICE
Fatal error: Cannot redeclare causeerror() in utils.inc on line 5
En modifiant foolib.inc et cause_errror_require.php pour qu’elles utilisent require_once() au lieu de require()
et ne renommant pas le fichier en avoid_error_require_once.php, on obtient :
Exemple 11-5. foolib.inc (corrigé)
<?php
require_once("utils.inc");
function showVar($var) {
?>
116
Chapitre 11. Les structures de contrôle
Exemple 11-6. avoid_error_require_once.php
<?php
require_once("foolib.inc");
require_once("utils.inc");
$foo = array("1",array("complexe","quaternion"));
?>
L’exécution de ce script, sous PHP 4.0.1pl2, donne :
LES GLOBALES SONT SYMPA
Ce code requiert utils.inc une deuxième fois, car il est requis
dans foolib.inc
Utilisation de GoodTea: Le Earl Grey est délicieux!
Affichage de foo:
Array
(
[0] => 1
[1] => Array
(
[0] => complexe
[1] => quaternion
)
)
Notez aussi que, de la même manière que les préprocesseurs traitent les #include, cette commande est exécutée au
moment de la compilation, c’est-à-dire lorsque le script est analysée, et avant qu’il soit exécuté, et ne doit pas être utilisée
pour insérer des données dynamiques liées à l’éxécution. Il vaut alors mieux utiliser include_once() ou include().
Pour plus d’exemples avec require_once() et include_once(), jetez un oeil dans le code de PEAR inclus dans la dernière
distribution de PHP.
Voir aussi : require(), include(), include_once(), get_required_files(), get_included_files(), readfile(), et virtual().
include_once()
La commande include_once() inclut et évalue le fichier spécifié durant l’exécution du script. Le comportement est
similaire à include(), mais la différence est que si le code a déjà été inclus, il ne le sera pas une seconde fois.
Comme précisé dans la section require_once(), la fonction include_once() est utilisée de préférence lorsque le fichier doit
être inclus ou évalué plusieurs fois dans un script, ou bien lorsque vous voulez être sÛr qu’il ne sera inclus qu’une seule
fois, pour éviter des redéfinitions de fonction.
Pour plus d’exemples avec require_once() et include_once(), jetez un oeil dans le code de PEAR inclus dans la dernière
distribution de PHP.
Voir aussi: require(), include(), require_once(), get_required_files(), get_included_files(), readfile(), et virtual().
117
Chapitre 12. Les fonctions
118
Chapitre 12. Les fonctions
Les fonctions utilisateur
Une fonction peut être définie en utilisant la syntaxe suivante :
<?php
function foo ($arg_1, $arg_2, ..., $arg_n) {
echo "Exemple de fonction.\n";
return $retval;
}
?>
Tout code PHP, correct syntaxiquement, peut apparaître dans une fonction et dans une définition de classe.
En PHP 3, les fonctions doivent être définies avant qu’elles ne soient utilisées. Ce n’est plus le cas en PHP 4.
PHP ne supporte pas le surchargement de fonction, ni la destruction ou la redéfinition de fonctions déjà déclarées.
PHP 3 ne supporte pas un nombre variable d’arguments (voir valeurs par défault d’arguments pour plus d’informations).
PHP 4 supporte les deux : voir liste variable d’arguments de fonction et les fonctions de références que sont
func_num_args(), func_get_arg(), et func_get_args() pour plus d’informations.
Les arguments de fonction
Des informations peuvent être passées à une fonction en utilisant un tableau d’arguments, dont chaque élément est séparé
par une virgule. Un élément peut être une variable ou une constante.
PHP supporte le passage d’arguments par valeur (méthode par défaut), par référence. Les listes variables d’arguments sont
supportées par PHP 4 et les versions plus récentes. Voir liste variable d’arguments de fonction et les fonctions utiles que
sont func_num_args(), func_get_arg(), et func_get_args(). Fonctionnellement, on peut arriver au même résultat en
passant un tableau comme argument :
function takes_array($input) {
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
Passage d’arguments par référence
Par défaut, les arguments sont passés à la fonction par valeur (donc vous pouvez changer la valeur d’un argument dans la
fonction, cela ne change pas sa valeur à l’extérieur de la fonction). Si vous voulez que vos fonctions puissent changer la
valeur des arguments, vous devez passer ces arguments par référence.
Si vous voulez qu’un argument soit toujours passé par référence, vous pouvez ajouter un ’&’ devant l’argument dans la
déclaration de la fonction :
function add_some_extra(&$string) {
$string .= ’, et un peu plus.’;
}
$str = ’Ceci est une chaîne’;
add_some_extra($str);
echo $str;
// affiche ’Ceci est une chaîne, et un peu plus.’
Si vous souhaitez passer une variable par référence à une fonction mais de manière ponctuelle, vous pouvez ajouter un ’&’
devant l’argument dans l’appel de la fonction:
function foo ($bar) {
$bar .= ’, et un peu plus.’;
}
$str = Ceci est une chaîne’;
119
Chapitre 12. Les fonctions
foo ($str);
echo $str;
foo (&$str);
echo $str;
// affiche ’Ceci est une chaîne’
// affiche ’Ceci est une chaîne, et un peu plus.’
Valeur par défaut des arguments
Vous pouvez définir comme en C++ des valeurs par défaut pour les arguments de type scalaire :
function servir_apero ($type = "ricard") {
return "Servir un verre de $type.\n";
}
echo servir_apero();
echo servir_apero("whisky");
La fonction ci-dessus affichera :
Servir un verre de ricard.
Servir un verre de whisky.
La valeur par défaut d’un argument doit obligatoirement être une constante, et ne peut être ni une variable, ni un membre
de classe.
Il est à noter que si vous utilisez des arguments avec valeur par défaut avec d’autres sans valeur par défaut, les premiers
doivent être placés à la suite de tous les paramètres sans valeur par défaut. Sinon, cela ne fonctionnera pas. Considérons le
code suivant :
<?php
function faireunyaourt ($type = "acidophilus", $flavour) {
return "Préparer un bol de $type $flavour.\n";
}
echo faireunyaourt ("framboise");
// ne fonctionne pas comme voulu
?>
L’affiche du code ci-dessus est le suivant :
Warning: Missing argument 2 in call to faireunyaourt() in
/usr/local/etc/httpd/htdocs/PHP 3test/functest.html on line 41
Préparer un bol de framboise.
Maintenant comparons l’exemple précédent avec l’exemple suivant :
<?php
function faireunyaourt ($flavour, $type = "acidophilus") {
return "Préparer un bol de $type $flavour.\n";
}
echo faireunyaourt ("framboise");
// fonctionne comme voulu
?>
L’affichage de cet exemple est le suivant :
Préparer un bol de acidophilus framboise.
120
Chapitre 12. Les fonctions
Nombre d’arguments variable
PHP 4 supporte les fonctions à nombre d’arguments variable. C’est très simple à utiliser, avec les fonctions
func_num_args(), func_get_arg(), et func_get_args().
Aucune syntaxe particulière n’est nécessaire, et la liste d’argument doit toujours être fournie explicitement avec la
définition de la fonction, et se comportera normalement.
Les valeurs de retour
Les valeurs sont renvoyées en utilisant une instruction de retour optionnelle. Tous les types de variables peuvent être
renvoyés, tableaux et objets compris.
<?php
function carre ($num) {
return $num * $num;
}
echo carre (4);
// affiche ’16’.
?>
Vous ne pouvez pas renvoyer plusieurs valeurs en même temps, mais vous pouvez obtenir le même résultat en renvoyant un
tableau.
<?php
function petit_nombre() {
return array (0, 1, 2);
}
list ($zero, $one, $two) = petit_nombre();
?>
Pour retourner une référence d’une fonction, utilisez l’opérateur & aussi bien dans la déclaration de la fonction que dans
l’assignation de la valeur de retour.
<?php
function &retourne_reference() {
return $uneref;
}
$newref =&retourne_reference();
?>
old_function
L’instruction old_function vous permet de déclarer une fonction en utilisant une syntaxe du type PHP/FI2 (au détail
près que vous devez remplacer l’instruction ’function’ par ’old_function’.)
C’est une fonctionnalité obsolète et elle ne devrait être utilisée que dans le cadre de conversion de PHP/FI2 vers PHP 3
121
Chapitre 12. Les fonctions
Avertissement
Les fonctions déclarées comme old_function ne peuvent pas être appelées à partir du code interne
du PHP. Cela signifie, par exemple, que vous ne pouvez pas les utiliser avec des fonctions comme
usort(), array_walk(), et register_shutdown_function(). Vous pouvez contourner ce problème en
écrivant une fonction d’encapsulation qui appellera la fonction old_function.
Fonctions-variable
PHP supporte le concept de fonctions variables. Cela signifie que si le nom d’une variable est suivi de parenthèses, PHP
recherchera une fonction de même nom, et essaiera de l’exécuter. Cela peut servir, entre autre, pour faire des fonctions
call-back, des tables de fonctions...
Les fonctions-variables ne peuvent pas fonctionner avec les éléments de langage comme les echo(), unset(), isset() et
empty(). C’est une des différences majeures entre les fonctions PHP et les éléments de langage.
Exemple 12-1. Exemple de fonction variable
<?php
function foo() {
echo "dans foo()<br>\n";
}
function bar( $arg = ” ) {
echo "Dans bar(); l’argument était ’$arg’.<br>\n";
}
$func = ’foo’;
$func();
$func = ’bar’;
$func( ’test’ );
?>
122
Chapitre 13. Les classes et les objets
123
Chapitre 13. Les classes et les objets
Les classes : class
Une classe est une collection de variables et de fonctions qui fonctionnent avec ces variables. Une classe est définie en
utilisant la syntaxe suivante :
<?php
class Caddie {
var $items; // Eléments de notre panier
// Ajout de $num articles de type $artnr au panier
function add_item ($artnr, $num) {
$this->items[$artnr] += $num;
}
// Suppression de $num articles du type $artnr du panier
function remove_item ($artnr, $num) {
if ($this->items[$artnr] > $num) {
$this->items[$artnr] -= $num;
return TRUE;
} else {
return FALSE;
}
}
}
?>
L’exemple ci-dessus définit la classe Caddie qui est composée d’un tableau associatif contenant les articles du panier et de
deux fonctions, une pour ajouter et une pour enlever des éléments au panier.
Attention
Les notes suivantes ne sont valable que pour PHP 4.
Le nom stdClass est utilisé en interne par Zend et ne doit pas être utilisé. Vous ne pouvez pas nommer
une classe stdClass en PHP.
Les noms de fonctions __sleep et __wakeup sont magiques en PHP. Vous ne pouvez pas utiliser ces
noms de fonctions dans vos classes, à moins que vous ne souhaitiez utiliser la magie qui y est associée.
PHP se réserve l’usage de tous les noms de fonctions commençants par __, pour sa propre magie. Il
est vivement recommandé de ne pas utilser des noms de fonctions commençants par __, à moins que
vous ne souhaitiez utiliser la magie qui y est associée.
Note : En PHP 4, seuls les initialiseurs constants pour les variables var sont autorisés. Utilisez les constructeurs pour
les initialisations variables, ou utilisant des expressions.
<?php
/* Aucune de ces syntaxes ne fonctionnera en PHP 4 */
class Caddie {
var $date_du_jour = date("d/m/Y");
var $name = $firstname;
var $owner = ’Fred ’ . ’Jones’;
var $items = array("DVD", "Télé","Magnétoscope");
}
/* Voici comment cela doit se faire désormais. */
class Caddie {
var $date_du_jour;
var $name;
var $owner;
var $items;
function Caddie() {
$this->date_du_jour = date("d/m/Y");
$this->name = $GLOBALS[’firstname’];
/* etc... */
}
}
?>
124
Chapitre 13. Les classes et les objets
Les classes forment un type de variable. Pour créer une variable du type désiré, vous devez utiliser l’opérateur new.
<?php
$cart = new Caddie;
$cart->add_item("10", 1);
$another_cart = new Cart;
$another_cart->add_item("0815", 3);
?>
L’instruction ci-dessus crée l’objet $cart de la class Caddie. La fonction add_idem() est appelée afin d’ajouter l’article
numéro 10 dans le panier. 3 articles numéro 0815 sont ajoutés au cart $another_cart.
$cart et $another_cart disposent des fonctions add_item(), remove_item() et de la variable items. Ce sont des fonctions et
variables distinctes. Vous pouvez vous représenter les objets comme des dossiers sur votre disque dur. Vous pouvez avoir
deux fichiers "lisez-moi.txt" sur votre disque dur, tant qu’ils ne sont pas dans le même répertoire. De même que vous devez
alors taper le chemin complet jusqu’au fichier, vous devez spécifier le nom complet de la méthode avant de l’employer : en
termes PHP, le dossier racine est l’espace de nom global, et le séparateur de dossier est ->. Par exemple, les noms
$cart->items et $another_cart->items représentent deux variables distinctes. Notez que le nom de la variable est alors
$cart->items, et non pas $cart->$items : il n’y a qu’un seul signe $ dans un nom de variable.
<?php
// correct, $ unique
$cart->items = array("10" => 1);
// incorrect, car $cart->$items devient $cart->""
$cart->$items = array("10" => 1);
// correct, mais risque de ne pas se comporter comme prévu
// $cart->$myvar devient $ncart->items
$myvar = ’items’;
$cart->$myvar = array("10" => 1);
?>
A l’intérieur d’une définition de classe, vous ne savez pas le nom de la variable à partir duquel l’objet sera accessible dans
le script. On ne peut prévoir que l’objet créé sera affecté à la variable $cart ou $another_cart. Donc, vous ne pouvez pas
utiliser la syntaxe $cart->items. Mais pour pouvoir accéder à aux méthodes et membres d’un objet, vous pouvez utiliser la
variable spéciale $this, qui peut s’interpréter comme ’moi-même’, ou bien ’l’objet courant’. Par exemple,
’$this->items[$artnr] += $num;’ peut se lire comme ’ajouter $num au compteur $artnr de mon propre tableau de
compteur’ ou bien ’ajouter $num au compteur $artnr du tableau de compteurs de l’objet courant’.
extends : héritage
Souvent, vous aurez besoin d’une classe avec des méthodes et fonctions similaires à une autre classe. En fait, il est bon de
définir des classes génériques, qui pourront être réutilisées et adaptées à tous vos projets. Pour faciliter cela, une classe peut
être une extension d’une autre classe. La classe dérivée hérite alors de toutes les méthodes et variables de la classe de base
(cet héritage a ça de bien que personne ne meurt pour en profiter), mais peut définir ses propres fonctions et variables, qui
s’ajouteront. Une classe ne peut hériter que d’une seule autre classe, et l’héritage multiple n’est pas supporté. Les héritages
se font avec le mot clé ’extends’.
<?php
class Caddie_nomme extends Caddie {
var $owner;
function set_owner ($name) {
$this->owner = $name;
}
}
?>
L’exemple ci-desssus définit la classe Caddie_nomme qui possède les même variables que la classe Caddie et la variable
$owner en plus, ainsi que la fonction set_owner(). Vous créez un panier nominatif de la même manière que précédemment,
125
Chapitre 13. Les classes et les objets
et vous pouvez alors affecter un nom au panier ou en connaître le nom. Vous pouvez de toutes les façons utiliser les même
fonctions que sur un panier classique.
<?php
$ncart = new Caddie_nomme;
// Création d’un panier nominatif
$ncart->set_owner ("kris"); // Affectation du nom du panier
print $ncart->owner;
// Affichage du nom du panier
$ncart->add_item ("10", 1); // (héritage des fonctions de la classe père)
?>
Constructor : constructeur
Attention
En PHP 3 et PHP 4, les constructeurs se comportent différemment. La sémantique de PHP 4 est
fortement recommandée.
Le constructeur est la fonction qui est appelée automatiquement par la classe lorsque vous créez une nouvelle instance
d’une classe a l’aide de l’opérateur new. La fonction constructeur a le même nom que la classe. En PHP 3, une fonction
devient le constructeur si elle porte le même nom que la classe. En PHP 4, une fonction devient un constructeur si elle
porte le même nom que la classe dans laquelle elle est définit. La différence est subtile, mais cruciale.
<?php
class Auto_Caddie extends Caddie {
function Auto_Caddie () {
$this->add_item ("10", 1);
}
}
// Cette syntaxe est valable en PHP 3 et 4
?>
L’exemple ci-dessus définit la classe Auto_Caddie qui hérite de la classe Caddie et définit le construteur de la classe. Ce
dernier initialise le panier avec 1 article de type numéro 10 dès que l’instruction "new" est appelée. La fonction
constructeur peut prendre ou non des paramètres optionnels, ce qui la rend beaucoup plus pratique. Pour pouvoir utiliser
cette classe sans paramètre, tous les paramètres du constructeurs devraient être optionnels, en fournissant une valeur par
défaut, comme ci-dessous.
// Cette syntaxe est valable en PHP 3 et 4
class Constructor_Cart extends Cart {
function Constructor_Cart ($item = "10", $num = 1) {
$this->add_item ($item, $num);
}
}
// Création du caddie
$default_cart
= new Constructor_Cart;
// Création d’un vrai caddie
$different_cart = new Constructor_Cart ("20", 17);
Attention
En PHP 3, les classes dérivées et les constructeurs ont un certains nombre de limitations. Les
exemples suivants doivent être lus avec beaucoup d’attention pour comprendre ces limitations.
class A {
function A() {
echo "Je suis le constructeur de A.<br>\n";
}
}
class B extends A {
function C() {
126
Chapitre 13. Les classes et les objets
"Je suis une fonction standard.<br>\n";
}
}
// Aucun constructeur n’est appelé en PHP 3!!
$b = new B;
En PHP 3, aucun constructeur ne sera appelé dans l’exemple ci-dessus. La règle en PHP 3 est : ’Un constructeur est une
fonction qui a le même nom que la classe’. Le nom de la classe est B, et il n’y a pas de fonctions qui s’appelle B() dans la
classe B. Rien ne se passe.
Ceci est corrigé en PHP 4, avec l’introduction d’une nouvelle règle : Si une classe n’a pas de constructeur, le constructeur
de la classe de basse est appelé, s’il existe. L’exemple ci-dessus affichera ’Je suis le constructeur de A.<br>’ en PHP 4.
class A {
function A() {
echo "Je suis le constructeur de A.<br>\n";
}
function B() {
echo "Je suis une fonction standard appelée B dans la classe A.<br>\n";
echo "Je ne suis pas le constructeur de A.<br>\n";
}
}
class B extends A {
function C() {
"Je suis une fonction standard.<br>\n";
}
}
// Cette syntaxe va appeler B() comme constructeur.
$b = new B;
En PHP 3, la fonction B() de la classe A va soudaiement devenir le constructeur de la classe B, bien qu’il n’ai pas été prévu
pour. La règle de PHP 3 est ’Un constructeur est une fonction qui a le même nom que la classe’. PHP 3 ne se soucie guère
si la fonction est définie dans la classe B ou si elle a été héritée.
Ceci est corrigé en PHP 4, avec l’introduction d’une nouvelle règle : ’Un constructeur est une classe de même nom, définit
dans la classe elle-même’. Donc, en PHP 4, la classe B n’a pas de constructeur par elle-même, et le constructeur de la
classe A aura été appelé, affichant : ’Je suis le constructeur de A.<br>’.
Attention
Ni PHP 3 ni PHP 4 n’appelle automatiquement le constructeur de la classe supérieure depuis le
constructeur de la classe dérivée. Il est de votre responsabilité de propager l’appel des constructeurs.
Note : Il n’y a pas de destructeurs en PHP 3 et PHP 4. Vous pouvez utiliser la fonction register_shutdown_function()
à la place, pour simuler un destructeur.
Les destructeurs sont des fonctions qui sont appelées lorsqu’un objet est détruit, soit avec la fonction unset() soit par
simple sortie d’une fonction (cas des variables locales). Il n’y a pas de destructeurs en PHP.
Opérateur ::
Attention
La documentation suivante n’est valable que pour PHP 4.
Parfois, il est pratique de faire référence aux fonctions est variables d’une classe de base, ou bien d’utiliser des méthodes
de classes qui n’ont pas encore d’objets créés. L’opérateur :: est là pour ces situations.
<?php
class A {
127
Chapitre 13. Les classes et les objets
function example() {
echo "Je suis la fonction originale A::example().<br>\n";
}
}
class B extends A {
function example() {
echo "Je suis la fonction redéfinie B::example().<br>\n";
A::example();
}
}
// Il n’y a pas d’objets de classe A.
// L’affichage est :
//
Je suis la fonction originale A::example().<br>
A::example();
// Création d’un objet de la classe B.
$b = new B;
// L’affichage est :
//
Je suis la fonction redéfinie B::example().<br>
//
Je suis la fonction originale A::example().<br>
$b->example();
?>
Les exemples ci-dessus appellent la fonction example() dans la classe A, mais il n’y a pas encore d’objet de classe A, alors
il n’est pas possible d’écrire $a->example(). A la place, on appelle la fonction example() comme une fonction de classe,
c’est-à-dire avec le nom de la classe elle-même, et sans objet.
Il y a des fonctions de classe, mais pas de variables de classe. En fait, il n’y a aucun objet au moment de l’appel de la
fonction. Donc, une fonction de classe ne peut accéder à aucune variable (mais elle peut accéder aux variables locales et
globales). Il faut proscire l’utilisation de $this.
Dans l’exemple ci-dessus, la classe B redéfinit la fonction example(). La définition originale dans la classe A est remplacée
par celle de B, et n’est plus accessible depuis B, à moins que vous n’appeliez spécifiquement la fonction example() de la
classe A avec l’opérateur ::. Ecrivez A::example() pour cela (en fait, il faudrait écrire parent::example(), comme expliqué
dans la section suivante).
Dans ce contexte, il y a un objet courant, qui peut avoir d’autres variables objets. De ce fait, lorsqu’il est utilisé depuis une
méthode d’un objet, vous pouvez utiliser $this.
parent
Il arrive que vous ayez à écrire du code qui faire référence aux variables et fonctions des classes de base. C’est
particulièrement vrai si votre classe dérivée est une spécialisation de votre classe de base.
Au lieu d’utiliser le nom litéral de votre classe de base dans votre code, vous pouvez utiliser le mot réservé parent, qui
représente votre classe de base (celle indiqué par extends, dans la déclaration de votre classe). En faisant cela, vous éviter
d’appeler le nom de votre classe de base directement dans votre code. Si votre héritage change, vous n’aurez plus qu’à
modifier le nom de la classe dans la déclaration extends de votre classe.
<?php
class A {
function example() {
echo "Je suis A::example() et je fournis une fonctionnalité de base.<br>\n";
}
}
class B extends A {
function example() {
echo "Je suis B::example() et je fournis une fonctionnalité supplémentaire.<br>\n";
parent::example();
}
}
$b = new B;
// Cette syntaxe va appeler B::example(), qui, à sont tour, va appeler A::example().
$b->example();
?>
128
Chapitre 13. Les classes et les objets
Sauvegarde d’objets - cas des sessions
Note : En PHP 3, les objets perdent leur association de classe à travers le processus de sauvegarde et relecture. Le
type de la variable après relecture est bien objet mais il n’a plus de méthode ou de nom de classe. Cela rend la
focntionnalité plutôt inutile (l’objet est devenu un tableau avec une syntaxe étrange).
Attention
La documentation suivante n’est valable que pour PHP 4.
serialize() retourne une chaîne représentant une valeur qui peut être stockée dans les sessions de PHP, ou une base de
données. unserialize() peut relire cette chaîne pour recréer la valeur originale. serialize() va sauver toutes les variables
d’un objet. Le nom de la classe sera sauvé mais par les méthodes de cet objet.
Pour permettre à unserialize() de lire un objet, la classe de cet objet doit être définie. C’est-à-dire, si vous avez un objet $a
de la classe A dans une page php1.php, et que vous le linéarisez avec serialize(), vous obtiendrez une chaîne qui fait
référence à la classe A, et contient toutes les valeurs de $a. Pour pouvoir le relire avec la fonction unserialize() dans une
page page2.php, il faut que la définition de la classe A soit présente dans cette deuxième page. Cela peut se faire de
manière pratique en sauvant la définition de la classe A dans un fichier séparé, et en l’incluant dans les deux pages
page1.php et page2.php.
<?php
classa.inc:
class A {
var $one = 1;
function show_one() {
echo $this->one;
}
}
?>
page1.php:
<?php
include("classa.inc");
$a = new A;
$s = serialize($a);
// enregistrez $s où la page2.php pourra le trouver.
$fp = fopen("store", "w");
fputs($fp, $s);
fclose($fp);
?>
page2.php:
<?php
// Ceci est nécessaire pour que unserialize() fonctionne correctement
include("classa.inc");
$s = implode("", @file("store"));
unserialize($s);
// maintenant, utilisez la méthode show_one de l’objet $a.
$a->show_one();
?>
Si vous utilisez les sessions et la fonction session_register() pour sauver des objets, ces objets seront linéarisés
automatiquement avec la fonction serialize() à la fin de chaque script, et relus avec unserialize() au début du prochain
script. Cela signifie que ces objets peuvent apparaître dans n’importe quelle page qui utilise vos sessions.
Il est vivement recommandé d’inclure la définition de classe dans toutes vos pages, même si vous n’utilisez pas ces classes
dans toutes vos pages. Si vous l’oubliez et qu’un tel objet est présent, il perdra sa classe, et deviendra un objet de classe
stdClass sans aucune fonction, et donc, plutôt inutile.
Si, dans l’exemple ci-dessus, $a devient un objet de session avec l’utilisation de session_register("a"), vous devez
pensez à inclure le fichier classa.inc dans toutes vos pages, et pas seulement page1.php et page2.php.
129
Chapitre 13. Les classes et les objets
Les fonctions magiques __sleep et __wakeup
serialize() s’assure que votre classe a une méthode avec le nom magique __sleep. Si c’est le cas, cette fonction est
appelée avant toute linéarisation. Elle peut alors nettoyer l’objet et on s’attend à ce qu’elle retourne un tableau avec la liste
des noms de variables qui doivent être sauvées.
Le but de cette fonction __sleep est de fermer proprement toute connexion à une base de données, de valider les requêtes,
de finaliser toutes les actions commencées. Cette fonction est aussi pratique si vous ave de très grands objets qui n’ont pas
besoin d’être sauvé entièrement.
A l’inverse, unserialize() s’assure de la présence de la fonction magique __wakeup. Si elle existe, cette fonction
reconstruit toutes les ressources d’un objet.
Le but de cette fonction __wakeup est de rétablit toutes les connexions aux bases de données, et de recréer les variables
qui n’ont pas été sauvées.
Références dans un constructeur
Créer des références dans un constructeur peut conduire à des résultats étranges. Ce tutorial vous guide pour éviter ces
problèmes.
<?php
class foo {
function foo($name) {
// crée une référence dans le tableau global $globalref
global $globalref;
$globalref[] = &$this;
// donne le nom de la variable
$this->setName($name);
// et l’affiche
$this->echoName();
}
function echoName() {
echo "<br>",$this->Name;
}
function setName($name) {
$this->Name = $name;
}
}
?>
Vérifions maintenant qu’il y a une différence entre $bar1 qui a été créé avec = et $bar2 qui a été créé avec l’opérateur de
référence =& :
<?php
$bar1 = new foo(’crée dans le constructeur’);
$bar1->echoName();
$globalref[0]->echoName();
/* affiche :
crée dans le constructeur
crée dans le constructeur
crée dans le constructeur */
$bar2 =&new foo(’crée dans le constructeur’);
$bar2->echoName();
$globalref[1]->echoName();
/* affiche :
crée dans le constructeur
crée dans le constructeur
crée dans le constructeur */
?>
130
Chapitre 13. Les classes et les objets
Apparament, il n’y a pas de différence, mais en fait, il y en a une significative : $bar1 et $globalref[0] ne sont pas
référencées, ces deux variables sont différentes. Cela est du au fait que l’opérateur "new"ne retourne par de référence, mais
retourne une copie.
Note : Il n’y a aucune perte de performance (puisque PHP 4 utilise un compteur de référence) à retourner des copies
au lieu de références. Au contraire, il est souvent mieux de travailler sur les copies plutôt que sur les références, car
créer une référence prend un peu plus de temps que de créer une copie qui ne prend virtuellement pas de temps (à
moins de créer un tableau géant ou un objet monstreux, auquel cas il est préférable de passer par des références).
Pour prouver ceci, regardez le code suivant :
<?php
// maintenant, nous allons changer de nom. Qu’attendez-vous?
// Vous pouvez vous attendre à ce que les deux variables $bar
// et $globalref[0] changent de nom...
$bar1->setName(’modifié’);
// comme prédit, ce n’est pas le cas
$bar1->echoName();
$globalref[0]->echoName();
/* affiche :
crée dans le constructeur
modifié */
// quelle est la différence entre $bar2 et $globalref[1]
$bar2->setName(’modifié’);
// Heureusement, elles sont non seulement égales, mais
// elles représentent la même variable.
// donc $bar2->Name et $globalref[1]->Name sont les mêmes
$bar2->echoName();
$globalref[1]->echoName();
/* affiche :
modifié
modifié */
?>
Un dernier exemple pour bien comprendre.
<?php
class a {
function a($i) {
$this->value = $i;
// Essayez de comprendre on n’a pas besoin de
// référence ici
$this->b = new b($this);
}
function createRef() {
$this->c = new b($this);
}
function echoValue() {
echo "<br>","class ",get_class($this),’: ’,$this->value;
}
}
class b {
function b(&$a) {
$this->a = &$a;
}
function echoValue() {
echo "<br>","class ",get_class($this),’: ’,$this->a->value;
}
}
// Essayez de comprendre pourquoi une copie simple va
// conduire à un résultat indésirable à
// la ligne marquée d’une étoile
$a =&new a(10);
$a->createRef();
131
Chapitre 13. Les classes et les objets
$a->echoValue();
$a->b->echoValue();
$a->c->echoValue();
$a->value = 11;
$a->echoValue();
$a->b->echoValue(); // *
$a->c->echoValue();
/*
output:
class a: 10
class b: 10
class b: 10
class a: 11
class b: 11
class b: 11
*/
?>
132
Chapitre 14. Les références
133
Chapitre 14. Les références
Qu’est ce qu’une référence?
En PHP, les références sont destinées à appeler le contenu d’une variable avec un autre nom. Ce n’est pas comme en C : ici,
les références sont des alias dans la table des symboles. Le nom de la variable et son contenu ont des noms différents, ce
qui fait que l’on peut donner plusieurs noms au même contenu. On peut faire l’analogie avec les fichiers sous Unix, et leur
nom de fichier : les noms des variables sont les entrées dans un repertoire, tandis que le contenu de la variable est le
contenu même du fichier. Faire des références en PHP revient alors à faire des liens sous Unix.
Que font les références ?
Les références vous permettent de faire pointer deux variables sur le même contenu. Par exemple, lorsque vous faites :
<?php
$a =& $b
?>
cela signifie que $a et $b pointent sur la même variable.
Note : $a et $b sont complètement égales ici : ce n’est pas $a qui pointe sur $b, ou vice versa. C’est bien $a et $b qui
pointent sur le même contenu.
La même syntaxe peut être utilisée avec les fonctions qui retournent des références, et avec l’opérateur new (PHP 4.0.4 et
plus récent):
<?php
$bar =& new fooclass();
$foo =& find_var ($bar);
?>
Note : A moins d’utiliser la syntaxe ci-dessus, le résultat de $bar = new fooclass() ne sera pas la même variable
que $this dans le constructeur, ce qui signifie que si vous avez utilisé la référence $this dans le constructeur, vous
devez assigner la référence, ou bien obtenir deux objets différents.
Le deuxième intérêt des références est de pouvoir passer des variables par référence. On réalise ceci en faisant pointer des
variables locales vers le contenu des variables de fonction. Exemple :
<?php
function foo(&$var) {
$var++;
}
$a=5;
foo($a);
?>
$a vaut 6. Cela provient du fait que dans la fonction foo, la variable $var pointe sur le même contenu que $a. Voir aussi
les explications détaillées dans passage par référence.
Le troisième intérêt des références est de retourner des valeurs par référence.
Ce que les références ne sont pas
Comme précisé ci-dessus, les références ne sont pas des pointeurs. Cela signifie que le script suivant ne fera pas ce à quoi
on peut s’attendre :
<?php
function foo(&$var) {
$var =& $GLOBALS["baz"];
}
134
Chapitre 14. Les références
foo($bar);
?>
Il va se passer que $var dans foo() sera lié à $bar, mais il sera aussi relié à $GLOBALS["baz"]. Il n’y a pas moyen de lier
$bar à quelque chose d’autre en utilisant le mécanisme de référence, car $bar n’est pas accessible dans la fonction foo()
(certes, il est représenté par $var et $var possède la même valeur, mais n’est pas relié par la table des symboles).
Passage par référence
Vous pouvez passer des variables par référence, de manière à ce que la fonction modifie ses arguments. La syntaxe est la
suivante :
<?php
function foo(&$var) {
$var++;
}
$a=5;
foo ($a);
// $a vaut 6 maintenant
?>
Notez qu’il n’y a pas de signe de référence dans l’appel de la fonction, uniquement sur sa définition. La définition de la
fonction est suffisante pour passer correctement des arguments par référence.
Les objets suivants peuvent être passés par référence :
•
Une variable, i.e. foo($a)
•
Un nouvel objet, i.e. foo(new foobar())
•
Une référence, retournée par une fonction :
<?php
function &bar() {
$a = 5;
return $a;
}
foo(bar());
?>
Voir aussi des détails dans retourner des références.
Toutes les autres expressions ne doivent pas être passées par référence, car le résultat sera indéfini. Par exemple, les
passages par référence suivants sont invalides :
<?php
function bar() // Notez l’absence de &
{
$a = 5;
return $a;
}
foo(bar);
foo($a = 5) // Expression, pas une variable
foo(5) // Constante, pas une variable
?>
Ces fonctionnalités sont valables à partir de PHP 4.0.4.
135
Chapitre 14. Les références
Retourner des références
Retourner des références est toujours utile lorsque vous voulez utiliser une fonction pour savoir à quoi est liée une variable.
Lorsque vous retournez une variable par paramètre, utilisez le code suivant
<?php
function &find_var($param) {
//
...code...
return $found_var;
}
$foo =& find_var ($bar);
$foo->x = 2;
?>
Dans cet exemple, la propriété de l’objet est retournée dans find_var et lui sera affectée, et non pas à la copie, comme
cela sera le cas avec une syntaxe par référence.
Note : Contrairement au passage de paramètre, vous devez utiliser & aux deux endroits, à la fois pour indiquer que
vous retournez par référence (pas une copie habituelle), et pour indiquer que vous assignez aussi par référence (pas
la copie habituelle).
Détruire une référence
Lorsque vous détruisez une référence, vous ne faites que casser le lien entre le nom de la variable et son contenu. Cela ne
signifie pas que le contenu est détruit. Par exemple,
<?php
$a = 1;
$b =& $a;
unset ($a);
?>
Cet exemple ne détruira pas $b, mais juste $a.
Encore une fois, on peut comparer cette action avec la fonction unlink d’Unix.
Repérer une référence
De nombreuses syntaxes de PHP sont implémentées via le mécanisme de référence, et tout ce qui a été vu concernant les
liaisons entre variables s’applique à ces syntaxes. Par exemple, le passage et le retour d’arguments par référence. Quelques
autres exemples de syntaxes :
Références globales
Lorsque vous déclarez une variable global $var, vous créez en fait une référence sur une variable globale. Ce qui signifie
que
<?php
$var =& $GLOBALS["var"];
?>
Et que, si vous détruisez la variable $var, la variable globale ne sera pas détruite.
136
Chapitre 14. Les références
$this
Dans une méthode d’objet $this est toujours une référence sur l’objet courant.
137
Partie III. Caractéristiques
Chapitre 15. Gestion des erreurs
138
Chapitre 15. Gestion des erreurs
Il y a plusieurs types d’erreur et d’alerte.
Tableau 15-1. Types d’erreur PHP
Valeur
Constante
Description
1
E_ERROR
Erreur fatale d’exécution
Note
2
E_WARNING
Alerte d’exécution ( erreur
non-fatale )
4
E_PARSE
Erreur de compilation
8
E_NOTICE
Notes d’exécution (moins
critique que les alertes)
16
E_CORE_ERROR
Erreurs qui surviennent lors de PHP 4 seulement
l’initialisation de PHP
32
E_CORE_WARNING
Alertes qui surviennent lors
de l’initialisation de PHP
PHP 4 seulement
64
E_COMPILE_ERROR
Erreur fatale de compilation
PHP 4 seulement
128
E_COMPILE_WARNING
Alerte de compilation (erreur PHP 4 seulement
non fatale)
256
E_USER_ERROR
Erreur générée par l’utilisateurPHP 4 seulement
512
E_USER_WARNING
Alerte générée par l’utilisateurPHP 4 seulement
1024
E_USER_NOTICE
Note générée par l’utilisateur PHP 4 seulement
E_ALL
Toutes les erreurs ci dessus
Les valeurs ci-dessus (numériques ou symbolique) sont utilisée pour construire un champs de bit, qui spécifie quelles
erreurs rapporter. Vous pouvez utiliser les opérateurs de bits pour combiner ces valeurs et masquer uniquement celle qui
vous interesse Notez que seuls, ’|’, ’~’, ’!’, et ’&’ seront utilisables dans php.ini, et qu’aucun opérateur ne sera utilisable
dans php3.ini.
En PHP 4, la valeur par défaut de error_reporting est à E_ALL & ~E_NOTICE, ce qui signifie que toutes les erreurs et
alertes seront affichées, mais pas les notes. En PHP 3, la valeur par défaut est (E_ERROR | E_WARNING | E_PARSE),
c’est à dire la même chose. Notez bien que ces constantes ne sont pas supportées dans le fichier php3.ini de PHP 3, la
valeur de error_reporting doit être numériques, c’est à dire 7.
La valeur initiale peut être modifiée dans le fichier .ini, avec la directive error_reporting, dans le fichier de configuration
d’Apache httpd.conf, avec la directive php_error_reporting (php3_error_reporting pour PHP 3), et enfin, dans le script
même, en utilisant la fonction error_reporting().
Avertissement
Lorsque vous portez votre code ou vos serveurs de PHP 3 en PHP 4 vous devez vérifier les options et
les appels à error_reporting(). Sinon, vous courrez le risque d’inactiver certains types d’erreurs et
notamment E_COMPILE_ERROR. Cela peut conduire à des documents vides, sans aucun retour
d’erreur.
Toutes les expressions PHP peuvent être appelée avec le préfixe "@", qui annule le rapport d’erreur pour cette expression
en particulier. Si une erreur survient durant une telle expression, et que l’option de suivi des erreurs est activée, vous
pourrez trouver le message d’erreur dans la variable globale, $php_errormsg.
Note : Le préfixe opérateur @ ne supprimera pas les messages liés aux erreurs d’analyse.
139
Chapitre 15. Gestion des erreurs
Avertissement
Actuellement, le préfixe @, opérateur de rapport d’erreur désactive tous les rapports, y compris les
erreurs critiques qui interrompent le script. Entre autre, cela signifique que si vous utilisez @ pour
supprimer des erreurs dans une fonction qui n’existe pas, ou qui a été mal orthographiée, le script sera
terminé sans aucune indication.
Ci dessous, voici un exemple de gestion des erreurs avec PHP. On définit une fonction de gestion des erreurs qui enregistre
les informations dans un fichier (au format XML), et email le développeur en cas d’erreur critique.
Exemple 15-1. Utiliser le contrôle d’erreur dans un script
<?php
// Nous effectuons nous même notre contrôle d’erreur.
error_reporting(0);
// Fonction de gestion des erreurs utilisateur
function usererrorhandler($errno, $errmsg, $filename, $linenum, $vars) {
// timestamp pour dater l’erreur
$dt = date("Y-m-d H:i:s (T)");
// definit un tableau associatif avec les chaînes d’erreur
// en realité, les seules entrées que nous considérerons
// seront 2,8,256,512 et 1024
$errortype = array(
1
=> "Erreur",
2
=> "Alerte",
4
=> "Erreur d’analyse",
8
=> "Note",
16 => "Erreur interne",
32 => "Alerte interne",
64 => "Erreur de compilation",
128 => "Alerte de compilation",
256 => "Erreur utilisateur",
512 => "Alerte utilisateur",
1024=> "Note utilisateur"
);
// ensemble d’erreur pour lesquelles une trace sera conservée
$user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);
$err = "<errorentry>\n";
$err .= "\t<datetime>".$dt."</datetime>\n";
$err .= "\t<errornum>".$errno."</errnumber>\n";
$err .= "\t<errortype>".$errortype[$errno]."</errortype>\n";
$err .= "\t<errormsg>".$errmsg."</errormsg>\n";
$err .= "\t<scriptname>".$filename."</scriptname>\n";
$err .= "\t<scriptlinenum>".$linenum."</scriptlinenum>\n";
if (in_array($errno, $user_errors))
$err .= "\t<vartrace>".wddx_serialize_value($vars,"Variables")."</vartrace>\n";
$err .= "</errorentry>\n\n";
// pour test
// echo $err;
// sauve l’erreur dans le fichier, et emaile moi si l’erreur est critique
error_log($err, 3, "/usr/local/php4/error.log");
if ($errno == E_USER_ERROR)
mail("[email protected]","Critical User Error",$err);
}
function distance($vect1, $vect2) {
if (!is_array($vect1) || !is_array($vect2)) {
trigger_error("Paramètres incorrects : arrays attendus", E_USER_ERROR);
return NULL;
}
if (count($vect1) != count($vect2)) {
trigger_error("Les vecteurs doivent être de la même taille", E_USER_ERROR);
return NULL;
}
for ($i=0; $i<count($vect1); $i++) {
$c1 = $vect1[$i]; $c2 = $vect2[$i];
140
Chapitre 15. Gestion des erreurs
$d = 0.0;
if (!is_numeric($c1)) {
trigger_error("La coordonnée $i du vecteur 1 n’est pas un nombre. Remplacée par zéro",
E_USER_WARNING);
$c1 = 0.0;
}
if (!is_numeric($c2)) {
trigger_error("La coordonnée $i du vecteur 2 n’est pas un nombre. Remplacée par zéro",
E_USER_WARNING);
$c2 = 0.0;
}
$d += $c2*$c2 - $c1*$c1;
}
return sqrt($d);
}
$old_error_handler = set_error_handler("userErrorHandler");
// Constante indéfinie, génére une alerte
$t = I_AM_NOT_DEFINED;
// definition de quelques "vecteurs"
$a = array(2,3,"bla");
$b = array(5.5, 4.3, -1.6);
$c = array(1,-3);
// génère une erreur utilisateur
$t1 = distance($c,$b)."\n";
// génère une autre erreur utilisateur
$t2 = distance($b,"i am not an array")."\n";
// génère une alerte
$t3 = distance($a,$b)."\n";
?>
Ceci est un exemple simple, qui montre comment utiliser les fonctions de Gestions des erreurs.
Voir aussi error_reporting(), error_log(), set_error_handler(), restore_error_handler(), trigger_error(), user_error()
141
Chapitre 16. Création d’images
142
Chapitre 16. Création d’images
PHP n’est pas limité à la création de fichier HTML. Il peut aussi servir à créer des images GIF, PNG, JPG, wbmp et xpm, à
la volée, aussi bien pour les émettre que pour les sauver. Il faut alors compiler PHP avec la librairie GD. GD et PHP
requièrent aussi d’autres librairies, suivant le format d’images que vous voulez supporter. GD a cessé de supporter le
format GIF depuis la version 1.6.
Exemple 16-1. Création d’images GIF avec PHP
<?php
header("Content-type: image/png");
$string=implode($argv," ");
$im = imagecreatefrompng("images/button1.png");
$orange = imagecolorallocate($im, 220, 210, 60);
$px = (imagesx($im)-7.5*strlen($string))/2;
imagestring($im,3,$px,9,$string,$orange);
imagepng($im);
imagedestroy($im);
?>
Cet exemple sera appelé depuis une page HTML avec une balise telle que: <img src="button.php3?text">. Le script
ci-dessus récupère le texte de la chaîne $string et l’ajoute sur l’image de fond"images/button1.gif". Le résultat est alors
envoyé au client. C’est un moyen très pratique d’éviter d’avoir à redessiner des boutons à chaque fois que le texte du
bouton change. Avec ce script, il est généré dynamiquement.
143
Chapitre 17. Authentification HTTP avec PHP
144
Chapitre 17. Authentification HTTP avec PHP
Les fonctions d’authentification HTTP de PHP ne sont disponibles que si PHP est exécuté comme module Apache, et non
pas sous la forme d’un CGI. Sous cette forme, il est possible d’utiliser la fonction header() pour demander une
authentification ("Authentication Required" ) au client, générant ainsi l’apparition d’une fenêtre de demande d’utilisateur
et de mot de passe. Une fois que les champs ont été remplis, l’URL sera de nouveau appelée, avec les variables
$PHP_AUTH_USER, $PHP_AUTH_PW et $PHP_AUTH_TYPE contenant respectivement le nom d’utilisateur, le mot de passe
et le type d’authentification. Actuellement, seule l’authentification simple ("Basic") est supportée. Reportez vous à la
fonction header() pour plus d’informations.
Voici un exemple de script qui force l’authentification du client pour accéder à une page :
Exemple 17-1. Exemple d’authentication HTTP
<?php
if(!isset($PHP_AUTH_USER)) {
Header("WWW-Authenticate: Basic realm=\"My Realm\"");
Header("HTTP/1.0 401 Unauthorized");
echo "Texte à envoyer si le client appuie sur le bouton d’annulation\n";
exit;
} else {
echo "Bonjour $PHP_AUTH_USER.<P>"
echo "Vous avez entré le mot de passe $PHP_AUTH_PW.<P>"
}
?>
Au lieu d’afficher simplement les variables globales $PHP_AUTH_USER et $PHP_AUTH_PW, vous préférerez sÛrement
vérifier la validité du nom d’utilisateur et du mot de passe. Par exemple, en envoyant ces informations à une base de
données, ou en recherchant dans un fichier dbm.
Méfiez vous des navigateurs buggés, tels que Internet Explorer. Ils semblent très suceptibles concernant l’ordre des entêtes.
Envoyer l’entête d’authentification (WWW-Authenticate) avant le code de HTTP/1.0 401 semble lui convenir jusqu’à
présent.
Pour éviter que quelqu’un écrive un script qui révèle les mots de passe d’une page, à la quelle on a accédé par une
authentification traditionnelle, les variables globales PHP_AUTH ne seront pas assignées si l’authentification externe a été
activée pour cette page. Dans ce cas, la variable $REMOTE_USER peut être utilisée pour identifier l’utilisateur à l’extérieur.
Notez cependant que les manipulations ci-dessus n’empêchent pas quiconque qui possède une page non authentifiée de
voler les mots de passes des pages protégées, sur le même serveur.
Netscape et Internet Explorer effaceront le cache d’authentification client si ils recoivent une réponse 401. Cela permet de
déconnecter un utilisateur, pour le forcer à ré-entrer son nom de compte et son mot de passe. Certains programmeurs
l’utilisent pour donner un délai d’éxpiration, ou alors, fournissent un bouton de déconnexion.
Exemple 17-2. Authentification HTTP avec nom d’utilisateur/mot de passe forcé
<?php
function authenticate() {
Header( "WWW-Authenticate: Basic realm=\"Test Authentication System\"");
Header( "HTTP/1.0 401 Unauthorized");
echo "Vous devez entrer un nom d’utilisateur valide et un mot de passe correct pour accéder à cette ressource\n";
exit;
}
if(!isset($PHP_AUTH_USER) || ($SeenBefore == 1 && !strcmp($OldAuth, $PHP_AUTH_USER)) ) {
authenticate();
}
else {
echo "Bienvenue $PHP_AUTH_USER<BR>";
echo "Old: $OldAuth";
echo "<FORM ACTION=\"$PHP_SELF\" METHOD=POST>\n";
echo "<INPUT TYPE=HIDDEN NAME=\"SeenBefore\" VALUE=\"1\">\n";
echo "<INPUT TYPE=HIDDEN NAME=\"OldAuth\" VALUE=\"$PHP_AUTH_USER\">\n";
echo "<INPUT TYPE=Submit VALUE=\"Re Authenticate\">\n"
echo "</FORM>\n";
145
Chapitre 17. Authentification HTTP avec PHP
}
?>
Ce comportement n’est pas nécessaire par le standard d’authentification HTTP Basic. Les tests avec Lynx ont montré qu’il
n’affectait pas les informations de session lors de la réception d’un message de type 401, ce qui fait que passer ces
informations entre le serveur et le client, et donnera l’accès à la ressource. Cependant, l’utilisateur peut utiliser la touche
’_’ pour détruire les anciennes autentifications.
Notez aussi que tout ceci ne fonctionne pas sous Microsoft IIS et que les limitations de PHP en version CGI sont dues aux
limitations de IIS.
146
Chapitre 18. Cookies
147
Chapitre 18. Cookies
PHP supporte les cookies de manière transparente. Les cookies sont un mécanisme d’enregistrement d’informations sur le
client, et de lecture de ces informations. Ce système permet d’authentifier et de suivre les visiteurs. Vous pouvez envoyer
un cookie avec la commande setcookie(). Les cookies font partie de l’entête HTTP, ce qui impose que setcookie() soit
appelé avant tout affichage sur le client. Ce sont les mêmes limitations que pour header().
Tous les cookies qui sont envoyés au client seront automatiquement retournés au script PHP, et transformés en variable,
exactement comme pour GET et POST. Si vous souhaitez affecter plusieurs valeurs à un seul cookie, ajoutez[] au nom du
cookie. Pour plus details, reportez vous à la fonction setcookie().
148
Chapitre 19. Gestion des chargements de fichier
149
Chapitre 19. Gestion des chargements de fichier
Chargements de fichiers par méthode POST
PHP est capable de recevoir des fichiers émis par un navigateur conforme à la norme RFC-1867 (c’est-à-dire Netscape
Navigator 3 ou supérieur, Microsoft Internet Explorer 3 avec un patch de Microsoft, ou supérieur sans le patch). Cette
fonctionnalité permet de charger des fichiers textes ou binaires. Avec l’authentification et les fonctions de manipulation des
fichiers, vous avez un contrôle total sur le chargement et la gestion des fichiers chargés.
Notez bien que PHP supporte aussi le chargement par la méthode PUT comme dans le navigateur Netscape Composer et
les clients Amaya du W3C. Reportez-vous au chapitre sur le support de la méthode PUT.
Un écran de chargement de fichiers peut être constitué en créant un formulaire de la manière suivante :
Exemple 19-1. Formulaire de chargement de fichier
<FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD="POST">
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000">
Envoyez ce fichier : <INPUT NAME="userfile" TYPE="file">
<INPUT TYPE="submit" VALUE="Send File">
</FORM>
Le paramètre _URL_ doit pointer sur un fichier PHP. L’option MAX_FILE_SIZE cachée doit précéder le nom du fichier à
charger, et représente la taille maximale du fichier à charger. La valeur est donnée en octets. Dans ce script, les valeurs
suivantes doivent être définies pour assurer un chargement correct :
En PHP 3, les variables suivantes seront définies dans le script de destination, en cas de téléchargement réussi, et en
supposant que register_globals est activé dans le fichier php.ini. Si track_vars est activé, elles seront aussi disponibles
dans le dossier $HTTP_POST_VARS. Notez que les noms des variables suivantes supposent que nom du fichier téléchargé
est ’userfile’, comme présenté dans l’exemple ci-dessus.
•
$userfile - Le nom temporaire du fichier qui sera chargé sur la machine serveur.
•
$userfile_name - Le nom du fichier original sur le système de l’envoyeur.
•
$userfile_size - La taille du fichier envoyé en octets.
•
$userfile_type - Le type MIME du fichier, si le navigateur a fourni cette information. Par exemple, "image/gif".
Notez que "$userfile" prend la valeur qui est passée dans le champs INPUT de type TYPE=file. Dans l’exemple ci-dessus,
nous avons choisi de l’appeler "userfile".
En PHP 4, le comportement est légèrement différent, car c’est la variable d’environnement $HTTP_POST_FILES, qui
contiendra les informations sur les fichiers téléchargés. Ces informations sont disponibles dans si l’option track_vars est
activée, mais track_vars est toujours activée dans les versions de PHP supérieures à la version 4.0.2.
Le contenu du tableau $HTTP_POST_FILES décrit ci-dessous. Notez que l’on suppose ici que le nom du fichier téléchargé
est ’userfile’, comme présenté dans l’exemple ci-dessus :
$HTTP_POST_FILES[’userfile’][’name’]
Le nom du fichier original sur la machine source.
$HTTP_POST_FILES[’userfile’][’type’]
Le type MIME du fichier, si le navigateur a fourni cette information. Par exemple, "image/gif".
$HTTP_POST_FILES[’userfile’][’size’]
La taille du fichier envoyé, en octets.
$HTTP_POST_FILES[’userfile’][’tmp_name’]
Le nom temporaire du fichier qui sera chargé sur la machine serveur.
Les fichiers seront enregistrés par défaut dans le dossier des fichiers temporaires, à moins qu’un autre dossier n’ait été
fourni avec la directive de configuration upload_tmp_dir du fichier php.ini. Le dossier par défaut du serveur peut être
modifié grâce à la variable d’environnement TMPDIR, de l’utilisateur qui exécute PHP. Sa modification avec putenv()
depuis un script PHP ne fonctionnera pas. Cette variable d’environnement peut aussi être utilisée pour s’assurer que
d’autres opérations fonctionnent avec les fichiers téléchargés.
150
Chapitre 19. Gestion des chargements de fichier
Exemple 19-2. Validation de fichiers téléchargés
Les exemples suivants fonctionnent sur les versions de PHP 3 supérieures à la version 3.0.16, et supérieures à la version
4.0.2 pour PHP 4. Reportez-vous à la section des fonctions pour étudier is_uploaded_file() et move_uploaded_file().
<?;php
if (is_uploaded_file($userfile)) {
copy($userfile, "/dossier/des/fichiers/telecharges/");
} else {
echo "Attaque potentielle par fichier téléchargé : fichier ’$userfile’.";
}
/* ...ou... */
move_uploaded_file($userfile, "/dossier/des/fichiers/telecharges");
?>
Pour les versions plus anciennes de PHP, vous devrez faire quelque chose comme ceci :
<?;php
/* Test du fichier téléchargé. */
function is_uploaded_file($filename) {
if (!$tmp_file = get_cfg_var(’upload_tmp_dir’)) {
$tmp_file = dirname(tempnam(”, ”));
}
$tmp_file .= ’/’ . basename($filename);
/* L’utilisateur peut avoir un slash final dans php.ini... */
return (ereg_replace(’/+’, ’/’, $tmp_file) == $filename);
}
if (is_uploaded_file($userfile)) {
copy($userfile, "/place/to/put/uploaded/file");
} else {
echo "Attaque potentielle par fichier téléchargé : fichier ’$userfile’.";
}
?>
Note : Cela ne fonctionnera PAS avec les versions de PHP 4 supérieure à 4.0.2. Cela repose sur des fonctionnalités
internes à PHP qui ont évolué après cette version.
Le script PHP qui reçoit le fichier chargé doit pouvoir gérer le fichier de manière appropriée. Vous pouvez utiliser la
variable $file_size pour recaler tous les fichiers qui sont trop gros ou trop petits. Vous pouvez utiliser la variable
$file_type pour recaler les fichiers qui n’ont pas le bon type. Quelques soient les actions, ce script doit pouvoir
supprimer le fichier du dossier temporaire, ou le déplacer ailleurs.
Le fichier sera automatiquement effacé du fichier temporaire à la fin du script, s’il n’a pas été déplacé ou renommé.
Erreurs classiques
La variable MAX_FILE_SIZE ne peut pas spécifier une taille de fichier plus grande que la taille qui a été fixée par
upload_max_filesize, dans le fichier php3.ini, ou par php3_upload_max_filesize dans les directives Apache. La valeur
par défaut est 2 mégaoctets.
Ne pas valider les fichiers que vous manipulez peut donner l’accès aux utilisateurs à des fichiers sensibles dans d’autres
dossiers!
Attention : il semble que CERN httpd supprime tout ce qui est après le premier caractère dans l’en-tête MIME. Tant que
c’est le cas, CERN httpd ne pourra pas effectuer de chargement.
151
Chapitre 19. Gestion des chargements de fichier
Chargement multiples de fichiers
Il est possible de charger plusieurs fichiers en même temps, et de recevoir les informations adéquates organisées sous
forme de tableau. Pour ce faire, il faut utiliser la même syntaxe d’envoi dans le code HTML que pour les sélections ou
boîtes à cocher multiples.
Note : Le support du chargement multiple de fichier a été ajouté dans la version 3.0.10.
Exemple 19-3. Chargement multiple de fichier
<form action="file-upload.html" method="post" enctype="multipart/form-data">
Send these files:<br>
<input name="userfile[]" type="file"><br>
<input name="userfile[]" type="file"><br>
<input type="submit" value="Send files">
</form>
Lorsque le formulaire ci-dessus a étéF envoyé, les tableaux $userfile, $userfile_name, et $userfile_size seront
initialisés (ainsi que $HTTP_POST_VARS). Chaque tableau sera de type numérique, et contiendra les valeurs appropriées
pour le chargement des fichiers.
Par exemple, supposons que les noms de fichier /home/test/review.html et /home/test/xwp.out soient envoyés.
Dans ce cas, $userfile_name[0] va contenir review.html, et $userfile_name[1] contiendra xwp.out.
Similairement, $userfile_size[0] contiendra la taille de review.html, etc...
$userfile[’name’][0], $userfile[’tmp_name’][0], $userfile[’size’][0], et $userfile[’type’][0]
sont aussi affectés.
Chargement par méthode PUT
PHP supporte la méthode HTTP PUT utilisée par les navigateurs tels que Netscape Composer et W3C Amaya. Les
requêtes de type PUT sont beaucoup plus simples que les chargements de fichiers, et elles ressemblent à :
PUT /path/filename.html HTTP/1.1
Normalement, cela signifie que le client distant va sauver les données qui suivent dans le fichier: /path/filename.html
de votre disque. Ce n’est évidemment pas très sécurisé de laisser Apache ou PHP écraser n’importe quel fichier de
l’arborescence. Pour éviter ceci, il faut d’abord dire au serveur que vous voulez qu’un script PHP donné gère la requête.
Avec Apache, il y a une directive pour cela : Script. Elle peut être placée n’importe où dans le fichier de configuration
d’Apache. En général, les webmestres la place dans le bloc <Directory>, ou peut être dans le bloc <Virtualhost>. La ligne
suivante fera très bien l’affaire :
Script PUT /put.php3
Elle indique à Apache qu’il doit envoyer les requêtes de chargement par méthode PUT au script put.php3. Bien entendu,
cela présuppose que vous avez activé PHP pour qu’il prenne en charge les fichiers de type .php3, et que PHP est actif.
Dans le fichier put.php3 file vous pouvez mettre ceci :
<?php
copy($PHP_UPLOADED_FILE_NAME,$DOCUMENT_ROOT.$REQUEST_URI);
?>
152
Chapitre 19. Gestion des chargements de fichier
Ce script va copier le fichier chargé par le client distant à l’endroit désiré. Vous aurez probablement à effectuer quelques
tests et des authentifications d’utilisateur, avant d’effectuer cette copie. Le seul piège est que lorsque PHP reçoit un
chargement par méthode PUT, il va enregistrer le fichier dans le dossier temporaire, tout comme avec la méthode
POST-method. A la fin de la requête, le fichier sera effacé. Ce qui fait que ce script doit placer le fichier chargé quelque
part. Le nom du fichier temporaire est placé dans la variable globale $PHP_PUT_FILENAME, et la destination prévue est
placée dans $REQUEST_URI (ces noms peuvent changer d’une configuration d’Apache à l’autre). Cette destination est celle
qui est demandée par le client, et vous n’avez pas à obéir aveuglément au client. Vous pourriez par exemple, déplacer le
fichier dans un dossier de chargement.
153
Chapitre 20. Utilisation des fichiers à distance
154
Chapitre 20. Utilisation des fichiers à distance
Aussi longtemps que le support de la fonction d’ouverture générique de fichiers ("URL fopen wrapper") est actif lorsque
vous configurez PHP (il est inutile de passer explicitement l’option --disable-url-fopen-wrapper pour faire la
configuration), vous pouvez utiliser des URLs (HTTP et FTP) avec la plupart des fonctions qui utilisent un nom de fichier
comme paramètre, ceci incluant les expressions require() et include().
Note : Vous ne pouvez pas utiliser les fichiers distants dans les expressions include() et require() avec Windows.
Par exemple, vous pouvez suivre l’exemple suivant pour ouvrir un fichier sur un serveur web distant, analyser les résultats
pour extraire les informations dont vous avez besoin, et ensuite l’utiliser dans une requête de base de données, ou
simplement éditer les informations dans le style de votre site.
Exemple 20-1. Connaître le titre d’une page distante
<?;php
$file = fopen("http://www.php.net/", "r");
if (!$file) {
echo "<p>Impossible d’ouvrir le fichier distant.\n";
exit;
}
while (!feof($file)) {
$line = fgets($file, 1024);
/* Cela ne fonctionne que site le titre est écrit sur une ligne.*/
if (eregi("<title>(.*)</title>", $line, $out)) {
$title = $out[1];
break;
}
}
fclose($file);
?>
Vous pouvez aussi écrire des fichiers sur un serveur FTP aussi longtemps que vous êtes connecté avec un utilisateur ayant
les bons droits d’accès, alors que le fichier n’existait pas encore. Pour vous connecter avec un utilisateur autre qu’anonyme,
vous devez spécifier un nom d’utilisateur (et certainement le mot de passe) dans l’URL, comme par exemple
’ftp://user:[email protected]/path/to/file’. (Vous pouvez utiliser le même type de syntaxe pour accéder aux
fichiers via HTTP lorsqu’ils nécessitent une authentification basique.)
Exemple 20-2. Stocker des données sur un serveur distant
<?;php
$file = fopen("ftp://ftp.php.net/incoming/outputfile", "w");
if (!$file) {
echo "<p>Impossible d’ouvrir un fichier distant en écriture.\n";
exit;
}
/* Ecriture des données. */
fputs($file, "$HTTP_USER_AGENT\n");
fclose($file);
?>
Note : Remarque: Vous pouvez avoir l’idée,à partir de l’exemple ci-dessus, d’utiliser la même technique pour écrire sur
un log distant, mais comme mentionné ci-dessus vous ne pouvez qu’écrire sur un nouveau fichier en utilisant les
fonctions fopen() avec une URL. Pour faire des log distribués, nous vous conseillons de regarder la partie syslog().
155
Chapitre 21. Gestion des connexions
156
Chapitre 21. Gestion des connexions
Note : Les informations suivantes ne sont valables qu’à partir de la version 3.0.7.
Le statut des connexions est conservé en interne par PHP. Il y a trois états possibles :
•
0 - NORMAL (normal)
•
1 - ABORTED (annulé)
•
2 - TIMEOUT (périmé)
Lorsqu’un script PHP est en cours d’exécution, son état est NORMAL. Si le client distant se déconnecte, le statut devient
ABORTED. En général, une telle déconnexion provient d’un arrêt temporaire. Si la durée maximale d’exécution de PHP
est dépassée, (voir set_time_limit()), le script prend le statut TIMEOUT.
Vous pouvez en outre, décider si vous voulez que la déconnexion d’un client provoque l’arrêt de votre script. Il est parfois
pratique de terminer le script, même si le client n’est plus là pour recevoir les informations. Cependant, par défaut, le script
sera interrompu, et terminé dès que le client se déconnecte. Ce comportement peut être modifié avec la directive
ignore_user_abort dans le fichier php.ini ou bien avec la directive Apache ignore_user_abort du fichier Apache
httpd.conf ou avec la fonction ignore_user_abort(). Si vous ne demandez pas à PHP d’ignorer la déconnexion, et que
l’utilisateur se déconnecte, le script sera terminé. La seule exception est si vous avez enregistré une fonction de fermeture,
avec register_shutdown_function(). Avec une telle fonction, lorsque l’utilisateur interromp sa requête, à la prochaîne
exécution du script, PHP va s’apercevoir que le dernier script n’a pas été terminé, et il va déclencher la fonction de
fermeture. Cette fonction sera aussi appelée à la fin du script, si celui-ci se termine normalement. Pour pouvoir avoir un
comportement différent suivant l’état du script lors de sa finalisation, vous pouvez exécutez des commandes spécifiques à
la déconnexion grâce à la commande connection_aborted(). Cette fonction retournera TRUE si la connexion a été annulée.
Votre script peut aussi éxpirer après un laps de temps. Par défaut, le délai est de 30 secondes. Cette valeur peut être
changée en utilisant la directive PHP max_execution_time dans le fichier php.ini ou avec la directive
php3_max_execution_time, dans le fichier Apache .conf ou encore avec la fonction set_time_limit(). Lorsque le
délai éxpire, le script est terminé, et comme pour la déconnexion du client, une fonction de finalisation sera appelée. Dans
cette fonction, vous pouvez savoir si c’est le délai d’éxpiration qui a causé la fin du script, en appelant la fonction
connection_timeout(). Cette fonction retournera vrai si le délai d’éxpiration a été dépassé.
Une chose à noter et que les deux cas ABORTED et TIMEOUT peuvent être appelés en même temps. Ceci est possible si
vous demandez à PHP d’ignorer les déconnexions des utilisateurs. PHP va quand même noter le fait que l’utilisateur s’est
déconnecté, mais le script va continuer. Puis, lorsqu’il atteint la limite de temps, le script va éxpirer. A ce moment là, les
deux fonctions connection_timeout() et connection_aborted() vont retourner TRUE. Vous pouvez aussi vérifier les deux
états en un seul appel avec la fonction connection_status(). Cette fonction va retourner un champs de bits, avec les états.
Si les deux états sont actifs, l’état retourné prendra la valeur 3.
157
Chapitre 22. Connexions persistantes aux bases de
données
158
Chapitre 22. Connexions persistantes aux bases de données
Les connexions persistantes aux bases de données SQL sont des connexions qui ne se referment pas à la fin du script.
Lorsqu’une connexion persistante est demandée, PHP s’assure qu’il n’y a pas une autre connexion identique (qui serait
ouverte précédemment, avec le même nom d’hôte, d’utilisateur et le même mot de passe), et si une telle connexion existe,
elle est utilisée. Sinon, elle est créée. Une connexion identique est une connexion qui a ouvert le même hôte, avec le même
nom et même mot de passe (si ils sont nécessaires).
Ceux qui ne sont pas rompus aux techniques des serveurs web et leur distribution de la charge de travail, se font parfois une
fausse idée de ces connexions persistantes. En particulier, les connexions persistantes ne permettent pas l’ouverture de
plusieurs sessions avec le même lien, ne permettent pas la réalisation de transactions efficaces et ne font pas le café. En
fait, pour être extrêmement clair sur le sujet, les connexions persistantes ne vous donnent aucune fonctionnalité de plus que
les connexions non persistantes.
Alors pourquoi?
Cela s’explique par la manière avec laquelle les serveurs web fonctionnent. Il y a trois manières d’utiliser PHP pour
générer des pages.
La première est d’utiliser PHP comme un CGI (Common Interface Gateway). Lorsque PHP fonctionne de cette manière,
une instance de l’interpréteur PHP est créée puis détruit pour chaque page demandée. Etant donné qu’il est détruit après
chaque requête, toutes les ressources acquises (comme une connexion à une base SQL), sont purement et simplement
détruites.
La deuxième méthode, et de loin, la plus prisée, est d’exécuter PHP sous la forme d’un module sur un serveur
multi-process, ce qui revient à dire : Apache. Un tel serveur a typiquement un processus parent qui coordonne un ensemble
de processus fils, qui servent les fichiers. Lorsque les requêtes parviennent depuis un client, elles sont transmises à un fils
disponible. Cela signifie que si un client fait une deuxième requête, il peut être servi par un processus client différent du
premier. Les connexions persistantes vous permettent alors de ne vous connecter à une base SQL que la première fois. Lors
des connexions ultérieures, les processus fils pourront réutiliser la connexion ouverte précédemment.
La dernière méthode est d’utiliser PHP sous la forme d’un module de serveur multi-threads. Actuellement, PHP 4 support
ISAPI, WSAPI, et NSAPI (sous Windows), qui permettent tous d’utiliser PHP comme un module sur un serveur
multi-thread tel que Netscape FastTrack, Microsoft’s Internet Information Server (IIS), et O’Reilly’s WebSite Pro. Le
comportement est essentiellement le même que pour les serveurs multi-process décrit précédemment. Notez que SAPI
n’est pas possible avec PHP 3.
Si les connexions persistantes n’ont aucune fonctionnalité de plus, à quoi servent-elles?
La réponse est extrêmement simple : efficacité. Les connexions persistantes sont un bon moyen d’accélérer les accès à une
base SQL si le traitement de connexion à la base est long. Ce temps dépend de nombreux facteurs : le type de base de
données, cette base est-elle sur le même serveur ou pas, quelle est la charge du serveur de base de données, etc... Si le
temps de connexion est long, les connexions persistantes seront bien utiles, car une fois ouverte par un processus fils, la
connexion est réutilisable sans avoir à se reconnecter. Si vous avez 20 processus fils, il suffit d’avoir 20 connexions
persistantes ouvertes, une par fils.
Notez que les connexions persistantes ont quelques inconvénients si vous hébergez une base de données, dont le nombre
maximal de connexion risque d’être atteint par les connexions persistantes. Si votre base de données accepte jusqu’à 16
connections simultanées et que, 17 processus essaient de se connecte, le dernier restera sur la touche. Si il y a des erreurs
dans les scripts qui ne permettent pas de fermer la connexion (par exemple, une boucle infinie), votre serveur sera
rapidement engorgé. Vérifier la documentation de votre base de données pour savoir comment elle traite les connexions
inactives ou abandonnées.
Résumons nous : les connexions persistantes ont été définies pour avoir les mêmes fonctionnalités que les connexions non
persistantes. Les deux types de connexions sont parfaitement interchangeables, et n’affecteront pas le comportement de
votre script : uniquement son efficacité.
159
Chapitre 23. Safe mode
160
Chapitre 23. Safe mode
Le "Safe Mode" est le mode de sécurité de PHP : une solution au problème de partage de PHP sur un serveur. Ce système
pêche au niveau de l’architecture car il n’est pas correct de tenter de résoudre ce problème au niveau de PHP, mais les
solutions alternatives basées sur le serveur web et l’OS ne sont pas réalistes. De nombreux acteurs, notamment les
fournisseurs d’hébergement, utilise le "Safe Mode".
Les directives de configuration qui contrôlent le safe mode sont :
safe_mode = Off
open_basedir =
safe_mode_exec_dir =
safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
disable_functions =
Lorsque safe mod est actif, PHP vérifie que le propriétaire du script courant est le même que le propriétaire de fichier qui
seront manipulé par ce script. Par exemple, si on a la situation suivante :
-rw-rw-r--rw-r--r-
1 rasmus
1 root
rasmus
root
33 Jul 1 19:20 script.php
1116 May 26 18:01 /etc/passwd
Exécuter le script script.php
<?php
readfile(’/etc/passwd’);
?>
générera cette erreur, si le safe mode est activé :
Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not
allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on line 2
Si vou utilisez la directive open_basedir au lieu du safe mode, alors les manipulations seront limitées aux fichiers situés
dans les dossiers spécifiés. Par exemple :
<Directory /docroot>
php_admin_value open_basedir /docroot
</Directory>
Si vous exécutez le script script.php ci-dessus avec la configuration d’open_basedir le résultat sera l’affichage suivant :
Warning: open_basedir restriction in effect. File is in wrong directory in
/docroot/script.php on line 2
Vous pouvez aussi désactiver individuellement les fonctions. Par exemple, en ajoutant cette ligne dans le fichier php.ini :
disable_functions readfile,system
toute utilisation des fonctions readfile() et system() générera l’affichage suivant :
Warning: readfile() has been disabled for security reasons in
/docroot/script.php on line 2
161
Partie IV. Index des fonctions
I. Apache
162
Apache
ascii2ebcdic (PHP 3>= 3.0.17)
Transforme une chaîne ASCII en EBCDIC
int ascii2ebcdic (string ascii_str)
ascii2ebcdic() est une fonction spéficique à Apache, qui n’est disponible que sur les OS qui gèrent le format EBCDIC
(OS/390, BS2000). Elle traduit la chaîne ASCII ascii_str en son équivalent EBCDIC (avec protection des données
binaires) et retourne le résultat.
Voir aussi ebcdic2ascii()
ebcdic2ascii (PHP 3>= 3.0.17)
Transforme une chaîne EBCDIC en ASCII
int ebcdic2ascii (string ebcdic_str)
ebcdic2ascii() est une fonction spéficique à Apache, qui n’est disponible que sur les OS qui gèrent le format EBCDIC
(OS/390, BS2000). Elle traduit la chaîne EBCDIC ebcdic_str en son équivalent ASCII (avec protection des données
binaires) et retourne le résultat.
Voir aussi ascii2ebcdic()
apache_lookup_uri (PHP 3>= 3.0.4, PHP 4 >= 4.0b1)
Effectue une requête partielle pour l’URI spécifiée et renvoie toutes les informations.
class apache_lookup_uri (string filename)
apache_lookup_uri() effectue une requête partielle pour l’URI spécifiée. Cette requête permet de récupérer toutes les
informations importantes à propos de la ressource concernée. Les propriétés de la classe renvoyée sont les suivantes :
status
the_request
status_line
method
content_type
handler
uri
filename
path_info
args
boundary
no_cache
no_local_copy
allowed
send_bodyct
bytes_sent
byterange
clength
unparsed_uri
mtime
request_time
Note : apache_lookup_uri() ne fonctionne que lorsque le PHP est installé sous la forme d’un module Apache.
163
Apache
apache_note (PHP 3>= 3.0.2, PHP 4 >= 4.0b1)
Affiche ou affecte le paramètre "apache request notes".
string apache_note (string note_name, string [note_value])
apache_note() est une fonction spécifique au serveur Apache. Cette fonction affecte ou renvoie la valeur de la variable
contenue dans la table notes d’Apache. Si la fonction est appelée avec un argument, elle renvoie la valeur courante de la
variable note_name. Si apache_note() est appelée avec deux arguments, apache_note() affecte à la note note_value la
valeur note_name et apache_note() retournera la valeur précédente de la variable note_name.
getallheaders (PHP 3, PHP 4 >= 4.0b1)
Récupère toutes les en-têtes des requêtes HTTP.
array getallheaders ()
getallheaders() renvoie un tableau associatif de toutes les en-têtes HTTP de la requête courante.
Note : Vous pouvez récupérer la valeur d’une variable d’une CGI en la lisant à partir des variables d’environnement, ce
qui fonctionne aussi bien dans le cas d’une installation en module ou d’une installation en CGI. Utilisez la fonction
phpinfo() pour avoir une liste de toutes les variables d’environnement disponibles.
Exemple 1. Exemple avec getallheaders()
<?php
$headers = getallheaders();
while (list($entete, $valeur) = each($headers)) {
echo "$entete: $valeur<br>\n";
}
?>
Cet exemple est un exemple d’affichage de toutes les en-têtes de la requête courante.
Note : getallheaders() ne fonctionne que si PHP est installé comme module Apache.
virtual (PHP 3, PHP 4 >= 4.0b1)
Effectue une sous-requête Apache
int virtual (string filename)
virtual() est une fonction spécifique au serveur Apache. Elle est équivalente à la directive "<!-#include
virtual...-->" lorsque vous utilisez le module include d’Apache. Cette fonction effectue une sous-requête Apache.
C’est très utile lorsque vous utilisez des scripts CGI, des fichiers .shtml ou n’importe quel type de fichier qui doit être
analysé par le serveur Apache. Il est à noter que lors de l’utilisation avec des scripts CGI, ces derniers doivent générer une
en-tête valide, c’est-à-dire, au minimum une en-tête "Content-Type". Pour les fichiers PHP, il est conseillé d’utiliser les
fonctions include() et require(). virtual() ne peut pas être utilisé pour inclure un fichier qui est lui-même un fichier PHP.
164
II. Tableaux
Ces fonctions vous permettent de manipuler et de traiter les tableaux de nombreuses façons. Les tableaux sont très
efficaces dès qu’il s’agit de stocker, gérer et traiter des données en groupe.
Les tableaux simples et multi-dimensionnels sont supportés et peuvent être créés par l’utilisateur, ou par une fonction. Il y
a des fonctions spécifiques qui remplissent des tableaux à partir de résultats de requêtes, et de nombreuses fonctions
retournent un tableau.
Voir aussi is_array(), explode(), implode(), split() et join().
165
Tableaux
array (unknown)
Crée un tableau
array array ([mixed ...])
array() retourne un tableau créé avec les paramètres passés. On peut attribuer un index particulier à une valeur avec
l’opérateur =?>.
Note : array() est un élément de langage utilisé pour représenter des tableaux litéraux, et non pas une fonction au
sens strict du terme.
La syntaxe "index => valeur", séparée par des virgules, définit les index et leur valeur. Un index peut être une chaîne ou un
nombre. Si l’index est omis, un index numérique sera automatiquement généré (commençant à 0). Si l’index est un entier,
le prochain index généré prendra la valeur d’index la plus grande + 1. Notez que si deux index identiques sont définis, le
dernier remplacera le premier.
L’exemple suivant montre comment créer un tableau à deux dimensions, comment spécifier les index d’un tableau
associatif, et comment générer automatiquement des index numériques.
Exemple 1. Exemple avec array()
<?php
$fruits = array (
"fruits" => array ("a" => "orange", "b" => "banane", "c" => "pomme"),
"numbres" => array (1, 2, 3, 4, 5, 6),
"trous"
=> array ("premier", 5 => "deuxième", "troisième")
);
?>
Exemple 2. Index automatique d’un tableau avec array()
<?php
$array = array( 1, 1, 1, 1,
print_r($array);
?>
1, 8=>1,
4=>1, 19, 3=>13);
qui affichera :
Array
(
[0]
[1]
[2]
[3]
[4]
[8]
[9]
)
=>
=>
=>
=>
=>
=>
=>
1
1
1
13
1
1
19
Notez bien que l’index ’3’ est défini deux fois, et conserve finalement sa dernière valeur de 13. L’index ’4’ est défini après
l’index ’8’, et l’index généré suivant (valeur 19) est 9, puisque le plus grand index est alors 8.
Cet exemple crée un tableau dont les index commencent à 1.
166
Tableaux
Exemple 3. Tableau d’index commençant à 1
<?php
$firstquarter = array(1 => ’Janvier’, ’Février’, ’Mars’);
print_r($firstquarter);
?>
qui affichera :
Array
(
[1] => ’Janvier’
[2] => ’Février’
[3] => ’Mars’
)
Voir aussi list().
array_count_values (PHP 4 >= 4.0b4)
Compte le nombre de valeurs dans un tableau
array array_count_values (array input)
array_count_values() retourne un tableau contenant les valeurs du tableau input comme clés et leurs fréquence comme
valeur.
Exemple 1. Exemple avec array_count_values()
<?php
$array = array(1, "bonjour", 1, "monde", "bonjour");
array_count_values($array);
// retourne array(1=>2, "bonjour"=>2, "monde"=>1)
?>
Note : array_count_values() a été ajoutée en PHP 4.0.
array_diff (PHP 4 >= 4.0.1)
Calcule la différence entre deux tableaux
array array_diff (array array1, array array2 [, array ...])
array_diff() retourne un tableau qui contient toutes les valeurs du tableau array1 qui sont absentes de tous les autres
arguments. Notez que les clés sont préservées.
167
Tableaux
Exemple 1. Exemple avec array_diff()
<?php
$array1 = array ("a" => "vert", "rouge", "bleu", "rouge");
$array2 = array ("b" => "vert", "jaune", "rouge");
$result = array_diff ($array1, $array2);
?>
$result contient array("bleu");. Les valeurs multiples dans $array1 seront toutes traitées de la même façon.
Voir aussi array_intersect().
array_filter (PHP 4 >= 4.0.6)
Filtre les éléments d’un tableau
array array_filter (array input [, mixed callback])
array_filter() retourne un tableau contenant les éléments du tableau input, filtrés grâce à la fonction callback. Si
input est un tableau associatif, les clés sont préservées.
Exemple 1. Exemple avec array_filter()
<?php
function pair($var) {
return ($var % 2 == 1);
}
function impair($var) {
return ($var % 2 == 0);
}
$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);
$tableau_pair = array_filter($array1, "pair");
$tableau_impair = array_filter($array2, "impair");
?>
Cet exemple montre comment extraire les nombres pairs dans $tableau_impair : ce dernier contient array ("a"=>1,
"c"=>3, "e"=>5);, et les nombres impairs dans $tableau_pair : ce dernier contient array (6, 8, 10, 12);,
Voir aussi array_map() et array_reduce().
array_flip (PHP 4 >= 4.0b4)
Remplace les clés par les valeurs, et les valeurs par les clés
array array_flip (array trans)
array_flip() retourne un tableau dont les clés sont les valeurs du précédent tableau, et les valeurs sont les clés. array_flip()
ne fonctionne que sur des entiers et des chaînes, et affichera une erreur s’il détecte une clé ou une valeur de type invalide
(tableau, objet, booléen, nombre à virgule flottante).
Si une valeur n’est pas unique, seule la dernière clé sera utilisée comme valeur, et toutes les autres seront perdues.
array_flip() retourne FALSE en cas d’échec.
168
Tableaux
Exemple 1. Exemple avec array_flip()
<?php
$trans = array_flip ($trans);
$original = strtr ($str, $trans);
?>
Exemple 2. array_flip() example : collision
<?php
$trans = array ("a" => 1, "b" => 1, "c" => 2);
$trans = array_flip ($trans);
// et $trans vaut : array(1 => "b", 2 => "c");
?>
Note : array_flip() a été ajoutée en PHP 4.0.
array_intersect (PHP 4 >= 4.0.1)
Calcule l’intersection de tableaux
array array_intersect (array array1, array array2 [, array ...])
array_intersect() retourne un tableau contenant toutes les valeurs de array1 qui sont présentes dans tous les autres
arguments. Notez que les clés sont préservées.
Exemple 1. Exemple avec array_intersect()
<?php
$array1 = array ("a" => "vert", "rouge", "bleu");
$array2 = array ("b" => "vert", "jaune", "rouge");
$result = array_intersect ($array1, $array2);
?>
$result contient array ("a" => "vert", "rouge");.
Voir aussi array_diff().
array_keys (PHP 4 >= 4.0b1)
Retourne toutes les clés d’un tableau
array array_keys (array input, mixed [search_value])
array_keys() retourne les clés numériques et littérales du tableau input.
Si l’option search_value est spécifiée, seules les clés ayant cette valeur seront retournées. Sinon, toutes les clés de
input sont retournées.
169
Tableaux
Exemple 1. Exemple avec array_keys()
<?php
$array = array(0 => 100, "couleur" => "rouge");
array_keys($array);
// retourne array(0, "couleur")
$array = array("bleu", "rouge", "vert", "bleu", "bleu");
array_keys($array, "bleu");
// retourne array(0, 3, 4)
$array = array( "couleur" => array("bleu", "rouge", "vert"),
"taille" => array("petit", "moyen", "grand") );
array_keys($array);
// retourne array("couleur", "taille")
?>
Note : array_keys() a été ajoutée en PHP 4. Ci-dessous, voici une implémentation qui fonctionnera sous PHP 3:
Exemple 2. Implémentation de array_keys() pour les utilisateurs de PHP 3
<?php
function array_keys ($arr, $term="") {
$t = array();
while (list($k,$v) = each($arr)) {
if ($term && $v != $term)
continue;
$t[] = $k;
}
return $t;
}
?>
Voir aussi array_values().
array_map (PHP 4 >= 4.0.6)
Applique sur fonction sur des tableaux
array array_map (mixed callback, array arr1 [, array ...])
array_map() retourne un tableau contenant tous les éléments du tableau arr1, après leur avoir appliqué la fonction
callback. Le nombre de paramètres de la fonction callback doit être égal au nombre de tableaux passés dans la
fonction array_map().
Exemple 1. Exemple avec array_map()
<?php
function cube($n) {
return $n*$n*$n;
}
$a = array(1, 2, 3, 4, 5);
$b = array_map("cube", $a);
?>
Avec cet exemple, la variable $b contiendra array (1, 8, 27, 64, 125);.
170
Tableaux
Exemple 2. array_map() - utilisation de plusieurs tableaux
<?php
function parle_espagnol($n, $m) {
return "Le nombre $n se dit $m en espagnol";
}
function map_espagnol($n, $m) {
return array($n => $m);
}
$a = array(1, 2, 3, 4, 5);
$b = array("uno", "dos", "tres", "cuatro", "cinco");
$c = array_map("parle_espagnol", $a, $b);
print_r($c);
// Affichera :
// Array
// (
//
[0] => Le nombre 1 se dit uno en espagnol
//
[1] => Le nombre 2 se dit dos en espagnol
//
[2] => Le nombre 3 se dit tres en espagnol
//
[3] => Le nombre 4 se dit cuatro en espagnol
//
[4] => Le nombre 5 se dit cinco en espagnol
// )
$d = array_map("map_espagnol", $a , $b);
print_r($d);
// Affichera :
// Array
// (
//
[0] => Array
//
(
//
[1] => uno
//
)
//
//
[1] => Array
//
(
//
[2] => dos
//
)
//
//
[2] => Array
//
(
//
[3] => tres
//
)
//
//
[3] => Array
//
(
//
[4] => cuatro
//
)
//
//
[4] => Array
//
(
//
[5] => cinco
//
)
//
// )
?>
Généralement, lorsque vous utilisez plusieurs tableaux, ils doivent être de même longueur, car la fonction de callback est
appliqué à un élément de chaque tableau. Si les tableaux sont de taille inégale, les plus petits seront complétés avec des
éléments vides.
Une utilisation interessante de cette fonction est de construire des tableaux de tableaux, grâce à la fonction de callback
NULL.
171
Tableaux
Exemple 3. array_map() - création d’un tableau de tableaux
<?php
$a = array(1, 2, 3, 4, 5);
$b = array("un", "deux", "trois", "quatre", "cinq");
$c = array("uno", "dos", "tres", "cuatro", "cinco");
$d = array_map(null, $a, $b, $c);
print_r($d);
// affichera :
// Array
// (
//
[0] => Array
//
(
//
[0] => 1
//
[1] => un
//
[2] => uno
//
)
//
//
[1] => Array
//
(
//
[0] => 2
//
[1] => deux
//
[2] => dos
//
)
//
//
[2] => Array
//
(
//
[0] => 3
//
[1] => trois
//
[2] => tres
//
)
//
//
[3] => Array
//
(
//
[0] => 4
//
[1] => quatre
//
[2] => cuatro
//
)
//
//
[4] => Array
//
(
//
[0] => 5
//
[1] => cinq
//
[2] => cinco
//
)
//
// )
?>
Voir aussi array_filter() et array_reduce().
array_merge (PHP 4 >= 4.0b1)
Rassemble plusieurs tableaux
array array_merge (array array1, array array2 [, array ...])
array_merge() rassemble les éléments de plusieurs tableaux ensembles, en ajoutant les valeurs de l’un à la fin de l’autre.
Le résultat est un tableau.
172
Tableaux
Si les tableaux ont des clés en commun, la dernière valeur rencontrée écrasera l’ancienne. Pour les valeurs numériques,
cela n’arrive pas, car alors, les valeurs sont ajoutées en fin de tableau.
Exemple 1. Exemple avec array_merge()
<?php
$array1 = array ("couleur" => "rouge", 2, 4);
$array2 = array ("a", "b", "couleur" => "vert", "forme" => "trapézoïde");
array_merge ($array1, $array2);
?>
Le résultat sera array("couleur" => "vert", 2, 4, "a", "b", "forme" => "trapézoîde").
Note : array_merge() a été ajoutée dans PHP 4.0.
array_merge_recursive (PHP 4 >= 4.0.1)
Combine plusieurs tableaux ensembles, récursivement
array array_merge_recursive (array array1, array array2 [, array ...])
array_merge_recursive() rassemble tous les éléments de plusieurs tableaux ensembles, en ajoutant les éléments de l’un à
la suite des éléments du précédent. array_merge_recursive() retourne le tableau résultant.
Si les tableaux passés en arguments ont les mêmes clés (chaînes de caractères), les valeurs sont alors rassemblées dans un
tableau, de manière récursive, de façon à ce que, si l’une de ces valeurs est un tableau elle-même, la fonction la
rassemblera avec les valeurs de l’entrée courante. Cependant, si deux tableaux ont la même clé numérique, la dernière
valeur n’écrasera pas la précédente, mais sera ajoutée à la fin du tableau.
Exemple 1. Exemple avec array_merge_recursive()
<?php
$ar1 = array ("couleur" => array ("favorie" ?> "rouge"), 5);
$ar2 = array (10, "couleur" ?> array ("favorie" ?> "vert", "rouge"));
$result = array_merge_recursive ($ar1, $ar2);
?>
Le résultat sera array("couleur" => array("favorie" => array ("rouge", "vert"), "bleu"), 5, 10).
Voir aussi array_merge().
array_multisort (PHP 4 >= 4.0b4)
Tri multi-dimensionnel
boolean array_multisort (array ar1 [, mixed arg [, mixed ... [, array ...]]])
array_multisort() sert à trier simultanément plusieurs tableaux, ou bien à trier un tableau multi-dimensionnel, suivant
l’une ou l’autre de ses dimensions. Les clés sont préservées.
173
Tableaux
Les tableaux passés en arguments sont traités comme les colonnes d’une table, triées par lignes (un peu comme la clause
SQL ORDER BY). Le premier tableau est la clé primaire de tri. Les valeurs du premier tableau qui sont égales, sont triées
grâce au tableau suivant, et ainsi de suite...
La structure des arguments de array_multisort() est un peu inhabituelle, mais elle est plus souple. Le premier argument
DOIT être un tableau, mais les arguments suivants peuvent être des tableaux ou une ou deux options de tri, prises dans les
valeurs suivantes :
Options de tri :
•
SORT_ASC - Tri en ordre ascendant
•
SORT_DESC - Tri en ordre descendant
Options de type de tri:
•
SORT_REGULAR - Comparaison normale des valeurs
•
SORT_NUMERIC - Comparaison numérique des valeurs
•
SORT_STRING - Comparaison alphabétique des valeurs
Une seule option de tri de chaque type peut être appliquée après un tableau. Une option ne s’applique qu’au tableau
précédent. Tous les autres sont mis par défaut à SORT_ASC et SORT_REGULAR.
array_multisort() retourne TRUE en cas de succès, FALSE sinon.
Exemple 1. Trier plusieurs tableaux
<?php
$ar1 = array ("10", 100, 100, "a");
$ar2 = array (1, 3, "2", 1);
array_multisort ($ar1, $ar2);
?>
Dans cet exemple, après le tri, le premier tableau contient 10, "a", 100, 100; Le deuxième tableau contient 1, 1, "2", 3. Les
entrées du second tableau correspondant aux valeurs jumelles du premier tableau (100 et 100), sont aussi triées.
Exemple 2. Classer un tableau multidimensionnel
<?php
$ar = array (array ("10", 100, 100, "a"), array (1, 3, "2", 1));
array_multisort ($ar[0], SORT_ASC, SORT_STRING,
$ar[1], SORT_NUMERIC, SORT_DESC);
?>
Dans cet exemple, après le tri, le premier tableau contient 10, 100, 100, "a" (tri alphabétique, ordre croissant); Le deuxième
tableau contient 1, 3, "2", 1 (tri numérique, ordre décroissant).
array_pad (PHP 4 >= 4.0b4)
Complète un tableau jusqu’à la longueur spécifiée, avec une valeur.
array array_pad (array input, int pad_size, mixed pad_value)
174
Tableaux
array_pad() retourne une copie du tableau input complété jusqu’à la taille de pad_size avec la valeur pad_value.
Si pad_size est positif, alors le tableau est complété à droite, s’il est négatif, il est complété à gauche. Si la valeur
absolue de pad_size est plus petite que la taille du tableau input, alors le tableau n’est pas complété.
Exemple 1. Exemple avec array_pad()
<?php
$input = array(12, 10, 9);
$result = array_pad($input,
// Le résultat est array (12,
$result = array_pad($input,
// Le résultat est array (-1,
$result = array_pad($input,
// pas complété
?>
5, 0);
10, 9, 0, 0)
-7, -1);
-1, -1, -1, 12, 10, 9)
2, "noop");
array_pop (PHP 4 >= 4.0b1)
Dépile un élément de la fin d’un tableau
mixed array_pop (array array)
array_pop() dépile et retourne le dernier élément du tableau array, le raccourcissant d’un élément. Si array est vide,
ou n’est pas un tableau, array_pop() retourne NULL.
Exemple 1. Exemple avec array_pop()
<?php
$stack = array("orange", "pomme", "framboise");
$fruit = array_pop($stack);
?>
Après ceci, $stack n’a plus que 2 éléments: "orange" et "pomme", tandis que $fruit contient "framboise".
Voir aussi array_push(), array_shift() et array_unshift().
Note : array_pop() a été ajoutée en PHP 4.0.
array_push (PHP 4 >= 4.0b1)
Empile un ou plusieurs éléments à la fin d’un tableau
int array_push (array array, mixed var [, mixed ...])
array_push() considère array comme une pile, et empile les variables passées en paramètres à la fin de array. La
longueur du tableau array augmente d’autant. Cela a le même effet que :
<?php
$array[] = $var;
175
Tableaux
?>
repeté pour chaque var.
array_push() retourne le nouveau nombre d’éléments du tableau.
Exemple 1. Exemple avec array_push()
<?php
$stack = array (1, 2);
array_push($stack, "+", 3);
?>
Cet exemple fait que $stack a 4 éléments: 1, 2, "+", et 3.
Voir aussi array_pop(), array_shift() et array_unshift().
Note : array_push() a été ajoutée en PHP 4.0.
array_reverse (PHP 4 >= 4.0b4)
Renverse l’ordre des éléments d’un tableau
array array_reverse (array array [, boolean preserve_keys])
array_reverse() prend le tableau array et retourne un nouveau tableau qui contient les mêmes éléments mais dans
l’ordre inverse, en préservant les clés si le paramètre preserve_keys vaut TRUE.
Exemple 1. Exemple avec array_reverse()
<?php
$input = array ("php", 4.0, array ("rouge", "vert"));
$result = array_reverse ($input);
$result_keyed = array_reverse ($input, TRUE);
?>
Au final, $result et $result_keyed contiennent tous les deux array ("rouge", "vert"), 4.0, "php", dans cet
ordre. Mais $result_keyed[0] vaut toujours "php".
Note : array_reverse() a été ajoutée en PHP 4.0 Beta 3.
Note : Le second paramètre preserve_keys a été ajouté en PHP 4.0.3.
array_reduce (PHP 4 >= 4.0.5)
Réduit itérativement un tableau
mixed array_reduce (array input, mixed callback [, int initial])
176
Tableaux
array_reduce() applique itérativement la fonction callback aux éléments du tableau input, de manière à réduire le
tableau à une valeur simple. Si l’argument optionnel intial est disponible, il sera utilisé pour initialiser le processus, ou
bien comme valeur finale si le tableau est vide.
Exemple 1. Exemple avec array_reduce()
<?php
function rsum($v, $w) {
$v += $w;
return $v;
}
function rmul($v, $w) {
$v *= $w;
return $v;
}
$a = array(1, 2, 3, 4, 5);
$x = array();
$b = array_reduce($a, "rsum");
$c = array_reduce($a, "rmul", 10);
$d = array_reduce($x, "rsum", 1);
?>
Dans cet exemple, $b contiendra 15, $c contiendra 1200 (= 1*2*3*4*5*10), et $d contiendra 1.
Voir aussi array_filter() et array_map().
array_rand (PHP 4 >= 4.0.0)
Prend une ou plusieurs valeurs, au hasard dans un tableau
mixed array_rand (array input [, int num_req])
array_rand() est pratique lorsque vous voulez sélectionner une ou plusieurs valeurs au hasard dans un tableau. Le
paramètre input est un tableau, et num_req spéficie le nombre de valeurs que vous voulez obtenir (par défaut, c’est 1).
Si vous ne demandez qu’une entrée, array_rand() retourne l’index de la valeur. Sinon, elle retourne un tableau d’index.
Cela vous permet de faire une sélection au hasard de clés, ou bien de valeurs.
N’oubliez pas d’appeler srand() pour initialiser le générateur de nombres aléatoires.
Exemple 1. Exemple avec array_rand()
<?php
srand ((double) microtime() * 10000000);
$input = array ("Neo", "Morpheus", "Trinitée", "Cypher", "Tank");
$rand_keys = array_rand ($input, 2);
print $input[$rand_keys[0]]."\n";
print $input[$rand_keys[1]]."\n";
?>
array_shift (PHP 4 >= 4.0b1)
Dépile un élément au début d’un tableau
mixed array_shift (array array)
177
Tableaux
array_shift() extrait la première valeur d’un tableau et la retourne, en raccourcissant le tableau d’un élément, et en
déplacant tous les éléments vers le bas. Si array est vide, ou n’est pas un tableau, array_shift() retourne NULL.
Exemple 1. Exemple avec array_shift()
<?php
$args = array("-v", "-f");
$opt = array_shift($args);
?>
Cet exemple aura pour résultat que $args ne contiendra plus que "-f", et $opt contient "-v".
Voir aussi array_unshift(), array_push() et array_pop().
Note : array_shift() a été ajoutée en PHP 4.0.
array_slice (PHP 4 >= 4.0b1)
Extrait une portion de tableau
array array_slice (array array, int offset, int [length])
array_slice() retourne une série d’ élément du tableau array commençant à l’offset offset et représentant length
éléments.
Si offset est positif, la série commencera à cet offset dans le tableau array. Si offset est négatif, cette série
commencera à l’offset offset mais en commençant à la fin du tableau array.
Si length est fourni et positif, alors la série retournée aura autant d’éléments. Si length est fourni et négatif, alors la
série contiendra les éléments depuis l’offset offset jusqu’à length éléments en partant de la fin. Si length est omis,
la séquence lira tous les éléments du tableau, depuis l’offset précisé jusqu’à la fin du tableau.
Exemple 1. Exemple avec array_slice()
<?php
$input = array("a", "b", "c", "d", "e");
$output = array_slice($input, 2);
// retourne "c", "d", et "e"
// les trois exemples suivants sont équivalents
$output = array_slice($input, 2, 2); // retourne "c", "d"
$output = array_slice($input, 2, -1); // retourne "c", "d"
// Equivalent à :
$offset = 2; $length = -1;
$output = array_slice($input, 2, count($input) - $offset + $length);
// retourne "c", "d"
$output = array_slice($input, -2, 1); // retourne "d"
$output = array_slice($input, 0, 3);
// retourne "a", "b", et "c"
?>
Voir aussi array_splice().
Note : array_slice() a été ajoutée en PHP 4.0.
178
Tableaux
array_splice (PHP 4 >= 4.0b1)
Efface et remplace une portion de tableau
array array_splice (array input, int offset [, int length, array [replacement]])
array_splice() supprime les éléments désignés par offset et length du tableau input et les remplace par les
éléments du tableau replacement, si ce dernier est présent.
Si offset est positif, la série commencera à cet offset dans le tableau input. Si offset est négatif, cette série
commencera à l’offset offset mais en commençant à la fin du tableau input.
Si length est donné et positif, alors la série aura autant d’éléments. Si length est donné et négatif, les éléments seront
pris dans l’ordre inverse. Si length est omis, la séquence lira tous les éléments du tableau, depuis l’offset offset
jusqu’à la fin du tableau. Conseil : pour supprimer tous les éléments du tableau depuis offset jusqu’à la fin, même si un
tableau de remplacement replacement est spécifié, utilisez count(count($input)) à la place de length.
Si replacement est précisé, alors les éléments supprimés sont remplacés par les éléments de ce tableau. Si l’offset et
length sont tels que la taille du tableau ne change pas, alors les éléments du tableau de remplacement replacement sont
insérés à partir de l’offset offset.
Conseil : si le tableau de remplacement ne contient qu’un seul élément, il n’est pas obligatoire de forcer le type en tableau
avec array(), à moins que cette variable ne soit elle-même un tableau.
Les codes suivants sont équivalents :
<?php
array_push($input, $x, $y)
array_pop($input)
array_shift($input)
array_unshift($input, $x, $y)
$a[$x] = $y
?>
array_splice($input,
array_splice($input,
array_splice($input,
array_splice($input,
array_splice($input,
count($input), 0, array($x, $y))
-1)
0, 1)
0, 0, array($x, $y))
$x, 1, $y)
array_splice() retourne le tableau des éléments supprimés.
Exemple 1. Exemples avec array_splice()
<?php
// cas simple
$input = array("rouge", "vert", "bleu", "jaune");
array_splice($input, 2);
// $input est array("rouge", "vert")
// nombre d’éléments négatif
$input = array("rouge", "vert", "bleu", "jaune");
array_splice($input, 1, -1);
// $input est array("rouge", "jaune")
// avec un élément de remplacement
$input = array("rouge", "vert", "bleu", "jaune");
array_splice($input, 1, count($input), "orange");
// $input est array("rouge", "orange")
// cas complexe
$input = array("rouge", "vert", "bleu", "jaune");
array_splice($input, -1, 1, array("noir", "marron"));
// $input est array("rouge", "vert",
//
"bleu", "noir", "marron")
?>
Voir aussi array_slice().
Note : array_splice() a été ajoutée en PHP 4.0.
179
Tableaux
array_sum (PHP 4 >= 4.0.4)
Calcule la somme des valeurs du tableau
mixed array_sum (array arr)
array_sum() retourne la somme des valeurs du tableau, sous forme d’un entier ou d’un nombre à virgule flottante.
Exemple 1. Exemple avec array_sum()
<?php
$a = array(2,4,6,8);
echo "somme(a) = ".array_sum($a)."\n";
// affiche : somme(a) = 20
$b = array("a"=>1.2,"b"=>2.3,"c"=>3.4);
echo "somme(b) = ".array_sum($b)."\n";
// affiche : somme(b) = 6.9
?>
array_unique (PHP 4 >= 4.0.1)
Dédoublonne un tableau
array array_unique (array array)
array_unique() prend le tableau array et retourne un nouveau tableau, complètement dédoublonné.
Notez que les clés sont préservées. array_unique() conserve la clé de la première valeur rencontrée, et ignore toutes les
suivantes.
Exemple 1. Exemple avec array_unique()
<?php
$input = array ("a" => "vert", "rouge", "b" => "vert", "bleu", "rouge");
$result = array_unique ($input);
print_r($result);
// Cela va afficher :
//Array
//(
//
[a] => vert
//
[0] => rouge
//
[1] => bleu
//)
?>
Notez aussi que array_unique() tient compte du type de la valeur. Cela ne porte généralement pas à conséquence, sauf si
votre tableau contient des nombres, qui peuvent être de différents types. Cela conduit à des résultats déroutants.
180
Tableaux
Exemple 2. array_unique() et les types de valeurs
<?php
$input = array(4,"3",3,"4",4,4);
$result = array_unique($input);
print_r($result);
// Cela va afficher :
//Array
//(
// [0] => 3
// [1] => 3
// [2] => 4
// [3] => 4
//)
?>
array_unshift (PHP 4 >= 4.0b1)
Empile un ou plusieurs éléments au début d’un tableau
int array_unshift (array array, mixed var [, mixed ...])
array_unshift() ajoute les éléments passés en argument au début du tableau array. Notez que les éléments sont ajoutés
comme un tout, et qu’ils restent dans le même ordre.
array_unshift() retourne le nouveau nombre d’éléments du tableau array.
Exemple 1. Exemples avec array_unshift()
<?php
$queue = array("p1", "p3");
array_unshift($queue, "p4", "p5", "p6");
?>
Le résultat de cet exemple est que $queue aura 5 éléments, à savoir: "p4", "p5", "p6", "p1", et "p3".
Voir aussi array_shift(), array_push(), et array_pop().
Note : array_unshift() a été ajoutée en PHP 4.0.
array_values (PHP 4 >= 4.0b1)
Retourne les valeurs d’un tableau
array array_values (array input)
array_values()retourne les valeurs du tableau input.
181
Tableaux
Exemple 1. Exemples avec array_values()
<?php
$array = array("taille" => "XL", "couleur" => "or");
array_values($array);
// // retourne array("XL", "or")
?>
Note : array_values() a été ajoutée en PHP 4. Ci-dessous, voici une implémentation pour ceux qui utilisent toujours
PHP 3.
Exemple 2. Implémentation de array_values() pour les utilisateurs PHP 3
<?php
function array_values($arr){
$t = array();
while (list($k, $v) = each($arr)){
$t[] = $v;
}
return $t;
}
?>
array_walk (PHP 3>= 3.0.3, PHP 4 >= 4.0b1)
Exécute une fonction sur chacun des membres d’un tableau.
int array_walk (array arr, string func, mixed userdata)
array_walk() exécute la fonction func avec chaque élément du tableau arr. Les éléments sont passés en tant que
premier argument de la fonction func. func doit être une fonction définie par l’utilisateur, et non pas une fonction native
PHP. Vous ne pouvez pas utiliser array_walk() directement avec str2lower(), il faut absolument passer par une fonction
utilisateur.
Si func a besoin de plus d’un argument, une alerte sera générée pour chaque appel de func. Ces alertes sont supprimées
en ajoutant le suffixe ’@’ avant l’appel de array_walk() ou simplement en utilisant error_reporting().
Note : Si func doit travailler avec les véritables valeurs du tableau, spécifiez que le premier paramètre de func doit
être passé par référence. Alors, les éléments seront directement modifiés dans le tableau.
Note : Passer les clés et userdata à func a été ajouté en PHP 4.0.
En PHP 4, reset() doit être appelé si nécessaire, car array_walk() ne réinitialise pas automatiquement le tableau.
Exemple 1. Exemple avec array_walk()
<?php
$fruits = array ("d"=>"citron", "a"=>"orange", "b"=>"banane", "c"=>"pomme");
function test_alter (&$item1, $key, $prefix) {
$item1 = "$prefix: $item1";
}
function test_print ($item2, $key) {
echo "$key. $item2<br>\n";
}
array_walk ($fruits, ’test_print’);
182
Tableaux
reset ($fruits);
array_walk ($fruits, ’test_alter’, ’fruit’);
reset ($fruits);
array_walk ($fruits, ’test_print’);
?>
Voir aussi each() et list().
arsort (PHP 3, PHP 4 >= 4.0b1)
Trie un tableau en ordre inverse
void arsort (array array)
arsort() trie un tableau de telle manière que la corrélation entre les index et les valeurs soit conservée. L’usage principal est
lors de tri de tableaux associatifs où l’ordre des éléments est important.
Exemple 1. Exemple avec arsort()
<?php
$fruits = array("d"=>"papaye","a"=>"orange","b"=>"banane","c"=>"ananas");
arsort ($fruits);
for (reset ($fruits); $key = key ($fruits); next ($fruits)) {
echo "fruits[$key] = ".$fruits[$key]."\n";
}
?>
Cet exemple va afficher: fruits[d] = papaye fruits[a] = orange fruits[b] = banane fruits[c] =
ananas Les fruits ont été triés en ordre alphabétique inverse, et leurs index respectifs ont été conservés.
Voir aussi array-multisort(), asort(), krsort(), ksort(), natsort(), natcasesort(), rsort(), sort(), uasort(), uksort() et
usort().
asort (PHP 3, PHP 4 >= 4.0b1)
Trie un tableau en ordre
void asort (array array)
asort() trie un tableau de telle manière que la corrélation entre les index et les valeurs soit conservée. L’usage principal est
lors de tri de tableaux associatifs où l’ordre des éléments est important.
Exemple 1. Exemple avec asort()
<?php
$fruits = array(
"d"=>"papaye",
"a"=>"orange",
"b"=>"banane",
"c"=>"ananas");
asort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
echo "fruits[$key] = ".$fruits[$key]."\n";
}
?>
Cet exemple va afficher: fruits[c] = ananas fruits[b] = banane fruits[a] = orange fruits[d] =
papaye Les fruits ont été triés par ordre alphabétique, et leurs index respectifs ont été conservés.
183
Tableaux
Voir aussi array-multisort(), arsort(), krsort(), ksort(), natsort(), natcasesort(), rsort(), sort(), uasort(), uksort() et
usort().
compact (PHP 4 >= 4.0b1)
Crée un tableau contenant les variables et leur valeur
array compact (string|array varname [, mixed ...])
compact() accepte différents paramètres. Les paramètres peuvent être des variables contenant des chaînes, ou un tableau
de chaînes, qui peut contenir d’autres tableaux de noms, que compact() traitera récursivement.
Pour chacun des arguments, compact() recherche une variable avec une variable de même nom dans la table courante des
symboles, et l’ajoute dans le tableau, de manière à avoir la relation nom => ’valeur de variable’. En bref, c’est le contraire
de la fonction extract(). compact() retourne le tableau ainsi créé.
Exemple 1. Exemple avec compact()
<?php
$ville = "San Francisco";
$etat = "CA";
$evenement = "SIGGRAPH";
$location_vars = array("ville", "etat");
$result = compact("evenement", $location_vars);
?>
Après cette opération, $result sera le tableau suivant : array(("evenement" => "SIGGRAPH", "ville" => "San Francisco",
"etat" => "CA").
Voir aussi extract().
Note : compact() a été ajoutée en PHP 4.0.
count (PHP 3, PHP 4 >= 4.0b1)
Compte le nombre d’éléments d’un tableau
int count (mixed var)
count() retourne le nombre d’éléments dans var, qui est généralement un tableau (et tout le reste n’aura qu’un élément).
count() retourne 1 si la variable n’est pas un tableau.
count() retourne 0 si la variable n’est pas créée.
Avertissement
count() peut retourner 0 pour une variable qui n’a pas été affectée, ou pour un tableau vide. Utilisez
plutôt isset() pour tester si la variable existe.
184
Tableaux
Exemple 1. Exemple avec count()
<?php
$a[0] = 1;
$a[1] = 3;
$a[2] = 5;
$result = count ($a);
//$result == 3
?>
Voir aussi sizeof(), isset() et is_array().
current (PHP 3, PHP 4 >= 4.0b1)
Transforme une variable en tableau
mixed current (array array)
Chaque tableau entretient un pointeur interne, qui est initialisé lorsque le premier élément est inséré dans le tableau.
current() ne fait que retourner l’élément courant pointé par le pointeur interne du tableau array. current() ne déplace
pas le pointeur. Si le pointeur est au-delà du dernier élément de la liste, current() retourne FALSE.
Avertissement
Si le tableau des éléments vides ou des zéros (0 ou "", la chaîne vide) alors current() retournera FALSE
pour ces éléments. Il est donc impossible de déterminer si vous êtes réellement à la fin de la liste en
utilisant la fonction current(). Pour passer en revue proprement un tableau qui peut contenir des
éléments vides ou des zéros, utilisez la fonction each().
Voir aussi end(), next(), prev() et reset().
each (PHP 3, PHP 4 >= 4.0b1)
Retourne chaque paire clé/valeur d’un tableau
array each (array array)
each() retourne la paire (clé/valeur) courante du tableau array et avance le pointeur de tableau. Cette paire est retournée
dans un tableau de 4 éléments, avec les clés 0, 1, key, et value. Les éléments 0 et key contiennent le nom de la clé et, et 1 et
value contiennent la valeur.
Si le pointeur interne de fichier est au-delà de la fin du tableau, each() retourne FALSE.
Exemple 1. Exemples avec each()
<?php
$foo = array("bob", "fred", "jussi", "jouni", "egon", "marliese");
$bar = each($foo);
?>
$bar contient maintenant les paires suivantes:
•
•
•
0 => 0
1 => ’bob’
key => 0
185
Tableaux
•
value => ’bob’
<?php
$foo = array ("Robert" => "Bob", "Seppo" => "Sepi");
$bar = each ($foo);
?>
$bar contient maintenant les paires suivantes:
0 => ’Robert’
1 => ’Bob’
• key => ’Robert’
• value => ’Bob’
•
•
each() est utilisé conjointement avec list() pour étudier tous les éléments d’un tableau; par exemple,
$HTTP_POST_VARS:
Exemple 2. Affichage de $HTTP_POST_VARS avec each()
<?php
echo "Valeurs transmises par la méthode POST:<br>";
reset ($HTTP_POST_VARS);
while (list ($key, $val) = each ($HTTP_POST_VARS)) {
echo "$key => $val<br>";
}
?>
Après chaque each(), le pointeur de tableau est déplacé au dernier élément, ou sur le dernier élément, lorsqu’on arrive à la
fin.
Voir aussi key(), list(), current(), reset(), next() et prev().
end (PHP 3, PHP 4 >= 4.0b1)
Positionne le pointeur de tableau en fin de tableau
end (array array)
end() déplace le pointeur interne du tableau array jusqu’au dernier élément.
Voir aussi current(), each(), end(), next() et reset().
extract (PHP 3>= 3.0.7, PHP 4 >= 4.0b1)
Importe les variables dans la table des symboles
int extract (array var_array [, int extract_type [, string prefix]])
extract() sert à exporter un tableau vers la table des symboles. Elle prend un tableau associatif var_array, crée les
variables dont les noms sont les index de ce tableau, et leur affecte la valeur associée. Pour chaque paire clé/valeur,
extract() crée une variable, avec les paramètres extract_type et prefix.
186
Tableaux
Note : Depuis la version 4.0.5, extract() retourne le nombre de variables extraites.
extract() vérifie l’existence de la variable avant de la créer. Le traitement des collisions est déterminé par
extract_type. Ce paramètre peut prendre une des valeurs suivantes :
EXTR_OVERWRITE
Lors d’une collision, réécrire la variable existante.
EXTR_SKIP
Lors d’une collision, ne pas réécrire la variable existante.
EXTR_PREFIX_SAME
Lors d’une collision, ajouter le préfixe prefix, et créer une nouvelle variable.
EXTR_PREFIX_ALL
Ajouter le préfixe prefix, et créer une nouvelle variable.
EXTR_PREFIX_INVALID
Préfixer uniquement les variables aux noms invalides ou numériques avec le préfixe prefix. Ceci a été ajouté en
PHP 4.0.5.
Si extract_type est omis, extract() utilise EXTR_OVERWRITE par défaut.
Notez que prefix n’est nécessaire que pour les valeurs de extract_type suivantes : EXTR_PREFIX_SAME,
EXTR_PREFIX_ALL ou EXTR_PREFIX_INVALID. Le résultat préfixé n’est pas un nom de variable valide, il ne sera
pas importé dans la table des symboles.
extract() retourne le nombre de variables réellement importées dans la table des symboles.
Une utilisation possible de la fonction extract() est l’exportation vers la table des symboles de tableaux de variables
retournés par wddx_deserialize().
Exemple 1. Exemple avec extract()
<?php
/* Supposons que $var_array est un tableau retourné par
wddx_deserialize() */
$taille = "grand";
$var_array = array("couleur" => "bleu",
"taille" => "moyen",
"forme" => "sphere");
extract($var_array, EXTR_PREFIX_SAME, "wddx");
print "$couleur, $taille, $forme, $wddx_taille\n";
?>
L’exemple ci-dessus va afficher bleu, large, sphere, moyen
La variable $taille n’a pas été réécrite, car on avait spécifié le paramètre EXTR_PREFIX_SAME, qui a permis la création
$wddx_size. Si EXTR_SKIP avait été utilisé, alors $wddx_size n’aurait pas été créé. Avec EXTR_OVERWRITE, $taille
aurait pris la valeur "moyen", et avec EXTR_PREFIX_ALL, les variables créées seraient $wddx_couleur, $wddx_taille, et
$wddx_forme.
in_array (PHP 4 >= 4.0b1)
Indique si une valeur appartient à un tableau
boolean in_array (mixed needle, array haystack [, boolean strict])
187
Tableaux
in_array() recherche needle dans haystack et retourne TRUE s’il s’y trouve, ou FALSE sinon.
Le troisième paramètre strict est optionnel. S’il vaut TRUE alors in_array() vérifiera aussi que le types du paramètre
needle correspond à la valeur trouvée dans haystack.
Exemple 1. Exemple avec in_array()
<?php
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os))
print "Irix trouve";
?>
Exemple 2. in_array() avec le paramètre strict
<?php
$a = array(’1.10’, 12.4, 1.13);
if (in_array(’12.4’, $a, TRUE))
echo "’12.4’ trouvé avec une recherche stricte\n";
if (in_array(1.13, $a, TRUE))
echo "1.13 trouvé avec une recherche stricte\n";
?>
L’affichage sera :
1.13 trouvé avec une recherche stricte
Note : in_array() a été ajoutée en PHP 4.0.
Voir aussi array_search().
array_search (PHP 4 >= 4.0.5)
Recherche dans un tableau la clé associée à une valeur
mixed array_search (mixed needle, array haystack, boolean strict)
array_search() recherche needle dans haystack et retourne la clé associée s’il la trouve, ou FALSE sinon.
Si le troisième paramètre strict vaut TRUE, alors array_search() s’assurera aussi que le type de needle est le même
que celui de la valeur trouvée dans haystack.
Voir aussi in_array().
key (PHP 3, PHP 4 >= 4.0b1)
Retourne une clé d’un tableau associatif
mixed key (array array)
key() retourne l’index de la clé courante dans un tableau.
188
Tableaux
Voir aussi current() et next()
krsort (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Trie un tableau en sens inverse et suivant les clés
int krsort (array array)
krsort() trie un tableau en ordre inverse et suivant les clés, en maintenant la correspondance entre les clés et les valeurs.
Cette fonction est pratique pour les tableaux associatifs.
Exemple 1. Exemple avec krsort()
<?php
$fruits = array("d"=>"papaye","a"=>"orange","b"=>"banane","c"=>"ananas");
ksort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
echo "fruits[$key] = ".$fruits[$key]."\n";
}
?>
Cet exemple va afficher : fruits[d] = citron fruits[c] = ananas fruits[b] = banane fruits[a] =
orange
Voir aussi array-multisort(), arsort(), asort(), ksort(), natsort(), natcasesort(), rsort(), sort(), uasort(), uksort() et
usort().
ksort (PHP 3, PHP 4 >= 4.0b1)
Trie un tableau suivant les clés
int ksort (array array)
ksort() trie un tableau suivant les clés, en maintenant la correspondance entre les clés et les valeurs. Cette fonction est
pratique pour les tableaux associatifs.
Exemple 1. Exemple avec ksort()
<?php
$fruits = array("d"=>"papaye","a"=>"orange","b"=>"banane","c"=>"ananas");
ksort($fruits);
reset($fruits);
while (list ($key, $val) = each ($fruits)) {
echo "$key => $val\n";
}
?>
Cet exemple va afficher : fruits[a] = orange fruits[b] = banane fruits[c] = ananas fruits[d] =
citron
Vous pouvez modifier le comportement du tri avec les options sort_flags. Pour plus de détails, voyez sort().
Voir aussi array-multisort(), arsort(), asort(), krsort(), natsort(), natcasesort(), rsort(), sort(), uasort(), uksort() et
usort().
Note : Le second paramètre a été ajouté en PHP 4.0.
189
Tableaux
list (unknown)
Transforme une liste de variables en tableau
void list (void)
Tout comme array(), list() n’est pas une véritable fonction, mais une construction syntaxique, qui permet d’assigner une
série de variables en une seule ligne.
Exemple 1. Exemple avec list()
<?php
<table>
<tr>
<th>Nom de l’employé</th>
<th>Salaire</th>
</tr>
<?php
$result = mysql_query($conn, "SELECT id, name, salary FROM employees");
while (list($id, $name, $salary) = mysql_fetch_row ($result)) {
print (" <tr>\n".
" <td><a href=\"info.php3?id=$id\">$name</a></td>\n".
" <td>$salaire</td>\n".
" </tr>\n");
}
?>
</table>
?>
Voir aussi each() et array().
natsort (PHP 4 >= 4.0RC2)
Tri d’un tableau avec l’algorithme à "ordre naturel"
void natsort (array array)
natsort() implémente un algorithme de tri qui traite les chaînes alpha-numériques comme un être humain : c’est ce qui est
appelé l’"ordre naturel". Un exemple de la différence de traitement entre un tel algorithme et un algorithme de tri de
chaînes (comme lorsqu’on utilise sort()) est illustré ci-dessous :
Exemple 1. Exemple avec natsort()
<?php
$array1 = $array2 = array ("img12.png","img10.png","img2.png","img1.png");
sort($array1);
echo "Tri Standard\n";
print_r($array1);
natsort($array2);
echo "\nTri par Ordre Naturel\n";
print_r($array2);
?>
L’exemple ci-dessous génère l’affichage suivant :
Tri Standard
190
Tableaux
Array
(
[0]
[1]
[2]
[3]
)
Tri par
Array
(
[3]
[2]
[1]
[0]
)
?>
=>
=>
=>
=>
img1.png
img10.png
img12.png
img2.png
Ordre Naturel
=>
=>
=>
=>
img1.png
img2.png
img10.png
img12.png
Pour plus de détails, rendez-vous sur le site de Martin Pool Natural Order String Comparison
(http://www.linuxcare.com.au/projects/natsort/).
Voir aussi array-multisort(), arsort(), asort(), krsort(), ksort(), natsort(), natcasesort(), rsort(), sort(), uasort(),
uksort(), usort(), strnatcmp() et strnatcasecmp().
natcasesort (PHP 4 >= 4.0RC2)
Tri d’un tableau avec l’algorithme à "ordre naturel" insensible à la casse
void natcasesort (array array)
natcasesort() implémente un algorithme de tri qui traite les chaînes alpha-numériques comme un être humain : c’est ce qui
est appelé l’"ordre naturel".
natcasesort() est la version insensible à la casse de natsort(). Voir aussi natsort() pour un exemple illustré.
Pour plus de détails, rendez-vous sur le site de : Martin Pool’s Natural Order String Comparison
(http://www.linuxcare.com.au/projects/natsort/).
Voir aussi array-multisort(), arsort(), asort(), krsort(), ksort(), natsort(), rsort(), sort(), uasort(), uksort(), usort(),
strnatcmp() et strnatcasecmp().
next (PHP 3, PHP 4 >= 4.0b1)
Avance le pointeur interne d’un tableau
mixed next (array array)
next() retourne l’élément suivant du tableau, ou FALSE s’il n’y a plus d’éléments. Le pointeur de interne de tableau est
avancé d’un élément.
next() se comporte comme current(), mais avec une différence : il avance le pointeur interne de tableau d’un élément
avant de retourner la valeur qu’il pointe. Lorsque le pointeur dépasse le dernier élément, next() retourne FALSE.
Avertissement
Si le tableau contient des éléments vides ou des zéros, next() retournera FALSE pour ces éléments.
Pour passer proprement en revue un tableau, il faut utiliser each().
Voir aussi current(), end(), prev() et reset().
191
Tableaux
pos (PHP 3, PHP 4 >= 4.0b1)
Retourne l’élément courant d’un tableau
mixed pos (array array)
pos() est une fonction alias de current().
Voir aussi end(), next(), prev() et reset().
prev (PHP 3, PHP 4 >= 4.0b1)
Recule le pointeur courant de tableau
mixed prev (array array)
prev() repositionne le pointeur interne de tableau à la dernière place qu’il occupait, ou bien retourne FALSE s’il ne reste
plus d’éléments.
Avertissement
Si le tableau contient des éléments vides, prev() retournera FALSE pour ces éléments aussi. Pour
passer en revue tous les éléments, utilisez plutôt each().
prev() se comporte exactement comme next(), mais il fait reculer le pointeur plutôt que de l’avancer.
Voir aussi current(), end() next() et reset().
range (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Crée un tableau contenant un intervalle d’éléments
array range (int low, int high)
range() retourne un tableau contenant tous les entiers depuis low jusqu’à high, inclus.
Voir aussi shuffle() (pour un exemple d’utilisation).
reset (PHP 3, PHP 4 >= 4.0b1)
Remet le pointeur interne de tableau au début
mixed reset (array array)
reset() replace le pointeur de tableau array au premier élément.
reset() retourne la valeur du premier élément.
Voir aussi current(), each(), next(), prev() et reset().
192
Tableaux
rsort (PHP 3, PHP 4 >= 4.0b1)
Trie en ordre inverse
void rsort (array array)
rsort() effectue un tri en ordre décroissant (du plus grand au plus petit).
Exemple 1. Exemple avec rsort()
<?php
$fruits = array("papaye","orange","banane","ananas");
rsort($fruits);
for (reset($fruits); list($key,$value) = each($fruits); ) {
echo "fruits[$key] = ", $value, "\n";
}
?>
Cet exemple va afficher: fruits[0] = papaye fruits[1] = orange fruits[2] = banane fruits[3] =
ananas Les fruits ont été classés dans l’ordre alphabétique inverse.
Voir aussi array-multisort(), arsort(), asort(), krsort(), ksort(), natsort(), natcasesort(), sort(), uasort(), uksort() et
usort().
shuffle (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Mélange les éléments d’un tableau
void shuffle (array array)
shuffle() mélange les éléments d’un tableau.
Exemple 1. Exemple avec shuffle()
<?php
$numbers = range (1,20);
srand (time());
shuffle ($numbers);
while (list(, $number) = each ($numbers)) {
echo "$number ";
}
?>
Voir aussi array-multisort(), arsort(), asort(), krsort(), ksort(), natsort(), natcasesort(), rsort(), sort(), uasort(),
uksort() et usort().
sizeof (PHP 3, PHP 4 >= 4.0b1)
Retourne le nombre d’élément d’un tableau
int sizeof (array array)
sizeof() retourne le nombre d’élément d’un tableau.
Voir aussi count().
193
Tableaux
sort (PHP 3, PHP 4 >= 4.0b1)
Trie le tableau
void sort (array array)
sort() trie le tableau array. Les éléments seront triés du plus petit au plus grand.
Exemple 1. Exemple avec sort()
<?php
$fruits = array("papaye","orange","banane","ananas");
sort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
echo "fruits[$key] = ".$fruits[$key]."\n";
}
?>
Cet exemple va afficher : fruits[0] = ananas fruits[1] = banane fruits[2] = orange fruits[3] =
papaye Les fruits ont été classés dans l’ordre alphabétique.
Voir aussi array-multisort(), arsort(), asort(), krsort(), ksort(), natsort(), natcasesort(), rsort(), uasort(), uksort() et
usort().
uasort (PHP 3>= 3.0.4, PHP 4 >= 4.0b1)
Trie d’un tableau en utilisant une fonction de comparaison définie par l’utilisateur.
void uasort (array array, function cmp_function)
uasort() trie un tableau en conservant la correspondance entre les index et leurs valeurs. uasort() sert essentiellement lors
de tri de tableaux associatifs où l’ordre des éléments est significatif. La fonction de comparaison utilisée est définie par
l’utilisateur.
uksort (PHP 3>= 3.0.4, PHP 4 >= 4.0b1)
Trie un tableau par ses clés en utilisant une fonction de comparaison définie par l’utilisateur
void uksort (array array, function cmp_function)
uksort() trie les clés du tableau en utilisant une fonction définie par l’utilisateur. Si un tableau doit être trié avec un critère
complexe, il est préférable d’utiliser uksort().
Exemple 1. Exemple avec uksort()
<?php
function mycompare($a, $b) {
if ($a == $b) return 0;
return ($a > $b) ? -1 : 1;
}
$a = array(4 => "quatre", 3 => "trois", 20 => "vingt", 10 => "dix");
uksort($a, mycompare);
while(list($key, $value) = each($a)) {
echo "$key: $value\n";
}
?>
194
Tableaux
Cet exemple affichera: 20: vingt 10: dix 4: quatre 3: trois
Voir aussi array-multisort(), arsort(), asort(), krsort(), ksort(), natsort(), natcasesort(), rsort(), sort(), uasort() et
usort().
usort (PHP 3>= 3.0.3, PHP 4 >= 4.0b1)
Trie un tableau en utilisant une fonction de comparaison définie par l’utilisateur
void usort (array array, function cmp_function)
usort() va trier un tableau avec ses valeurs, en utilisant une fonction définie par l’utilisateur. Si un tableau doit être trié avec
un critère complexe, il est préférable d’utiliser cette méthode.
La fonction de comparaison cmp_function doit retourner un entier, qui sera inférieur, égal ou supérieur à zéro suivant
que le premier argument est considéré comme plus petit, égal ou plus grand que le second argument. Si les deux arguments
sont égaux, leur ordre est indéfini.
Exemple 1. Exemple avec usort()
<?php
function cmp($a,$b) {
if ($a == $b) return 0;
return ($a < $b) ? -1 : 1;
}
$tableau = array(3,2,5,6,1);
usort($a, "cmp");
while(list($cle,$valeur) = each($tableau)) {
echo "$cle: $valeur\n";
}
?>
Cet exemple va afficher : 0: 6 1: 5 2: 3 3: 2 4: 1
Note : Evidemment dans ce cas trivial, rsort() serait plus approprié.
Avertissement
Les bibliothèques de tri rapides sur lesquelles reposent PHP peuvent le conduire à un plantage, si la
fonction de comparaison ne retourne pas une valeur cohérente.
Voir aussi array-multisort(), arsort(), asort(), krsort(), ksort(), natsort(), natcasesort(), rsort(), sort(), uasort() et
uksort().
195
III. Aspell
Les fonctions Aspell vous permettent de vérifier l’orthographe d’un mot, et d’offrir des suggestions de corrections.
Plusieurs langues sont disponibles, comme le franç, l’allemand, le suédois et le danois.
Note : aspell fonctionne avec de très vielles versions (jusqu’à la version .27.* ou presque) de la librairie aspell. Ce
module, et ces versions d’Aspell ne sont plus supportées. Si vous voulez utiliser les possibilités de vérifications
d’orthographe en PHP, utilisez plutôt pspell. Ce module utilise la librairie pspell qui fonctionne avec les nouvelles
versions de Aspell.
Vous avez besoin de la librairie Aspell, disponible à : http://aspell.sourceforge.net/.
196
aspell
aspell_new (PHP 3>= 3.0.7, PHP 4 >= 4.0b1)
Charge un nouveau dictionnaire
resource aspell_new (string master, string personal)
aspell_new() ouvre un nouveau dictionaire, et retourne un identifiant de dictionnaire pour utilisation ultérieure dans les
fonctions aspell.
Exemple 1. Exemple avec aspell_new()
<?php
$aspell_link=aspell_new("english");
?>
aspell_check (PHP 3>= 3.0.7, PHP 4 >= 4.0b1)
Vérifie un mot
boolean aspell_check (resource dictionary_link, string word)
aspell_check() vérifie l’orthographe d’un mot et retourne TRUE si l’orthographe est correcte, et FALSE sinon.
Exemple 1. Exemple avec aspell_check()
<?php
$aspell_link=aspell_new("english");
if (aspell_check($aspell_link,"testt")) {
echo "L’orthographe est correcte.";
} else {
echo "Désolé, l’orthographe est incorrecte.";
}
?>
aspell_check_raw (PHP 3>= 3.0.7, PHP 4 >= 4.0b1)
Vérifie un mot sans en changer la casse et sans essayer de supprimer les espaces aux extrémités.
boolean aspell_check_raw (resource dictionary_link, string word)
aspell_check_raw() vérifie l’orthographe d’un mot sans en changer la casse, et sans essayer de supprimer les espaces aux
extrémités. Elle retourne TRUE si l’orthographe est bonne, et FALSE sinon.
Exemple 1. Exemple avec aspell_check_raw()
<?php
$aspell_link=aspell_new("french");
if (aspell_check_raw($aspell_link,"testt")) {
echo "L’orthographe est OK";
} else {
echo "Attention : faute d’orthographe";
197
aspell
}
?>
aspell_suggest (PHP 3>= 3.0.7, PHP 4 >= 4.0b1)
Suggère l’orthographe d’un mot
array aspell_suggest (resource dictionary_link, string word)
aspell_suggest() retourne un tableau contenant les orthographes possibles d’un mot mal formé.
Exemple 1. Exemple avec aspell_suggest()
<?php
$aspell_link=aspell_new("french");
if (!aspell_check($aspell_link,"testt")) {
$suggestions=aspell_suggest($aspell_link,"testt");
for($i=0; $i < count($suggestions); $i++) {
echo "Orthographes envisageables : " . $suggestions[$i] . "<br>";
}
}
?>
198
IV. Nombres de grande taille
En PHP 4, ces fonctions ne sont disponibles que si l’option de configuration --enable-bcmath a été activée lors de la
compilation. En PHP 3, ces fonctions ne sont disponibles que si l’option de configuration --disable-bcmath a été n’
pas été activée lors de la compilation.
Note : Suite aux changement de licence, la librairie BCMATH est désormais distribuée séparemment. Vous pouvez
télécharger l’archive à http://www.php.net/extra/number4.tar.gz. Lisez attentivement le fichier README.BCMATH de la
distribution PHP.
199
BC math
bcadd (PHP 3, PHP 4 >= 4.0b1)
Additionne deux nombres de grande taille.
string bcadd (string left_operand, string right_operand [, int scale])
bcadd() additionne left_operand avec l’opérande right_operand et renvoie la somme sous forme de chaîne de
caractères. Le paramètre optionnel scale est utilisé pour définir le nombre de chiffres après la virgule dans le résultat.
Voir aussi bcsub().
bccomp (PHP 3, PHP 4 >= 4.0b1)
Compare deux nombres de grande taille.
int bccomp (string left_operand, string right_operand [, int scale])
bccomp() compare l’opérande left_operand avec l’opérande right_operand et renvoie le résultat sous forme de
valeur numérique (entier). Le paramètre optionnel scale est utilisé pour définir le nombre de chiffres après la virgule
utilisés lors de la comparaison. Le résultat est 0 si les deux opérandes sont égales. Si l’opérande left_operand est plus
grande que l’opérande right_operand, le résultat est 1. Si l’opérande left_operand est plus petite que l’opérande
right_operand, le résultat est -1.
bcdiv (PHP 3, PHP 4 >= 4.0b1)
Divise deux nombres de grande taille.
string bcdiv (string left_operand, string right_operand [, int scale])
bcdiv() divise l’opérande left_operand par l’opérande right_operand et renvoie le résultat. Le paramètre
optionnel scale définit le nombre de chiffres après la virgule dans le résultat.
Voir aussi bcmul().
bcmod (PHP 3, PHP 4 >= 4.0b1)
Retourne le reste d’une division entre nombre de grande taille.
string bcmod (string left_operand, string modulus)
bcmod() retourne le reste de la division entre left_operand en utilisant modulus.
Voir aussi bcdiv().
bcmul (PHP 3, PHP 4 >= 4.0b1)
Multiplie deux nombres de grande taille.
string bcmul (string left_operand, string right_operand [, int scale])
200
BC math
bcmul() multiplie l’opérande left_operand par l’opérande right_operand et renvoie le résultat. Le paramètre
optionnel scale définit le nombre de chiffres après la virgule dans le résultat.
Voir aussi bcdiv().
bcpow (PHP 3, PHP 4 >= 4.0b1)
Elève un nombre à la puissance n-ième.
string bcpow (string x, string y [, int scale])
bcpow() élève x à la puissance y. Le paramètre optionnel scale définit le nombre de chiffres après la virgule dans le
résultat.
Voir aussi bcsqrt().
bcscale (PHP 3, PHP 4 >= 4.0b1)
Détermine le nombre de décimales par défaut
string bcscale (int scale)
bcscale() définit la précision par défaut pour toutes les fonctions mathématiques sur des nombres de taille arbitraire qui
suivent et qui omettent le paramètre scale.
bcsqrt (PHP 3, PHP 4 >= 4.0b1)
Renvoie la racine carrée d’un nombre de grande taille.
string bcsqrt (string operand [, int scale])
bcsqrt() renvoie la racine carrée de l’opérande operand. Le paramètre optionnel scale définit le nombre de chiffres
après la virgule dans le résultat.
Voir aussi bcpow().
bcsub (PHP 3, PHP 4 >= 4.0b1)
Soustrait un nombre de grande taille à un autre.
string bcsub (string left_operand, string right_operand [, int scale])
bcsub() soustrait l’opérande right_operand à l’opérande left_operand et renvoie le résultat sous forme de chaîne
de caractères. Le paramètre optionnel scale définit le nombre de chiffres après la virgule dans le résultat.
Voir aussi bcadd().
201
V. Compression Bzip2
Ce module utilise les fonctions de la librairie bzip2 (http://sources.redhat.com/bzip2/), de Julian Seward pour écrire et lire
des fichier bzip2 (.bz2) de manière transparente.
Le support bzip2 par PHP n’est pas activé par défaut. Vous devez utiliser l’option de configuration --with-bz2[=DIR]
lors de la compilation de PHP pour l’activer. Ce module requiert la librairie bzip2/libbzip2, version >= 1.0.x.
Exemple de compression bzip2
Cet exemple ouvre un fichier temporaire, et écrit une ligne de test, puis il en affiche le contenu.
Exemple 1. Exemple avec bzip2
<?php
$filename = "/tmp/fichier_de_test.bz2";
$str = "Ceci est une chaîne de test.\n";
// ouvre le fichier en écriture
$bz = bzopen($filename, "w");
// écrit une chaîne dans le fichier
bzwrite($bz, $str);
// ferme le fichier
bzclose($bz);
// ouvre le fichier en lecture
$bz = bzopen($filename, "r");
// lit 10 caractères
print bzread($bz, 10);
// affiche tout le reste du fichier, puis le ferme
print bzread($bz);
bzclose($bz);
?>
202
Bzip2
bzclose (PHP 4 >= 4.0.4)
Ferme un fichier bzip2
int bzclose (resource bz)
bzclose() ferme le fichier bzip2 représenté par le pointeur bz.
bzclose() retourne TRUE en cas de succès, et FALSE sinon.
Le pointeur de fichier bz doit être valide, et avoir été ouvert avec bzopen().
Voir aussi bzopen().
bzcompress (PHP 4 >= 4.0.4)
Compresse une chaîne avec bzip2
string bzcompress (string source [, int blocksize [, int workfactor]])
bzcompress() compresse la chaîne source et retourne les données ainsi encodée.
Le paramètre optionnel blocksize spécifie la taille de bloc utilisé durant la compression, et doit être un nombre de 1 à
9, sachant que 9 représente la meilleure compression, mais qu’elle utilise plus de ressource pour ce faire. blocksize
vaut par défaut 4.
Le paramètre optionnel workfactor contrôle le comportement de la compression dans les pires cas de données
hautement répétitives. Cette valeur peut aller de 0 à 250 (0 est une valeur spéciale, et 30 la valeur par défaut). En dehors de
workfactor, le résultat sera le même.
Exemple 1. Exemple avec bzcompress()
<?php
$str = "données de test";
$bzstr = bzcompress($str, 9);
?>
Voir aussi bzdecompress().
bzdecompress (PHP 4 >= 4.0.4)
Décompresse une chaîne bzip2
string bzdecompress (string source [, int small])
bzdecompress() décompresse la chaîne source, en supposant qu’elle a été compressée avec bzip2, puis la retourne. Si le
paramètre optionnel small vaut TRUE, un autre algorithme de décompression sera utilisé : il consomme moins de
mémoire (le maximum demandé tombe autour de 2300 ko), mais fonctionne globalement à la moitié de la vitesse.
Reportez-vous à la documentation bzip2 (http://sources.redhat.com/bzip2/) pour plus de détails sur cette fonctionnalité.
203
Bzip2
Exemple 1. Exemple avec bzdecompress()
<?php
$str = $bzdecompress($bzstr);
?>
Voir aussi bzcompress().
bzerrno (PHP 4 >= 4.0.4)
Retourne le numéro d’erreur bzip2
int bzerrno (resource bz)
bzerrno() retourne le numéro d’erreur du fichier bz2 représenté par le pointeur bz.
Voir aussi bzerror() et bzerrstr().
bzerror (PHP 4 >= 4.0.4)
Retourne le numéro et le message d’erreur bzip2 dans un tableau
array bzerror (int bz)
bzerror() retourne le numéro et le message d’erreur du fichier bz2 représenté par le pointeur bz. bzerror() retourne un
tableau associatif.
Exemple 1. Exemple avec bzerror()
<?php
$error = bzerror($bz);
echo $error["errno"];
echo $error["errstr"];
?>
Voir aussi bzerrno() et bzerrstr().
bzerrstr (PHP 4 >= 4.0.4)
Retourne le message d’erreur bzip2
string bzerrstr (resource bz)
bzerrstr() retourne le message d’erreur du fichier bz2 représenté par le pointeur bz.
Voir aussi bzerrno() et bzerror().
204
Bzip2
bzflush (PHP 4 >= 4.0.4)
Force l’écriture de toutes les données compressées
int bzflush (resource bz)
bzflush() vide les buffers d’écriture du fichier représenté par bz.
bzflush() retourne TRUE en cas de succès, et FALSE sinon.
Voir aussi bzread() et bzwrite().
bzopen (PHP 4 >= 4.0.4)
Ouvre un fichier compressé avec bzip2
resource bzopen (string filename, string mode)
bzopen() ouvre un fichier bzip2 (.bz2) en écriture ou en lecture. filename est le nom du fichier à ouvrir. mode est
similaire au même paramètre de la fonction fopen() (‘r’ pour lecture, ‘w’ pour écriture, etc.).
Si l’ouverture échoue, bzopen() retourne FALSE, sinon, elle retourne un pointeur de fichier.
Exemple 1. Exemple avec bzopen()
<?php
$bz = bzopen("/tmp/foo.bz2", "r");
?>
Voir aussi bzclose().
bzread (PHP 4 >= 4.0.4)
Lecture binaire d’un fichier bzip2
string bzread (resource bz [, int length])
bzread() lit jusqu’à length octets depuis le fichier bzip2, référencé par le pointeur bz. La lecture s’arrête lorsque
length octets (non compressés) ont été lus, qu’une erreur est rencontrée, ou bien que la fin du fichier a été atteinte : le
premier des trois qui survient. Si le paramètre optionnel length est omis, bzread() lit 1024 octets (non compressés) en
même temps.
Exemple 1. Exemple avec bzread()
<?php
$bz = bzopen("/tmp/foo.bz2", "r");
$str = bzread($bz, 2048);
echo $str;
?>
Voir aussi bzwrite() et bzopen().
205
Bzip2
bzwrite (PHP 4 >= 4.0.4)
Ecriture binaire dans un fichier bzip2
int bzwrite (resource bz, string data [, int length])
bzwrite() écrit le contenu de la chaîne data dans le fichier bzip2 représenté par bz. Si le paramètre optionnel length
est fourni, l’écriture sera arrêtée après l’écriture de length octets (non compressés), ou la fin de la chaîne (le premier qui
survient).
Exemple 1. Exemple bzwrite()
<?php
$str = "données non compressées";
$bz = bzopen("/tmp/foo.bz2", "w");
bzwrite($bz, $str, strlen($str));
?>
Voir aussi bzread() et bzopen().
206
VI. Calendrier
Les fonctions de calendrier ne sont disponibles que si l’extension calendrier a été compilée. Elle est située dans les
sous-dossiers "dl" ou "ext" de votre distribution de PHP. Lisez le fichier README pour plus de détails.
L’extension de calendrier propose une série de fonctions qui simplifie les conversions entre les différents formats de
calendrier. La référence est le nombre de jour du calendrier Julien. C’est le nombre de jours depuis une date qui commence
bien au delà des dates les plus reculées dont on a besoin (située en 4000 avant J.C.). Pour convertir une date d’un calendrier
à un autre, il faut d’abord la convertir dans ce calendrier, puis convertir le résultat dans le calendrier désiré. Attention, le
nombre de jour du calendrier Julien est un système très différent du calendrier Julien!. Pour plus d’informations (en
anglais), reportez vous à http://genealogy.org/~scottlee/cal-overview.html. Les traductions issues de ces pages seront mises
entre guillemets.
207
Calendrier
JDToGregorian (PHP 3, PHP 4 >= 4.0b1)
Convertit le nombre de jours du calendrier Julien en date grégorienne.
string jdtogregorian (int julianday)
jdtogregorian() convertit le nombre de jours du calendrier Julien en une chaîne contenant une date du calendrier
grégorien, au format "mois/jour/année".
GregorianToJD (PHP 3, PHP 4 >= 4.0b1)
Convertit une date grégorienne en nombre de jours du calendrier julien.
int gregoriantojd (int month, int day, int year)
Intervalle de validité pour le calendrier grégorien : 4714 avant JC à 9999 après JC.A.D.
Bien qu’il soit possible de manipuler des dates jusqu’en 4714 avant JC, une telle utilisation n’est pas significative. En effet,
ce calendrier fut créé le 18 octobre 1582 après J.C. (ou 5 octobre 1582 en calendrier grec). Certains pays ne l’acceptèrent
que bien plus tard. Par exemple, les britanniques n’y passèrent en 1752, les Russes en 1918 et les Grecs en 1923. La plus
part des pays européens utilisaient le calendrier Julien avant le Grégorien.
Exemple 1. Fonctions calendrier
<?php
$jd = gregoriantojd(10,11,1970);
echo("$jd\n");
$gregorian = jdtogregorian($jd);
echo("$gregorian\n");
?>
JDToJulian (PHP 3, PHP 4 >= 4.0b1)
Convertit le nombre de jours du calendrier Julien en date du calendrier Julien.
string jdtojulian (int julianday)
jdtojulian() convertit le nombre de jours du calendrier Julien en une chaîne contenant la date du calendrier Julien, au
format "mois/jour/année".
JulianToJD (PHP 3, PHP 4 >= 4.0b1)
Convertit le nombre de jour du calendrier Julien en date du calendrier Julien.
int juliantojd (int month, int day, int year)
Intervalle de validité du calendrier Julien : 4713 avant JC à 9999 après J.C..
Bien qu’il soit possible de manipuler des dates jusqu’en 4713 avant JC, une telle utilisation n’est pas significative. En effet,
ce calendrier fut créé en 46 avant JC, et ses détails ne furent finalisés qu’au plus tôt en 8 après JC, et probablement pas
avant le 4ème siècle après JC. De plus, le début de l’année variait suivant les peuples, certains n’acceptant pas janvier
comme premier mois de l’année.
208
Calendrier
JDToJewish (PHP 3, PHP 4 >= 4.0b1)
Convertit le nombre de jours du calendrier julien en date du calendrier juif.
string jdtojewish (int julianday)
jdtojewish() convertit le nombre de jours du calendrier julien en date du calendrier juif.
JewishToJD (PHP 3, PHP 4 >= 4.0b1)
Convertit une date du calendrier juif en nombre de jours du calendrier julien.
int jewishtojd (int month, int day, int year)
Bien qu’il soit possible de manipuler des dates à partir de l’an 1 (3761 avant JC), une telle utilisation a peu de sens.
Le calendrier juif a été utilisé depuis plusieurs dizaines de siècles, mais dans les premiers temps, il n’y avait pas de formule
pour déterminer le début du mois. Un nouveau mois commencait quand une nouvelle lune était observée.
JDToFrench (PHP 3, PHP 4 >= 4.0b1)
Convertit le nombre de jours du calendrier julien en date du calendrier français républicain
string jdtofrench (int juliandaycount)
jdtofrench() convertit le nombre de jours du calendrier julien en date du calendrier français républicain.
FrenchToJD (PHP 3, PHP 4 >= 4.0b1)
Convertit une date du calendrier français républicain en nombre de jours du calendrier julien.
int frenchtojd (int month, int day, int year)
frenchtojd() convertit une date du calendrier français républicain en nombre de jour du calendrier julien.
Ces fonctions convertissent les dates comprises entre l’an 1 et l’an 14 (22 September 1792 à 22 September 1806 en
calendrier grégorien). Cela couvre plus que la durée d’existence de ce calendrier.
JDMonthName (PHP 3, PHP 4 >= 4.0b1)
Retourne le nom du mois.
string jdmonthname (int julianday, int mode)
jdmonthname() retourne une chaîne contenant le nom du mois. mode indique de quel calendrier dépend ce mois, et quel
type de nom doit être retourné.
209
Calendrier
Mode
Tableau 1. Modes de calendrier
Signification
Mode
Signification
0
Grégorien - abrégé
1
Grégorien
2
Julien - abrégé
3
Julien
4
Juif
5
Républicain français
JDDayOfWeek (PHP 3, PHP 4 >= 4.0b1)
Retourne le numéro du jour de la semaine.
mixed jddayofweek (int julianday, int mode)
jddayofweek() retourne le numéro du jour de la semaine. Peut retourner une chaîne ou un entier, en fonction du mode.
Tableau 1. Modes
Mode
Signification
0
Retourne le numéro du jour comme un entier (0=dimanche,
1=lundi, etc.)
1
Retourne une chaîne contenant le nom du jour (anglais
grégorien)
2
Retourne une chaîne contenant le nom abrégé du jour de la
semaine (anglais grégorien).
easter_date (PHP 3>= 3.0.9, PHP 4 >= 4.0RC2)
Retourne un timestamp UNIX pour Pàques, à minuit, pour une année donnée.
int easter_date (int year)
easter_date() retourne un timestamp UNIX pour Pàques, à minuit, pour une année donnée. Si l’année n’est pas précisée,
c’est l’année en cours qui est utilisée.
ATTENTION: easter_date() génére une alerte (Warning) si la date tombe hors de la zone de validité des timestamp UNIX
(i.e. avant 1970 ou après 2037).
Exemple 1. Exemples avec easter_date()
echo date( "M-d-Y", easter_date(1999) );
echo date( "M-d-Y", easter_date(2000) );
echo date( "M-d-Y", easter_date(2001) );
/* "04 avril 1999" */
/* "23 avril 2000" */
/* "15 avril 2001" */
La date de Pàques a été fixée par le concile de Nicée, en 325 de notre ère, comme étant le dimanche après la première lune
pleine qui suit l’équinoxe de printemps. L’équinoxe de printemps est considéré comme étant toujours le 21 mars, ce qui
210
Calendrier
réduit le problème au calcul de la date de la lune pleine qui suit, et le dimanche suivant. L’algorithme fut introduit vers 532,
par Dionysius Exiguus. Avec le calendrier Julien, (pour les années avant 1753), un cycle de 19 ans suffit pour connaître les
date des phases de la lune. Avec le calendrier grégorien, (à partir des années 1753, concu par Clavius et Lilius, puis
introduit par le pape Gregoire XIII en Octobre 1582, et en Grande Bretagne et ses colonies en septembre 1752), deux
facteurs de corrections ont été ajoutés pour rendre le cycle plus précis.
(Ce code est basé sur le programme en C de Simon Kershaw, <[email protected]>)
Voir easter_days() pour les calculs de date de Pàques avant 1970 et apres 2037.
easter_days (PHP 3>= 3.0.9, PHP 4 >= 4.0RC2)
Retourne le nombre de jour entre le 21 Mars et Pàques, pour une année donnée.
int easter_days (int year)
easter_days() retourne le nombre de jour entre le 21 Mars et Pàques, pour une année donnée. Si l’année n’est pas précisée,
l’année en cours est utilisée par défaut.
easter_days() peut être utilisée à la place de easter_date() pour calculer la date de Pàques, pour les années qui tombent
hors de l’intervalle de validité des timestamps UNIX (i.e. avant 1970 ou après 2037).
Exemple 1. Exemple avec easter_days()
<?php
echo easter_days(1999);
echo easter_days(1492);
echo easter_days(1913);
?>
/* 14, i.e. 4 Avril
/* 32, i.e. 22 Avril
/* 2, i.e. 23 Mars
*/
*/
*/
La date de Pàques a été fixée par le concile de Nicée, en 325 de notre ère, comme étant le dimanche après la première lune
pleine qui suit l’équinoxe de printemps. L’équinoxe de printemps est considéré comme étant toujours le 21 mars, ce qui
réduit le problème au calcul de la date de la lune pleine qui suit, et le dimanche suivant. L’algorithme fut introduit vers 532,
par Dionysius Exiguus. Avec le calendrier Julien, (pour les années avant 1753), un cycle de 19 ans suffit pour connaître les
date des phases de la lune. Avec le calendrier grégorien, (à partir des années 1753, concu par Clavius et Lilius, puis
introduit par le pape Gregoire XIII en Octobre 1582, et en Grande Bretagne et ses colonies en septembre 1752), deux
facteurs de corrections ont été ajoutés pour rendre le cycle plus précis.
(Ce code est basé sur le programme en C de Simon Kershaw, <[email protected]>)
Voir aussi easter_date().
unixtojd (PHP 4 >= 4.0RC2)
Convertit un timestamp UNIX en nombre de jours Julien
int unixtojd ([int timestamp])
unixtojd() retourne le nombre de jours juliens du timestamp UNIX timestamp (nombre de secondes depuis le
1/1/1970), ou pour le jour courant si timestamp est omis.
Voir aussi jdtounix().
Note : unixtojd() n’est disponible qu’à partir de la version PHP 4.0RC1.
211
Calendrier
jdtounix (PHP 4 >= 4.0RC2)
Convertit un nombre de jour Julien en timestamp UNIX
int jdtounix (int jday)
jdtounix() retourne un timestamp UNIX correspondant au nombre de jour julien jday ou FALSE si jday n’est pas dans
l’intervalle de validité de l’époque UNIX. (années grégorienne entre 1970 et 2037 ou 2440588 <= jday <= 2465342 ).
Voir aussi jdtounix().
Note : jdtounix() n’est disponible qu’à partir de la version PHP 4.0RC1.
212
VII. Paiement CCVS
Ces fonctions font l’interface avec les API CCVS, vous permettant de travailler directement avec CCVS depuis vos scripts
PHP. CCVS est la solution apportée par RedHat (http://www.redhat.com/) au problème de l’intermediaire, lors du
traitement de transactions de cartes de crédit. Il vous permet travailler directment avec les maisons de crédits, via votre
boîte *nix et un modem. En utilisant le module CCVS pour PHP, vous pouvez effectuer des transactions avec les cartes de
crédits, directement depuis vos scripts PHP via CCVS. La suite vous montrera comment procéder.
Pour activer le support CCVS de PHP, commencez par vérifier votre installation CCVS. Vous devez configurer PHP avec
l’option --with-ccvs. Si vous utilisez cette option sans spécifier le chemin de votre installation, PHP essaiera de la
trouver à sa position par défaut (/usr/local/ccvs). Si CCVS est installé dans un autre dossier, lancez la configuration avec :
--with-ccvs=$ccvs_path, où $ccvs_path est le chemin de votre installation CCVS. Notez bien que CCVS requiert que
$ccvs_path/lib et $ccvs_path/include existent, et qu’ils contiennent respectivement cv_api.h et libccvs.a sous include et lib.
De plus, un démon ccvsd doit être disponible sur votre configuration, et qu’il soit accessible à vos scripts PHP. Assurez
vous aussi que l’utilisateur qui exécute les scripts PHP est le même que celui qui a installé CCVS (i.e. si vous avez installé
CCVS avec l’utilisateur ’ccvs’, vos scripts PHP doivent tourner aussi en ’ccvs’).
Plus de détails sur CCVS sont disponibles à http://www.redhat.com/products/ccvs.
Cette documentation est en chantier. Jusqu’à sa finalisation, RedHat entretient une version légèrement démodée mais bien
pratique à http://www.redhat.com/products/ccvs/support/CCVS3.3docs/ProgPHP.html.
213
CCVS
(unknown)
()
214
VIII. Support COM pour Windows
Ces fonctions ne sont disponibles que sous les versions Windows de PHP. Elles ont été ajoutées dans PHP 4.
215
COM
com_load (PHP 3>= 3.0.3, PHP 4 >= 4.0b1)
Crée une référence sur un composant COM
resource com_load (string module_name [, string server_name])
com_load() crée une nouvelle référence au composant COM module_name, et retourne une référence dessus.
com_load() retourne FALSE en cas d’échec.
com_invoke (PHP 3>= 3.0.3, PHP 4 >= 4.0b1)
Appelle une méthode d’un composant
mixed com_invoke (resource com_object, string function_name, mixed [function parameters,
...])
com_invoke() appelle la méthode function_name du composant COM com_object. com_invoke() retourne FALSE
en cas d’erreur, sinon retourne le résultat de la fonction function_name en cas de succès.
com_propget (PHP 3>= 3.0.3, PHP 4 >= 4.0b1)
Lit la valeur d’un propriété d’un composant COM
mixed com_propget (resource com_object, string property)
com_propget() est un alias de com_get().
com_get (PHP 3>= 3.0.3, PHP 4 >= 4.0b1)
Lit la valeur d’un propriété d’un composant COM
mixed com_get (resource com_object, string property)
com_get() retourne la valeur de la propriété property du composant COM com_object. com_get() retourne FALSE
en cas d’erreur.
com_propput (PHP 3>= 3.0.3, PHP 4 >= 4.0b1)
Modifie une propriété d’un composant COM
void com_propput (resource com_object, string property, mixed value)
com_propput() est un alias de com_set().
216
COM
com_propset (PHP 3>= 3.0.3, PHP 4 >= 4.0b1)
Modifie une propriété d’un composant COM
void com_propset (resource com_object, string property, mixed value)
Cette fonction est un alias de com_propput().
com_set (PHP 3>= 3.0.3, PHP 4 >= 4.0b1)
Modifie une propriété d’un composant COM
void com_set (resource com_object, string property, mixed value)
com_set() remplace la valeur de la propriété property du composante COM com_object par value. com_set()
retourne TRUE en cas de succès, et FALSE sinon.
217
IX. Objets
Introduction
About
Ces fonctions permettent de gérer les classes et les objets. Vous pouvez notamment connaître le nom de la classe d’un
objet, ses membres et ses méthodes, et tous les objets parents (les classes qui sont étendues par la classe d’un objet).
Exemple d’utilisation
Dans cet exemple, on définit une classe de base, et une extension. La classe de base définit un légume, s’il est mangeable
ou pas, et sa couleur. La sous-classe epinard ajoute une méthode pour le cuisiner, et une autre pour savoir s’il est cuisiné.
Exemple 1. classes.inc
<?php
// classe de base, avec ses membres et ses méthodes
class Legume {
var $mangeable;
var $couleur;
function legume( $mangeable, $couleur="green" ) {
$this->mangeable = $mangeable;
$this->couleur = $couleur;
}
function est_mangeable() {
return $this->mangeable;
}
function quelle_couleur() {
return $this->couleur;
}
} // fin de la classe Legume
// extend la classe de base
class Epinard extends Legume {
var $cuit = FALSE;
function Epinard() {
$this->Legume( TRUE, "green" );
}
function cuisine() {
$this->cuit = TRUE;
}
function est_cuit() {
return $this->cuit;
}
} // fin de la classe Epinard
?>
Lorsqu’on instantie deux objets de ces classes, et qu’on affiche leurs informations, on affiche aussi leur héritage. On définit
ici des utilitaires qui servent essentiellement à afficher ces informations proprement.
Exemple 2. test_script.php
<pre>
<?php
include "classes.inc";
// utilitaires
function print_vars($obj) {
$arr = get_object_vars($obj);
while (list($prop, $val) = each($arr))
218
Classes et Objets
echo "\t$prop = $val\n";
}
function print_methods($obj) {
$arr = get_class_methods(get_class($obj));
foreach ($arr as $method)
echo "\tfunction $method()\n";
}
function class_parentage($obj, $class) {
global $$obj;
if (is_subclass_of($$obj, $class)) {
echo "L’objet $obj belongs to class ".get_class($$obj);
echo " est une sous-classe de $class\n";
} else {
echo "L’objet $obj n’est pas une sous classe $class\n";
}
}
// instantie 2 objets
$legume = new Legume(TRUE,"blue");
$feuilles = new Epinard();
// affiche les informations sur ces objets
echo "legume: CLASS ".get_class($legume)."\n";
echo "feuilles: CLASS ".get_class($feuilles);
echo ", PARENT ".get_parent_class($feuilles)."\n";
// affiche les propriétés du légume
echo "\nlégume: Propriétés \n";
print_vars($legume);
// et les méthodes de "feuilles"
echo "\nfeuilles: Methods\n";
print_methods($feuilles);
echo "\nParentée:\n";
class_parentage("feuilles", "Epinard");
class_parentage("feuilles", "Legume");
?>
</pre>
Il est important de noter que dans les exemples ci-dessus, les objets $feuilles sont une instance de Epinard qui est une
sous-classe de Legume, donc la dernière partie du script va afficher :
[...]
Parentée:
L’objet feuilles n’est pas une sous classe Spinach
L’objet feuilles est une sous-classe de Legume
219
Classes et Objets
call_user_method (PHP 3>= 3.0.3, PHP 4 >= 4.0b1)
Appelle une méthode utilisateur d’un objet
mixed call_user_method
(string method_name, object obj [, mixed parameter [, mixed ...]])
Appelle la méthode method_name depuis l’objet obj. Un exemple d’utilisation de cet objet est présenté ci-dessous, où
une classe est définie, puis instantiée. On utilise alors call_user_method() pour appeler indirectement les méthodes
print_info.
<?php
class Pays {
var $NOM;
var $TLD;
function Pays($nom, $tld) {
$this->NOM = $nom;
$this->TLD = $tld;
}
function print_info($prestr="") {
echo $prestr."Pays: ".$this->NOM."\n";
echo $prestr."Nom de domaine: ".$this->TLD."\n";
}
}
$unPays = new Pays("Pérou","pe");
echo "* Appel de la méthode directement\n";
$unPays->print_info();
echo "\n* Appel de la méthode indirectement\n";
call_user_method ("print_info", $unPays, "\t");
?>
Voir aussi call_user_func_array(). call_user_func() et call_user_method_array().
call_user_method_array (PHP 4 >= 4.0.5)
Appelle une méthode utilisateur avec un tableau de paramètres
mixed call_user_method_array
(string method_name, object obj [, array paramarr])
call_user_method_array() appelle la méthode method_name de l’object obj, en utilisant les paramètres paramarr,
rassemblés sous forme de tableau.
Voir aussi call_user_func_array(), call_user_func() et call_user_method().
Note : call_user_method_array() a été ajoutée en version PHP 4.05.
class_exists (PHP 4 >= 4.0b4)
Vérifie qu’une classe a été définie
boolean class_exists (string class_name)
class_exists() retourne TRUE si la classe class_name a été définie, et FALSE sinon.
220
Classes et Objets
get_class (PHP 4 )
Retourne la classe d’un objet
string get_class (object obj)
get_class() retourne la classe de l’objet obj.
Voir aussi get_parent_class() et is_subclass_of()
get_class_methods (PHP 4 >= 4.0RC1)
Retourne les noms des méthodes d’une classe.
array get_class_methods (string class_name)
get_class_methods() retourne un tableau contenant les noms des méthodes de la classe class_name.
Note : A partir de PHP 4.0.6, vous pouvez spécifier l’objet lui-même, au lieu de sa classe class_name. Par exemple :
<?php
$class_methods = get_class_methods($my_class);
?>
Exemple 1. Exemple avec get_class_methods()
<?php
class myclass {
// constructeur
function maclasse() {
return(TRUE);
}
// méthode 1
function myfunc1() {
return(TRUE);
}
// méthode 2
function mafunc2() {
return(TRUE);
}
}
$ma_classe = new maclasse();
$class_methods = get_class_methods(get_class($ma_class));
foreach ($class_methods as $method_name) {
echo "$method_name\n";
}
?>
Va afficher :
maclass
mafunc1
mafunc2
221
Classes et Objets
Voir aussi get_class_vars() et get_object_vars()
get_class_vars (PHP 4 >= 4.0RC1)
Retourne les valeurs par défaut des attributs d’une classe.
array get_class_vars (string class_name)
get_class_vars() retourne un tableau contenant les valeurs par défaut des attributs de la classe class_name.
Note : Les variables de classe qui ne sont pas encore initialisées ne seront pas retournées par get_class_vars().
Exemple 1. Exemple get_class_vars()
<?php
class maclasse {
var $var1; // Pas de valeur par défaut
var $var2 = "xyz";
var $var3 = 100;
// constructeur
function maclasse() {
return(TRUE);
}
}
$ma_classe = new maclasse();
$class_vars = get_class_vars(get_class($ma_classe));
foreach ($class_vars as $name => $value) {
echo "$name : $value\n";
}
?>
va afficher :
var2 : xyz
var3 : 100
get_declared_classes (PHP 4 >= 4.0RC2)
Liste toutes les classes définies
array get_declared_classes (void)
get_declared_classes() retourne un tableau contenant la liste des fonctions déclarées dans le script courant.
Note : En PHP 4.0.1pl2, trois classes supplémentaires sont retournées, au début de ce tableau : stdClass (définie
dans Zend/zend.c), OverloadedTestClass (définie dans ext/standard/basic_functions.c) et Directory (définie
dans ext/standard/dir.c).
222
Classes et Objets
get_object_vars (PHP 4 >= 4.0RC1)
Retourne un tableau associatif des propriétés d’un objet
array get_object_vars (object obj)
get_object_vars() retourne un tableau associatif contenant les propriétés de l’objet obj. Les clés du tableau sont les noms
des propriétés de l’objet.Si des variables déclarées dans la classe de l’objet obj, n’ont pas été assignées, elles ne seront pas
retournées dans le tableau.
Exemple 1. Exemple avec get_object_vars()
<?php
class Point2D {
var $x, $y;
var $nom;
function Point2D($x, $y) {
$this->x = $x;
$this->y = $y;
}
function donne_nom($nom) {
$this->nom = $nom;
}
function LitPoint() {
return array("x" -> $this->x,
"y" -> $this->y,
"nom" -> $this->nom);
}
}
$p1 = new Point2D(1.233, 3.445);
print_r(get_object_vars($p1));
// "$nom" est déclaré, mais non défini
// Array
// (
//
[x] -> 1.233
//
[y] -> 3.445
// )
$p1->setnom("point #1");
print_r(get_object_vars($p1));
// Array
// (
//
[x] -> 1.233
//
[y] -> 3.445
//
[nom] -> point #1
// )
?>
Voir aussi get_class_methods() et get_class_vars()
get_parent_class (PHP 4 )
Retourne le nom de la classe d’un objet
string get_parent_class (object obj)
get_parent_class() retourne le nom de la classe de l’objet obj.
Voir aussi get_class() et is_subclass_of()
223
Classes et Objets
is_subclass_of (PHP 4 >= 4.0b4)
Détermine si un objet est une sous-classe
boolean is_subclass_of (object obj, string superclass)
is_subclass_of() retourne TRUE si l’objet obj est une sous-classe de superclass, FALSE sinon.
Voir aussi get_class() et get_parent_class()
method_exists (PHP 4 )
Vérifie que la méthode existe pour une classe.
boolean method_exists (object object, string method_name)
method_exists() retourne TRUE si la méthode method_name a été définie pour la classe object, et sinon, retourne
FALSE.
224
X. ClibPDF
ClibPDF vous permet de créer des documents PDF avec PHP. Cette librairie est disponible à FastIO
(http://www.fastio.com/) mais n’est pas gratuite. Vous devez lire la licence avant de l’utiliser. Si vous ne pouvez pas
accepter la licence, essayez plutôt pdflib de Thomas Merz, qui est aussi très puissante. Les fonctionnalités de ClibPDF et
ses API sont très similaires à celles de Thomas Merz’s pdflib mais, selon FastIO, ClibPDF est plus rapide, et crée des
documents plus compacts. Cela peut avoir changé depuis la version 2.0 de pdflib. Un test de vitesse (avec pdfclock.c issue
des exemples de pdflib 2.0 transformé en script PHP) ne montre aucune différence de vitesse. La taille des fichiers est
similaire si la compression n’est pas utilisée. Il vaut mieux alors essayer les deux, et choisir celui qui vous convient le
mieux.
Cette documentation devrait être lue avec le manuel ClibPDF sous la main, car il est beaucoup plus détaillé.
Beaucoup de fonctions sont natives de ClibPDF et se retrouvent dans le module PHP, et tout comme pdflib, elles ont le
même nom. Toutes les fonctions, hormis cpdf_open() utilisent un pointeur sur un document comme premier paramètre.
Actuellement, ce pointeur n’est pas utilisé en interne, car ClibPDF ne supporte pas la création de plusieurs documents PDF
simultanément. En fait, il ne vaut mieux pas l’envisager, car les résultats sont aléatoires. Je ne veux même pas imaginer les
problèmes qui pourrait se poser avec les environnements multi-tâches. Selon l’auteur de ClibPDF, cette situation va
changer dans les prochaînes versions (lorsque cette documentation a été traduite, c’était la version 1.10). Si vous avez
besoin de cette fonctionnalité, utilisez pdflib.
Note : La fonction cpdf_set_font() a changé depuis le PHP 3.0 pour supporter les polices asiatiques. Le paramètre
d’encodage n’est plus un entier, mais une chaîne.
Un des gros avantage de ClibPDF sur pdflib est la possibilité de créer complétement un document sans passer par des
fichiers temporaires. Il est aussi possible d’utiliser des coordonnées avec une unité de longeur prédéfinie. C’est une
fonctionnalité bien pratique mais qui peut être simulée avec pdf_translate().
Un autre atout de ClibPDF est que chaque page peut être modifiée à tout moment même si une nouvelle page a été ouverte.
La fonction cpdf_set_current_page() vous permet de quitter temporairement une page, et d’en modifier une autre.
La plus part des fonctions sont très simples d’emploi. Le plus difficile est probablement de créer un document PDF simple.
L’exemple suivant devrait vous aider à démarrer. La page contient du texte qui utilise la police "Times-Roman" en taille 30,
outlined. Le texte est souligné.
Exemple 1. Exemple simple ClibPDF
<?php
$cpdf = cpdf_open(0);
cpdf_page_init($cpdf, 1, 0, 595, 842);
cpdf_add_outline($cpdf, 0, 0, 0, 1, "Page 1");
cpdf_set_font($cpdf, "Times-Roman", 30, "WinAnsiEncoding");
cpdf_set_text_rendering($cpdf, 1);
cpdf_text($cpdf, "Times Roman outlined", 50, 750);
cpdf_moveto($cpdf, 50, 740);
cpdf_lineto($cpdf, 330, 740);
cpdf_stroke($cpdf);
cpdf_finalize($cpdf);
Header("Content-type: application/pdf");
cpdf_output_buffer($cpdf);
cpdf_close($cpdf);
?>
La distribution pdflib contient un exemple plus complet, qui crée des séries de pages avec une horloge. Voici cet exemple
convertit en script PHP qui utilise l’extension ClibPDF :
Exemple 2. Exemple pdfclock de la distribution pdflib 2.0
<?php
$radius = 200;
$margin = 20;
$pagecount = 40;
$pdf = cpdf_open(0);
225
ClibPDF
cpdf_set_creator($pdf, "pdf_clock.php3");
cpdf_set_title($pdf, "Analog Clock");
while($pagecount-- > 0) {
cpdf_page_init($pdf, $pagecount+1, 0, 2 * ($radius + $margin), 2 * ($radius + $margin), 1.0);
cpdf_set_page_animation($pdf, 4, 0.5, 0, 0, 0); /* wipe */
cpdf_translate($pdf, $radius + $margin, $radius + $margin);
cpdf_save($pdf);
cpdf_setrgbcolor($pdf, 0.0, 0.0, 1.0);
/* indications des minutes */
cpdf_setlinewidth($pdf, 2.0);
for ($alpha = 0; $alpha < 360; $alpha += 6)
{
cpdf_rotate($pdf, 6.0);
cpdf_moveto($pdf, $radius, 0.0);
cpdf_lineto($pdf, $radius-$margin/3, 0.0);
cpdf_stroke($pdf);
}
cpdf_restore($pdf);
cpdf_save($pdf);
/* Indications des 5 minutes */
cpdf_setlinewidth($pdf, 3.0);
for ($alpha = 0; $alpha < 360; $alpha += 30)
{
cpdf_rotate($pdf, 30.0);
cpdf_moveto($pdf, $radius, 0.0);
cpdf_lineto($pdf, $radius-$margin, 0.0);
cpdf_stroke($pdf);
}
$ltime = getdate();
/* aiguille des heures */
cpdf_save($pdf);
cpdf_rotate($pdf, -(($ltime[’minutes’]/60.0) + $ltime[’hours’] - 3.0) * 30.0);
cpdf_moveto($pdf, -$radius/10, -$radius/20);
cpdf_lineto($pdf, $radius/2, 0.0);
cpdf_lineto($pdf, -$radius/10, $radius/20);
cpdf_closepath($pdf);
cpdf_fill($pdf);
cpdf_restore($pdf);
/* aiguille des minutes */
cpdf_save($pdf);
cpdf_rotate($pdf, -(($ltime[’seconds’]/60.0) + $ltime[’minutes’] - 15.0) * 6.0);
cpdf_moveto($pdf, -$radius/10, -$radius/20);
cpdf_lineto($pdf, $radius * 0.8, 0.0);
cpdf_lineto($pdf, -$radius/10, $radius/20);
cpdf_closepath($pdf);
cpdf_fill($pdf);
cpdf_restore($pdf);
/* aiguille des secondes */
cpdf_setrgbcolor($pdf, 1.0, 0.0, 0.0);
cpdf_setlinewidth($pdf, 2);
cpdf_save($pdf);
cpdf_rotate($pdf, -(($ltime[’seconds’] - 15.0) * 6.0));
cpdf_moveto($pdf, -$radius/5, 0.0);
cpdf_lineto($pdf, $radius, 0.0);
cpdf_stroke($pdf);
cpdf_restore($pdf);
/* Un petit cercle au centre */
cpdf_circle($pdf, 0, 0, $radius/30);
cpdf_fill($pdf);
cpdf_restore($pdf);
cpdf_finalize_page($pdf, $pagecount+1);
}
cpdf_finalize($pdf);
header("Content-type: application/pdf");
cpdf_output_buffer($pdf);
226
ClibPDF
cpdf_close($pdf);
?>
227
ClibPDF
cpdf_global_set_document_limits (PHP 4 >= 4.0b4)
Fixe les limites d’un document PDF.
void cpdf_global_set_document_limits
maxannotations, int maxobjects)
(int maxpages, int maxfonts, int maximages, int
cpdf_global_set_document_limits() permet de fixer plusieurs limites au document PDF.
cpdf_global_set_document_limits() doit être appelé avant cpdf_open() pour être effective. Elle fixe les limites de tous les
documents ouverts après.
Voir aussi cpdf_open().
cpdf_set_creator (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Fixe le créateur d’un document PDF.
void cpdf_set_creator (string creator)
cpdf_set_creator() fixe le créateur d’un document PDF.
Voir aussi cpdf_set_subject(), cpdf_set_title() et cpdf_set_keywords().
cpdf_set_title (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Fixe le titre d’un document PDF.
void cpdf_set_title (string title)
cpdf_set_title() fixe le titre d’un document PDF.
Voir aussi cpdf_set_subject(), cpdf_set_creator() et cpdf_set_keywords().
cpdf_set_subject (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Fixe le sujet d’un document PDF.
void cpdf_set_subject (string subject)
cpdf_set_subject() fixe le sujet d’un document PDF.
Voir aussi cpdf_set_title(), cpdf_set_creator() et cpdf_set_keywords().
cpdf_set_keywords (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Fixe les mot clés d’un document PDF.
void cpdf_set_keywords (string keywords)
cpdf_set_keywords() fixe les mots-clé d’un document PDF.
Voir aussi cpdf_set_title(), cpdf_set_creator() et cpdf_set_subject().
228
ClibPDF
cpdf_open (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Ouvre un nouveau document PDF.
resource cpdf_open (int compression, string filename)
cpdf_open() ouvre un nouveau document PDF. Le premier paramètre compression active ou pas la compression,
suivant qu’il vaut 0 ou 1. Le deuxième paramètre, optionnel, choisit le fichier de destination du document. Si il est omis, le
document sera écrit en mémoire, et pourra être écrit dans un fichier avec cpdf_save_to_file() ou envoyé à l’affichage avec
cpdf_output_buffer().
Note : La valeur retournée sera nécessaire pour les autres fonctions de ClibPDF comme premier paramètre.
La librairie ClibPDF prend le nom de fichier "-" comme synonyme de stdout. Si PHP est compilé comme un module
apache, cela ne fonctionnera pas, car la méthode d’envoie des données de ClibPDF ne fonctionne pas avec Apache.
Vous pouvez résoudre ce problème en ne fournissant pas de nom de fichier, et en utilisant la fonction
cpdf_output_buffer() pour afficher le document PDF.
Voir aussi cpdf_close() et cpdf_output_buffer().
cpdf_close (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Ferme un fichier PDF.
void cpdf_close (resource pdf_document)
cpdf_close() ferme un fichier PDF. Ce doit être la dernière fonction appelée, et elle apparaît même après cpdf_finalize(),
cpdf_output_buffer() et cpdf_save_to_file().
Voir aussi cpdf_open().
cpdf_page_init (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Commence une nouvelle page.
void cpdf_page_init (resource pdf_document, int page_number, int orientation, double
height, double width [, double unit])
cpdf_page_init() commence une nouvelle page, avec la hauteur height et la largeur width. La page a le numéro
page_number et l’orientation orientation. orientation vaut 0 pour portrait et 1 pour paysage. Le dernier
paramètre, optionnel, unit, fixe l’unité pour le système de coordonnées. Cette valeur doit être un nombre de points
postscript, par unité. Etant donné que un pouce (inch) vaut 72 points, une valeur de 72 vaudra un pouce (inch). Par défaut,
cette valeur vaut 72.
Voir aussi cpdf_set_current_page().
cpdf_finalize_page (PHP 3>= 3.0.10, PHP 4 >= 4.0b4)
Termine une page.
void cpdf_finalize_page (resource pdf_document, int page_number)
229
ClibPDF
cpdf_finalize_page() termine la page de numéro page_number. cpdf_finalize_page() ne fait qu’une sauvegarde
mémoire. Les pages terminées prennent moins de place, mais ne peuvent plus être modifiées.
Voir aussi cpdf_page_init().
cpdf_finalize (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Termine un document.
void cpdf_finalize (resource pdf_document)
cpdf_finalize() termine un document. Vous devez toujours appeler cpdf_close() après.
Voir aussi cpdf_close().
cpdf_output_buffer (PHP 3>= 3.0.9, PHP 4 >= 4.0b4)
Envoie le document PDF dans un buffer mémoire.
void cpdf_output_buffer (resource pdf_document)
cpdf_output_buffer() envoie le document PDF dans un buffer mémoire de stdout. Le document doit avoir été créé en
mémoire, ce qui est le cas si cpdf_open() a été appelée dans paramètre de nom de fichier.
Voir aussi cpdf_open().
cpdf_save_to_file (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Ecrit un document PDF dans un fichier.
void cpdf_save_to_file (resource pdf_document, string filename)
cpdf_save_to_file() écrit un document PDF dans un fichier, s’il a été créé en mémoire. cpdf_save_to_file() n’est pas
nécessaire si un nom de fichier a été fourni lors de l’appel à cpdf_open().
Voir aussi cpdf_output_buffer() et cpdf_open().
cpdf_set_current_page (PHP 3>= 3.0.9, PHP 4 >= 4.0b4)
Fixe la page courante.
void cpdf_set_current_page (resource pdf_document, int page_number)
cpdf_set_current_page() fixe la page courante, oú toutes les prochaînes opérations vont avoir lieu. On peut changer de
page jusqu’à ce qu’une page soit terminée avec cpdf_finalize_page().
Voir aussi cpdf_finalize_page().
230
ClibPDF
cpdf_begin_text (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Démarre une section de texte.
void cpdf_begin_text (resource pdf_document)
cpdf_begin_text() démarre une section de texte. Elle doit être terminée avec cpdf_end_text().
Exemple 1. Affichage de texte
<?php
cpdf_begin_text($pdf);
cpdf_set_font($pdf, 16, "Helvetica", "WinAnsiEncoding");
cpdf_text($pdf, 100, 100, "Some text");
cpdf_end_text($pdf)
?>
Voir aussi cpdf_end_text().
cpdf_end_text (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Termine une section de texte.
void cpdf_end_text (resource pdf_document)
cpdf_end_text() termine une section de texte, commencée avec cpdf_begin_text().
Exemple 1. Affichage de texte
<?php
cpdf_begin_text($pdf);
cpdf_set_font($pdf, 16, "Helvetica", "WinAnsiEncoding");
cpdf_text($pdf, 100, 100, "Some text");
cpdf_end_text($pdf)
?>
Voir aussi cpdf_begin_text().
cpdf_show (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Imprime un texte à la position courante.
void cpdf_show (resource pdf_document, string text)
cpdf_show() imprime la chaîne text, à la position courante.
Voir aussi cpdf_text(), cpdf_begin_text() et cpdf_end_text().
231
ClibPDF
cpdf_show_xy (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Affiche un texte à une position.
void cpdf_show_xy (resource pdf_document, string text, double x-coor, double y-coor [, int
mode])
cpdf_show_xy() imprime la chaîne text, à la position de coordonnées (x-koor, y-koor). Le dernier paramètre
optionnel est une unité de longueur. Si il prend la valeur de 0 (ou si il est omis), c’est la valeur par défaut (72) qui est
utilisé.
Note : The function cpdf_show_xy() est identique à cpdf_text() sans les options.
Voir aussi cpdf_text().
cpdf_text (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Imprime un texte avec des options.
void cpdf_text (resource pdf_document, string text, double x-coor, double y-coor [, int
mode [, double orientation [, int alignmode]]])
cpdf_text() imprime le text text à la position de coordonnées (x-koor, y-koor). Le paramètre mode est une unité de
longueur. Si il prend la valeur de 0 (ou si il est omis), c’est la valeur par défaut (72) qui est utilisé.
Le paramètre optionel orientation est un angle de rotation du texte, en degrés. Le paramètre optionnel alignmode
détermine l’alignement du texte. Reportez vous à la doc de ClibPDF, pour les valeurs possibles.
Voir aussi cpdf_show_xy().
cpdf_set_font (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Sélectionne la police courante et sa taille.
void cpdf_set_font (resource pdf_document, string font name, double size, string encoding)
cpdf_set_font() selectionne la police courante, sa taille et l’encodage. Actuellement, seules les polices postscript sont
supportées.
Le dernier paramètre encoding peut prendre les valeurs suivantes : "MacRomanEncoding", "MacExpertEncoding",
"WinAnsiEncoding", et "NULL". "NULL" signifie qu’il faut utiliser l’encodage par défaut.
Reportez vous à la doc de ClibPDF, pour plus d’informations, notamment sur les polices asiatiques.
cpdf_set_leading (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Fixe la distance entre deux lignes.
void cpdf_set_leading (resource pdf_document, double distance)
cpdf_set_leading() fixe la distance entre deux lignes. Cela servira si le texte est affiché par cpdf_continue_text().
Voir aussi cpdf_continue_text().
232
ClibPDF
cpdf_set_text_rendering (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Détermine le rendu du texte.
void cpdf_set_text_rendering (resource pdf_document, int mode)
cpdf_set_text_rendering() détermines le rendu du texte.
Les valeurs possibles pour mode sont : 0=texte plein, 1=texte stroke, 2=texte plein et stroke, 3=invisible, 4=texte plein et
ajouté au chemin, 5=texte stroke et ajouté au chemin, 6=texte plein et stroke et ajouté au chemin, 7=et ajouté au chemin.
cpdf_set_horiz_scaling (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Fixe l’échelle horizontale du texte.
void cpdf_set_horiz_scaling (resource pdf_document, double scale)
cpdf_set_horiz_scaling() fixe l’échelle horizontale du texte à scale %.
cpdf_set_text_rise (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Fixe l’élévation du texte.
void cpdf_set_text_rise (resource pdf_document, double value)
cpdf_set_text_rise() fixe l’élévation du texte à value unités.
cpdf_set_text_matrix (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Fixe la matrice du texte.
void cpdf_set_text_matrix (resource pdf_document, array matrix)
cpdf_set_text_matrix() fixe la matrice du texte, qui décrit la transformation appliquée à police.
cpdf_set_text_pos (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Fixe la position du texte.
void cpdf_set_text_pos (resource pdf_document, double x-koor, double y-koor, int mode)
cpdf_set_text_pos() Fixe la position du texte pour le prochain appel à cpdf_show().
Le paramètre mode est une unité de longueur. Si il prend la valeur de 0 (ou si il est omis), c’est la valeur par défaut (72)
qui est utilisé.
Voir aussi cpdf_show(), cpdf_text().
233
ClibPDF
cpdf_set_char_spacing (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Fixe l’espacement des caractères.
void cpdf_set_text_pos (resource pdf_document, double space)
cpdf_set_char_spacing() fixe l’espacement des caractères.
Voir aussi cpdf_set_word_spacing(), cpdf_set_leading().
cpdf_set_word_spacing (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Fixe l’espacement des mots.
void cpdf_set_word_spacing (resource pdf_document, double space)
cpdf_set_word_spacing() fixe l’espacement des caractères.
Voir aussi cpdf_set_char_spacing(), cpdf_set_leading().
cpdf_continue_text (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Imprime le texte à la ligne suivante.
void cpdf_continue_text (resource pdf_document, string text)
cpdf_continue_text() imprime le texte text à la ligne suivante.
Voir aussi cpdf_show_xy(), cpdf_text(), cpdf_set_leading(), cpdf_set_text_pos().
cpdf_stringwidth (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Retourne la taille de la chaîne.
double cpdf_stringwidth (resource pdf_document, string text)
cpdf_stringwidth() retourne la taille de la chaîne text. Une police doit avoir déjà été choisie.
Voir aussi cpdf_set_font().
cpdf_save (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Sauve l’environnement courant.
void cpdf_save (resource pdf_document)
cpdf_save() sauve l’environnement courant. cpdf_save() est similaire à la commande postscript gsave. Très pratique quand
vous devez faire des translations et rotations sur un objet, mais sans affecter les autres.
Voir aussi cpdf_restore().
234
ClibPDF
cpdf_restore (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Restaure un environnement.
void cpdf_restore (resource pdf_document)
cpdf_restore() restaure l’environnement sauvé par cpdf_save(). Cette fonction est similaire à la commande postscript
grestore. Très pratique quand vous devez faire des translations et rotations sur un objet, mais sans affecter les autres.
Exemple 1. Sauver/Restaurer
<?php
cpdf_save($pdf);
// plein de transformations, translations, ...
cpdf_restore($pdf)
?>
Voir aussi cpdf_save().
cpdf_translate (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Modifie l’origine du système de coordonées.
void cpdf_translate (resource pdf_document, double x-koor, double y-koor, int mode)
cpdf_translate() modifie l’origine du système de coordonées en placant l’origine aux coordonnées (x-koor, y-koor).
Le paramètre mode est une unité de longueur. S’il prend la valeur de 0 (ou s’il est omis), c’est la valeur par défaut (72) qui
est utilisé.
cpdf_scale (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Modifie l’échelle.
void cpdf_scale (resource pdf_document, double x-scale, double y-scale)
cpdf_scale() modifie l’echelle dans les deux directions.
cpdf_rotate (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Effectue une rotation.
void cpdf_rotate (resource pdf_document, double angle)
cpdf_rotate() effectue une rotation, d’un angle de angle degrés.
235
ClibPDF
cpdf_setflat (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Fixe la platitude (flatness).
void cpdf_setflat (resource pdf_document, double value)
cpdf_setflat() fixe la platitude (flatness), entre 0 et 100.
cpdf_setlinejoin (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Fixe le paramètre linejoin.
void cpdf_setlinejoin (resource pdf_document, long value)
cpdf_setlinejoin() fixe le paramètre linejoin à une valeur value, entre 0 et 2. 0 = miter, 1 = round, 2 = bevel.
cpdf_setlinecap (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Fixe le paramètre linecap.
void cpdf_setlinecap (resource pdf_document, int value)
cpdf_setlinecap() fixe le paramètre linecap à une valeur value entre 0 et 2. 0 = butt end, 1 = round, 2 = projecting square.
cpdf_setmiterlimit (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Fixe le paramètre miter limit.
void cpdf_setmiterlimit (resource pdf_document, double value)
cpdf_setmiterlimit() fixe le paramètre "miter limit" à une valeur supérieure ou égale à 1.
cpdf_setlinewidth (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Fixe la largeur de ligne.
void cpdf_setlinewidth (resource pdf_document, double width)
cpdf_setlinewidth() fixe la largeur de ligne à la valeur de width.
cpdf_setdash (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Fixe le motif de pointillé.
void cpdf_setdash (resource pdf_document, double white, double black)
236
ClibPDF
cpdf_setdash() fixe le motif de pointillé à white unité de blanc et black unités de noir. Si les deux sont à 0, une ligne
pleine est affichée.
cpdf_newpath (PHP 3>= 3.0.9, PHP 4 >= 4.0b4)
Commence un nouveau chemin
void cpdf_newpath
(int pdf_document)
cpdf_newpath() commence un nouveau chemin dans le document pdf_document.
cpdf_moveto (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Fixe le point courant.
void cpdf_moveto (resource pdf_document, double x-koor, double y-koor, int mode)
cpdf_moveto() fixe le point courant aux coordonnées (x-koor, y-koor).
Le paramètre mode est une unité de longueur. Si il prend la valeur de 0 (ou si il est omis), c’est la valeur par défaut (72)
qui est utilisée.
cpdf_rmoveto (PHP 3>= 3.0.9, PHP 4 >= 4.0b4)
Fixe le point courant relativement.
void cpdf_rmoveto (resource pdf_document, double x-koor, double y-koor, int mode)
cpdf_rmoveto() fixe le point courant aux coordonnées (x-koor, y-koor), relativement.
Le paramètre mode est une unité de longueur. Si il prend la valeur de 0 (ou si il est omis), c’est la valeur par défaut (72)
qui est utilisée.
Voir aussi cpdf_moveto().
cpdf_curveto (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Dessine une courbe.
void cpdf_curveto (resource pdf_document, double x1, double y1, double x2, double y2,
double x3, double y3, int mode)
cpdf_curveto() dessine une courbe de Bezier, entre le point courant et le point (x3, y3), en utilisant les points de contrôle
(x1, y1) et (x2, y2).
Le paramètre mode est une unité de longueur. Si il prend la valeur de 0 (ou si il est omis), c’est la valeur par défaut (72)
qui est utilisée.
Voir aussi cpdf_moveto(), cpdf_rmoveto(), cpdf_rlineto(), cpdf_lineto().
237
ClibPDF
cpdf_lineto (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Dessine une ligne.
void cpdf_lineto (resource pdf_document, double x-koor, double y-koor, int mode)
cpdf_lineto() dessine une ligne entre le point courant et le point de coordonnées (x-koor, y-koor).
Le paramètre mode est une unité de longueur. Si il prend la valeur de 0 (ou si il est omis), c’est la valeur par défaut (72)
qui est utilisée.
Voir aussi cpdf_moveto(), cpdf_rmoveto(), cpdf_curveto().
cpdf_rlineto (PHP 3>= 3.0.9, PHP 4 >= 4.0b4)
Dessine une ligne, relativement.
void cpdf_rlineto (resource pdf_document, double x-koor, double y-koor, int mode)
cpdf_rlineto() dessine une ligne entre le point courant et le point de coordonnées relatives (x-koor, y-koor).
Le paramètre mode est une unité de longueur. Si il prend la valeur de 0 (ou si il est omis), c’est la valeur par défaut (72)
qui est utilisée.
Voir aussi cpdf_moveto(), cpdf_rmoveto() et cpdf_curveto().
cpdf_circle (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Dessine un cercle.
void cpdf_circle (resource pdf_document, double x-koor, double y-koor, double radius, int
mode)
cpdf_circle() dessine un cercle de centre (x-koor, y-koor) et de rayon radius.
Le paramètre mode est une unité de longueur. Si il prend la valeur de 0 (ou si il est omis), c’est la valeur par défaut (72)
qui est utilisée.
Voir aussi cpdf_arc().
cpdf_arc (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Dessine un arc de cercle.
void cpdf_arc (resource pdf_document, double x-koor, double y-koor, double radius, double
start, double end, int mode)
cpdf_arc() dessine un arc de cercle, dont le centre est au point (x-koor, y-koor) et l’angle est radius, commencant à
l’angle start et finissant à l’angle end.
Le paramètre mode est une unité de longueur. Si il prend la valeur de 0 (ou si il est omis), c’est la valeur par défaut (72)
qui est utilisée.
Voir aussi cpdf_circle().
238
ClibPDF
cpdf_rect (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Dessine un rectangle.
void cpdf_rect (resource pdf_document, double x-koor, double y-koor, double width, double
height, int mode)
cpdf_rect() dessine un rectangle dont le coin inférieur droit est au point (x-koor, y-koor). La largeur est width. La
hauteur estheight.
Le paramètre mode est une unité de longueur. Si il prend la valeur de 0 (ou si il est omis), c’est la valeur par défaut (72)
qui est utilisée.
cpdf_closepath (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Ferme le chemin.
void cpdf_closepath (resource pdf_document)
cpdf_closepath() ferme le chemin courant.
cpdf_stroke (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Dessine une ligne le long du chemin.
void cpdf_stroke (resource pdf_document)
cpdf_stroke() dessine une ligne le long du chemin.
Voir aussi cpdf_closepath(), cpdf_closepath_stroke().
cpdf_closepath_stroke (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Ferme le fichier et dessine une ligne le long du chemin.
void cpdf_closepath_stroke (resource pdf_document)
cpdf_closepath_stroke() est une combinaison de cpdf_closepath() et cpdf_stroke().
Voir aussi cpdf_closepath(), cpdf_stroke().
cpdf_fill (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Remplit le chemin courant.
void cpdf_fill (resource pdf_document)
cpdf_fill() remplit l’intérieur du chemin courant avec la couleur courante.
Voir aussi cpdf_closepath(), cpdf_stroke(), cpdf_setgray_fill(), cpdf_setgray(), cpdf_setrgbcolor_fill() et
cpdf_setrgbcolor().
239
ClibPDF
cpdf_fill_stroke (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Remplit le chemin, et dessine le bord.
void cpdf_fill_stroke (resource pdf_document)
cpdf_fill_stroke() remplit l’intérieur du chemin avec la couleur courante, et dessine le chemin.
Voir aussi cpdf_closepath(), cpdf_stroke(), cpdf_fill(), cpdf_setgray_fill(), cpdf_setgray(), cpdf_setrgbcolor_fill() et
cpdf_setrgbcolor().
cpdf_closepath_fill_stroke (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Remplit le chemin, dessine le bord et ferme le chemin.
void cpdf_closepath_fill_stroke (resource pdf_document)
cpdf_closepath_fill_stroke() remplit le chemin, dessine le bord et ferme le chemin.
Voir aussi cpdf_closepath(), cpdf_stroke(), cpdf_fill(), cpdf_setgray_fill(), cpdf_setgray(), cpdf_setrgbcolor_fill() et
cpdf_setrgbcolor().
cpdf_clip (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Aligne les dessins sur le chemin courant.
void cpdf_clip (resource pdf_document)
cpdf_clip() aligne les dessins sur le chemin courant.
cpdf_setgray_fill (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Modifie le niveau de gris comme couleur de remplissage.
void cpdf_setgray_fill (resource pdf_document, double value)
cpdf_setgray_fill() remplace le niveau de gris, couleur de remplissage courante, par value.
Voir aussi cpdf_setrgbcolor_fill().
cpdf_setgray_stroke (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Choisit un niveau de gris comme couleur de dessin.
void cpdf_setgray_stroke (resource pdf_document, double gray_value)
cpdf_setgray_stroke() remplace le niveau de gris, couleur de dessin courante, par value.
Voir aussi cpdf_setrgbcolor_stroke().
240
ClibPDF
cpdf_setgray (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Modifie un niveau de gris comme couleur de dessin et de remplissage.
void cpdf_setgray (resource pdf_document, double gray_value)
cpdf_setgray_stroke() remplace le niveau de gris, couleur de dessin et de remplissage, par value.
Voir aussi cpdf_setrgbcolor_stroke(), cpdf_setrgbcolor_fill().
cpdf_setrgbcolor_fill (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Choisit une couleur rgb comme couleur de remplissage.
void cpdf_setrgbcolor_fill (resource pdf_document, double red_value, double green_value,
double blue_value)
cpdf_setrgbcolor_fill() remplace la couleur de remplissage, par la couleur rgb (red_value, green_value,
blue_value).
Voir aussi cpdf_setrgbcolor_stroke(), cpdf_setrgbcolor().
cpdf_setrgbcolor_stroke (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Choisit une couleur rgb comme couleur de dessin.
void cpdf_setrgbcolor_stroke (resource pdf_document, double red_value, double green_value,
double blue_value)
cpdf_setrgbcolor_stroke() remplace la couleur de dessin, par la couleur rgb (red_value, green_value,
blue_value).
Voir aussi cpdf_setrgbcolor_fill() et cpdf_setrgbcolor().
cpdf_setrgbcolor (PHP 3>= 3.0.8, PHP 4 >= 4.0b4)
Choisit une couleur rgb comme couleur de dessin et de remplissage.
void cpdf_setrgbcolor (resource pdf_document, double red_value, double green_value, double
blue_value)
cpdf_setrgbcolor_stroke() remplace la couleur de remplissage et de dessin, par la couleur rgb (red_value,
green_value, blue_value).
Voir aussi cpdf_setrgbcolor_stroke() et cpdf_setrgbcolor_fill().
cpdf_add_outline (PHP 3>= 3.0.9, PHP 4 >= 4.0b4)
Ajoute un signet à la page courante.
void cpdf_add_outline (resource pdf_document, string text)
241
ClibPDF
cpdf_add_outline() ajoute un signet à la page courante, avec le texte text qui pointe sur la page courante.
Exemple 1. Ajouter une mise en relief
<?php
$cpdf = cpdf_open(0);
cpdf_page_init($cpdf, 1, 0, 595, 842);
cpdf_add_outline($cpdf, 0, 0, 0, 1, "Page 1");
// ...
// quelques dessins
// ...
cpdf_finalize($cpdf);
Header("Content-type: application/pdf");
cpdf_output_buffer($cpdf);
cpdf_close($cpdf);
?>
cpdf_set_page_animation (PHP 3>= 3.0.9, PHP 4 >= 4.0b4)
Fixe l’animation de la transition entre les pages.
void cpdf_set_page_animation (resource pdf_document, int transition, double duration)
cpdf_set_page_animation() fixe l’animation de la transition entre les pages.
La valeur du paramètre de transition transition peut être :
0 pour aucune,
1 pour deux lignes en travers de l’écran, qui révèlent la prochaîne page,
2 pour plusieurs lignes en travers de l’écran, qui révèlent la prochaîne page,
3 pour une boîte qui révèle la prochaîne page,
4 pour une seule ligne en travers de l’écran, qui révèle la prochaîne page,
5 pour l’ancienne page qui se dissout
6 pour un effet de dissolution d’un angle à l’autre
7 pour le remplacement simple (par défaut)
La valeur de duration est le nombre de secondes avant le passage à la page suivante.
cpdf_import_jpeg (PHP 3>= 3.0.9, PHP 4 >= 4.0b4)
Ouvre une image JPEG.
int cpdf_import_jpeg (resource pdf_document, string file name, double x-koor, double
y-koor, double angle, double width, double height, double x-scale, double y-scale, int
mode)
cpdf_import_jpeg() ouvre une image JPG, enregistré dans le fichier file name. Le format de l’image doit être JPEG.
L’image est placée dans la page courante, aux coordonnées (x-koor, y-koor). L’image subira une rotation d’un angle
de angle degrés.
Le paramètre mode est une unité de longueur. Si il prend la valeur de 0 (ou si il est omis), c’est la valeur par défaut (72)
qui est utilisée.
Voir aussi cpdf_place_inline_image().
242
ClibPDF
cpdf_place_inline_image (PHP 3>= 3.0.9, PHP 4 >= 4.0b4)
Place une image dans la page.
void cpdf_place_inline_image (resource pdf_document, int image, double x-koor, double
y-koor, double angle, double width, double height, int mode)
cpdf_place_inline_image() places une image créée par un script PHP, dans la page, à la position (x-koor, y-koor).
L’image peut être mise à l’échelle, en même temps.
Le paramètre mode est une unité de longueur. Si il prend la valeur de 0 (ou si il est omis), c’est la valeur par défaut (72)
qui est utilisé.
Voir aussi cpdf_import_jpeg().
cpdf_add_annotation (PHP 3>= 3.0.12, PHP 4 >= 4.0b4)
Ajoute une annotation.
void cpdf_add_annotation (resource pdf_document, double llx, double lly, double urx,
double ury, string title, string content, int mode)
cpdf_add_annotation() ajoute une note, dont le coin inférieur droit est (llx, lly) et le coin supérieur droit est (urx,
ury).
Le paramètre mode est une unité de longueur. Si il prend la valeur de 0 (ou si il est omis), c’est la valeur par défaut (72)
qui est utilisé.
243
XI. CURL
Introduction à CURL
PHP supporte libcurl, une librairie créée par Daniel Stenberg, qui vous permet de vous connecter de communiquer avec de
nombreux serveurs, grâce à de nombreux protocoles. libcurl supporte actuellement les protocoles suivants : http, https, ftp,
gopher, telnet, dict, file, et ldap. libcurl supporte aussi les certificats HTTPS, les POST HTTP, PUT HTTP, le chargement
par FTP (ce qui peut être fait par l’extension FTP), les chargement par formulaire HTTP, les proxies, les cookies et
l’authentification par mot de passe et nom de compte.
Pour pouvoir utiliser les fonctions CURL, vous devez installer le package CURL (http://curl.haxx.se/). PHP requiert la
version CURL 7.0.2-beta ou plus récente. PHP ne fonctionnera pas avec une version inférieure à la version 7.0.2-beta.
Pour utiliser CURL depuis les scripts PHP, vous devez aussi compiler PHP avec l’option --with-curl[=DIR] où DIR
est le chemin jusqu’au dossier contenant les dossiers lib et include. Dans le dossier include il doit se trouver un
dossier appelé curl, qui contient notamment les fichiers easy.h et curl.h. Il doit aussi se trouver un fichier nommé
libcurl.a dans le dossier lib.
Une fois que vous avez compilé PHP avec le support CURL, vous pouvez commencer à l’exploiter avec vos scripts PHP.
Le principe de fonctionnement est d’initialiser une session CURL avec curl_init(), puis de choisir toutes vos options de
transfert avec curl_exec() et de finir votre session avec curl_close(). Voici un exemple d’utilisation des fonctions CURL,
qui récupère la page principale de PHP :
Exemple 1. Utilisation de CURL et PHP pour récupérer une page
<?php
$ch = curl_init ("http://www.php.net/");
$fp = fopen ("php_homepage.txt", "w");
curl_setopt ($ch, CURLOPT_INFILE, $fp);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_exec ($ch);
curl_close ($ch);
fclose ($fp);
?>
244
CURL
curl_init (PHP 4 >= 4.0.2)
Initialise une session CURL
resource curl_init
(string [url])
curl_init() initialise une nouvelle session et retourne un identifiant de session CURL, à utiliser avec les fonctions
curl_setopt(), curl_exec() et curl_close(). Si le paramètre optionnel url est fourni, alors CURLOPT_URL prendra cette
valeur. Vous pouvez manuellement fixer cette valeur avec la fonction curl_setopt().
Exemple 1. Initialiser une session CURL et récupèration d’une page web.
<?php
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, "http://www.zend.com/");
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_exec ($ch);
curl_close ($ch);
?>
Voir aussi : curl_close(), curl_setopt().
curl_init (PHP 4 >= 4.0.2)
Modifie une option de transfert CURL
boolean curl_setopt
(resource ch, string option, mixed value)
curl_setopt() fixe les options de transfert de la session CURL identifiée par ch. option est le nom de l’option à fixer, et
value est sa valeur.
value doit être de type "long" pour les options suivantes (spécifiée par option) :
•
CURLOPT_INFILESIZE: Lorsque vous téléchargez un fichier sur un site distant, cette option sert à indiquer à PHP la
taille maximale du fichier attendu.
•
CURLOPT_VERBOSE: Choisissez une valeur non nulle pour que CURL vous affiche tous les événements.
•
CURLOPT_HEADER: Choisissez une valeur non nulle pour que CURL inclut l’en-tête dans la valeur de retour.
•
CURLOPT_NOPROGRESS: Choisissez une valeur non nulle pour que PHP n’affiche pas l’état des transferts CURL.
Note : PHP choisit automatiquement une valeur non nulle. Ne changez cette valeur que le temps du débuggage.
•
CURLOPT_NOBODY: Choisissez une valeur non nulle pour que le corps du transfert ne soit pas inclus dans la valeur de
retour.
•
CURLOPT_FAILONERROR: Choisissez une valeur non nulle pour que PHP traite silencieusement les codes HTTP
supérieurs à 300. Le comportement par défaut est de retourner la page normalement, en ignorant ce code.
•
CURLOPT_UPLOAD: Choisissez une valeur non nulle pour que PHP prépare un chargement.
•
CURLOPT_POST: Choisissez une valeur non nulle pour que PHP fasse un HTTP POST. Un POST est un encodage
normal "application/x-www-from-url", utilisé couramment par les formulaires HTML.
•
CURLOPT_FTPLISTONLY: Choisissez une valeur non nulle pour que PHP ne fasse que lister les noms d’un dossier
FTP.
•
CURLOPT_FTPAPPEND: Choisissez une valeur non nulle pour que PHP concatène le fichier distant, plutôt que de
l’écraser.
245
•
CURL
CURLOPT_NETRC: Choisissez une valeur non nulle pour que PHP scanne votre fichier ~./netrc et utilise votre nom de
compte et mot de passe sur le site distant que vous souhaitez contacter.
•
CURLOPT_FOLLOWLOCATION : Choisissez une valeur non nulle pour suivre toutes les en-têtes "Location: " que le
serveur envoie dans les en-têtes HTTP (notez que cette fonction est récursive, et que PHP suivra toutes les en-têtes
"Location: " qu’il trouvera).
•
CURLOPT_PUT: Choisissez une valeur non nulle pour que pour chargement se fasse par HTTP PUT. Le fichier à
charger doit être fixé avec les options CURLOPT_INFILE et CURLOPT_INFILESIZE.
•
CURLOPT_MUTE: Choisissez une valeur non nulle pour que PHP soit totalement silencieux concernant toutes les
fonctions CURL.
•
CURLOPT_TIMEOUT: Passez un entier "long" comme paramètre qui représente le temps maximum d’exécution de la
fonction CURL.
•
CURLOPT_LOW_SPEED_LIMIT: Passez un entier long qui représente la vitesse minimale en octets par secondes en
dessous de laquelle, et pendant CURLOPT_LOW_SPEED secondes, PHP considèrera qu’elle est trop lente, et annulera
le transfert.
•
CURLOPT_LOW_SPEED_TIME: Passez un entier "long" qui représente le temps en secondes, qui, si la vitesse de
transfert reste en dessous de CURLOPT_LOW_SPEED_LIMIT, PHP considèrera que la connexion est trop lente, et
l’annulera.
•
CURLOPT_RESUME_FROM : Passez un entier "long", qui représente l’offset, en octets, à partir duquel vous voulez
commencer le transfert.
•
CURLOPT_SSLVERSION : Passez un entier "long" qui contient la version de SSL (2 ou 3) à utiliser. Par défaut, PHP
essaiera de le déterminer par lui-même, bien que dans certains cas, il vous faudra le faire manuellement.
•
CURLOPT_TIMECONDITION : Passez un entier "long" qui définit comment CURLOPT_TIMEVALUE est utilisé.
Vous pouvez choisir entre les valeurs TIMECOND_IFMODSINCE ou TIMECOND_ISUNMODSINCE. C’est une
fonctionnalité HTTP.
•
CURLOPT_TIMEVALUE: Passez un entier "long" qui représente le temps en secondes depuis le 1er janvier 1970. Cette
valeur sera utilisée comme spécifié dans l’option CURLOPT_TIMEVALUE. Par défaut, TIMECOND_IFMODSINCE
sera utilisé.
value doit être une chaîne de caractères pour les valeurs suivantes de option
•
CURLOPT_URL: L’URL que PHP va récupérer. Vous pouvez aussi choisir cette valeur lors de l’appel à curl_init().
•
CURLOPT_USERPWD: Passez une chaîne de caractères au format [nom]:[mot de passe], pour que PHP l’utilise lors de
la connexion.
•
CURLOPT_PROXYUSERPWD: Passez une chaîne de caractères au format [nom]:[mot de passe ], pour que PHP l’utilise
lors de la connexion à un proxy HTTP.
•
CURLOPT_RANGE: Passez une chaîne de caractères qui représente la plage de valeur que vous désirez. Elle est au
format "X-Y", où les valeurs de X ou Y peuvent être omises. Le transfert HTTP supporte aussi plusieurs intervalles,
séparé par des virgules : X-Y,N-M.
•
CURLOPT_POSTFIELDS: Passez une chaîne de caractères qui contient toutes les données à passer lors d’une
opération de HTTP POST.
•
CURLOPT_REFERER: Passez une chaîne de caractères qui contient l’en-tête de "REFERER", utilisé lors d’une requête
HTTP.
•
CURLOPT_USERAGENT: Passez une chaîne de caractères qui contient l’en-tête "user-agent" utilisé dans une requête
HTTP.
•
CURLOPT_FTPPORT: Passez une chaîne de caractères qui désignera l’adresse IP utilisée pour l’instruction FTP
"PORT". L’instruction POST indique au serveur distant de se connecter cette adresse IP. La chaîne peut être une adresse
IP, un nom d’hôte, un nom d’interface réseau (sous UNIX), ou juste ’-’, pour utiliser les IP par défaut du système.
•
CURLOPT_COOKIE: Passez une chaîne de caractères qui contiendra le contenu du cookie, à transmettre dans l’en-tête
HTTP.
•
CURLOPT_SSLCERT: Passez une chaîne de caractères qui contiendra le nom de fichier du certificat, au format PEM.
246
•
CURL
CURLOPT_SSLCERTPASSWD: Passez une chaîne de caractères qui contient le mot de passe nécessaire pour utiliser le
certificat CURLOPT_SSLCERT.
•
CURLOPT_COOKIEFILE: Passez une chaîne de caractères qui contiendra le nom du fichier contenant les données de
cookie. Le fichier de cookie peut être au format Netscape, ou simplement des en-têtes HTTP écrites dans un fichier.
•
CURLOPT_CUSTOMREQUEST: Passez une chaîne de caractères qui sera utilisé à la place de GET ou HEAD lors des
requêtes HTTP. Cette commande est pratique pour effectuer un DELETE, ou une autre commande HTTP exotique.
Note : N’utilisez pas cette commande sans vous assurer que le serveur l’accepte.
Les options suivantes requièrent un pointeur de fichier, qui est obtenu avec la fonction fopen() :
•
CURLOPT_FILE: Le fichier de sortie de votre transfert. Par défaut, STDOUT.
•
CURLOPT_INFILE: Le fichier d’entrée de votre transfert.
•
CURLOPT_WRITEHEADER: Le fichier de destination de l’en-tête de la sortie du transfert.
•
CURLOPT_STDERR: Le fichier d’erreurs.
curl_exec (PHP 4 >= 4.0.2)
Exécute une session CURL
boolean curl_exec
(resource ch)
Cette fonction doit être appelée après l’initialisation et le paramètrage d’une session CURL. Son but est simplement
d’éxécuter la session ch.
curl_close (PHP 4 >= 4.0.2)
Ferme une session CURL
void curl_close
(int ch)
curl_close() ferme une session CURL et libère toutes les ressources réservées. L’identifiant CURL, ch, est aussi effacé.
curl_version (PHP 4 >= 4.0.2)
Retourne la version courante de CURL
string curl_version
(void)
curl_version() retourne une chaîne avec la version courante de la librairie CURL.
247
XII. Paiement Cybercash
Ces fonctions ne sont disponibles que si PHP a été compilé avec l’option --with-cybercash=[DIR]. Ces fonctions ont
été ajoutées dans PHP 4.
248
Cybercash
cybercash_encr (PHP 4 >= 4.0b4)
array cybercash_encr (string wmk, string sk, string inbuff)
cybercash_encr() retourne un tableau associatif, contenant les éléments "errcode" et, si "errcode" vaut FALSE, "outbuff"
(string), "outLth" (long) et "macbuff" (string).
cybercash_decr (PHP 4 >= 4.0b4)
array cybercash_decr (string wmk, string sk, string inbuff)
cybercash_decr() retourne un tableau associatif, contenant les éléments "errcode" et, si "errcode" vaut FALSE, "outbuff"
(string), "outLth" (long) et "macbuff" (string).
cybercash_base64_encode (PHP 4 >= 4.0b4)
string cybercash_base64_encode
(string inbuff)
cybercash_base64_decode (PHP 4 >= 4.0b4)
string cybercash_base64_decode
(string inbuff)
249
XIII. CyberMUT : Crédit Mutuel
Cette extension vous permet de traiter des transactions de cartes de crédits, avec le système due Crédit Mutuel :
CyberMUT (http://www.creditmutuel.fr/centre_commercial/vendez_sur_internet.html).
CynerMUT est un système de paiement français, proposé par le Crédit Mutuel. Si vous n’êtes pas résidants français, ces
fonctions ne vous seront pas utiles.
Cette extension n’est disponible que si PHP a été compilé par l’option --with-cybermut[=DIR], où DIR est le dossier
qui contient les fichiers libcm-mac.a et cm-mac.h. Vous aurez besoin du SDK approprié, qui vous est fournit après vous
êtes inscrit à CyberMUT (via le web, ou à votre agence la plus proche).
L’utilisation de ces fonctions est presque identique aux fonctions originales, hormis le fait que les fonctions
cybermut_creerformulairecm() et cybermut_creerreponsecm(), qui sont retournées directement par des fonctions PHP,
au lieu d’être passées par référence aux fonctions originales.
Ces fonctions ont été ajoutée en 4.0.6.
Note : Ces fonctions ne font que fournis un moyen d’utiliser le SDK CyberMUT. Lisez attentivement le "CyberMUT
Developers Guide" pour plus de détails sur les parmètres nécessaires.
250
CyberMUT
cybermut_creerformulairecm (PHP 4 >= 4.0.5)
Génère un formulaire HTML de paiement
string cybermut_creerformulairecm (string url_CM , string version, string TPE, string
montant, string ref_commande, string texte_libre, string url_retour, string url_retour_ok,
string url_retour_err, string langue, string code_societe, string texte_bouton)
cynermut_creerformulairecm() génère un formulaire HTML, de demande de paiement.
Exemple 1. Première étape du paiment (équivalent à cgi1.c)
<?php
// Dossier contenant les clés de chiffrement
putenv("CMKEYDIR=/var/creditmut/cles");
// Numéro de version
$VERSION="1.2";
$retour = creditmut_creerformulairecm(
"https://www.creditmutuel.fr/test/telepaiement/paiement.cgi",
$VERSION,
"1234567890",
"300FRF",
$REFERENCE,
$TEXTE_LIBRE,
$URL_RETOUR,
$URL_RETOUR_OK,
$URL_RETOUR_ERR,
"francais",
"company",
"Paiement par carte bancaire");
echo $retour;
?>
Voir aussi cybermut_testmac() et cybermut_creerreponsecm().
cybermut_testmac (PHP 4 >= 4.0.5)
Vérifie le message de confirmation
bool cybermut_testmac (string code_MAC, string version, string TPE, string cdate, string
montant, string ref_commande, string texte_libre, string code-retour)
cybermut_testmac() s’assure qu’il n’y a pas de données parasites dans le message de confirmation recu. Attention aux
paramètres code-retour and texte-libre, qui ne peuvent pas être utilisés directement, car ils contienent des tirets
dans leur nom. Vous devez utilisez la syntaxe suivante :
<?php
$code_retour=$HTTP_GET_VARS["code-retour"];
$texte_libre=$HTTP_GET_VARS["texte-libre"];
?>
251
CyberMUT
Exemple 1. Deuxième étape de paiement (équivalent à cgi2.c)
<?php
// Assurez vous que l’option Enable Track Vars est active.
// Dossier qui contient les clés de paiement
putenv("CMKEYDIR=/var/creditmut/cles");
// Numéro de version
$VERSION="1.2";
$texte_libre = $HTTP_GET_VARS["texte-libre"];
$code_retour = $HTTP_GET_VARS["code-retour"];
$mac_ok = creditmut_testmac($MAC,$VERSION,$TPE,$date,$montant,$reference,$texte_libre,$code_retour)
if ($mac_ok) {
//
// Gestion d’un paiement réussi
//
//
$result=creditmut_creerreponsecm("OK");
} else {
$result=creditmut_creerreponsecm("Document Falsifié");}
?>
Voir aussi cybermut_creerformulairecm() et cybermut_creerreponsecm().
cybermut_creerreponsecm (PHP 4 >= 4.0.5)
Génère un accusé de réception de confirmation de paiement
string cybermut_creerreponsecm (string phrase)
cybermut_creerreponsecm() retourne une chaîne contenant le message d’accusé de reception.
Le paramètre vaut "OK" si le message de confirmation du paiement a été correctement indentifié par cybermut_testmac().
Tout autre chaîne doit être considéré comme une erreur de traitement.
Voir aussi cybermut_creerformulairecm() et cybermut_testmac().
252
XIV. Caractères
Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et
concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
Ces fonctions vérifient si un caractère ou une chaîne de caractères font partie d’une certaine classe de caractères, en
fonction de la configuration locale.
Appelée avec un argument de type entier, ces fonctions se comportent exactement comme le équivalent en langage C.
Appelée avec un argument de type chaîne, elles vérifieront chaque caractère de la chaîne, et ne retourneront TRUE que si
chaque caractère de la chaîne satisfait les critères requis.
Tout autre type d’argument (autre que chaîne ou entier) génère une erreur, et retourne FALSE immédiatement.
Avertissement
Ces fonctions ont été ajoutée en PHP 4.0.4, et leur nom peut changer dans un futur proche. Les
suggestions actuelles sont : ctype_issomething() au lieu de ctype_somthing() ou encore d’en faire
une partie ext/standard et utiliser ainsi leur nom en langage C, même si cela peut conduire à des
confusions entre isset() et is_sometype().
253
ctype
ctype_alnum (PHP 4 >= 4.0.4)
Vérifie qu’un caractère est alpha-numérique
bool ctype_alnum (string c)
Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et
concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
Voir aussi setlocale().
ctype_alpha (PHP 4 >= 4.0.4)
Vérifie qu’un caractère est alphabétique
bool ctype_alpha (string c)
Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et
concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
ctype_cntrl (PHP 4 >= 4.0.4)
Vérifie qu’un caractère est un caractère de contrôle
bool ctype_cntrl (string c)
Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et
concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
ctype_digit (PHP 4 >= 4.0.4)
Vérifie qu’un caractère est numérique
bool ctype_digit (string c)
Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et
concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
254
ctype
ctype_lower (PHP 4 >= 4.0.4)
Vérifie qu’un caractère est en minuscule
bool ctype_lower (string c)
Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et
concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
ctype_graph (PHP 4 >= 4.0.4)
Vérifie qu’un caractère est imprimable (sauf " ", espace)
bool ctype_graph (string c)
Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et
concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
ctype_print (PHP 4 >= 4.0.4)
Vérifie qu’un caractère est imprimable
bool ctype_print (string c)
Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et
concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
ctype_punct (PHP 4 >= 4.0.4)
Vérifie qu’un caractère est imprimable, sans être ni un espace, ni un caractère alpha-numérique
bool ctype_punct (string c)
Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et
concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
255
ctype
ctype_space (PHP 4 >= 4.0.4)
Vérifie qu’un caractère est caractère blanc (espace, tabulation...)
bool ctype_space (string c)
Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et
concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
ctype_upper (PHP 4 >= 4.0.4)
Vérifie qu’un caractère est en majuscule
bool ctype_upper (string c)
Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et
concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
ctype_xdigit (PHP 4 >= 4.0.4)
Vérifie qu’un caractère représente un nombre héxadécimal
bool ctype_xdigit (string c)
Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et
concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
256
XV. DBA
Ces fonctions sont l’interface avec les bases de type Berkeley.
C’est une couche générale pour plusieurs bases de données sur fichiers. En tant que tel, les fonctionnalités sont limitées à
une partie des fonctionnalités des bases de données modernes, comme Sleepycat Software’s DB2
(http://www.sleepycat.com/) (A ne pas confondre avec IBM’s DB2 software, qui fonctionne avec ODBC).
Le comportement de certaines fonctions dépends de la base de données utilisée. Par exemple dba_optimize() et
dba_sync() n’auront pas le même effet d’une base à l’autre.
Lors de l’utilisation de la fonction dba_open() ou de dba_popen(), une des librairies suivante doit être fournie comme
argument. La liste complète des librairies supportées par votre configuration est disponible avec la fonction phpinfo().
(Pour ajouter le support de l’une de ces librairies, ajouter l’option de configuration --with-XXXX).
Tableau 1. Liste des librairies DBA
Librairie
Notes
dbm
Dbm est la plus ancienne des base de données de type
Berkeley. Il vaut mieux l’éviter si possible. Les fonctions de
compatibilités codées dans DB2 et gdbm ne sont pas
supportées, car elles ne sont compatibles qu’au niveau du
code source, et ne peuvent pas gérer le format dbm originel. (
--with-dbm).
ndbm
ndbm est un nouveau type de dbm plus flexible. Il a
cependant la majorité des limitations du genre. (
--with-ndbm).
gdbm
gdbm est la base dbm GNU
(ftp://ftp.gnu.org/pub/gnu/gdbm/). ( --with-gdbm).
db2
db2 est DB2 de Sleepycat Software
(http://www.sleepycat.com/). Elle se décrit comme un
"ensemble d’outils qui fournissent une base de données
performante, tant pour les applications indépendantes que
pour le client/serveur". ( --with-db2).
db3
DB3 est le DB3 de Sleepycat Software
(http://www.sleepycat.com/). ( --with-db3).
cdb
cdb est "un package rapide, robuste, léger, pour créer et lire
des bases de données constantes". C’est l’auteur de qmail qui
l’a écrit, et elle est disponible ici (http://cr.yp.to/cdb.html).
Puisque c’est une base constante, elle ne supporte que la
lecture. (--with-cdb).
Exemple 1. Exemple DBA
<?php
$id = dba_open("/tmp/test.db", "n", "db2");
if(!$id) {
echo "dba_open a échoué\n";
exit;
}
dba_replace("key", "Ceci est un exemple!", $id);
if(dba_exists("key", $id)) {
echo dba_fetch("key", $id);
dba_delete("key", $id);
}
dba_close($id);
?>
257
DBA
DBA gère les données binaires, et n’a pas de limites arbitraires. Elle hérite de toutes les limites de la base sous jacentes.
Toutes les bases de données sur fichiers doivent fournir un moyen de changer le mode d’accès au fichier d’une base, et si
possible, de toutes les bases. Le mode d’accès est généralement passé en 4ème argument à dba_open() ou dba_popen().
Vous pouvez accéder à toutes les entrées d’une base d’une manière linéaire, avec les fonctions dba_firstkey() et
dba_nextkey(). Vous ne devez pas modifier une base lorsque vous la traversez ainsi.
Exemple 2. Passer en revue une base
<?php
// ...ouverture de la base...
$key = dba_firstkey($id);
while($key != FALSE) {
if(...) {
// conserver la clé pour faire d’autres opérations plus tard
$handle_later[] = $key;
}
$key = dba_nextkey($id);
}
for($i = 0; $i < count($handle_later); $i++)
dba_delete($handle_later[$i], $id);
?>
258
DBA
dba_close (PHP 3>= 3.0.8, PHP 4 )
Ferme une base.
void dba_close (resource handle)
dba_close() ferme le lien établi avec la base et libère toutes les ressources de handle.
handle est un identifiant de base, retourné par dba_open().
dba_close() ne retourne aucune valeur.
Voir aussi dba_open() et dba_popen().
dba_delete (PHP 3>= 3.0.8, PHP 4 )
Efface une entrée.
bool dba_delete (string key, resource handle)
dba_delete() efface l’entrée spécifiée par la clé key, dans la base identifiée par handle.
key est la clé de l’entrée à effacer.
handle est un identifiant de lien, retourné par dba_open().
dba_delete() retourne TRUE ou FALSE, si l’entrée est effacée, ou pas effacée, respectivement.
Voir aussi dba_exists(), dba_fetch(), dba_insert() et dba_replace()
dba_exists (PHP 3>= 3.0.8, PHP 4 )
Vérifie qu’une clé existe.
boolean dba_exists (string key, resource handle)
dba_exists() vérifie si la clé key existe dans la base identifiée par handle.
key est la clé qui doit être vérifiée.
handle est un identifiant de base, retourné par dba_open().
dba_exists() retourne TRUE ou FALSE, si la clé est trouvée, ou pas, respectivement.
Voir aussi dba_fetch(), dba_delete(), dba_insert() et dba_replace().
dba_fetch (PHP 3>= 3.0.8, PHP 4 )
Lit les données liées à une clé.
string dba_fetch (string key, resource handle)
dba_fetch() lit les données spécifiée par la clé key dans la base identifiée par handle.
key est la clé dont on veut lire les données.
handle est un identifiant de base, retourné par dba_open().
dba_fetch() retourne la chaîne associée ou FALSE, si la paire clé/valeur n’a pas été trouvée.
Voir aussi dba_exists(), dba_delete(), dba_insert() et dba_replace().
259
DBA
dba_firstkey (PHP 3>= 3.0.8, PHP 4 )
Lit la première clé.
string dba_firstkey (resource handle)
dba_firstkey() retourne la première clé de la base de données spécifiée par handle et y place le pointeur interne de clé.
Cela permettra de traverser la base.
handle est un identifiant de base, retourné par dba_open().
dba_firstkey() retourne la clé, ou FALSE, suivant que la première clé existe ou pas.
Voir aussi dba_nextkey() et l’exemple 2 de l’introduction DBA.
dba_insert (PHP 3>= 3.0.8, PHP 4 )
Insère une entrée.
boolean dba_insert (string key, string value, resource handle)
dba_insert() insère l’entrée décrite par la clé key et la valeur value dans la base spécifiée par handle. Si une entrée
aveec la même clé key existe déjà, l’insertion échouera.
key est la clé de la valeur à insérer.
value est la valeur à insérer.
handle est un identifiant de base, retourné par dba_open().
dba_insert() retourne TRUE ou FALSE, suivant que l’insertion a réussi ou échoué.
Voir aussi dba_exists(), dba_delete(), dba_fetch() et dba_replace().
dba_nextkey (PHP 3>= 3.0.8, PHP 4 )
Lit la clé suivante.
string dba_nextkey (resource handle)
dba_nextkey() retourne la clé suivante, dans la base identifiée par handle et incrémente le pointeur de clé.
handle est un identifiant de base, retourné par dba_open().
dba_nextkey() retourne la clé, ou FALSE en cas d’échec.
Voir aussi dba_firstkey().
dba_popen (PHP 3>= 3.0.8, PHP 4 )
Ouvre une connexion persistante à une base de données.
int dba_popen (string path, string mode, string handler [, mixed ...])
dba_popen() établit une connexion persistante à la base repérée par path avec le mode mode, en utilisant l’identifiant
handler.
path est le chemin sur votre machine.
260
DBA
mode vaut "r" pour lecture seule, "w" pour lecture/écriture, "c" pour lecture/écriture, et création si la base n’existe pas, et
"n" pour création, écrasement, et accès en lecture/écriture.
handler est le nom de l’identifiant qui sera utilisé pour accéder à path. Il est passé à dba_popen().
dba_popen() retourne un identifiant positif, ou FALSE, suivant que la base a été ouverte, ou que l’accès a échoué.
Voir aussi dba_open() et dba_close().
dba_open (PHP 3>= 3.0.8, PHP 4 )
Ouvre une base de données.
int dba_open (string path, string mode, string handler [, mixed ...])
dba_open() établit une connexion à la base repérée par path avec le mode mode et l’identifiant handler.
pathest le chemin sur votre machine.
mode vaut "r" pour lecture seule, "w" pour lecture/écriture, "c" pour lecture/écriture, et création si la base n’existe pas, et
"n" pour création, écrasement, et accès en lecture/écriture.
handler est le nom de l’identifiant qui sera utilisé pour accéder à path. Il est passé à dba_popen().
Voir aussi dba_popen() et dba_close().
dba_optimize (PHP 3>= 3.0.8, PHP 4 )
Optimise une base.
boolean dba_optimize (resource handle)
dba_optimize() optimise la base de données identifiée par handle.
handle est un identifiant de base retourné par dba_open().
dba_optimize() retourne TRUE ou FALSE, suivant que l’optimisation a réussi ou échoué.
Voir aussi dba_sync().
dba_replace (PHP 3>= 3.0.8, PHP 4 )
Remplace ou insère une entrée.
boolean dba_replace (string key, string value, resource handle)
dba_replace() remplaces ou insère une entrée, pour la clé key et avec la valeur value dans la base identifiée par
handle.
key est la clé qui va être insérée.
value est la valeur qui va être insérée.
handle est un identifiant de base retourné par dba_open().
dba_replace() retourne TRUE ou FALSE, suivant que l’opération réussit ou échoue.
Voir aussi dba_exists(), dba_delete(), dba_fetch() et dba_insert().
261
DBA
dba_sync (PHP 3>= 3.0.8, PHP 4 )
Synchronise une base de données.
boolean dba_sync (resource handle)
dba_sync() synchronise la base de données spécifiée par handle. Si accepté, cela va probablement lancer une opération
de réécriture physique du fichier.
handle est un identifiant de base retourné par dba_open().
dba_sync() retourne TRUE ou FALSE, si la synchronisation réussi, ou échoue, respectivement.
Voir aussi dba_optimize().
262
XVI. Dates et heures
263
Date/heure
checkdate (PHP 3, PHP 4 >= 4.0b1)
Valide une date/heure.
int checkdate (int month, int day, int year)
checkdate() retourne TRUE si la date day/month/year est valide, et sinon FALSE. Notez bien que l’ordre des arguments
n’est pas l’ordre français. La date est considérée comme valide si :
•
L’année est comprise entre entre 1 et 32767 inclus. (pour les versions antérieures à PHP 4.0.3, les années inférieures à 1
étaient aussi valides).
•
Le mois est compris entre 1 et 12 inclus
•
Le jour est compris dans l’intervalle de dates du mois. Les années bissextiles sont prises en compte.
date (PHP 3, PHP 4 >= 4.0b1)
Formate une date/heure locale
string date (string format, int [timestamp])
date() retourne une date sous forme d’une chaîne, au format donné par la chaîne format. La date est fournie sous la forme
d’un timestamp. Par défaut, la date courante est utilisée.
Les caractères suivants sont utilisés pour spécifier le format :
•
a - "am" (matin) ou "pm" (après-midi)
•
A - "AM" (matin) ou "PM" (après-midi)
•
B - Heure Internet Swatch
•
d - Jour du mois, sur deux chiffres (éventuellement avec un zéro) : "01" à "31"
•
D - Jour de la semaine, en trois lettres (et en anglais) : par exemple "Fri" (pour Vendredi)
•
F - Mois, textuel, version longue; en anglais, i.e. "January" (pour Janvier)
•
g - Heure, au format 12h, sans les zéros initiaux i.e. "1" à "12"
•
G - Heure, au format 24h, sans les zéros initiaux i.e. "0" à "23"
•
h - Heure, au format 12h, "01" à "12"
•
H - heure, au format 24h, "00" à "23"
•
i - Minutes; "00" à "59"
•
I (i majuscule) - "1" si l’heure d’été est activée, "0" si l’heure d’hiver .
•
j - Jour du mois sans les zéros initiaux: "1" à "31"
•
l - (’L’ minuscule) - Jour de la semaine, textuel, version longue; en anglais, i.e. "Friday" (pour Vendredi)
•
L - Booléen pour savoir si l’année est bissextile ("1") ou pas ("0")
•
m - Mois; i.e. "01" à "12"
•
M - Mois, en trois lettres (et en anglais) : par exemple "Apr" (pour Avril)
•
n - Mois sans les zéros initiaux; i.e. "1" à "12"
•
r - Format de date RFC 822; i.e. "Thu, 21 Dec 2000 16:01:07 +0200" (ajouté en PHP 4.0.4)
•
s - Secondes; i.e. "00" à "59"
•
S - Suffixe ordinal d’un nombre, en anglais, sur deux lettres : i.e. "th", "nd"
264
Date/heure
•
t - Nombre de jours dans le mois donné, i.e. "28" à "31"
•
T - Fuseau horaire de la machine ; i.e. "MET"
•
U - Secondes depuis une époque
•
w - Jour de la semaine, numérique, i.e. "0" (Dimanche) to "6" (Samedi)
•
Y - Année, 4 chiffres; i.e. "1999"
•
y - Année, 2 chiffres; i.e. "99"
•
z - Jour de l’année; i.e. "0" à "365"
•
Z - Décalage horaire en secondes (i.e. "-43200" à "43200")
Les caractères non reconnus seront imprimés tels quel. "Z" retournera toujours "0" lorsqu’il est utilisé avec gmdate().
Exemple 1. Exemple avec date()
<?php
print (date("l dS of F Y h:i:s A"));
print ("July 1, 2000 is on a " . date("l", mktime(0,0,0,7,1,2000)));
?>
Il est possible d’utiliser date() et mktime() ensemble pour générer des dates dans le futur ou dans le passé.
Exemple 2. Exemples avec date() et mktime()
<?php
$tomorrow = mktime(0,0,0,date("m") ,date("d") + 1,date("Y")
);
$lastmonth = mktime(0,0,0,date("m")-1,date("d")
,date("Y")
);
$nextyear = mktime(0,0,0,date("m"), date("d")
,date("Y") + 1);
?>
Voici maintenant quelques exemples de formatages avec date(). Notez que vous devriez échapper tous les autres
caractères, car s’ils ont une signification spéciale, ils risquent de produire des effets secondaires indésirables. Notez aussi
que les versions futures de PHP peuvent attribuer une signification à des lettres qui sont actuellement inertes. Lorsque vous
échappez les caractères, pensez à utiiser des guillemets simples, pour que les séquences \n ne deviennent pas des nouvelles
lignes.
Exemple 3. Formatage avec date()
<?php
/* Aujourd’hui, le 12 Mars 2001, 10:16:18 pm */
$aujourdhui = date("F j, Y, g:i a");
// March 12, 2001, 10:16 pm
$aujourdhui = date("m.d.y");
// 03.12.01
$aujourdhui = date("j, m, Y");
// 12, 3, 2001
$aujourdhui = date("Ymd");
// 20010312
$aujourdhui = date(’h-i-s, j-m-y, it is w Day z ’); // 05-16-17, 12-0301, 1631 1618 6 Monpm01
$aujourdhui = date(’\C\’\e\s\t\ \l\e\ jS \j\o\u\r\.’);
// C’est le 12th jour.
$aujourdhui = date("D M j G:i:s T Y");
// Mon Mar 12 15:16:08 MST 2001
$aujourdhui = date(’H:m:s \m \e\s\t\ \l\e\ \m\o\i\s’);
// 17:03:18 m est le mois
$aujourdhui = date("H:i:s");
// 10:16:18
// notation française
$aujourdhui = date("d/m/y");
// 12/03/01
$aujourdhui = date("d/m/Y");
// 12/03/2001
?>
Pour formater des dates dans d’autres langues, utilisez les fonctions setlocale() et strftime().
Voir aussi gmdate() et mktime().
265
Date/heure
getdate (PHP 3, PHP 4 >= 4.0b1)
Retourne la date/heure
array getdate ([int timestamp])
getdate() retourne un tableau associatif contenant les informations de date et d’heure du timestamp timestamp (lorsqu’il
est fourni), avec les champs suivants :
•
"seconds" - secondes
•
"minutes" - minutes
•
"hours" - heures
•
"mday" - jour du mois
•
"wday" - jour de la semaine, numérique. 0: dimanche jusqu’à 6: samedi
•
"mon" - mois, numérique
•
"year" - année, numérique
•
"yday" - jour de l’année, numérique; i.e. "299"
•
"weekday" - jour de la semaine, texte complet (en anglais); i.e. "Friday"
•
"month" - mois, texte complet (en anglais); i.e. "January"
Exemple 1. Exemple avec getdate()
<?php
$aujourdhui = getdate();
$mois = $aujourdhui[’month’];
$mjour = $aujourdhui[’mday’];
$annee = $aujourdhui[’year’];
echo "$mjour/$mois/$annee";
?>
gettimeofday (PHP 3>= 3.0.7, PHP 4 >= 4.0b4)
Retourne l’heure actuelle
array gettimeofday (void)
gettimeofday() est une interface vers gettimeofday(2). Elle retourne un tableau associatif qui contient les informations
retournées par le système :
•
"sec" - secondes
•
"usec" - microsecondes
•
"minuteswest" - minutes de décalage par rapport à Greenwich, vers l’Ouest.
•
"dsttime" - type de correction dst
266
Date/heure
gmdate (PHP 3, PHP 4 >= 4.0b1)
Formate une date/heure GMT/CUT.
string gmdate (string format [, int timestamp])
gmdate() est identique à la fonction date(), hormis le fait que le temps retourné est GMT (Greenwich Mean Time) Par
exemple, en Finlande (GMT +0200), la première ligne ci-dessous affiche "Jan 01 1998 00:00:00", tandis que la seconde
"Dec 31 1997 22:00:00".
Exemple 1. Exemple avec gmdate()
<?php
echo date("M d Y H:i:s", mktime (0,0,0,1,1,1998));
echo gmdate("M d Y H:i:s", mktime (0,0,0,1,1,1998));
?>
Voir aussi date(), mktime() et gmmktime().
gmmktime (PHP 3, PHP 4 >= 4.0b1)
Retourne le timestamp UNIX d’une date GMT.
int gmmktime (int hour, int minute, int second, int month, int day, int year [, int
is_dst])
Identique à mktime() hormis le fait que les paramètres passés sont GMT.
gmstrftime (PHP 3>= 3.0.12, PHP 4 >= 4.0RC2)
Formate une date/heure GMT/CUT en fonction des paramétrages locaux.
string gmstrftime (string format [, int timestamp])
gmstrftime() se comporte exactement comme strftime() hormis le fait que l’heure utilisée est celle de Greenwich
(Greenwich Mean Time (GMT)). Par exemple, dans la zone Eastern Standard Time (est des USA) (GMT -0500), la
première ligne de l’exemple ci-dessous affiche "Dec 31 1998 20:00:00", tandis que la seconde affiche "Jan 01 1999
01:00:00".
Exemple 1. Exemple avec gmstrftime()
<?php
setlocale(’LC_TIME’, ’en_US’);
echo strftime("%b %d %Y %H:%M:%S", mktime (20,0,0,12,31,98))."\n";
echo gmstrftime("%b %d %Y %H:%M:%S", mktime (20,0,0,12,31,98))."\n";
?>
Voir aussi strftime().
267
Date/heure
localtime (PHP 4 >= 4.0RC2)
Lit l’heure locale
array localtime (int [timestamp], boolean [is_associative])
localtime() retourne un tableau identique à la structure retournée par la fonction C localtime. Le premier argument
timestamp est un timestamp UNIX. S’il n’est pas fourni, l’heure courante est utilisée. Le second argument
is_associative, s’il est mis à 0 ou ignoré, force localtime() à retourner un tableau à index numérique. S’il est mis à
1, localtime() retourne un tableau associatif, avec tous les éléments de la structure C, accessible avec les clés suivantes :
•
"tm_sec" - secondes
•
"tm_min" - minutes
•
"tm_hour" - heure
•
"tm_mday" - jour du mois
•
"tm_mon" - mois de l’année
•
"tm_year" - Année, incompatible an 2000
•
"tm_wday" - Jour de la semaine
•
"tm_yday" - Jour de l’année
•
"tm_isdst" - Est-ce que l’heure d’hiver a pris effet?
microtime (PHP 3, PHP 4 >= 4.0b1)
Retourne le timestamp UNIX actuel avec microsecondes.
string microtime (void)
microtime() retourne la chaîne "msec sec" avec sec qui est mesurée en secondes depuis le début de l’époque UNIX, (1er
janvier 1970 00:00:00 GMT), et msec qui est le nombre de microsecondes de cette heure. Cette fonction est seulement
disponible sur les systèmes d’exploitation qui supportent la fonction système gettimeofday().
Les deux parties de la chaîne sont exprimées en secondes.
Exemple 1. Exemple avec microtime()
<?php
function getmicrotime(){
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
$time_start = getmicrotime();
for ($i=0; $i < 1000; $i++){
//ne rien faire, pendant un millier de fois...
}
$time_end = getmicrotime();
$time = $time_end - $time_start;
echo "Rien fait durant $time secondes";
?>
Voir aussi time().
268
Date/heure
mktime (PHP 3, PHP 4 >= 4.0b1)
Retourne le timestamp UNIX d’une date.
int mktime (int hour, int minute, int second, int month, int day, int year [, int is_dst])
ATTENTION : l’ordre des arguments est différent de celui de la commande UNIX habituelle mktime(), et fournit des
résultats aléatoires si on oublie cet ordre. C’est une erreur très commune que de se tromper de sens.
mktime() retourne un timestamp UNIX correspondant aux arguments fournis. Ce timestamp est un entier long, contenant
le nombre de secondes entre le début de l’époque UNIX (1er Janvier 1970) et le temps spécifié.
Les arguments peuvent être omis, de gauche à droite, et tous les arguments manquants sont utilisés avec la valeur courante
de l’heure et du jour.
is_dst peut être mis à 1 si l’heure d’hiver est appliquée, 0 si elle ne l’est pas, et -1 (par défaut) si on ne sait pas.
Note : is_dst a été ajouté à partir de la version 3.0.10.
mktime() est pratique pour faire des calculs de dates et des validations, car elle va automatiquement corriger les valeurs
invalides. Par exemple, toutes les lignes suivantes vont retourner la même date : "Jan-01-1998".
Exemple 1. Exemple mktime()
<?php
echo
echo
echo
echo
?>
date("M-d-Y",
date("M-d-Y",
date("M-d-Y",
date("M-d-Y",
mktime
mktime
mktime
mktime
(0,0,0,12,32,1997));
(0,0,0,13,1,1997));
(0,0,0,1,1,1998));
(0,0,0,1,1,98));
year peut prendre deux ou quatre chiffres, avec les valeurs entre 0-69 qui correspondent à 2000-2069 et 70-99 à
1970-1999 (sur les systèmes où time_t sont sur des entiers 32bit signés, comme cela se fait le plus souvent de nos jours,
year est valide dans l’intervalle 1902 et 2037.
Le dernier jour d’un mois peut être décrit comme le jour "0" du mois suivant, et non pas le jour -1. Les deux exemples
suivants vont donner : "Le dernier jour de Février 2000 est: 29".
Exemple 2. Dernier jour du mois
<?php
$lastday = mktime (0,0,0,3,0,2000);
echo strftime ("Le dernier jour de Février 2000 est: %d", $lastday);
$lastday = mktime (0,0,0,4,-31,2000);
echo strftime ("Le dernier jour de Février 2000 est: %d", $lastday);
?>
Voir aussi date() et time().
strftime (PHP 3, PHP 4 >= 4.0b1)
Formate une date/heure locale avec les options locales.
string strftime (string format, int [timestamp])
269
Date/heure
strftime() retourne la date sous la forme d’une chaîne formatée conformément au format format, en utilisant le
timestamp timestamp donné. Si le timestamp est omis, la date actuelle est utilisée. Les mois et jours de la semaine, et
toutes les chaînes dépendantes de la langue sont fixées avec la commande setlocale().
Les caractères suivants sont utilisés pour spécifier le format de la date :
•
%a - nom abrégé du jour de la semaine (local).
•
%A - nom complet du jour de la semaine (local).
•
%b - nom abrégé du mois (local).
•
%B - nom complet du mois (local).
•
%c - représentation préférée pour les dates et heures, en local.
•
%C - numéro de siècle (l’année, divisée par 100 et arrondie entre 00 et 99)
•
%d - jour du mois en numérique (intervalle 01 à 31)
•
%D - identique à %m/%d/%y
•
%e - numéro du jour du mois. Les chiffres sont précédés d’un espace (de ’ 1’ à ’31’)
•
%h - identique à %b
•
%H - heure de la journée en numérique, et sur 24-heures (intervalle de 00 à 23)
•
%I - heure de la journée en numérique, et sur 12- heures (intervalle 01 à 12)
•
%j - jour de l’année, en numérique (intervalle 001 à 366)
•
%m - mois en numérique (intervalle 1 à 12)
•
%M - minute en numérique
•
%n - newline character
•
%p - soit ‘am’ ou ‘pm’ en fonction de l’heure absolue, ou en fonction des valeurs enregistrées en local.
•
%r - l’heure au format a.m. et p.m.
•
%R - l’heure au format 24h
•
%S - secondes en numérique
•
%t - tabulation
•
%T - l’heure actuelle (égal à %H:%M:%S)
•
%u - le numéro de jour dans la semaine, de 1 à 7. (1 représente Lundi)
•
%U - numéro de semaine dans l’année, en considérant le premier dimanche de l’année comme le premier jour de la
première semaine.
•
%V - le numéro de semaine comme défini dans l’ISO 8601:1988, sous forme décimale, de 01 à 53. La semaine 1 est la
première semaine qui a plus de 4 jours dans l’année courante, et dont Lundi est le premier jour.
•
%W - numéro de semaine dans l’année, en considérant le premier lundi de l’année comme le premier jour de la
première semaine
•
%w - jour de la semaine, numérique, avec Dimanche = 0
•
%x - format préféré de représentation de la date sans l’heure
•
%X - format préféré de représentation de l’heure sans la date
•
%y - l’année, numérique, sur deux chiffres (de 00 à 99)
•
%Y - l’année, numérique, sur quatre chiffres
•
%Z - fuseau horaire, ou nom ou abréviation
•
%% - un caractère ‘%’ littéral
Note : Tous les caractères suivants ne sont pas toujours supportés par toutes les librairies C. Dans ce cas, ils ne
seront pas supportés par PHP non plus.
270
Date/heure
Exemple 1. Exemple strftime()
<?php
setlocale ("LC_TIME", "C");
print(strftime("%A en Finlandais est "));
setlocale ("LC_TIME", "fi");
print(strftime("%A, en Français "));
setlocale ("LC_TIME", "fr");
print(strftime("%A est en Allemand "));
setlocale ("LC_TIME", "de");
print(strftime("%A.\n"));
?>
Cet exemple ne fonctionnera que si vous avez les configurations respectives installées sur votre système.
Voir aussi setlocale(), mktime() et le groupe de spécifications de strftime()
(http://www.opengroup.org/onlinepubs/7908799/xsh/strftime.html).
time (PHP 3, PHP 4 >= 4.0b1)
Retourne le timestamp UNIX actuel.
int time (void)
time() retourne l’heure courante, mesurée en secondes depuis le début de l’époque UNIX, (1er janvier 1970 00:00:00
GMT).
Voir aussi date().
strtotime (PHP 3>= 3.0.12, PHP 4 )
Transforme un texte anglais en timestamp
int strtotime (string time [, int now])
strtotime() essaye de lire une date au format anglais dans la chaîne time, et de la transformer en timestamp UNIX.
Exemple 1. Exemple avec strtotime()
<?php
// l’exemple n’est pas traduit, car cela ne fonctionne qu’en anglais
echo strtotime("now") . "\n";
echo strtotime("10 September 2000") . "\n";
echo strtotime("+1 day") . "\n";
echo strtotime("+1 week") . "\n";
echo strtotime("+1 week 2 days 4 hours 2 seconds")."\n";
?>
271
XVII. dBase
Ces fonctions vous permettront d’accéder aux enregistrements d’une base au format dBase (.dbf).
dBase ne permet pas l’utilisation d’index, de "memo fields", ni le blocage de la base. Deux processus de serveurs web
différents modifiant le même fichier dBase risque de rendre votre base de données incohérente.
Les fichiers dBase sont de simples fichiers séquentiels d’enregistrements de longueur fixe. Les enregistrements sont ajoutés
à la fin du fichier et les enregistrements supprimés sont conservés jusqu’à l’appel de dbase_pack().
Nous vous recommandons de ne pas utiliser les fichiers dBase comme base de données de production. Choisissez
n’importe quel serveur SQL à la place. MySQL et PostgresSQL sont des choix classiques avec PHP. Le support de dBase
ne se justifie ici que pour vous permettre d’importer et d’exporter des données depuis et vers votre base des données issues
du web, car ce format de fichier est communément accepté par les feuilles et organiseurs Windows. L’import et l’export de
données est l’unique chose pour laquelle l’utilisation de dBase est recommandée.
272
dBase
dbase_create (PHP 3, PHP 4 >= 4.0b1)
Crée une base de données dBase.
int dbase_create (string filename, array fields)
fields est un tableau de tableaux. Chaque tableau décrit le format d’un fichier de la base. Chaque champs est constitué
d’un nom, d’un caractère de type de champs, d’une longueur et d’une précision.
Les types de champs disponibles sont :
L
Boolean (booléen). Pas de longueur ou de précision pour ces valeurs.
M
Memo. (Note importante : les Memos ne sont pas supportés par PHP.) Elles n’ont pas de longueur ou de précision.
D
Date (enregistrée au format ’YYYYMMDD’). Elles n’ont pas de longueur ou de précision.
N
Number (nombre). Possède une longueur et un précision (le nombre de chiffres après la virgule).
C
String (chaîne).
Si la base de données a été créée, un identifiant de base dbase_identifier est retourné, sinon, FALSE est retourné.
Exemple 1. Création d’une base dBase
<?php
// "database" name
$dbname = "/tmp/test.dbf";
// database "definition"
$def =
array(
array("date",
"D"),
array("name",
"C", 50),
array("age",
"N",
3, 0),
array("email",
"C", 128),
array("ismember", "L")
);
// création
if (!dbase_create($dbname, $def))
print "<strong>Error!</strong>";
?>
dbase_open (PHP 3, PHP 4 >= 4.0b1)
Ouverture d’une base dBase.
int dbase_open (string filename, int flags)
flags est un flag, comme pour la fonction open(). (Typiquement; 0 signifie lecture seule, 1 signifie écriture seule, et 2
écriture/lecture).
273
dBase
dbase_open() retourne un identifiant de base de données, ou FALSE si la base n’a pas pu être sélectionnée.
dbase_close (PHP 3, PHP 4 >= 4.0b1)
Ferme une base dBase.
boolean dbase_close (resource dbase_identifier)
dbase_close() ferme la base associée à dbase_identifier.
dbase_pack (PHP 3, PHP 4 >= 4.0b1)
Compacte une base dBase.
boolean dbase_pack (resource dbase_identifier)
dbase_pack() compacte la base de données dbase_identifier (effacement définitif de tous les enregistrements
marqués pour l’effacement, avec la fonction dbase_delete_record()).
dbase_add_record (PHP 3, PHP 4 >= 4.0b1)
Ajoute un enregistrement dans une base dBase.
boolean dbase_add_record (resource dbase_identifier, array record)
dbase_add_record() ajoute les données de record dans la base spécifiée par dbase_identifier. Si le nombre de
colonnes fourni n’est pas celui du nombre de champs dans la base, l’opération échouera, et FALSE sera retourné.
dbase_replace_record (PHP 3>= 3.0.11, PHP 4 >= 4.0b1)
Remplace un enregistrement dans une base dBase.
boolean dbase_replace_record (resource dbase_identifier, array record, int
dbase_record_number)
dbase_replace_record() remplace les données associées à l’enregistrement record_number par les données
enregistrées dans record. Si le nombre de colonnes fourni n’est pas celui du nombre de champs dans la base, l’opération
échouera, et FALSE sera retourné.
dbase_record_number est un entier qui peut aller de 1 jusqu’au nombre maximal d’enregistrement de la base
(retourné par dbase_numrecords()).
dbase_delete_record (PHP 3, PHP 4 >= 4.0b1)
Efface un enregistrement dans une base dBase.
boolean dbase_delete_record (resource dbase_identifier, int record)
274
dBase
dbase_delete_record() marque l’enregistrement record pour l’effacement, dans la base dbase_identifier. Pour
effacer réellement l’enregistrement, il faut utiliser aussi dbase_pack().
dbase_get_record (PHP 3, PHP 4 >= 4.0b1)
Lit un enregistrement dans une base dBase.
array dbase_get_record (resource dbase_identifier, int record)
dbase_get_record() retourne les données de l’enregistrement record dans un tableau. Le tableau est indexé à partir de 0,
et inclus un membre nommé ’deleted’ (effacé), qui sera mis à 1 si l’enregistrement a été marqué pour l’effacement (voir
dbase_delete_record()).
Chaque champs est converti au format approprié PHP. (Les dates sont laissées au format chaîne).
dbase_get_record_with_names (PHP 3>= 3.0.4, PHP 4 >= 4.0b1)
Lit un enregistrement dans une base, sous la forme d’un tableau associatif.
array dbase_get_record_with_names
(resource dbase_identifier, int record)
dbase_identifier retourne les données de l’enregistrement record dans un tableau associatif. Le tableau inclus un
membre nommé ’deleted’ (effacé), qui sera mis à 1 si l’enregistrement a été marqué pour l’effacement (voir
dbase_delete_record()).
Chaque champs est converti au format approprié PHP. (Les dates sont laissées au format chaîne).
dbase_numfields (PHP 3, PHP 4 >= 4.0b1)
Compte le nombre de champs d’une base dBase.
int dbase_numfields (resource dbase_identifier)
dbase_numfields() retourne le nombre de champs (colonnes) de la base de données dbase_identifier. Les numéros
de champs sont numérotés de 0 à dbase_numfields($db)-1, tandis que les numéros d’enregistrements sont numérotés de 1 à
dbase_numrecords($db).
Exemple 1. Utiliser dbase_numfields()
<?php
$rec = dbase_get_record($db, $recno);
$nf = dbase_numfields($db);
for ($i=0; $i < $nf; $i++) {
print $rec[$i]."<br>\n";
}
?>
275
dBase
dbase_numrecords (PHP 3, PHP 4 >= 4.0b1)
Compter le nombre d’enregistrements dans une base dBase.
int dbase_numrecords (resource dbase_identifier)
dbase_numrecords() retourne le nombre d’enregistrements (lignes) dans la base dbase_identifier. Les numéros de
champs sont numérotés de 0 à dbase_numfields($db)-1, tandis que les numéros d’enregistrements sont numérotés de
1 à dbase_numrecords($db).
276
XVIII. DBM
Ces fonctions vous permettent d’écrire des lignes dans une base de données de type dbm. Ce type de base (supporté par
Berkeley db, gdbm, et quelques librairies systèmes, ou certaines librairies du système d’exploitation) enregistre les paires
clés/valeurs, (contrairement aux enregistrements par ligne, utilisé par les autres bases de données relationnelles).
Exemple 1. Présentation de dbm
<?php
$dbm = dbmopen("dernier", "w");
if (dbmexists($dbm, $userid)) {
$last_seen = dbmfetch($dbm, $userid);
} else {
dbminsert($dbm, $userid, time());
}
faire_quelquechose();
dbmreplace($dbm, $userid, time());
dbmclose($dbm);
?>
277
DBM
dbmopen (PHP 3, PHP 4 >= 4.0b1)
Ouvre une base de données dbm
resource dbmopen (string filename, string flags)
Le premier argument est le chemin absolu jusqu’au fichier dbm à ouvrir. Le deuxième argument est le mode d’ouverture du
fichier, qui peut prendre les valeurs suivantes : "r", "n", "c" ou "w" qui représentent respectivement lecture seule, nouveau
(ce qui implique lecture/écriture, et qui, probablement, va écraser une base existante), création(ce qui implique
lecture/écriture, et qui, probablement, va écraser une base existante), et lecture/écriture.
dbmopen() retourne un identifiant, qui sera passé à toutes les autres fonctions dbm, en cas de succès, ou FALSE en cas
d’échec.
Si ndbm est utilisé, ndbm va créer les fichiers filename.dir et filename.pag. gdbm n’utilise qu’un fichier, tout comme
les librairies internes, et Berkeley db crée le fichier filename.db. Notez que PHP dispose de son propre système de
verrouillage des fichiers, qui s’additionne à celui éventuellement utilisé par les librairies. PHP n’efface jamais les fichiers
.lck qu’il crée. Il les utilise comme inode fixe, sur lequel faire le verrouillage. Pour plus d’informations sur les fichiers
dbm, reportez-vous à vos pages de manuel Unix (man) , ou bien chargez gdbm : ftp://prep.ai.mit.edu/pub/gnu.
dbmclose (PHP 3, PHP 4 >= 4.0b1)
Ferme une base de données dbm.
boolean dbmclose (resource dbm_identifier)
dbmclose() déverrouille et ferme la base de données dbm_identifier.
dbmexists (PHP 3, PHP 4 >= 4.0b1)
Indique si une valeur existe.
boolean dbmexists (resource dbm_identifier, string key)
dbmexists() retourne TRUE s’il y a une valeur associée à la clé key.
dbmfetch (PHP 3, PHP 4 >= 4.0b1)
Lit une valeur.
string dbmfetch (resource dbm_identifier, string key)
dbmfetch() retourne la valeur associée à la clé key.
dbminsert (PHP 3, PHP 4 >= 4.0b1)
Insère une valeur.
int dbminsert (resource dbm_identifier, string key, string value)
dbminsert() ajoute la valeur value dans la base de données, avec la clé key.
278
DBM
dbminsert() retourne -1 si la base a été ouverte en mode lecture seule, 0 si l’insertion a été réussie, et 1 si la clé key existe
déjà. (Pour remplacer la valeur, utilisez dbmreplace().)
dbmreplace (PHP 3, PHP 4 >= 4.0b1)
Remplace une valeur.
boolean dbmreplace (resource dbm_identifier, string key, string value)
dbmreplace() remplace la valeur courante par la valeur value pour la clé key, dans une base dbm_identifier.
dbmreplace() crée la clé, si elle n’existe pas dans la base.
dbmdelete (PHP 3, PHP 4 >= 4.0b1)
Efface une valeur.
boolean dbmdelete (resource dbm_identifier, string key)
dbmdelete() efface la valeur de la clé key, dans la base dbm_identifier.
dbmdelete() retourne FALSE si la clé n’existe pas dans cette base.
dbmfirstkey (PHP 3, PHP 4 >= 4.0b1)
Lit la première clé.
string dbmfirstkey (resource dbm_identifier)
dbmfirstkey() retourne la première clé de la base de données. Notez bien que les clés ne sont pas dans un ordre défini,
étant donné que la table est construite comme un tableau associatif.
dbmnextkey (PHP 3, PHP 4 >= 4.0b1)
Lit la clé suivante.
string dbmnextkey (resource dbm_identifier, string key)
dbmnextkey() retourne la clé après la clé key. En appelant dbmfirstkey(), puis successivement dbmnextkey(), il est
possible de passer en revue toute les paires clé/valeur de la base de données dbm. Par exemple :
Exemple 1. Passer en revue une base de données.
<?php
$cle = dbmfirstkey($dbm_id);
while ($cle){
echo "$cle = " . dbmfetch($dbm_id, $cle) . "\n";
$cle = dbmnextkey($dbm_id, $cle);
}
?>
279
DBM
dblist (PHP 3, PHP 4 >= 4.0b1)
Décrit la librairie dbm utilisée.
string dblist (void)
280
XIX. dbx
Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et
concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
Le module dbx est un module d’abstraction de base de données (db pour database (base de données) et ’X’ pour toutes les
bases supportées). Les fonctions dbx vous permettent d’accéder à toutes les bases supportées, avec la même convention.
Pour cela il vous faut avoir ces fonctions compilées avec PHP (option de configuration --enable-dbx et toutes les bases
que vous souhaitez utiliser. Par exemple, si vous voulez accéder à MySQL depuis dbx, vous devez aussi configurer PHP
avec --with-mysql. Les fonctions dbx n’interface pas directement les bases de données, mais utilise les modules de
support de ces bases. Pour pouvoir utiliser une base avec le module dbx, il vous faut l’avoir configuré avec PHP, ou bien la
charger dynamiquement. Actuellement les bases MySQL, PostgreSQL et ODBC sont supportées, mais d’autres suivront
bientôt (j’espère).
La documentation complémentaire (ajout de nouvelles bases à dbx) est accessible à http://www.guidance.nl/php/dbx/doc/.
281
dbx
dbx_close (PHP 4 >= 4.0.6)
Ferme une connexion à une base
boolean dbx_close (resource link_identifier)
Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et
concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbx_close() retourne TRUE en cas de succès, et FALSE en cas d’erreur.
Exemple 1. Exemple avec dbx_close()
<?php
$link = dbx_connect("mysql", "localhost", "base", "utilisateur", "mot de passe")
or die ("Impossible de se connecter");
print("Connexion réussie");
dbx_close($link);
?>
Note : Reportez vous aussi à documentation de la base de données que vous utilisez.
Voir aussi dbx_connect().
dbx_connect (PHP 4 >= 4.0.6)
Ouvre une connexion à une base de données
resource dbx_connect (string module, string host, string database, string username, string
password [, int persistent])
Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et
concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbx_connect() retourne une resource dbx_link_object en cas de succès, FALSE sinon. Si la connexion a put être établie,
mais que la base de données n’a pas pu être selectionnée, la fonction retournera quand même une ressource. Le paramètre
persistent peut prendre la valeur DBX_PERSISTENT, pour créer une connexion persitante.
Les valeurs possibles de module sont les suivantes (n’oubliez pas que cela fonctionnera que si le module associé est
chargé):
•
module 1: "mysql"
•
module 2: "odbc"
•
module 3: "pgsql"
Le support de pgsql est au stade expérimental, et vous devez compiler vous-même le module pgsql après avoir modifié un
des fichiers sources. Sinon, vous aurez une alerte affichée à chaque requête.
282
dbx
La ressource dbx_link_object a trois membres : ’handle’, ’module’ et ’database’. Le membre ’database’ contient le nom de
la base de données actuellement selectionnée. Le membre ’module’ est à usage interne à dbx, et contient le numéro de
module sus-cité. Le membre ’handle’ est une resource valide de connexion à la base de données, et peut être utilisé en tant
que tel dans les autres fonctions spécifiques à cette base de données.
<?php
$link = dbx_connect("mysql", "localhost", "base de données", "utilisateur", "mot de passe");
mysql_close($link->handle);
// dbx_close($link) est beaucoup plus adapté ici
?>
Les paramètres host, database, username et password sont attendus, mais ne sont pas toujours utiles, suivant la
fonction de connexion de la base de données utilisée.
Exemple 1. Exemple avec dbx_connect()
<?php
$link = dbx_connect("odbc", "", "base de données", "utilisateur", "mot de passe", DBX_PERSISTENT)
or die ("Impossible de se connecter");
print ("Connexion réussie");
dbx_close($link);
?>
Note : Reportez vous aussi à documentation de la base de données que vous utilisez.
Voir aussi dbx_close().
dbx_error (PHP 4 >= 4.0.6)
Rapporte le message d’erreur du dernier appel de fonction
string dbx_error (resource link_identifier)
Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et
concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbx_error() retourne une chaîne contenant le message d’erreur du module sélectionné. S’il y a des connexions multiples
sur le même module, seule la dernière erreur est fournie. S’il a des des connexions sur différents modules, la dernière
erreur du module est retourné (le module est alors représenté par link_identifier). Notez que le module ODBC ne
supporte pas encore cette fonction.
Exemple 1. Exemple avec dbx_error()
<?php
$link = dbx_connect("mysql", "localhost", "base de données", "utilisateur", "mot de passe")
or die ("Impossible de se connecter");
$result = dbx_query($link, "select id from nonexistingtbl");
if ($result==0) {
echo dbx_error($link);
283
dbx
}
dbx_close($link);
?>
Note : Reportez vous aussi à documentation de la base de données que vous utilisez.
dbx_query (PHP 4 >= 4.0.6)
Envoie une requête et lit tous les résultats
resource dbx_query (resource link_identifier, string sql_statement [, long flags])
Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et
concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbx_query() retourne une resource dbx_result_object ou 1 en cas de succès (un objet de résultat ne sera retourné que pour
les requêtes SQL qui retournent un résultat), ou 0 en cas d’erreur. Le paramètre flags sert à contrôler la quantité
d’informations retournée. Il peut être n’importe quelle combinaisons par OR des constantes : DBX_RESULT_INFO,
DBX_RESULT_INDEX, DBX_RESULT_ASSOC. DBX_RESULT_INFO fournit des informations sur les colonnes,
comme les noms des champs et leur type. DBX_RESULT_INDEX retourne le résultat dans un tableau indexé (par
exemple, data[2][3], où 2 est le numéro de ligne et 3 est le numéro de colonne), dont la première colonne est indexée à 0.
DBX_RESULT_ASSOC associe les noms de colonnes avec leurs indices. Notez que DBX_RESULT_INDEX est toujours
retourné, indépendamment de la valeur de flags. Si DBX_RESULT_ASSOC est spécifié, DBX_RESULT_INFO est
aussi retourné, même s’il n’a pas été spécifié. Ce qui signifie que les seules combinaisons envisageables sont
DBX_RESULT_INDEX, DBX_RESULT_INDEX | DBX_RESULT_INFO et DBX_RESULT_INDEX |
DBX_RESULT_INFO | DBX_RESULT_ASSOC. La dernière combinaison est la valeur par défaut de flags. Les
résultats associés sont en fait des références, ce qui fait que modifier data[0][0], revient à modifier
data[0][’fieldnameforfirstcolumn’].
Un objet dbx_result_object a 5 membres (éventuellement 4, suivants les valeurs de flags) : ’handle’, ’cols’, ’rows’, ’info’
(optionnel) et ’data’. Handle est un identifiant de résultat, qui peut être utilisé avec les fonctions spécifiques à son module.
Par exemple :
<?php
$result = dbx_query($link, "SELECT id FROM tbl");
mysql_field_len($result->handle, 0);
?>
Les membres cols et rows contiennent les numéros de colonne et de champs.
<?php
$result = dbx_query($link, "SELECT id FROM tbl");
echo "Taille du résultat: " . $result->rows . " x " . $result->cols . "<br>\n";
?>
Le membre info n’est retourné que si DBX_RESULT_INFO et/ou DBX_RESULT_ASSOC sont spécifié dans le paramètre
flags. C’est un deuxième tableau, qui possède deux lignes ("name" and "type"), pour connaître les informations sur les
colonnes.
284
dbx
<?php
$result = dbx_query($link, "SELECT id FROM tbl");
echo "Nom de la colonne : " . $result->info["name"][0] . "<br>\n";
echo "Type de la colonne: " . $result->info["type"][0] . "<br>\n";
?>
Le membre data contient les données effectivement lues, éventuellement associées à des noms de colonnes. Si
DBX_RESULT_ASSOC est utilisé, il est possible d’utiliser $result->data[2]["fieldname"].
Exemple 1. Exemple avec dbx_query()
<?php
$link = dbx_connect("odbc", "", "base de données", "utilisateur", "mot de passe")
or die ("Impossible de se connecter");
$result = dbx_query($link, "SELECT id, parentid, description FROM tbl");
if ($result==0) echo "La requête a échoué\n<br>";
elseif ($result==1) {
echo "La requête a réussie\n<br>";
} else {
$rows=$result->rows;
$cols=$result->cols;
echo "<p>table dimension: {$result->rows} x {$result->cols}<br><table border=1>\n";
echo "<tr>";
for ($col=0; $col<$cols; ++$col) {
echo "<td>-{$result->info["name"][$col]}-<br>-{$result->info["type"][$col]}-</td>";
}
echo "</tr>\n";
for ($row=0; $row<$rows; ++$row){
echo "<tr>";
for ($col=0; $col<$cols; ++$col) {
echo "<td>-{$result->data[$row][$col]}-</td>";
}
echo "</tr>\n";
}
echo "</table><p>\n";
echo "table dimension: {$result>rows} x id, parentid, description<br><table border=1>\n";
for ($row=0; $row<$rows; ++$row) {
echo "<tr>";
echo "<td>-{$result->data[$row]["id"]}-</td>";
echo "<td>-{$result->data[$row]["parentid"]}-</td>";
echo "<td>-{$result->data[$row]["description"]}-</td>";
echo "</tr>\n";
}
echo "</table><p>\n";
}
dbx_close($link);
?>
Note : Reportez vous aussi à documentation de la base de données que vous utilisez.
Voir aussi dbx_connect().
285
dbx
dbx_sort (PHP 4 >= 4.0.6)
Tri un résultat avec une fonction utilisateur
boolean dbx_sort (dbx_result_object result, string user_compare_function)
Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et
concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbx_sort() retourne TRUE en cas de succès, et FALSE sinon.
Exemple 1. Exemple avec dbx_sort()
<?php
function user_re_order ($a, $b) {
$rv = dbx_cmp_asc($a, $b, "parentid");
if (!$rv) $rv = dbx_cmp_asc($a, $b, "id");
return $rv;
}
$link = dbx_connect("odbc", "", "base de données", "utilisateur", "mot de passe")
or die ("Impossible de se connecter");
$result = dbx_query($link, "SELECT id, parentid, description FROM tbl ORDER BY id");
echo "Les données sont maintenant triées par id<br>";
dbx_query($result, "user_re_order");
echo "Les données sont maintenant triées par parentid, puis par id<br>";
dbx_close($link);
?>
Voir aussi dbx_cmp_asc() et dbx_cmp_desc().
dbx_cmp_asc (PHP 4 4.0.6 only)
Compare deux lignes pour tri croissant
int dbx_cmp_asc (array row_a, array row_b, string columnname_or_index)
Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et
concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbx_cmp_asc() retourne 0 si row_a[$columnname_or_index] est égal à row_b[$columnname_or_index], 1 si elle est plus
grande et -1 si elle est plus petite.
Exemple 1. Exemple avec dbx_cmp_asc()
<?php
function user_re_order($a, $b) {
$rv = dbx_cmp_asc($a, $b, "parentid");
if (!$rv) {
$rv = dbx_cmp_asc($a, $b, "id");
return $rv;
}
}
286
dbx
$link = dbx_connect("odbc", "", "base de données", "utilisateur", "mot de passe")
or die ("Impossible de se connecter");
$result = dbx_query($link, "SELECT id, parentid, description FROM tbl ORDER BY id");
echo "Les données sont maintenant triées par id<br>";
dbx_query($result, "user_re_order");
echo "Les données sont maintenant triées par parentid, puis par id<br>";
dbx_close($link);
?>
Voir aussi dbx_sort() et dbx_cmp_desc().
dbx_cmp_desc (PHP 4 4.0.6 only)
Compare deux lignes pour tri décroissant
int dbx_cmp_desc (array row_a, array row_b, string columnname_or_index)
dbx_cmp_desc() retourne 0 si row_a[$columnname_or_index] est égal à row_b[$columnname_or_index], 1 si elle est plus
grande et -1 si elle est plus petite.
Exemple 1. Exemple avec dbx_cmp_desc()
<?php
function user_re_order ($a, $b) {
$rv = dbx_cmp_asc($a, $b, "parentid");
if (!$rv) {
$rv = dbx_cmp_asc($a, $b, "id");
return $rv;
}
}
$link = dbx_connect("odbc", "", "base de données", "utilisateur", "mot de passe")
or die ("Impossible de se connecter");
$result = dbx_query($link, "SELECT id, parentid, description FROM tbl ORDER BY id");
echo "Les données sont maintenant triées par id<br>";
dbx_query($result, "user_re_order");
echo "Les données sont maintenant triées par parentid, puis par id<br>";
dbx_close($link);
?>
Voir aussi dbx_sort() et dbx_cmp_asc().
287
XX. DB++ functions
Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et
concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
Experimental support for db++ database
This paper describes the the db++ extension which enables PHP to access db++ relation files through all of the search and
update methods available in the client/server "C" library interface of db++ and to read and process the output of a db++
query.
Requirenments
??? Download where
Installation
Creation and installation of this extension requires the db++ client libraries and header files to be installed on your system
as described above. You have to run configure with option --with-dbplus to build this extension.
configure looks for the client libraries and header files under the default path/usr/dbplus/. If you have installed db++ in
a different place you have add the installation path to the configure option like this:
--with-dbplus=/your/installation/path.
288
dbplus_add (unknown)
Add a tuple to a relation
int dbplus_add (int relation, array tuple)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_aql (unknown)
Perform AQL query
int dbplus_aql (string query [, string server [, string dbpath]])
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_chdir (unknown)
Get/Set database virtual current directory
string dbplus_chdir ([string newdir])
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_close (unknown)
Close a relation
int dbplus_close (int relation)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
289
dbplus_curr (unknown)
Get current tuple from relation
int dbplus_curr (int relation, array tuple)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_errcode (unknown)
Get error string for given errorcode or last error
string dbplus_errcode (int err)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_first (unknown)
Get first tuple from relation
int dbplus_first (int relation, array tuple)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_flush (unknown)
???
int dbplus_flush (int relation)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
290
dbplus_freealllocks (unknown)
Free all locks held by this client
int dbplus_freealllocks ()
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_freerlocks (unknown)
Free all locks on given relation
int dbplus_freerlocks (int relation)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_info (unknown)
???
int dbplus_info (int relation, string key, array )
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_last (unknown)
Get last tuple from relation
int dbplus_last (int relation, array tuple)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
291
dbplus_lockrel (unknown)
Request read-lock on relation
int dbplus_lockrel (int relation)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_next (unknown)
Get next tuple from relation
int dbplus_next (int relation, array )
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_open (unknown)
Open relation file
int dbplus_open (string name)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
The relation file name will be opened. name can be either a file name or a relative or absolute path name. This will be
mapped in any case to an absolute relation file path on a specific host machine and server.
On success a relation file handle (cursor) is returned which must be used in any subsequent commanads referencing the
relation.
dbplus_prev (unknown)
Get previous tuple from relation
int dbplus_prev (int relation, array tuple)
292
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_restorepos (unknown)
???
int dbplus_restorepos (int relation, array tuple)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_ropen (unknown)
Open relation file ... ???
int dbplus_ropen (string name)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_runlink (unknown)
Remove relation from filesystem
int dbplus_runlink (int relation)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_rzap (unknown)
Remove all tuples from relation
int dbplus_rzap (int relation, int truncate)
293
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_savepos (unknown)
???
int dbplus_savepos (int relation)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_setindex (unknown)
???
int dbplus_setindex (int relation, string idx_name)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_setindexbynumber (unknown)
???
int dbplus_setindexbynumber (int relation, int idx_number)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_sql (unknown)
Perform SQL query
int dbplus_sql (string query, string server, string dbpath)
294
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_tremove (unknown)
Remove tuple and return new current tuple
int dbplus_tremove (int relation, array old [, array current])
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_undo (unknown)
???
int dbplus_undo (int relation)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_undoprepare (unknown)
???
int dbplus_undoprepare (int relation)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_unlockrel (unknown)
Give up read-lock on relation
int dbplus_unlockrel (int relation)
295
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_unselect (unknown)
???
int dbplus_unselect (int relation)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_update (unknown)
Update specified tuple in relation
int dbplus_update (int relation, array old, array new)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_xlockrel (unknown)
Request exclusive write lock on relation
int dbplus_xlockrel (int relation)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_xunlockrel (unknown)
Free exclusive write lock on relation
int dbplus_xunlockrel (int relation)
296
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_change (unknown)
int dbplus_change (int handle, string domain)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
Not implemented yet.
dbplus_find (unknown)
int dbplus_find (int handle, string constr, string tname)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
Not implemented yet.
dbplus_freelock (unknown)
int dbplus_freelock (int handle, string tname)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
Not implemented yet.
dbplus_getlock (unknown)
int dbplus_getlock (int handle, string tname)
297
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
Not implemented yet.
dbplus_getunique (unknown)
int dbplus_getunique (int handle, string varname, int flush)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
Not implemented yet.
dbplus_rchperm (unknown)
int dbplus_rchperm (int handle, int mask, string user, string group)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
Not implemented yet.
dbplus_rcreate (unknown)
int dbplus_rcreate (string name, string domlist, int flag)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
Not implemented yet.
dbplus_rcrtexact (unknown)
int dbplus_rcrtexact (string name, int handle, int flag)
298
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
Not implemented yet.
dbplus_rcrtlike (unknown)
int dbplus_rcrtlike (string name, int handle, int flag)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
Not implemented yet.
dbplus_resolve (unknown)
int dbplus_resolve (string name, string vname)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
Not implemented yet.
dbplus_rkeys (unknown)
int dbplus_rkeys (int handle, string domlist)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
Not implemented yet.
dbplus_rquery (unknown)
int dbplus_rquery ()
299
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
dbplus_rrename (unknown)
int dbplus_rrename (int handle, string name, int flag)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
Not implemented yet.
dbplus_rsecindex (unknown)
int dbplus_rsecindex (int handle, string domlist, int compact)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
Not implemented yet.
dbplus_tcl (unknown)
int dbplus_tcl (int sid, string script)
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de ces fonctions, leurs noms
et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
Not implemented yet.
300
XXI. Accès aux dossiers
301
Dossiers
chroot (PHP 4 >= 4.0.5)
Change la racine
int chroot (string directory)
chroot() change la racine du script en cours, et la remplace par directory. chroot() retourne FALSE s’il n’a pas pu
modifier la racine, et TRUE sinon.
Note : Il n’est pas conseillé d’utiliser cette fonction sur un site web, car il n’est pas possible de restaurer la racine à sa
valeur initiale à la fin de la requête. Cette fonction n’est viable que lorsque PHP est utilisé en CGI.
chdir (PHP 3, PHP 4 >= 4.0b1)
Change de dossier
int chdir (string directory)
chdir() change le dossier courant de PHP en directory. chdir() retourne FALSE si l’opération échoue, et TRUE sinon.
dir (PHP 3, PHP 4 >= 4.0b1)
Classe dossier
new dir (string directory)
Un mécanisme pseudo-objet permet la lecture d’un dossier. L’argument directory doit être ouvert. Deux propriétés
sont disponibles une fois le dossier ouvert : le pointeur peut être utilisé avec d’autres fonctions telles que readdir(),
rewinddir() et closedir(). Le chemin du dossier est le chemin fourni lors de la construction de l’objet. Trois méthodes
permettent de lire, remettre à zéro et fermer le dossier.
Exemple 1. Exemple avec dir()
<?php
$d = dir("/etc");
echo "Pointeur: ".$d->handle."<br>\n";
echo "Chemin: ".$d->path."<br>\n";
while($entry=$d->read()) {
echo $entry."<br>\n";
}
$d->close();
?>
closedir (PHP 3, PHP 4 >= 4.0b1)
Ferme le pointeur sur le dossier.
void closedir (resource dir_handle)
302
Dossiers
closedir() ferme le pointeur de dossier dir_handle. Le dossier devait avoir été ouvert avec opendir().
getcwd (PHP 4 >= 4.0b4)
Retourne le dossier de travail
string getcwd (void)
getcwd() retourne le nom du dossier courant.
opendir (PHP 3, PHP 4 >= 4.0b1)
Ouvre un dossier, et récupère un pointeur dessus.
int opendir (string path)
opendir() retourne un pointeur sur un dossier pour être utilisé avec les fonctions closedir(), readdir() et rewinddir().
Si le paramètre path n’est pas un dossier valide, ou si le dossier ne peut être accédé pour des raisons de permissions ou
des erreurs liées au système de fichiers, opendir() retourne FALSE et génère une erreur PHP. Vous pouvez supprimer cette
erreur en ajoutant @ avant le nom de la fonction.
Exemple 1. Exemple opendir()
<?php
if ($dir = @opendir("/tmp")) {
while($file = readdir($dir)) {
echo "$file\n";
}
closedir($dir);
}
?>
readdir (PHP 3, PHP 4 >= 4.0b1)
Lit une entrée du dossier.
string readdir (resource dir_handle)
readdir() retourne le nom du fichier suivant dans le dossier identifié par dir_handle. Les noms sont retournés dans
n’importe quel ordre.
Exemple 1. Liste tous les fichiers du dossier courant
<?php
$handle=opendir(’.’);
echo "Pointeur de dossier: $handle\n";
echo "Fichiers:\n";
while ($file = readdir($handle)) {
echo "$file\n";
}
closedir($handle);
303
Dossiers
?>
Notez que readdir() retournera aussi les dossiers "." et "..". Si vous ne les voulez pas, supprimez les simplement :
Exemple 2. Liste tous les fichiers du dossier courant, sauf "." et ".."
<?php
$handle=opendir(’.’);
while ($file = readdir($handle)) {
if ($file != "." && $file != "..") {
echo "$file\n";
}
}
closedir($handle);
?>
rewinddir (PHP 3, PHP 4 >= 4.0b1)
Retourne à la première entrée du dossier.
void rewinddir (resource dir_handle)
rewinddir() retourne à la première entrée du dossier identifié par dir_handle : le prochain fichier lu sera le premier.
304
XXII. DOM XML
Note importante : cette documentation est en cours de rédaction, et n’est pas encore finie. Elle souffre naturellement d’un
manque de détails et de relecture. Soyez en prévenu. (Damien Seguy).
Ces fonctions ne sont disponibles que si PHP a été configuré avec l’option --with-dom=[DIR], et utilise la librairie
GNOME xml library. Vous aurez aussi besoin de la librairie libxml-2.2.7 (la version beta ne fonctionne pas). Ces fonctions
ont été ajoutées en PHP 4.
Cette extension vous permet de générer des documents XML avec les API DOM. Elle fournit aussi une fonction xmltree()
qui transforme un fichier XML en tableau PHP. Actuellement, ce tableau est accessible uniquement en lecture. Cela ne
siginifie pas que vous ne pouvez pas le modifier, mais cela n’aurait aucun sens car domxml_dumpmem() ne pourra pas
prendre ces modifications en considération. Par conséquent, si vous voulez lire un fichier XML et écrire sa version
modifiée, utilisez les fonctions domxml_add_node(), domxml_set_attribute(), etc... et finalement,
domxml_dumpmem().
Ce module définit les constantes suivantes :
Tableau 1. Constantes XML
Constante
Valeur
Description
XML_ELEMENT_NODE
1
Le noeud est un élément
XML_ATTRIBUTE_NODE
2
Le noeud est un attribut
XML_TEXT_NODE
3
Le noeud est un texte
XML_CDATA_SECTION_NODE
4
XML_ENTITY_REF_NODE
5
XML_ENTITY_NODE
6
Le noeud est une entité telle que  
XML_PI_NODE
7
Le noeud est une instruction
XML_COMMENT_NODE
8
Le noeud est un commentaire
XML_DOCUMENT_NODE
9
Le noeud est un document
XML_DOCUMENT_TYPE_NODE
10
XML_DOCUMENT_FRAG_NODE
11
XML_NOTATION_NODE
12
XML_GLOBAL_NAMESPACE
1
XML_LOCAL_NAMESPACE
2
Chaque fonction de cette extension peut être utilisée de deux manières différentes. Dans un contexte procédural, il faut
passer l’objet en premier argument; dans un contexte objet, vous pouvez appeler la fonction comme une méthode de cet
objet. Cette documentation présente les fonctions dans leur contexte procédural. Vous pouvez connaître la méthode objet
en supprimant le préfixe "domxml_". Les tables suivantes listes toutes les classes, leurs attributs et leurs méthodes.
Ce module définit un ensemble de classes, qui sont listées ci-dessous (y compris leur attributs et leur méthodes).
Tableau 2. classe DomDocument (méthodes)
Nom de la méthode
Nom de la fonction
root
domxml_root()
children
domxml_children()
add_root
domxml_add_root()
dtd
domxml_intdtd()
dumpmem
domxml_dumpmem()
xpath_init
xpath_init
xpath_new_context
xpath_new_context
xptr_new_context
xptr_new_context
Description
305
DOM XML
Tableau 3. Classe DomDocument (attributs)
Nom
Type
Description
doc
class DomDocument
L’objet lui-même
name
string
url
string
version
string
encoding
string
standalone
long
1 si le fichier est complet
type
long
Une des constantes de la table ...
compression
long
1 si le fichier est compressé
charset
long
Version de XML
Tableau 4. classe DomNode (méthodes)
Nom
Nom en PHP
lastchild
domxml_last_child()
children
domxml_children()
parent
domxml_parent()
new_child
domxml_new_child()
get_attribute
domxml_get_attribute()
set_attribute
domxml_set_attribute()
attributes
domxml_attributes()
node
domxml_node()
set_content()
domxml_set_content
Description
Tableau 5. classe DomNode (attributs)
Nom
Type
Description
node
class DomNode
L’objet lui-même
type
long
name
string
content
string
306
DOM XML
xmldoc (PHP 4 >= 4.0b4)
Crée un objet DOM pour un document XML.
object xmldoc (string str)
xmldoc() analyse le document XML str et retourne un objet de classe "Dom document", avec les propriétés de "doc"
(ressources), "version" (string) et "type" (long).
xmldocfile (PHP 4 >= 4.0b4)
Crée un objet DOM à partir d’un fichier XML
object xmldocfile (string filename)
xmldocfile() analyse le fichier XML filename et retourne un objet "Dom document", avec les propriétées de "doc"
(ressources) et "version" (string).
xmltree (PHP 4 >= 4.0b4)
Crée un arbre d’objet PHP, à partir d’un document XML.
object xmltree (string str)
xmltree() analyse le document XML str et retourne un arbre d’objets PHP qui représente le document analysé. xmltree()
est différentes des autres fonctions, car vous ne pouvez accéder à cet arbre avec aucune des autres fonctions. Modifier cet
arbre n’a pas de sens, car il n’y a pas moyen de sauver ces modifications. Cette fonction a tout de même des applications en
lecture seule.
domxml_root (PHP 4 >= 4.0b4)
Retourne l’élément racine
object domxml_root (object doc)
domxml_root() prend en argument doc, un objet de la classe "Dom document", et retourn l’élément racine de ce
document. Les autres noeuds qui peuvent être considérés comme racine (tels que les commentaires) sont ignorés.
L’exemple suivant retourne simplement l’élément CHAPTER et l’affiche. Les autres racines (des commentaires) ne sont
pas retournés.
Exemple 1. Lecture de l’élément principal
<?php
$xmlstr = "<?xml version=’1.0’ standalone=’yes’>
<!DOCTYPE chapter SYSTEM ’/share/sgml/Norman_Walsh/db3xml10/db3xml10.dtd’
[ <!ENTITY sp \"spanish\">
]>
<!- lsfj -->
<chapter language=’en’><title language=’en’>Title</title>
<para language=’ge’>
&sp;
<!- comment -->
<informaltable language=’&sp;’>
307
DOM XML
<tgroup cols=’3’>
<tbody>
<row><entry>a1</entry><entry
morerows=’1’>b1</entry><entry>c1</entry></row>
<row><entry>a2</entry><entry>c2</entry></row>
<row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</chapter>";
if(!$dom = xmldoc($xmlstr)) {
echo "Erreur lors de l’analyse du document\n";
exit;
}
$root = $dom->root();
/* ou $root = domxml_root($dom); */
print_r($root);
?>
domxml_add_root (PHP 4 >= 4.0b4)
Ajoute une autre racine
resource domxml_add_root (resource doc, string name)
domxml_add_root() ajoute la racine name au document doc.
Exemple 1. Création d’une en-tête HTML simple
<?php
$root = $doc->add_root("HTML");
$head = $root->new_child("HEAD", "");
$head->new_child("TITLE", "Ici, le titre");
echo $doc->dumpmem();
?>
domxml_dumpmem (PHP 4 >= 4.0b4)
Ecrit le document XML interne dans une chaîne
string domxml_dumpmem (resource doc)
domxml_dumpmem() crée un document XML à partir de la représentation interne. domxml_dumpmem() est
généralement appelée avec avoir construit un nouveau document XML, comme dans l’exemple domxml_add_root().
Voir aussi domxml_add_root().
308
DOM XML
domxml_attributes (PHP 4 >= 4.0b4)
Retourne les attributs d’un noeud
array domxml_attributes (resource node)
domxml_attributes() retourne tous les attributs du noeud node sous forme d’un tableau d’objets "dom attribute".
domxml_get_attribute (PHP 4 >= 4.0.5)
Retourne un attribut d’un noeud
object domxml_get_attribute (resource node, string name)
domxml_get_attribute() retourn l’attribut name du noeud node.
Voir aussi domxml_set_attribute().
domxml_set_attribute (PHP 4 >= 4.0.5)
Modifie un attribut
object domxml_set_attribute (resource node, string name, string value)
domxml_set_attribute() modifie l’attribut name du noeud node en lui attribuant la valeur value.
En partant de l’exemple proposé à la fonction domxml_add_root(), il est simple d’ajouter un attribut à l’élément HEAD
en appelant simplement set_attribute().
Exemple 1. Ajouter un attribut à un élément
<?php
$doc = new_xmldoc("1.0");
$root = $doc->add_root("HTML");
$head = $root->new_child("HEAD", "");
$head->new_child("TITLE", "Ici, le titre");
$head->set_attribute("Language", "fr");
$head->new_child("TITLE", "Hier der Titel");
$head->set_attribute("Language", "ge");
echo $doc->dumpmem();
?>
domxml_children (PHP 4 >= 4.0b4)
Retourne les fils d’un noeud
array domxml_children (object doc|node)
domxml_children() retourne tous les fils du noeud doc|node, sous forme d’un tableau de noeuds.
Dans l’exemple ci-dessous, la variable children contiendra un tableau avec les noeuds de type XML_ELEMENT. Ce
noeud est l’élément TITLE.
309
DOM XML
Exemple 1. Lire les fils d’un noeud
<?php
$doc = new_xmldoc("1.0");
$root = $doc->add_root("HTML");
$head = $root->new_child("HEAD", "");
$head->new_child("TITLE", "Hier der Titel");
$head->set_attribute("Language", "ge");
$children = $head->children()
?>
domxml_new_child (PHP 4 >= 4.0b4)
Ajoute un nouveau fils
resource domxml_new_child (string name, string content)
domxml_new_child() ajoute un nouveau fils. (NDtraducteur : cette documentation n’est pas encore finie...)
domxml_new_xmldoc (PHP 4 >= 4.0b4)
Crée un document XML vide
object domxml_new_xmldoc (string version)
domxml_new_xmldoc() crée un nouveau document XML vide, et le retourne.
Voir aussi domxml_add_root().
xpath_new_context (4.0.4 - 4.0.6 only)
Crée un nouveau contexte xpath
object xpath_new_context (object dom_document)
Pas de documentation encore (22/2/2201).
xpath_eval (PHP 4 >= 4.0.4)
Evalue une expression xpath
array xpath_eval (object xpath_context)
Pas de documentation encore (22/2/2201).
310
XXIII. Gestion des erreurs
Ces fonctions permettent de gérer les erreurs, et de les enregistrer. Vous pouvez définir les règles de traitement des erreurs
et choisir la manière de les enregistrer : vous pouvez adapter le rapport d’erreur à vos besoins.
Avec les fonctions d’enregistrements, vous pouvez envoyer directement les rapport à d’autres machines (ou même les
envoyer par email à un pager), à l’ historique système, ou encore selectionner les erreurs les plus importantes et ne pas
enregistrer les autres.
La fonction de niveau d’erreur vous permet de personnaliser le niveau et le type d’erreur noté : depuis les inoffensives
alertes jusqu’au erreurs personnalisées retournées par les fonctions.
311
Gestion des erreurs
error_log (PHP 3, PHP 4 >= 4.0b1)
Envoie un message d’erreur quelque part
int error_log (string message, int message_type [, string destination [, string
extra_headers]])
error_log() envoie un message d’erreur à l’historique du serveur web, à un port TCP ou un fichier. message est le
message d’erreur qui doit être enregistré. message_type indique où le message doit être envoyé :
Tableau 1. Types de error_log()
0
message est envoyé à l’historique PHP, qui est basé sur
l’historique système ou un fichier, en fonction de la
configuration de error_log.
1
message est envoyé par email à l’adresse destination.
C’est le seul type qui utilise le quatrième paramètre
extra_headers. Ce message utilise la même fonction
interne que mail().
2
message est envoyé par la connexion de debuggage PHP.
Cette option n’est disponible que si l’option remote
debugging a été désactivé. Dans ce cas, le parmètre
destination spécifie l’hôte ou l’adresse IP, et
optionnellement le numéro de port, de la socket qui recevra
les informations de débuggage.
3
message est ajouté au fichier destination.
Exemple 1. Exemples avec error_log()
<?php
// Envoi une notification par l’historique du serveur, si la connexion à la base
// de données est impossible.
if (!Ora_Logon ($username, $password)) {
error_log ("Base Oracle indisponible!", 0);
}
// Indiquer à l’administrateur, par email, qu’il n’y a plus de FOO
if (!($foo = allocate_new_foo()) {
error_log ("Aya!, Il ne reste plus de FOO disponibles!", 1,
"[email protected]");
}
// D’autres manières d’appeler error_log():
error_log ("Grosse bourde!", 2, "127.0.0.1:7000");
error_log ("Grosse bourde!", 2, "loghost");
error_log ("Grosse bourde!", 3, "/var/tmp/my-errors.log");
?>
error_reporting (PHP 3, PHP 4 >= 4.0b1)
Fixe le niveau de rapport d’erreurs PHP
int error_reporting ([int level])
312
Gestion des erreurs
error_reporting() fixe le niveau de rapport d’erreur PHP et retourne l’ancienne valeur. Le niveau d’erreur peut être un
champs de bits, ou une constante. L’utilisation des constantes est vivement recommandé, pour assurer une compatiblité
maximale avec les futures versions. Au fur et à mesure que de nouveaux niveaux d’erreurs sont créés, l’intervalle de
validité des niveaux évolue, et les anciennes valeurs n’ont plus les mêmes significations.
Exemple 1. Exemple de modification de niveau d’erreur
error_reporting (55);
// En PHP 3, équivalent à E_ALL ^ E_NOTICE
/* ...en PHP 4, ’55’ signifie (E_ERROR | E_WARNING | E_PARSE |
E_CORE_ERROR | E_CORE_WARNING) */
error_reporting (2039); // PHP 4 équivalent à E_ALL ^ E_NOTICE
error_reporting (E_ALL ^ E_NOTICE); // La même signification en PHP 3 et 4
Suivez les liens de chaque valeur interne pour connaître leur signification :
Tableau 1. Constantes avec error_reporting()
constante
valeur
1
E_ERROR
2
E_WARNING
4
E_PARSE
8
E_NOTICE
16
E_CORE_ERROR
32
E_CORE_WARNING
64
E_COMPILE_ERROR
128
E_COMPILE_WARNING
256
E_USER_ERROR
512
E_USER_WARNING
1024
E_USER_NOTICE
Exemple 2. Exemples avec error_reporting()
error_reporting(0);
/* Empêche tout affichage d’erreur */
error_reporting(7); // Ancienne syntaxe PHP 2/3
error_reporting(E_ERROR | E_WARNING | E_PARSE); // Nouvelle syntaxe PHP 3/4
/* Utilisation appropriée pour les erreurs courantes d’exécution */
error_reporting(15); // Ancienne syntaxe, PHP 2/3
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); // Nouvelle syntaxe PHP 3/4
/* Utilisation appropriée pour les erreurs courantes de développement
(variables non initialisées..)*/
error_reporting(63); // Ancienne syntaxe, PHP 2/3
error_reporting(E_ALL); // Nouvelle syntaxe PHP 3/4
/* rapporte toutes les erreurs PHP*/
restore_error_handler (PHP 4 >= 4.0.1)
Réactive l’ancienne fonction de gestion des erreurs
void restore_error_handler (void)
313
Gestion des erreurs
Utilisée après avoir modifié la fonction de gestion des erreurs, grâce à set_error_handler(), restore_error_handler()
permet de réutiliser l’ancienne version de gestion des erreurs (qui peut être la fonction PHP par défaut, ou une autre
fonction utilisateur).
Voir aussi error_reporting(), set_error_handler(), trigger_error() et user_error()
set_error_handler (PHP 4 >= 4.0.1)
Choisi une fonction utilisateur comme gestionnaire d’erreurs
string set_error_handler (string error_handler)
set_error_handler() choisit la fonction utilisateur error_handler pour gérer les erreurs dans un script. Retourne un
pointeur sur l’ancienne fonction de gestion des erreurs (si il y en avait une), ou FALSE, en cas d’erreur.
set_error_handler() sert à définir votre propre gestionnaire d’erreur, qui prendra en charge leur traitement durant
l’exécution d’un script. Cela peut être utile lorsque vous devez repérer des erreurs critiques lors d’un nettoyage de bases,
ou bien si vous souhaitez générer une erreur dans certaines conditions (avec trigger_error()).
La fonction utilisateur doit accepter deux arguments : le code de l’erreur, et une chaîne décrivant l’erreur. L’exemple ci
dessous montre le traitement d’exceptions en déclenchant des erreurs, et en les gérant avec une fonction utilisateur :
Exemple 1. Traitement des erreurs avec set_error_handler() et trigger_error()
<?php
// redéfinit les constantes utilisateurs - PHP 4 seulement
define (FATAL,E_USER_ERROR);
define (ERROR,E_USER_WARNING);
define (WARNING,E_USER_NOTICE);
// Fixe le niveau de rapport d’erreur pour ce script
error_reporting (FATAL + ERROR + WARNING);
// Fonction de traitement des erreurs
function myErrorHandler ($errno, $errstr) {
switch ($errno) {
case FATAL:
echo "<B>FATAL</B> [$errno] $errstr<br>\n";
echo " Erreur fatale à la ligne ".__LINE__." du fichier ".__FILE__;
echo ", PHP ".PHP_VERSION." (".PHP_OS.")<br>\n";
echo "Aborting...<br>\n";
exit -1;
break;
case ERROR:
echo "<B>ERREUR</B> [$errno] $errstr<br>\n";
break;
case WARNING:
echo "<B>ALERTE</B> [$errno] $errstr<br>\n";
break;
default:
echo "Erreur inconnue de type : [$errno] $errstr<br>\n";
break;
}
}
// fonction qui teste la gestion d’erreur
function scale_by_log ($vect, $scale) {
if ( !is_numeric($scale) || $scale <= 0 )
trigger_error("log(x) pour x <= 0 est indéfini, vous avez passé: scale = $scale",
FATAL);
if (!is_array($vect)) {
trigger_error("Vecteur d’entrée incorrect : un tableau de valeurs est attendu : ", ERROR);
return null;
}
for ($i=0; $i<count($vect); $i++) {
if (!is_numeric($vect[$i]))
314
Gestion des erreurs
trigger_error("La valeur à la position $i n’est pas un nombre. On utilise 0 (zéro) à la place",
WARNING);
$temp[$i] = log($scale) * $vect[$i];
}
return $temp;
}
// Ancienne fonction de traitement des erreurs
$old_error_handler = set_error_handler("myErrorHandler");
// Génération de quelques erreurs : définition d’un tableau avec des éléments non numériques
echo "vector a\n";
$a = array(2,3,"foo",5.5,43.3,21.11);
print_r($a);
// définition d’un deuxième table à problème
echo "---\nvector b - a alerte (b = log(PI) * a)\n";
$b = scale_by_log($a, M_PI);
print_r($b);
// Ceci est un problème, on passe une chaîne à la place d’un tableau
echo "---\nvector c - une erreur\n";
$c = scale_by_log("not array",2.3);
var_dump($c);
// Ceci est critique : le tableau contient des valeurs négatives
echo "---\nvector d - fatal error\n";
$d = scale_by_log($a, -2.5);
?>
L’éxécution du script devrait donner ceci :
vector a
Array
(
[0] => 2
[1] => 3
[2] => foo
[3] => 5.5
[4] => 43.3
[5] => 21.11
)
-vector b - une alerte (b = log(PI) * a)
<B>WARNING</B> [1024] La valeur à la position 2 n’est pas un nombre. On utilise 0 (zéro) à la place<br>
Array
(
[0] => 2.2894597716988
[1] => 3.4341896575482
[2] => 0
[3] => 6.2960143721717
[4] => 49.566804057279
[5] => 24.165247890281
)
-vector c - an error
<B>ERROR</B> [512] Vecteur d’entrée incorrect : un tableau de valeur est attendu<br>
NULL
-vector d - fatal error
<B>FATAL</B> [256] log(x) de x <= 0 est indéfini : scale = -2.5<br>
Erreur fatale à la ligne 16 du fichier trigger_error.php, PHP 4.0.1pl2 (Linux)<br>
Annulation du script....<br>
315
Gestion des erreurs
Il faut se rappeler que la fonction standard de traitement des erreurs de PHP est alors complètement ignorée.
error_reporting() n’aura plus d’effet, et votre fonction de gestion des erreurs sera toujours appelée. Vous pourrez toujours
lire la valeur de l’erreur courante de error_reporting() et faire réagier la fonction de gestion des erreurs en fonction. Cette
remarque est notamment valable si la commande a été préfixée par @ (0 sera retourné).
Notez aussi qu’il est alors confié à cette fonction de terminer le script (die()) si nécessaire. Si la fonction de gestion des
erreurs se termine normalement, l’exécution du script se poursuivra avec l’exécution de la prochaine commande.
Voir aussi error_reporting(), restore_error_handler(), trigger_error(), et user_error()
trigger_error (PHP 4 >= 4.0.1)
Déclenche une erreur utilisateur
void trigger_error (string error_msg [, int error_type])
trigger_error() est utilisé pour déclencher une erreur utilisateur. Elle peut aussi être utilisée en conjonction avec un
gestionnaire d’erreur interne, ou un gestionnaire d’erreurs utilisateur qui a été choisi comme gestionnaire d’erreur avec
set_error_handler().
trigger_error() est pratique lorsque vous devez générer une réponse particulière lors de l’exécution. Par exemple
<?php
if (assert ($divisor == 0))
trigger_error ("Impossible de diviser par zéro", E_USER_ERROR);
?>
Note : Voir set_error_handler() pour illustration.
Voir aussi error_reporting(), set_error_handler(), restore_error_handler(), user_error()
user_error (PHP 4 >= 4.0RC2)
Génére un message d’erreur utilisateur
void user_error (string error_msg [, int error_type])
user_error() est un alias de la fonction trigger_error().
Voir aussi error_reporting(), set_error_handler(), restore_error_handler() et trigger_error().
316
XXIV. FrontBase
Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et
concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS!
Soyez-en conscient, et utiliser ce module à vos risques et périls.
Ces fonctions vous permettent d’accéder aux serveurs SQL FrontBase. Pour pouvoir les utiliser, vous devez compiler PHP
avec le support fbsql en utilisant l’option --with-fbsql. Si vous utilisez cette option sans spécifier le chemin jusqu’à
l’installation fbsql, PHP recherchera les librairies du client fbsql dans les dossiers habituels, sur votre système. Les
utilisateurs qui ont installé FrontBase dans un dossier non standard doivent spécifier le chemin comme ceci :
--with-fbsql=/path/to/fbsql. Cela va indiquer à PHP le bon emplacement des librairies de FrontBase, et éviter les
conflits.
Plus d’informations sur FrontBase sont disponibles à http://www.frontbase.com/.
La documentation complète de FrontBase est disponible à
http://www.frontbase.com/cgi-bin/WebObjects/FrontBase.woa/wa/productsPage?currentPage=Documentation.
Le support de Frontbase a été ajouté en PHP 4.0.6.
317
FrontBase
fbsql_affected_rows (PHP 4 >= 4.0.6)
Lit le nombre de ligne affectées par la dernière requête
int fbsql_affected_rows (resource [link_identifier])
fbsql_affected_rows() retourne le nombre de lignes affectées par la dernière requête INSERT, UPDATE ou DELETE,
effectuée avec la connexion représentée par link_identifier. Si ce dernier n’est pas spécifié, c’est la dernière
connexion ouverte par fbsql_connect() qui sera utilisée.
Note : Si vous utilisez les transactions, vous devez appeler fbsql_affected_rows() après votre requête INSERT,
UPDATE ou DELETE, mais pas après la validation.
Si la dernière requête DELETE ne contenait pas de clause WHERE, toutes les lignes seront effacées, mais
fbsql_affected_rows() retournera 0.
Note : Lors d’une requête UPDATE, FrontBase ne modifie pas les lignes dont les anciennes valeurs sont égales aux
nouvelles. Cela fait que fbsql_affected_rows() ne retournera pas le nombre de ligne traitées, mais le nombre de
lignes affectées (modifiées) par la requête.
Si la dernière requête échoue, fbsql_affected_rows() retourne -1.
Voir aussi fbsql_num_rows().
fbsql_autocommit (PHP 4 >= 4.0.6)
Active ou désactive la validation automatique.
boolean fbsql_autocommit (resource link_identifier, boolean [OnOff])
fbsql_autocommit() retourne l’état courant de la validation automatique, pour la connexion link_identifier. Si le
paramètre OnOff est fourni, la validation automatique sera remplacée par sa valeur (un booléen).
fbsql_change_user (unknown)
Change le nom d’utilisateur de la session active
resource fbsql_change_user (string user, string password, string [database], resource
[link_identifier])
fbsql_change_user() change le nom de l’utilisateur courant sur la session active courante, ou sur link_identifier.
Si une base de données est spécifiée avec le paramètre database, elle deviendra la base par défaut du nouvel utilisateur.
Le nouvel utilisateur doit être spécifié par son login (user), et son mot de passe (password). Si l’authentification
échoue, la session courante restera ouverte.
fbsql_close (PHP 4 >= 4.0.6)
Ferme la connexion FrontBase
boolean fbsql_close (resource [link_identifier])
318
FrontBase
fbsql_close() retourne TRUE en cas de succès et FALSE en cas d’erreur.
fbsql_close() ferme la connexion au serveur FrontBase associé à la ressource link_identifier. Si
link_identifier est omis, c’est la dernière connexion ouverte qui sera fermée.
Utiliser fbsql_close() n’est pas nécessaire, car les liens non persistants seront automatiquement fermé à la fin du script.
Exemple 1. Exemple avec fbsql_close()
<?php
$link = fbsql_connect("localhost", "_SYSTEM", "secret")
or die("Could not connect");
print("Connecté!");
fbsql_close($link);
?>
Voir aussi fbsql_connect() et fbsql_pconnect().
fbsql_connect (PHP 4 >= 4.0.6)
Ouvre une connexion à un serveur FrontBase
resource fbsql_connect (string [hostname], string [username], string [password])
fbsql_connect() retourne une ressource de connexion positive en cas de succès, ou un message d’erreur en cas d’échec.
fbsql_connect() établit une connexion avec un serveur FrontBase. Les valeur suivantes sont utilisées, en cas d’omission :
hostname = ’NULL’, username = ’_SYSTEM’ et password = "" (pas de mot de passe).
Si un deuxième appel est fait à fbsql_connect() avec les mêmes arguments, une nouvelle connexion ne sera pas générée,
mais la connexion déjà ouverte sera reutilisée, et retournée.
La connexion au serveur sera fermée dès la fin du scrpit, à moins qu’elle ne soit explicitement terminée plus tôt, avec la
fonction fbsql_close().
Exemple 1. Exemple avec fbsql_connect()
<?php
$link = fbsql_connect("localhost", "_SYSTEM", "secret")
or die("Could not connect");
print("Connected successfully");
fbsql_close($link);
?>
Voir aussi fbsql_pconnect() et fbsql_close().
fbsql_create_db (PHP 4 >= 4.0.6)
Crée une base de données
boolean fbsql_create_db (string database_name, resource [link_identifier])
fbsql_create_db() crée une nouvelle base de données, nommée database_name, sur le serveur repéré par la ressource
link_identifier.
319
FrontBase
Exemple 1. Exemle avec fbsql_create_db()
<?php
$link = fbsql_pconnect("localhost", "_SYSTEM", "secret")
or die ("Impossible de se connecter");
if (fbsql_create_db("my_db")) {
print("Base de données créée!\n");
} else {
printf("Erreur de création de la base de données : %s\n", fbsql_error());
}
?>
Voir aussi fbsql_drop_db().
fbsql_data_seek (PHP 4 >= 4.0.6)
Déplace le pointeur interne de résultat
int fbsql_data_seek (int result_identifier, int row_number)
fbsql_data_seek() retourne TRUE en cas de succès et FALSE en cas d’erreur.
fbsql_data_seek() déplace le pointeur interne de ligne dans le résultat de requête result_identifier jusqu’à la
ligne row_number. Le prochain appel à fbsql_fetch_row() retournera cette ligne.
Les lignes sont numérotées à partir de 0.
Exemple 1. Exemple avec fbsql_data_seek()
<?php
$link = fbsql_pconnect("localhost", "_SYSTEM", "secret")
or die ("Impossible de se connecter");
fbsql_select_db("samp_db")
or die ("Impossible de sélectionner une base");
$query = "SELECT last_name, first_name FROM friends;";
$result = fbsql_query($query)
or die ("Query failed");
// Lecture des lignes en ordre inverse
for ($i = fbsql_num_rows($result) - 1; $i >=0; $i--) {
if (!fbsql_data_seek($result, $i)) {
printf ("Impossible d’accéder à la ligne %d\n", $i);
continue;
}
if(!($row = fbsql_fetch_object($result)))
continue;
printf ("%s %s<BR>\n", $row->last_name, $row->first_name);
}
fbsql_free_result($result);
?>
fbsql_db_query (PHP 4 >= 4.0.6)
Envoie une requête à la base FrontBase
resource fbsql_db_query (string database, string query, resource [link_identifier])
fbsql_db_query() retourne une ressource positive représentant un résultat de requête en cas de succès, et FALSE en cas
d’erreur.
320
FrontBase
fbsql_db_query() sélectionne la base database et y exécute la requête query. Si le paramètre optionnel
link_identifier est spécifié, fbsql_db_query() travaillera sur cette connexion. S’il est omis, fbsql_db_query()
essaiera d’utiliser la dernière connexion ouverte. Si aucune connexion n’a été ouverte, fbsql_db_query() essaiera de se
connecter automatiquement en appelant la fonction fbsql_connect(), sans arguments.
Voir aussi fbsql_connect().
fbsql_drop_db (PHP 4 >= 4.0.6)
Supprime une base de données FrontBase
boolean fbsql_drop_db (string database_name, resource [link_identifier])
fbsql_drop_db() retourne TRUE en cas de succès et FALSE en cas d’erreur.
fbsql_drop_db() essaie de supprimer la base de données database_name, sur la connexion représentée par
link_identifier.
fbsql_errno (PHP 4 >= 4.0.6)
Retourne le code d’erreur FrontBase
int fbsql_errno (resource [link_identifier])
fbsql_errno() retourne le code d’erreur de la dernière connexion FrontBase, ou bien 0 (zéro) si aucune erreur n’est
survenue.
Les erreurs générées par FrontBase ne sont pas automatiquement affichées comme alertes. Il faut utiliser la fonction
fbsql_errno() pour connaître leur code d’erreur. Notez que cette fonction ne retourne que le code d’erreur généré par la
dernière fonction FrontBase (hormis fbsql_error() et fbsql_errno()) : si vous voulez repérer les erreurs, faites le dès que
les fonctions ont été appelées.
<?php
fbsql_connect("marliesle");
echo fbsql_errno().": ".fbsql_error()."<br>";
fbsql_select_db("nonexistentdb");
echo fbsql_errno().": ".fbsql_error()."<br>";
$conn = fbsql_query("SELECT * FROM nonexistenttable;");
echo fbsql_errno().": ".fbsql_error()."<br>";
?>
Voir aussi fbsql_error() et fbsql_warnings()
fbsql_error (PHP 4 >= 4.0.6)
Retourne le message d’erreur FrontBase
string fbsql_error (resource [link_identifier])
fbsql_error() retourne le dernier message d’erreur généré par le serveur FrontBase, ou bien ” (chaîne vide) si aucune
erreur n’est survenue.
Les erreurs générées par FrontBase ne sont pas automatiquement affichées comme alertes. Il faut utiliser la fonction
fbsql_errno() pour connaître leur code d’erreur. Notez que cette fonction ne retourne que le code d’erreur généré par la
321
FrontBase
dernière fonction FrontBase (hormis fbsql_error() et fbsql_errno()) : si vous voulez repérer les erreurs, faites le dès que
les fonctions ont été appelées.
<?php
fbsql_connect("marliesle");
echo fbsql_errno().": ".fbsql_error()."<br>";
fbsql_select_db("nonexistentdb");
echo fbsql_errno().": ".fbsql_error()."<br>";
$conn = fbsql_query("SELECT * FROM nonexistenttable;");
echo fbsql_errno().": ".fbsql_error()."<br>";
?>
Voir aussi fbsql_errno() et fbsql_warnings()
fbsql_fetch_array (PHP 4 >= 4.0.6)
Lit toute une ligne de résultat dans un tableau.
array fbsql_fetch_array (resource result, int [result_type])
fbsql_fetch_array() retourne un tableau contenant la ligne courante du résultat result, ou FALSE s’il n’y a plus de
lignes.
fbsql_fetch_array() est une version améliorée de fbsql_fetch_row(). En plus de stocker les données dans un tableau à
indice numérique, elle les stocke aussi sous forme de tableau associatif, dont les indices sont les noms des colonnes.
SI deux colonnes (ou plus) on le même nom, la dernière colonne sera utilisée. Pour accéder aux autres colonnes de même
nom, vous devez absolument utiliser les indices numériques.
select t1.f1 as foo t2.f1 as bar from t1, t2;
Il est important de noter que fbsql_fetch_array() n’est pas significativement plus lent que fbsql_fetch_row(), tandis
qu’elle apporte un confort d’utilisation notable.
Le second argument optionnel result_type de fbsql_fetch_array() est une constante qui peut prendre l’une des
valeurs suivantes : FBSQL_ASSOC, FBSQL_NUM et FBSQL_BOTH.
Pour plus de détails, reportez-vous à fbsql_fetch_row() et fbsql_fetch_assoc().
Exemple 1. Exemple avec fbsql_fetch_array()
<?php
fbsql_connect($host, $user, $password);
$result = fbsql_db_query("database","select user_id, fullname from table");
while ($row = fbsql_fetch_array($result)) {
echo "user_id: ".$row["user_id"]."<br>\n";
echo "user_id: ".$row[0]."<br>\n";
echo "fullname: ".$row["fullname"]."<br>\n";
echo "fullname: ".$row[1]."<br>\n";
}
fbsql_free_result($result);
?>
322
FrontBase
fbsql_fetch_assoc (PHP 4 >= 4.0.6)
Lit toute une ligne de résultat dans un tableau associatif
array fbsql_fetch_assoc (resource result)
fbsql_fetch_assoc() retourne un tableau associatif contenant la ligne courante du résultat result, ou FALSE s’il n’y a
plus de lignes.
fbsql_fetch_assoc() est équivalent à fbsql_fetch_array() avec l’option FBSQL_ASSOC. Elle ne retourne qu’un tableau
associatif. C’est le comportement initial de fbsql_fetch_array(). Si vous avez aussi besoin des indices numériques, utilisez
fbsql_fetch_array().
SI deux colonnes (ou plus) on le même nom, la dernière colonne sera utilisée. Pour accéder aux autres colonnes de même
nom, vous devez absolument utiliser la fonction fbsql_fetch_array().
Il est important de noter que fbsql_fetch_assoc() n’est pas significativement plus lent que fbsql_fetch_row(), tandis
qu’elle apporte un confort d’utilisation notable.
Pour plus de détails, reportez-vous à fbsql_fetch_row() et fbsql_fetch_array().
Exemple 1. Exemple avec fbsql_fetch_assoc()
<?php
fbsql_connect($host, $user, $password);
$result = fbsql_db_query("database","select * from table;");
while ($row = fbsql_fetch_assoc($result)) {
echo $row["user_id"];
echo $row["fullname"];
}
fbsql_free_result($result);
?>
fbsql_fetch_field (PHP 4 >= 4.0.6)
Lit des informations sur une colonne dans un résultat, et retourne un objet
object fbsql_fetch_field (resource result, int [field_offset])
fbsql_fetch_field() retourne une objet contenant les informations sur un champs, dans le résultat result.
fbsql_fetch_field() sert à lire des informations sur les champs dans le résultat result. Si le second paramètre
field_offset n’est pas spécifié, le champs suivant est lu.
Les propriétés de l’objet sont :
•
name - Nom de colonne
•
table - Nom de la table d’origine
•
max_length - Taille maximale de la colonne
•
not_null - 1 si la colonne ne peut être nulle
•
type - Type de la colonne
323
FrontBase
Exemple 1. Exemple avec fbsql_fetch_field()
<?php
fbsql_connect($host, $user, $password)
or die ("Impossible de se connecter");
$result = fbsql_db_query("database", "select * from table;")
or die ("Query failed");
// lire les données de colonnes
$i = 0;
while ($i < fbsql_num_fields($result)) {
echo "Information de la colonne $i:<br>\n";
$meta = fbsql_fetch_field($result);
if (!$meta) {
echo "Aucune information disponible<br>\n";
}
echo "<PRE>
max_length:
$meta->max_length
name:
$meta->name
not_null:
$meta->not_null
table:
$meta->table
type:
$meta->type
</PRE>";
$i++;
}
fbsql_free_result($result);
?>
Voir aussi fbsql_field_seek().
fbsql_fetch_lengths (PHP 4 >= 4.0.6)
Lit la taille de chaque colonne d’un résultat
array fbsql_fetch_lengths ([resource result])
fbsql_fetch_lengths() retourne un tableau contenant les tailles maximales de chaque champs, dans la dernière ligne lue par
fbsql_fetch_row() ou FALSE en cas d’erreur.
fbsql_fetch_lengths() stocke les tailles de chaque ligne de résultat retourné par fbsql_fetch_row(), fbsql_fetch_array() et
fbsql_fetch_object() dans un tableau à indices numériques, commençant à 0.
Voir aussi fbsql_fetch_row().
fbsql_fetch_object (PHP 4 >= 4.0.6)
Lit une ligne de résultat sous forme d’objet
object fbsql_fetch_object (resource result, int [result_type])
fbsql_fetch_object() retourne un objet dont les propriétés représentent les colonnes de la ligne à lire, dans le résultat
result, ou FALSE s’il n’y a pas de ligne à lire.
fbsql_fetch_object() est similaire à fbsql_fetch_array(), à la différence qu’elle retourne un objet. Nous ne pouvez alors
accéder aux données qu’avec les noms des colonnes, et sous la forme de membre d’objets, et non plus avec leurs offset (les
nombres ne peuvent représenter un membre d’objet).
Le second argument optionnel result_type de fbsql_fetch_array() est une constante qui peut prendre l’une des
valeurs suivantes : FBSQL_ASSOC, FBSQL_NUM et FBSQL_BOTH.
324
FrontBase
En terme de vitesse, cette fonction est identique à fbsql_fetch_array() et presque aussi rapide que fbsql_fetch_row() (la
différence n’est pas significative).
Exemple 1. Exemple avec fbsql_fetch_object()
<?php
fbsql_connect($host, $user, $password);
$result = fbsql_db_query("database", "select * from table;");
while ($row = fbsql_fetch_object($result)) {
echo $row->user_id;
echo $row->fullname;
}
fbsql_free_result($result);
?>
Voir aussi fbsql_fetch_array() et fbsql_fetch_row().
fbsql_fetch_row (PHP 4 >= 4.0.6)
Lit une ligne de résultat sous forme de tableau numérique
array fbsql_fetch_row (resource result)
fbsql_fetch_row() retourne un tableau représentant la ligne courant dans le résultat result, ou bien FALSE s’il n’y a plus
de lignes à lire.
fbsql_fetch_row() lit une ligne de données dans le résultat result, et crée un tableau numérique. Chaque colonne est
stockés dans un élément du tableau, dans le même ordre que dans le résultat. Les indices commencent à 0.
Le prochain appel à fbsql_fetch_row() va lire la prochaine ligne, ou bien retourner FALSE s’il n’y a plus de lignes à lire.
Voir aussi fbsql_fetch_array(), fbsql_fetch_object(), fbsql_data_seek(), fbsql_fetch_lengths() et fbsql_result().
fbsql_field_flags (PHP 4 >= 4.0.6)
Lit les options associé à une colonne de résultat
string fbsql_field_flags (resource result, int field_offset)
fbsql_field_flags() retourne les options du champs field_offset, dans le résultat field_offset. Les options sont
retournées sous la forme d’un seul mot par option, séparées par des espaces, de façons à faciliter la manipulation avec
explode().
fbsql_field_name (PHP 4 >= 4.0.6)
Lit le nom d’un champs
string fbsql_field_name (int result, int field_index)
fbsql_field_name() retourne le nom du champs numéro field_index dans le résultat result. field_index est le
résultat de fbsql_query() et field_index est l’offset numérique du champs.
Note : field_index commence à 0.
e.g. L’index du troisème champs est 2, et l’index du quatrième champs est 3...
325
FrontBase
Exemple 1. Exemple avec fbsql_field_name()
<?php
// La tablea utilisateur est constituée de trois colonnes
//
user_id
//
username
//
password.
$res = fbsql_db_query("users", "select * from users;", $link);
echo fbsql_field_name($res, 0) . "\n";
echo fbsql_field_name($res, 2);
?>
L’exemple ci-dessus va afficher :
user_id
password
fbsql_field_len (PHP 4 >= 4.0.6)
Retourne la taille d’un champs
int fbsql_field_len (resource result, int field_offset)
fbsql_field_len() retourne la taille du champs field_offset dans le résultat result.
fbsql_field_seek (PHP 4 >= 4.0.6)
Déplace le pointeur de résultat
boolean fbsql_field_seek (int result, int field_offset)
fbsql_field_seek() place le pointeur de colonne à la colonne field_offset. Si ce paramètre est omis,
fbsql_fetch_field() retourne le numéro de colonne courant.
Voir aussi fbsql_fetch_field().
fbsql_field_table (PHP 4 >= 4.0.6)
Lit le nom de la table d’origine d’un champs
string fbsql_field_table (resource result, int field_offset)
fbsql_field_table() retourn le nom de la table d’où est issue le champs d’offset field_offset. Les numéros de colonne
commencent à 0.
326
FrontBase
fbsql_field_type (PHP 4 >= 4.0.6)
Lit le type d’une colonne
string fbsql_field_type (resource result, int field_offset)
fbsql_field_type() est similaire à la fonction fbsql_field_name(). Les arguments sont identiques, mais le type du champs
est retourné. Il peut valoir "int", "real", "string", "blob" ou d’autres valeurs, comme décrit dans la documentation FrontBase
(http://www.frontbase.com/cgi-bin/WebObjects/FrontBase.woa/wa/productsPage?currentPage=Documentation).
Exemple 1. Exemple avec fbsql_field_type()
<?php
fbsql_connect("localhost:3306");
fbsql_connect("localhost", "_SYSTEM", "");
$result = fbsql_query("SELECT * FROM onek;");
$fields = fbsql_num_fields($result);
$rows
= fbsql_num_rows($result);
$i = 0;
$table = fbsql_field_table($result, $i);
echo "Votre table ’".$table."’ a ".$fields." colonnes et ".$rows." lignes <br>";
echo "La table dispose des champs suivants <br>";
while ($i < $fields) {
$type = fbsql_field_type ($result, $i);
$name = fbsql_field_name ($result, $i);
$len
= fbsql_field_len ($result, $i);
$flags = fbsql_field_flags($result, $i);
echo $type." ".$name." ".$len." ".$flags."<br>";
$i++;
}
fbsql_close();
?>
fbsql_free_result (PHP 4 >= 4.0.6)
Libère le résultat de la mémoire
bool fbsql_free_result (resource result)
fbsql_free_result() va libérer toute la mémoire utilisée par le résultat associé à la ressource result.
fbsql_free_result() n’a besoin d’être appelé que si vous craignez que votre script ne va consommer trop de mémoire,
lorsqu’une requête retourne de très grand résultats. Toutes les ressources mémoire utilisées par le script sont de toutes
manières libérées à la fin du script.
fbsql_insert_id (PHP 4 >= 4.0.6)
Lit le dernier identifiant généré par une requête INSERT
int fbsql_insert_id (resource [link_identifier])
fbsql_insert_id() retourne l’identifiant généré par la colonne de type DEFAULT UNIQUE, lors de la dernière requête
INSERT, avec la connexion link_identifier. Si link_identifier est omis, la dernière connexion ouverte est
utilisée.
327
FrontBase
fbsql_insert_id() retournera 0 si la dernière requête n’a pas généré de valeur dans la colonne DEFAULT UNIQUE Si vous
devez sauver cette valeur pour plus tard, n’oubliez pas d’appeler fbsql_insert_id() tout de suite après la requête qui a
généré cette valeur.
Note : La valeur de la fonction FrontBase SQL "LAST_INSERT_ID()" retourne toujours la dernière valeur générée par
DEFAULT UNIQUE et n’est jamais annulée entre les requêtes.
fbsql_list_dbs (PHP 4 >= 4.0.6)
Liste les bases de données
resource fbsql_list_dbs (resource [link_identifier])
fbsql_list_dbs() retourne un résultat contenant la liste des bases de données disponibles sur le serveur [link_identifier].
Utilisez la fonction fbsql_tablename() pour passer en revue ce résultat.
Exemple 1. Exemple avec fbsql_list_dbs()
<?php
$link = fbsql_connect(’localhost’, ’myname’, ’secret’);
$db_list = fbsql_list_dbs($link);
while ($row = fbsql_fetch_object($db_list)) {
echo $row->Database . "\n";
}
?>
L’exemple ci-dessus va afficher ceci :
database1
database2
database3
..
Note : L’exemple ci-dessus peut aussi bien fonctionner avec la fonction fbsql_fetch_row() ou toute autre similaire.
fbsql_list_fields (PHP 4 >= 4.0.6)
Liste les champs d’un résultat FrontBase
resource fbsql_list_fields (string database_name, string table_name, resource
[link_identifier])
fbsql_list_fields() lit les informations à propos de la table table_name, dans la base de données table_name, sur la
connexion link_identifier. Un résultat de requête est retourné, et pourra être utilisé avec les fonctions
fbsql_field_flags(), fbsql_field_len(), fbsql_field_name() et fbsql_field_type().
Un identifiant de résultat est une ressource PHP, représentée par un entier positif. fbsql_list_fields() retourne -1 en cas
d’erreur. Une chaîne décrivant l’erreur sera alors placée dans la variable $phperrmsg. Un message d’erreur sera aussi
affiché, à moins que la fonction n’ai été appelée avec l’opérateur de suppression des erreurs @.
328
FrontBase
Exemple 1. Exemple avec fbsql_list_fields()
<?php
$link = fbsql_connect(’localhost’, ’myname’, ’secret’);
$fields = fbsql_list_fields("database1", "table1", $link);
$columns = fbsql_num_fields($fields);
for ($i = 0; $i < $columns; $i++) {
echo fbsql_field_name($fields, $i) . "\n";;
}
?>
L’exemple ci-dessus va afficher :
field1
field2
field3
..
fbsql_list_tables (PHP 4 >= 4.0.6)
Liste les tables dans une base de données FrontBase
resource fbsql_list_tables (string database, resource [link_identifier])
fbsql_list_tables() liste les tables dans la base de données database, et retourne un résultat, tout comme
fbsql_db_query(). fbsql_tablename() sert à extraire la liste des tables dans ce résultat.
fbsql_next_result (PHP 4 >= 4.0.6)
Déplace le pointeur interne vers le résultat suivant
bool fbsql_next_result (resource result_id)
Lorsque vous envoyez plus d’une commande SQL au serveur, ou que vous exécutez une procédure stockée avec de
multiple résultats, cela va conduire le serveur à retourner plusieurs jeu de lignes. fbsql_next_result() va vérifier l’existence
de plusieurs résultats disponibles sur le serveur. Si un autre jeu de résultat existe, fbsql_next_result() va détruire de
résultat précédent, et préparer la lecture dans les nouvelles lignes.
fbsql_next_result() retourne TRUE si un autre résultat est disponbile, ou FALSE sinon.
Exemple 1. Exemple avec fbsql_next_result()
<?php
$link = fbsql_connect("localhost", "_SYSTEM", "secret");
fbsql_select_db("MyDB", $link);
$SQL = "Select * from table1; select * from table2;";
$rs = fbsql_query($SQL, $link);
do {
while ($row = fbsql_fetch_row($rs)) {}
} while (fbsql_next_result($rs));
fbsql_free_result($rs);
fbsql_close($link);
?>
329
FrontBase
fbsql_num_fields (PHP 4 >= 4.0.6)
Lit le nombre de champs dans un résultat
int fbsql_num_fields (resource result)
fbsql_num_fields() retourne le nombre de champs dans le résultat result.
Voir aussi fbsql_db_query(), fbsql_query(), fbsql_fetch_field() et fbsql_num_rows().
fbsql_num_rows (PHP 4 >= 4.0.6)
Lit le nombre de lignes dans un résultat
int fbsql_num_rows (resource result)
fbsql_num_rows() retourne le nombre de lignes dans le résultat result. Cette fonction n’est valable qu’avec les
commandes SELECT. Pour connaître le nombre de lignes dans une requête INSERT, UPDATE ou DELETE, utilisez
fbsql_affected_rows().
Exemple 1. Exemple fbsql_num_rows()
<?php
$link = fbsql_connect("localhost", "username", "password");
fbsql_select_db("database", $link);
$result = fbsql_query("SELECT * FROM table1;", $link);
$num_rows = fbsql_num_rows($result);
echo "$num_rows Rows\n";
?>
Voir aussi fbsql_affected_rows(), fbsql_connect(), fbsql_select_db() et fbsql_query().
fbsql_pconnect (PHP 4 >= 4.0.6)
Ouvre une connexion persistante à un serveur FrontBase
resource fbsql_pconnect (string [hostname] [, string username [, string password]])
fbsql_pconnect() retourne une ressource représentant la connection au serveur FrontBase en cas de succès, ou bien FALSE
en cas d’erreur.
fbsql_pconnect() établit une connexion persistante à un serveur FrontBase. En cas d’omission, les valeurs suivantes sont
utilisées par défaut : host =’localhost’, username = nom de l’utilisateur qui possède le processus, et password = pas
de mot de passe.
Pour choisir le port d’accès au serveur FrontBase, voyez fbsql_select_db().
fbsql_pconnect() se comporte comme fbsql_connect() avec deux différences majeures.
Premièrement, lors de la connexion, fbsql_pconnect() essaie de trouver une connexion permanante déjà ouverte sur cet
hote, avec le même nom d’utilisateur et de mot de passe. Si une telle connexion est trouvée, son identifiant est retourné,
sans ouvrir de nouvelle connexion.
Deuxièmement, la connexion au serveur MySQL ne sera pas terminée avec la fin du script. Au lieu de cela, le lien sera
conservé pour un prochain accès (fbsql_close() ne terminera pas une connexion persistante établie par fbsql_pconnect()).
C’est pourquoi ce type de connexion est dite ’persistante’.
330
FrontBase
fbsql_query (PHP 4 >= 4.0.6)
Exécute une requête sur un serveur FrontBase
resource fbsql_query (string query [, resource link_identifier])
fbsql_query() envoie la requête query à la base de données courante, sur le serveur représenté par sa connexion
link_identifier. Si link_identifier est omis, la dernière connexion ouverte est utilisée. Si aucune connexion
n’a été ouverte, fbsql_query() essaie d’établir une connexion en appelant la fonction fbsql_connect() sans aucun
argument.
Note : La requête doit être terminée par un point-virgule!
fbsql_query() retourne une ressource en cas de succès, ou FALSE, en cas d’échec.
La requête suivante est invalide, et fbsql_query() échouera puis retournera FALSE:
Exemple 1. Exemple avec fbsql_query()(1)
<?php
$result = fbsql_query("SELECT * WHERE 1=1;")
or die("Requête invalide");
?>
La requête suivante est invalide si my_col n’est pas une colonne dans la table my_tbl : fbsql_query() échouera puis
retournera FALSE :
Exemple 2. Exemple avec fbsql_query()(2)
<?php
$result = fbsql_query("SELECT my_col FROM my_tbl")
or die ("Invalid query");
?>
fbsql_query() échouera si vous n’avez pas les droits d’accès sur l’une des bases de données utilisée dans la requête.
Lorsque la requête réussit, vous pouvez utilisez fbsql_num_rows() pour savoir combien de lignes ont été retournée par une
requête SELECT, ou bien fbsql_affected_rows() pour les autres requêtes (DELETE, INSERT, REPLACE et UPDATE).
Pour les requêtes SELECT, fbsql_query() retourne une ressource de résultat, que vous pouvez passer à fbsql_result().
Lors vous avez fini de lire le résultat, vous pouvez libérer les ressources utilisées en appelant fbsql_free_result().
Cependant, la mémoire sera automatiquement libérée à la fin du script.
Voir aussi fbsql_affected_rows(), fbsql_db_query(), fbsql_free_result(), fbsql_result(), fbsql_select_db() et
fbsql_connect().
fbsql_result (PHP 4 >= 4.0.6)
Lit des données dans un résultat
mixed fbsql_result (resource result, int row, mixed [field])
fbsql_result() lit le contenu du champs field, dans la ligne row, du résultat result. L’argument field peut être
l’offset du champs, ou bien son nom, ou bien le nom de sa table plus point plus son nom. Si la colonne a été aliasée,
utilisez de préférence l’alias.
331
FrontBase
Lorsque vous travaillez sur de grands résultats, il est vivement recommandé d’utiliser les fonctions qui lisent toute une
ligne d’un coup, plutôt que fbsql_result() qui travaille ligne par ligne. Elles sont beaucoup plus rapides. Notez aussi que
les offset numériques sont plus rapides que les offset nominaux.
L’utilisation de fbsql_result() ne doivent pas être mélangé avec d’autres fonctions qui utilisent aussi le résultat result.
Alternative vivement recommandées : fbsql_fetch_row(), fbsql_fetch_array() et fbsql_fetch_object().
fbsql_select_db (PHP 4 >= 4.0.6)
Sélectionne une base de données FrontBase
resource fbsql_select_db (string database_name, resource [link_identifier])
fbsql_select_db() retourne TRUE en cas de succès et FALSE en cas d’erreur.
fbsql_select_db() remplace la base de données active courante par database_name, sur la connexion ouverte et
représentée par link_identifier. Si link_identifier est omis, la dernière connexion ouverte sera utilisée. Si
aucune connexion n’a été ouverte, fbsql_select_db() essaiera de se connecter en appelant fbsql_connect() sans argument.
Le client contacte FBExec pour connaître le numéro de port à utiliser pour la connexion à la base de données. Si le nom de
la base est un numéro, le système l’utilisera comme numéro de port, et ne le demandera pas à FBExec. Le serveur
Frontbase peut être démarré avec la commande : FRontBase -FBExec=No -port=<port number> <database
name>.
Tous les prochains appel à fbsql_query() se feront dans la base database_name.
Voir aussi fbsql_connect(), fbsql_pconnect() et fbsql_query().
fbsql_tablename (unknown)
Lit le nom de la table d’un champs
string fbsql_tablename (resource result, int i)
fbsql_tablename() retourne le nom de la table d’origine du champs i, dans le résultat result. La fonction
fbsql_num_rows() peut être utilisée pour connaître le nombre de tables dans un résultat.
Exemple 1. Exemple avec fbsql_tablename()
<?php
fbsql_connect("localhost:3306");
$result = fbsql_list_tables("wisconsin");
$i = 0;
while ($i < fbsql_num_rows($result)) {
$tb_names[$i] = fbsql_tablename($result, $i);
echo $tb_names[$i] . "<br>";
$i++;
}
?>
fbsql_warnings (PHP 4 >= 4.0.6)
Active ou désactive les alertes FrontBase
boolean fbsql_warnings (boolean [OnOff])
332
FrontBase
fbsql_warnings() retourne TRUE si les alertes sont actives et FALSE en cas d’erreur.
fbsql_warnings() active ou désactive les alertes FrontBase suivant que OnOff est à TRUE ou FALSE.
333
XXV. FilePro
Ces fonctions permettent de lire des données enregistrées dans des bases non modifiables, sur des serveurs filePro.
filePro est une marque de fP Technologies, Inc. Vous pouvez avoir plus de détails sur filePro à http://www.fptech.com/.
334
FilePro
filepro (PHP 3, PHP 4 >= 4.0b1)
Lit et vérifie un fichier.
bool filepro (string directory)
filepro() lit et vérifie un fichier, puis enregistre le nombre de champs et de lignes.
Aucun verrouillage n’est pratiqué : il vaut alors mieux ne pas modifier la base filePro lorsqu’elle est ouverte par PHP.
filepro_fieldname (PHP 3, PHP 4 >= 4.0b1)
Retourne le nom d’un champs.
string filepro_fieldname (int field_number)
filepro_fieldname() retourne le nom du champs d’index field_number.
filepro_fieldtype (PHP 3, PHP 4 >= 4.0b1)
Retourne le type d’un champs.
string filepro_fieldtype (int field_number)
Retourne le type du champs d’index field_number.
filepro_fieldwidth (PHP 3, PHP 4 >= 4.0b1)
Retourne la taille d’un champs.
int filepro_fieldwidth (int field_number)
Retourne la taille du champs d’index field_number.
filepro_retrieve (PHP 3, PHP 4 >= 4.0b1)
Retourne la valeur d’un champs.
string filepro_retrieve (int row_number, int field_number)
filepro_retrieve() retourne la valeur du champs d’index row_number, et à la ligne field_number.
filepro_fieldcount (PHP 3, PHP 4 >= 4.0b1)
Retourne le nombre de champs dans une base filePro.
int filepro_fieldcount (void)
335
FilePro
filepro_fieldcount() retourne le nombre de champs (ou colonnes) d’une base filePro.
Voir aussi filepro().
filepro_rowcount (PHP 3, PHP 4 >= 4.0b1)
Retourne le nombre de champs dans une base filePro.
int filepro_rowcount (void)
filepro_rowcount() retourne le nombre de lignes dans une base filePro.
Voir aussi filepro().
336
XXVI. Système de fichiers
337
Système de fichiers
basename (PHP 3, PHP 4 >= 4.0b1)
Sépare le nom du fichier et le nom du dossier.
string basename (string path)
basename() prend en paramètre le chemin complet d’un fichier et en extrait le nom du fichier.
Sous Windows, les caractères (/) et antislash (\) sont utilisés comme séparateurs de dossier. Sous les autres OS, seul le
caractère slash (/) est utilisé.
Exemple 1. Exemple avec basename()
<?php
$path = "/home/httpd/html/index.php3";
$file = basename($path);
// $file est affecté avec "index.php3"
?>
Voir aussi dirname().
chgrp (PHP 3, PHP 4 >= 4.0b1)
Change le groupe possesseur du fichier.
int chgrp (string filename, mixed group)
chgrp() essaie de changer le groupe propriétaire du fichier. Seul le super-utilisateur (root) peut changer le groupe
propriétaire d’un fichier arbitrairement. Les utilisateurs classiques ne peuvent changer le groupe propriétaire d’un fichier
que si l’utilisateur propriétaire du fichier est membre du groupe.
chgrp() renvoie TRUE en cas de succès, sinon renvoie FALSE.
Voir aussi chown() et chmod().
Note : chgrp() ne fonctionne pas sous Windows.
chmod (PHP 3, PHP 4 >= 4.0b1)
Change le mode du fichier.
int chmod (string filename, int mode)
chmod() remplace le mode du fichier filename par le mode mode.
Il est à noter que le mode mode est considéré comme un nombre en notation octale. Afin de vous en assurer, vous pouvez
préfixer cette valeur par un zéro (mode):
<?php
chmod( "/somedir/somefile", 755 );
// notation décimale; probablement FALSE
chmod( "/somedir/somefile", 0755 );
// notation octale; valeur du mode correcte
?>
338
Système de fichiers
chmod() renvoie TRUE en cas de succès, FALSE sinon.
Voir aussi chown() et chgrp().
Note : chmod() ne fonctionne pas sous Windows.
chown (PHP 3, PHP 4 >= 4.0b1)
Change le groupe propriétaire du fichier.
int chown (string filename, mixed user)
chown() change le groupe propriétaire du fichier. Seul le super-utilisateur (root) peut changer le propriétaire arbitrairement
d’un fichier.
chown() renvoie TRUE en cas de succès, "FALSE" sinon.
Note : Sous Windows, chown() ne fait rien et retourne TRUE.
Voir aussi chown() et chmod().
Note : chown() est inopérante sous Windows.
clearstatcache (PHP 3, PHP 4 >= 4.0b1)
Efface le cache de stat()
void clearstatcache (void)
L’appel à la fonction stat ou lstat est relativement coÛteux en terme de temps d’exécution. Pour cela, le résultat du dernier
appel à l’une des fonctions de statut, (voir la liste ci-dessous), est sauvegardé pour ré-utilisation ultérieure. Si vous voulez
forcer la vérification du statut d’un fichier, dans le cas où le fichier aurait pu être modifié ou aurait disparu, vous devez
utiliser la fonction clearstatcache() afin d’effacer de la mémoire les résultats du dernier appel à la fonction.
La valeur du cache n’est valable que pour la durée d’une requête.
Les fonctions affectées sont : stat(), lstat(), file_exists(), is_writable(), is_readable(), is_executable(), is_file(), is_dir(),
is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype(), et fileperms().
copy (PHP 3, PHP 4 >= 4.0b1)
Copie un fichier.
int copy (string source, string dest)
copy() fait une copie du fichier. Elle renvoie TRUE en cas de succès, FALSE sinon.
339
Système de fichiers
Exemple 1. Exemple avec copy()
if ( !copy($file, $file.’.bak’) ) {
print("La copie du fichier $file n’a pas réussi...<br>\n");
}
Voir aussi rename().
delete (unknown)
Effacer
void delete (string file)
Ceci est une fausse entrée du manuel pour ceux qui recherchent en fait la fonction unlink() ou unset().
Voir aussi unlink() pour effacer des fichiers et unset() pour effacer des variables.
dirname (PHP 3, PHP 4 >= 4.0b1)
Renvoie le nom du dossier.
string dirname (string path)
Si path contient le chemin d’un fichier ou dossier, dirname() retournera le nom du dossier qui le contient.
Sous Windows, les slash (/) et anti-slash (\) sont utilisés comme séparateurs de dossier. Dans les autres environnements,
seul le slash (/) est utilisé.
Exemple 1. Exemple avec dirname()
<?php
$path = "/etc/passwd";
$file = dirname($path); // $file contient "/etc"
?>
Voir aussi basename().
diskfreespace (PHP 3>= 3.0.7, PHP 4 >= 4.0b4)
Renvoie l’espace disque disponible dans le répertoire.
float diskfreespace (string directory)
diskfreespace() retournera le nombre d’octets disponibles sur le disque correspondant contenant le dossier directory.
340
Système de fichiers
Exemple 1. Exemple avec diskfreespace()
<?php
$df = diskfreespace("/");
// $df contient le nombre d’octets libres sur "/"
?>
disk_total_space (PHP 4 CVS only)
Retourne la taille d’un dossier
float disk_total_space (string directory)
disk_total_space() lit récursivement toutes les tailles du dossier directory et retourne la somme. directory peut
être aussi une partition de disque.
Exemple 1. Exemple avec disk_total_space()
<?php
$df = disk_total_space("/"); // $df contient le nombre d’octets libres
// dans le dossier "/"
?>
fclose (PHP 3, PHP 4 >= 4.0b1)
Ferme un fichier.
bool fclose (resource fp)
fclose() ferme le fichier fp.
fclose() retourne TRUE en cas de succès, et FALSE en cas d’échec.
Le pointeur de fichier doit être valide, et avoir été correctement ouvert par fopen() ou fsockopen().
feof (PHP 3, PHP 4 >= 4.0b1)
Teste la fin du fichier.
int feof (resource fp)
feof() retourne TRUE si le pointeur fp est à la fin du fichier, ou si une erreur survient, sinon, retourne FALSE.
Le pointeur de fichier doit être valide, et avoir été correctement ouvert par fopen(), popen(), ou fsockopen().
341
Système de fichiers
fflush (PHP 4 >= 4.0.1)
Envoi tout le contenu généré dans un fichier
int fflush (resource fp)
fflush() force l’écriture de toutes les données bufferisées dans le fichier désigné par fp. fflush() retourne TRUE en cas de
succès, et FALSE sinon.
fp est un pointeur de fichier ouvert avec fopen(), popen(), ou fsockopen().
fgetc (PHP 3, PHP 4 >= 4.0b1)
Renvoie le caractère que pointe le pointeur du fichier.
string fgetc (resource fp)
fgetc() retourne une chaîne contenant un seul caractère, lu depuis le fichier pointé par fp. fgetc() retourne FALSE à la fin
du fichier (tout comme feof()).
Le pointeur de fichier doit être valide, et avoir été correctement ouvert par fopen(), popen(), ou fsockopen().
Voir aussi fread(), fopen(), popen(), fsockopen() et fgets().
fgetcsv (PHP 3>= 3.0.8, PHP 4 >= 4.0b1)
Renvoie la ligne courante et cherche les champs CSV
array fgetcsv (resource fp, int length, string [delimiter])
Identique à fgets() mais fgetcsv() analyse la ligne qu’il lit et recherche les champs CSV, qu’il va retourner dans un tableau
les contenant. Le délimiteur de champs delimiter est la virgule, à moins que vous ne fournissiez un troisième argument.
fp doit être un pointeur valide, et avoir été correctement ouvert par fopen(), popen(), ou fsockopen().
length doit être plus grand que la plus grande ligne trouvée dans un fichier CSV (en comptant les caractères de fin de
ligne).
fgetcsv() retourne FALSE en cas d’erreur, ou en cas de fin du fichier.
Note : une ligne vide dans un fichier CSV sera retournée dans le tableau comme une chaîne vide, et ne sera pas traitée
comme une erreur.
Exemple 1. Exemple avec fgetcsv()
<?php
$row = 1;
$fp = fopen ("test.csv","r");
while ($data = fgetcsv ($fp, 1000, ",")) {
$num = count ($data);
print "<p> $num champs dans la ligne $row: <br>";
$row++;
for ($c=0; $c<$num; $c++) {
print $data[$c] . "<br>";
}
}
fclose ($fp);
?>
342
Système de fichiers
fgets (PHP 3, PHP 4 >= 4.0b1)
Renvoie la ligne courante sur laquelle se trouve le pointeur du fichier.
string fgets (int fp, int length)
fgets() retourne la chaîne lue jusqu’à la longueur length - 1 octet, ou bien la fin du fichier, ou encore un retour chariot (le
premier des trois qui sera rencontré).
Si une erreur survient, fgets() retourne FALSE.
Erreur courante :
Les programmeurs habitués à la programmation ’C’ noteront que fgets() ne se comporte pas comme son équivalent C lors
de la rencontre de la fin du fichier.
fp doit être valide, et avoir été correctement ouvert par fopen(), popen(), ou fsockopen().
Un exemple simple :
Exemple 1. Lecture d’un fichier ligne par ligne
<?php
$fd = fopen ("/tmp/inputfile.txt", "r");
while (!feof($fd)) {
$buffer = fgets($fd, 4096);
echo $buffer;
}
fclose ($fd);
?>
Voir aussi fread(), fopen(), popen(), fgetc(), fsockopen() et socket_set_timeout().
fgetss (PHP 3, PHP 4 >= 4.0b1)
Renvoie la ligne courante sur laquelle se trouve le pointeur du fichier et élimine les balises HTML
string fgetss (int fp, int length, string [allowable_tags])
Identique à fgets(), mais fgetss() supprime toutes les balises HTML et PHP qu’il trouve dans le texte lu.
Vous pouvez aussi préciser les balises qui seront ignorées dans le troisième paramètre, optionnel.
Note : allowable_tags a été ajouté dans PHP 3.0.13, PHP 4B3.
Voir aussi fgets(), fopen(), fsockopen(), popen() et strip_tags().
file (PHP 3, PHP 4 >= 4.0b1)
Lit le fichier et renvoie le résultat dans un tableau.
array file (string filename [, int use_include_path])
Identique à readfile(), hormis le fait que file() retourne le fichier dans un tableau. Chaque élément du tableau correspond à
une ligne du fichier, et les retour-chariots sont placés en fin de ligne.
343
Système de fichiers
Vous pouvez utiliser l’option use_include_path : en la mettant à "1", vous rechercherez aussi dans le dossier
include_path.
<?php
// Lire une page web dans un tableau, et l’afficher
$fcontents = file( ’http://www.php.net’ );
while ( list( $numero_ligne, $ligne ) = each( $fcontents ) ) {
echo "<B>Ligne $numero_ligne:</B> ".htmlspecialchars( $ligne ) . "<br>\n";
}
// lire une page web dans une chaîne
$fcontents = join( ”, file( ’http://www.php.net’ ) );
?>
Voir aussi readfile(), fopen(), fsockopen() et popen().
file_exists (PHP 3, PHP 4 >= 4.0b1)
Vérifie si un fichier existe.
int file_exists (string filename)
file_exists() retourne TRUE si le fichier filename existe, et FALSE sinon.
file_exists() ne fonctionne pas sur les fichiers distants. Les fichiers doivent être accessibles par le système de fichier du
serveur.
Le résultat de file_exists() est mis en cache. Reportez-vous à clearstatcache() pour plus de détails.
fileatime (PHP 3, PHP 4 >= 4.0b1)
Renvoie la date à laquelle le fichier a été accédé pour la dernière fois.
int fileatime (string filename)
fileatime() renvoie la date à laquelle le fichier a été accédé pour la dernière fois, ou FALSE en cas d’erreur.
fileatime() ne fonctionne pas sur les fichiers distants. Les fichiers doivent être accessibles par le système de fichier du
serveur.
Le résultat de fileatime() est mis en cache. Reportez-vous à clearstatcache() pour plus de détails.
filectime (PHP 3, PHP 4 >= 4.0b1)
Renvoie l’heure à laquelle l’inode a été accédé pour la dernière fois.
int filectime (string filename)
filectime() renvoie l’heure à laquelle l’inode filename a été accédé pour la dernière fois, ou FALSE en cas d’erreur.
filectime() ne fonctionne pas sur les fichiers distants. Les fichiers doivent être accessibles par le système de fichier du
serveur.
Note: Sur la plupart des serveurs UNIX, un fichier est considéré comme modifié si les données de son inode sont modifiées.
C’est-à-dire lorsque les permissions (utilisateur, groupe ou autre) ont été modifiées. Voyez aussi filemtime() (que vous
pourrez utiliser lorsque vous créerez des indications telles que "Dernière modification : " sur les pages web) et fileatime().
344
Système de fichiers
Notez aussi que sur certains systèmes UNIX, le ctime d’un fichier texte est considéré comme sa date de création. Cela est
faux! Il n’y a pas de date de création de fichier sous la plupart des systèmes UNIX.
Le résultat de filectime() est mis en cache. Reportez-vous à clearstatcache() pour plus de détails.
filegroup (PHP 3, PHP 4 >= 4.0b1)
Lire le nom du groupe
int filegroup (string filename)
filegroup() renvoie le groupe qui possède le fichier filename, ou FALSE en cas d’erreur. L’identifiant de groupe est
retourné au format numérique, utilisez posix_getgrgid() pour retrouver le nom du groupe.
filegroup() ne fonctionne pas sur les fichiers distants. Les fichiers doivent être accessibles par le système de fichier du
serveur.
Le résultat de filegroup() est mis en cache. Reportez-vous à clearstatcache() pour plus de détails.
Note : filegroup() est inopérante sous Windows.
fileinode (PHP 3, PHP 4 >= 4.0b1)
Renvoie le numéro d’inode du fichier.
int fileinode (string filename)
fileinode() renvoie le numéro d’inode du fichier filename, ou FALSE en cas d’erreur.
Le résultat de fileinode() est mis en cache. Reportez-vous à clearstatcache() pour plus de détails.
fileinode() ne fonctionne pas sur les fichiers distants. Les fichiers doivent être accessibles par le système de fichier du
serveur.
Note : fileinode() est inopérante sous Windows.
filemtime (PHP 3, PHP 4 >= 4.0b1)
Renvoie la date de dernière modification du fichier.
int filemtime (string filename)
filemtime() renvoie la date de dernière modification du fichier filename, ou FALSE en cas d’erreur.
Le résultat de filemtime() est mis en cache. Reportez-vous à clearstatcache() pour plus de détails.
filemtime() ne fonctionne pas sur les fichiers distants. Les fichiers doivent être accessibles par le système de fichier du
serveur.
filemtime() retourne l’heure d’écriture des blocs données d’un fichier. Utilisez date() sur ce résultat pour obtenir une date
de modification humainement lisible.
345
Système de fichiers
fileowner (PHP 3, PHP 4 >= 4.0b1)
Renvoie le nom du propriétaire du fichier.
int fileowner (string filename)
fileowner() renvoie le nom du possesseur du fichier filename, ou FALSE en cas d’erreur. L’identification du possesseur
de fichier est numérique : il faut utiliser posix_getpwuid() pour retrouver le nom d’utilisateur.
fileowner() ne fonctionne pas sur les fichiers distants. Les fichiers doivent être accessibles par le système de fichier du
serveur.
Le résultat de fileowner() est mis en cache. Reportez-vous à clearstatcache() pour plus de détails.
Note : fileowner() est inopérante sous Windows.
fileperms (PHP 3, PHP 4 >= 4.0b1)
Renvoie les permissions affectées au fichier.
int fileperms (string filename)
fileperms() renvoie les permissions affectées au fichier filename, ou FALSE en cas d’erreur.
fileperms() ne fonctionne pas sur les fichiers distants. Les fichiers doivent être accessibles par le système de fichier du
serveur.
Le résultat de fileperms() est mis en cache. Reportez-vous à clearstatcache() pour plus de détails.
filesize (PHP 3, PHP 4 >= 4.0b1)
Renvoie la taille du fichier.
int filesize (string filename)
filesize() renvoie la taille du fichier filename, ou FALSE en cas d’erreur.
filesize() ne fonctionne pas sur les fichiers distants. Les fichiers doivent être accessibles par le système de fichier du serveur.
Le résultat de filesize() est mis en cache. Reportez-vous à clearstatcache() pour plus de détails.
filetype (PHP 3, PHP 4 >= 4.0b1)
Retourne le type de fichier
string filetype (string filename)
filetype() renvoie le type du fichier filename. Les réponses possibles sont : fifo, char, dir, block, link, file, et unknown.
filetype() retourne FALSE en cas d’erreur.
filetype() ne fonctionne pas sur les fichiers distants. Les fichiers doivent être accessibles par le système de fichier du
serveur.
Le résultat de filetype() est mis en cache. Reportez-vous à clearstatcache() pour plus de détails.
346
Système de fichiers
flock (PHP 3>= 3.0.7, PHP 4 >= 4.0b1)
Verrouille le fichier.
boolean flock (int fp, int operation)
PHP dispose d’un système complet de verrouillage de fichiers. Tous les programmes qui accèdent au fichier doivent utiliser
la même méthode de verrouillage pour qu’il soit efficace.
flock() agit sur le fichier fp qui doit avoir été ouvert au préalable. operation est une des valeurs suivantes :
•
Acquisition d’un verrou : operation = 1.
•
Acquisition d’un verrou exclusif (écriture), operation = 2.
•
Libération d’un verrou (partagé ou exclusif), operation = 3.
•
Si vous voulez que flock() ne se bloque pas durant le verrouillage, ajoutez 4 à operation.
flock() permet de réaliser un système simple de verrous écriture / lecture, qui peut être utilisé sur n’importe quelle
plate-forme (Unix et Windows compris).
flock() retourne TRUE en cas de succès, et FALSE sinon. (le verrou n’a pas pu être obtenu).
Avertissement
Sur la plupart des OS, flock() est implémenté au niveau processus. Lors de l’utilisation des API d’un
serveur multi-thread, comme ISAPI, vous ne pouvez pas vous fier à flock() pour protéger vos fichiers
contre des accès concurrents du même serveur.
fopen (PHP 3, PHP 4 >= 4.0b1)
Ouverture d’un fichier ou d’une URL.
int fopen (string filename, string mode, int [use_include_path])
Si filename commence par "http://" (insensible à la casse), une connexion HTTP 1.x est ouverte avec le serveur spécifié,
et un pointeur sur la réponse fournie est retourné. Une en-tête ’Host:’ est envoyé avec la requête, afin de gérer les virtual
hosts basés sur les noms.
Notez que le pointeur de fichier retourné représente le corps de la réponse, et qu’il n’est pas possible d’accéder aux en-têtes
HTTP avec cette fonction.
Les versions antérieures à PHP 4.0.6, ne gère pas les redirections automatiques, ce qui oblige à ajouter les slash finaux "/"
pour indiquer un dossier.
Si filename commence par "ftp://" (insensible à la casse), une connexion FTP est ouverte avec le serveur spécifié, et un
pointeur sur la réponse fournie est retourné. Si le serveur ne supporte par le mode FTP passif, fopen() échouera. Vous
pouvez ouvrir des fichiers en lecture seulement, ou en écriture seulement (le full duplex n’est pas supporté).
Si filename commence par "php://stdin", "php://stdout", ou "php://stderr", le flot correspondant sera ouvert. (Cela a été
introduit en PHP 3.0.13; dans les anciennes versions, les fichiers "/dev/stdin" ou "/dev/fd/0" devaient être utilisés pour
accéder à ces flots).
Si filename commence par n’importe quoi d’autre, PHP tentera de lire ce fichier dans le système local, et un pointeur
sur le fichier ouvert sera retourné.
Si l’ouverture échoue, fopen() retourne FALSE.
mode peut prendre les valeurs suivantes :
•
’r’ - Ouvre en lecture seule, et place le pointeur de fichier au début du fichier.
347
Système de fichiers
•
’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 file. Si le fichier n’existe pas, on tente de le
créer.
•
’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.
De plus, mode peut contenir la lettre ’b’. Cette option n’est utile que sur les systèmes qui font la différence entre les
fichiers binaires et les fichiers textes (en bref, c’est une fonctionnalité Windows, totalement inutile sous Unix). S’il n’est
pas nécessaire, il sera ignoré.
Vous pouvez utiliser le troisième paramètre optionnel pour explorer le dossier include_path, en le mettant à 1.
Exemple 1. Exemple avec fopen()
<?php
$fp = fopen("/home/rasmus/file.txt", "r");
$fp = fopen("http://www.php.net/", "r");
$fp = fopen("ftp://user:[email protected]/", "w");
?>
Si vous rencontrez des problèmes en lecture ou écriture de fichier et que vous utilisez PHP en version module de serveur,
n’oubliez pas que les fichiers auxquels vous accédez ne sont pas nécessairement accessibles au processus serveur.
Sous Windows, assurez-vous de bien échapper les anti-slash utilisés dans le chemin du fichier, ou bien utilisez des slash.
<?php
$fp = fopen("c:\\data\\info.txt", "r");
?>
Voir aussi fclose(), fsockopen(), socket_set_timeout() et popen().
fpassthru (PHP 3, PHP 4 >= 4.0b1)
Affiche la partie du fichier située après le pointeur du fichier.
int fpassthru (int fp)
fpassthru() lit tout le reste d’un fichier jusqu’à la fin, et dirige le résultat vers la sortie standard.
Si une erreur survient, fpassthru() retourne FALSE.
Le pointeur de fichier doit être valide, et doit avoir été correctement ouvert par fopen(), popen(), ou fsockopen(). Après
lecture, fpassthru() va fermer le fichier (le pointeur fp sera alors invalide).
Si vous voulez simplement afficher le contenu d’un fichier, il suffit d’utiliser readfile(), ce qui épargnera l’appel à fopen().
Voir aussi readfile(), fopen(), popen() et fsockopen().
348
Système de fichiers
fputs (PHP 3, PHP 4 >= 4.0b1)
Ecrit dans un fichier.
int fputs (int fp, string str, int [length])
fputs() est un alias de fwrite(), et lui est identique en tous points. Notez que length est un paramètre optionnel, et s’il
n’est pas spécifié, toute la chaîne est écrite.
fread (PHP 3, PHP 4 >= 4.0b1)
Lecture du fichier en mode binaire.
string fread (int fp, int length)
fread() lit jusqu’à length octets dans le fichier reférencé par fp. La lecture s’arrête lorsque length octets ont été lus,
ou que l’on a atteint la fin du fichier, ou qu’une erreur survient (le premier des trois).
<?php
// Lit un fichier, et le place dans une chaîne
$filename = "/usr/local/quelquechose.txt";
$fd = fopen($filename, "r");
$contents = fread($fd, filesize ($filename));
fclose($fd);
?>
Note : Sur les systèmes qui différencient les fichiers textes et binaires (i.e. Windows) le fichier doit être ouvert avec la
lettre ’b’ ajoutée au paramètre de mode de la fonction fopen().
Note :
<?php
$filename = "c:\\fichiers\\uneimage.gif";
$fd = fopen($filename, "rb");
$contents = fread($fd, filesize ($filename));
fclose($fd);
?>
Voir aussi fwrite(), fopen(), fsockopen(), popen(), fgets(), fgetss(), file() et fpassthru().
fscanf (PHP 4 >= 4.0.1)
Analyse un fichier en fonction d’un format
mixed fscanf (int handle, string format [, string var1])
fscanf() est similaire à sscanf(), mais elle prend comme entrée un fichier, associé à handle et l’interprète en fonction du
format format. Si seulement deux paramètres sont passés à la fonction, les valeurs analysées seront retournées sous
349
Système de fichiers
forme de tableau. Si des arguments optionnels sont passés, la fonction retournera le nombre de valeurs assignées. Les
options doivent être passées par référence.
Exemple 1. Exemple fscanf()
<?php
$fp = fopen ("users.txt","r");
while ($userinfo = fscanf ($fp, "%s\t%s\t%s\n")) {
list ($name, $profession, $countrycode) = $userinfo;
//... traitement des données
}
fclose($fp);
?>
Exemple 2. users.txt
janus argonaute
rodin sculpteur
sam
oncle
leonard
inventeur
gr
fr
us
it
Voir aussi fread(), fgets(), fgetss(), sscanf(), printf() et sprintf().
fseek (PHP 3, PHP 4 >= 4.0b1)
Modifie le pointeur de fichier.
int fseek (int fp, int offset)
fseek() modifie le curseur de position dans le fichier fp. La nouvelle position mesurée en octets à partir du début du fichier,
est obtenue en additionnant la distance offset à la position whence. Ce paramètre peut prendre les valeurs suivantes :
SEEK_SET - La position finale vaut offset octets.
SEEK_CUR - La position finale vaut la position courante ajoutée à offset octets.
SEEK_END - La position finale vaut la position courante par rapport à la fin du fichier, ajoutée de offset.
Si whence n’est pas spécifiée, il vaut par défaut SEEK_SET.
fseek() retourne TRUE en cas de succès, et sinon -1. Notez que positionner le pointeur au delà de la fin du fichier n’est pas
une erreur.
fseek() ne peut pas être utilisé sur les pointeurs retournés par fopen() s’ils sont au format HTTP ou FTP.
Voir aussi ftell() et rewind().
fstat (PHP 4 >= 4.0RC1)
Lit les informations sur un fichier à partir d’un pointeur de fichier
array fstat (int fp)
fstat() rassemble les informations sur le fichier dont on connaît le pointeur fp. fstat() est similaire à la fonction stat(),
hormis le fait qu’elle utilise un pointeur de fichier, au lieu d’un nom de fichier.
fstat() retourne un tableau avec les éléments suivants :
•
1 : volume
•
2 : inode
350
Système de fichiers
•
3 : mode de protection du inode
•
4 : nombre de liens
•
5 : id de l’utilisateur propriétaire
•
6 : id du groupe propriétaire
•
7 : type du volume de l’inode *
•
8 : taille en octets
•
9 : date du dernier accès
•
10 : date de la dernière modification
•
11 : date du dernier changement
•
12 : taille de bloc du système pour les entrées/sorties(*)
•
13 : Nombre de blocs alloués
* - uniquement sur les systèmes qui supportent le type st_blksize. Les autres systèmes (i.e. Windows) retournent -1.
Les résultats de fstat() sont mis en cache. Reportez-vous à la fonction clearstatcache() pour plus de détails.
ftell (PHP 3, PHP 4 >= 4.0b1)
Renvoie la position du pointeur du fichier.
int ftell (int fp)
ftell() retourne la position courante du pointeur dans le fichier repéré par le pointeur fp, i.e., son offset.
Si une erreur survient, retourne FALSE.
Le pointeur de fichier doit être valide, et avoir été correctement ouvert par fopen() ou popen().
Voir aussi fopen(), popen(), fseek() et rewind().
ftruncate (PHP 4 >= 4.0RC1)
Tronque un fichier.
int ftruncate (int fp, int size)
ftruncate() prend le pointeur de fichier fp et le tronque à la taille de size.ftruncate() retourne TRUE en cas de succès, et
FALSE sinon.
fwrite (PHP 3, PHP 4 >= 4.0b1)
Ecriture du fichier en mode binaire.
int fwrite (int fp, string string, int [length])
fwrite() écrit le contenu de la chaîne string dans le fichier pointé par fp. Si la longueur length est fournie, l’écriture
s’arrêtera après length octets, ou à la fin de la chaîne (le premier des deux).
Notez que si length est fourni, alors l’option de configuration magic_quotes_runtime sera ignorée, et les slash seront
conservés.
351
Système de fichiers
Note : De plus, mode peut contenir la lettre ’b’. Cette option n’est utile que sur les systèmes qui font la différence entre
les fichiers binaires et les fichiers textes (en bref, c’est une fonctionnalité Windows, totalement inutile sous Unix). S’il
n’est pas nécessaire, il sera ignoré.
Voir aussi fread(), fopen(), fsockopen(), popen() et fputs().
set_file_buffer (PHP 3>= 3.0.8, PHP 4 >= 4.0.1)
Fixe la bufferisation de fichier
int set_file_buffer (int fp, int buffer)
L’écriture de fichier avec fwrite() utilise normalement un buffer de 8K. Cela signifie que si deux processus essaient
d’écrire dans le même fichier, ils font une pause tous les 8ko pour laisser le temps à l’autre d’écrire à son tour.
set_file_buffer() permet de modifier la taille du buffer de sortie pour le pointeur de fichier fp à buffer octets. Si
buffer vaut 0, l’écriture se fera sans buffer. Cela force un processus à écrire toutes ses données dans un fichier avant que
les autres puissent y accéder.
set_file_buffer() retourne 0 en cas de succès, ou EOF si la requête ne peut pas être honorée.
L’exemple suivant montre comment utiliser la fonction set_file_buffer() pour créer un fichier sans buffer.
Exemple 1. Exemple avec set_file_buffer()
<?php
$fp=fopen($file, "w");
if($fp){
set_file_buffer($fp, 0);
fputs($fp, $output);
fclose($fp);
}
?>
Voir aussi fopen() et fwrite().
is_dir (PHP 3, PHP 4 >= 4.0b1)
Indique si le nom de fichier est un dossier.
boolean is_dir (string filename)
is_dir() retourne TRUE si filename existe et est un dossier.
Le résultat de is_dir() est mis en cache. Voir la fonction clearstatcache() pour plus de détails.
is_dir() ne fonctionne pas sur les fichiers distants. Les fichiers doivent être accessibles par le système de fichier du serveur.
Voir aussi is_file() et is_link().
is_executable (PHP 3, PHP 4 >= 4.0b1)
Indique si le fichier est exécutable.
boolean is_executable (string filename)
352
Système de fichiers
is_executable() retourne TRUE si filename existe et est exécutable.
Le résultat de is_executable() est mis en cache. Voir la fonction clearstatcache() pour plus de détails.
is_executable() ne fonctionne pas sur les fichiers distants. Les fichiers doivent être accessibles par le système de fichier du
serveur.
Voir aussi is_file() et is_link().
is_file (PHP 3, PHP 4 >= 4.0b1)
Indique si le fichier est un véritable fichier.
boolean is_file (string filename)
is_file() retourne TRUE si filename existe et est un fichier (et pas un dossier).
Le résultat de is_file() est mis en cache. Voir la fonction clearstatcache() pour plus de détails.
is_file() ne fonctionne pas sur les fichiers distants. Les fichiers doivent être accessibles par le système de fichier du serveur.
Voir aussi is_dir() et is_link().
is_link (PHP 3, PHP 4 >= 4.0b1)
Indique si le fichier est un lien symbolique.
boolean is_link (string filename)
is_link() retourne TRUE si filename existe et est un lien symbolique.
Le résultat de is_link() est mis en cache. Voir la fonction clearstatcache() pour plus de détails.
is_link() ne fonctionne pas sur les fichiers distants. Les fichiers doivent être accessibles par le système de fichier du serveur.
Voir aussi is_dir() et is_file().
Note : is_link() est inopérante sous Windows.
is_readable (PHP 3, PHP 4 >= 4.0b1)
Indique un fichier est autorisé en lecture
boolean is_readable (string filename)
is_readable() retourne TRUE si filename existe et est accessible en lecture.
N’oubliez pas que PHP accède aux fichiers avec les mêmes autorisations que l’utilisateur qui fait tourner le serveur web
(souvent, c’est ’nobody’, personne).
Le résultat de is_readable() est mis en cache. Voir la fonction clearstatcache() pour plus de détails.
is_readable() ne fonctionne pas sur les fichiers distants. Les fichiers doivent être accessibles par le système de fichier du
serveur.
Voir aussi is_writable().
353
Système de fichiers
is_writable (PHP 4 )
Indique si un fichier est autorisé en écriture.
boolean is_writable (string filename)
is_writable() retourne TRUE si filename existe et est accessible en écriture.
N’oubliez pas que PHP accède aux fichiers avec les mêmes autorisations que l’utilisateur qui fait tourner le serveur web
(souvent, c’est ’nobody’, personne).
is_writable() ne fonctionne pas sur les fichiers distants. Les fichiers doivent être accessibles par le système de fichier du
serveur.
Le résultat de is_writable() est mis en cache. Voir la fonction clearstatcache() pour plus de détails.
Voir aussi is_readable().
is_writeable (PHP 3, PHP 4 >= 4.0b1)
Indique si un fichier est autorisé en écriture.
boolean is_writeable (string filename)
is_writeable() est un alias de is_writable().
is_uploaded_file (PHP 3>= 3.0.17, PHP 4 >= 4.0.3)
Indique si le fichier a été téléchargé par HTTP POST
boolean is_uploaded_file (string filename)
is_uploaded_file() est disponible à partir des versions PHP 3.0.16 et 4.0.2.
is_uploaded_file() retourne TRUE si le fichier filename a été téléchargé par HTTP POST. Cela est très utile pour vous
assurer qu’un utilisateur n’essaie pas d’accéder intentionnellement à un fichier auquel il n’a pas droit (comme
/etc/passwd).
Ce type de vérification est spécialement important s’il est possible que les fichiers téléchargés révélent leur contenu à
l’utilisateur, ou même aux utilisateurs du même système.
Voir aussi move_uploaded_file(), et la section Chargement de fichier pour un exemple simple.
link (PHP 3, PHP 4 >= 4.0b1)
Crée un lien.
int link (string target, string link)
link() crée un lien.
Voir aussi symlink() pour créer des liens symboliques et readlink() avec linkinfo().
Note : link() est inopérante sous Windows.
354
Système de fichiers
linkinfo (PHP 3, PHP 4 >= 4.0b1)
Renvoie les informations à propos d’un lien.
int linkinfo (string path)
linkinfo() renvoie les informations à propos d’un lien, c’est-à-dire le champs st_dev de la structure d’information UNIX
(comme en langage C). linkinfo() sert à vérifier si un lien (repéré par path) existe (en utilisant la même méthode que la
macro S_ISLNK de stat.h). linkinfo() retourne FALSE en cas d’erreur.
Voir aussi symlink(), link() et readlink().
Note : linkinfo() est inopérante sous Windows.
mkdir (PHP 3, PHP 4 >= 4.0b1)
Crée un dossier.
int mkdir (string pathname, int mode)
mkdir() tente de créer un dossier dans le chemin pathname.
Notez que vous aurez à préciser le mode en base octale, ce qui signifie que vous aurez probablement un 0 comme premier
chiffre. Le mode sera aussi modifié par le umask courant, que vous pouvez modifier avec la fonction umask().
<?php
mkdir ("/chemin/de/mon/dossier", 0700);
?>
mkdir() retourne TRUE en cas de succès, et FALSE en cas d’échec.
Voir aussi rmdir().
move_uploaded_file (PHP 4 >= 4.0.3)
Déplace un fichier téléchargé.
boolean move_uploaded_file (string filename, string destination)
move_uploaded_file() est disponible à partir des versions PHP 3.0.16 et 4.0.2.
move_uploaded_file() s’assure que le fichier filename est un fichier téléchargé par HTTP POST. Si le fichier est valide,
il est déplacé jusqu’à destination.
Si filename n’est pas valide, rien ne se passe, et move_uploaded_file() retournera FALSE.
Si filename est un fichier téléchargé, mais que pour une raison quelconque, il ne peut être déplacé, rien ne se passe, et
move_uploaded_file() retourne FALSE. De plus, une alerte sera affichée.
Ce type de vérification est spécialement important s’il est possible que les fichiers téléchargés révèlent leur contenu à
l’utilisateur, ou même aux utilisateurs du même système.
Voir aussi move_uploaded_file() et la section Chargement de fichier pour un exemple simple.
355
Système de fichiers
pathinfo (PHP 4 >= 4.0.3)
Retourne des informations sur un chemin système
array pathinfo (string path)
pathinfo() retourne un tableau associatif, contenant les informations sur le chemin path. Les éléments suivants sont
retournés : dirname, basename et extension.
Exemple 1. Exemple avec pathinfo()
<?php
$path_parts = pathinfo("/www/htdocs/index.html");
echo $path_parts["dirname"] . "\n";
echo $path_parts["basename"] . "\n";
echo $path_parts["extension"] . "\n";
?>
Va afficher :
/www/htdocs
index.html
html
Voir aussi dirname(), basename() et realpath().
pclose (PHP 3, PHP 4 >= 4.0b1)
Ferme un processus de pointeur de fichier.
int pclose (int fp)
pclose() ferme un processus de pointeur de fichier ouvert par popen().
Le pointeur de fichier doit être valide, et avoir été ouvert correctement par popen().
pclose() retourne le statut final du processus exécuté.
Voir aussi popen().
popen (PHP 3, PHP 4 >= 4.0b1)
Crée un processus de pointeur de fichier.
int popen (string commet, string mode)
popen() ouvre un processus fils en faisant un fork de la commande.
popen() retourne un pointeur de fichier identique à celui retourné par fopen(), hormis le fait qu’il sera unidirectionnel
(lecture seule, ou écriture seule), et doit être terminé par pclose(). Ce pointeur peut être utilisé avec fgets(), fgetss() et
fputs().
Si une erreur survient, retourne FALSE.
356
Système de fichiers
<?php
$fp = popen("/bin/ls", "r");
?>
Voir aussi pclose().
readfile (PHP 3, PHP 4 >= 4.0b1)
Affiche un fichier.
int readfile (string filename, int [use_include_path])
readfile() lit le fichier filename et l’envoit à la sortie standard.
readfile() retourne le nombre d’octets lus depuis le fichier. Si une erreur survient, retourne FALSE.
Si filename commence par "http://" (insensible à la casse), une connexion HTTP 1.0 sera ouverte avec le serveur
spécifié, et le texte de la réponse sera affiché sur la sortie standard.
Les versions antérieures à PHP 4.0.6, ne gère pas les redirections automatiques, ce qui oblige à ajouter les slash finaux "/"
pour indiquer un dossier.
Si filename commence par "ftp://" (insensible à la casse), une connexion FTP est ouverte avec l’hôte spécifié et la
réponse du serveur est affichée. Si le serveur ne supporte les connexions passives, la requête échouera.
Si filename ne commence par aucun des cas précédents, le fichier sera ouvert sur l’hôte local, et envoyé à la sortie
standard.
Vous pouvez utiliser le deuxième paramètre optionnel pour explorer le dossier include_path, en passant la valeur de 1.
Voir aussi fpassthru(), file(), fopen(), include(), require() et virtual().
readlink (PHP 3, PHP 4 >= 4.0b1)
Renvoie le nom du fichier vers lequel pointe un lien symbolique.
string readlink (string path)
readlink() fait la même chose que la fonction readlink en C : elle retourne le contenu du lien symbolique repéré par path,
ou FALSE en cas d’erreur.
Voir aussi symlink(), readlink() et linkinfo().
Note : readlink() est inopérante sous Windows.
rename (PHP 3, PHP 4 >= 4.0b1)
Renomme un fichier.
int rename (string oldname, string newname)
rename() rente de renommer le fichier oldname en newname.
rename() retourne TRUE en cas de succès et FALSE sinon.
357
Système de fichiers
rewind (PHP 3, PHP 4 >= 4.0b1)
Replace le pointeur de fichier au début.
int rewind (int fp)
rewind() replace le pointeur du fichier fp au début.
Si une erreur survient, retourne FALSE.
Le pointeur de fichier doit être valide, et avoir été correctement ouvert par fopen().
Voir aussi fseek() et ftell().
rmdir (PHP 3, PHP 4 >= 4.0b1)
Efface un dossier.
int rmdir (string dirname)
rmdir() tente d’effacer le dossier dont le chemin est dirname. Le dossier doit être vide, et le script doit avoir les
autorisations adéquates.
Si une erreur survient, rmdir() retourne FALSE.
Voir aussi mkdir().
stat (PHP 3, PHP 4 >= 4.0b1)
Renvoie les informations à propos d’un fichier.
array stat (string filename)
stat() renvoie les informations à propos du fichier filename.
stat() retourne un tableau avec les éléments suivants :
•
0 : volume
•
1 : inode
•
2 : droits d’accès au fichier (mode de protection du inode). A convertir en octal. Voir aussi fileperms().
•
3 : nombre de liens
•
4 : id de l’utilisateur propriétaire
•
5 : id du groupe propriétaire
•
6 : type du volume de l’inode *
•
7 : taille en octets
•
8 : date du dernier accès
•
9 : date de la dernière modification
•
10 : date du dernier changement
•
11 : taille de bloc du système pour les entrées/sorties *
•
12 : nombre de blocs alloués
* - uniquement sur les systèmes qui supportent le type st_blksize. Les autres systèmes (i.e. Windows) retournent -1.
stat() retourne FALSE en cas d’erreur.
358
Système de fichiers
stat() ne gère pas les URL comme peut le faire fopen().
Les résultats de stat() sont mis en cache. Reportez-vous à la fonction clearstatcache() pour plus de détails.
lstat (PHP 3>= 3.0.4, PHP 4 >= 4.0b1)
Renvoie les informations à propos d’un fichier ou d’un lien symbolique.
array lstat (string filename)
lstat() est identique à stat() mais elle accepte aussi un lien symbolique comme argument.
lstat() retourne un tableau avec les éléments suivants :
•
0 : volume
•
1 : inode
•
2 : droits d’accès au fichier (mode de protection du inode). A convertir en octal. Voir aussi fileperms().
•
3 : nombre de liens
•
4 : id de l’utilisateur propriétaire
•
5 : id du groupe propriétaire
•
6 : type du volume de l’inode *
•
7 : taille en octets
•
8 : date du dernier accès
•
9 : date de la dernière modification
•
10 : date du dernier changement
•
11 : taille de bloc du système pour les entrées/sorties *
•
12 : nombre de blocs alloués
* - uniquement sur les systèmes qui supportent le type st_blksize. Les autres systèmes (i.e. Windows) retournent -1.
Les résultats de lstat() sont mis en cache. Reportez-vous à la fonction clearstatcache() pour plus de détails.
realpath (PHP 4 >= 4.0b4)
Retourne le chemin canonique absolu.
string realpath (string path)
realpath() résoud tous les liens symboliques, et remplace toutes les références ’/./’, ’/../’ et ’/’ de path puis retourne le
chemin canonique absolu ainsi trouvé. Le résultat ne contient aucun lien symbolique, ’/./’ ou ’/../’.
Exemple 1. Exemple realpath()
<?php
$real_path = realpath("../../index.php");
?>
359
Système de fichiers
symlink (PHP 3, PHP 4 >= 4.0b1)
Crée un lien symbolique.
int symlink (string target, string link)
symlink() crée un lien symbolique pour l’objet target avec le nom de link.
Voir aussi link() pour créer des liens durs et readlink() ainsi que linkinfo().
Note : symlink() est inopérante sous Windows.
tempnam (PHP 3, PHP 4 >= 4.0b1)
Crée un fichier avec un nom unique.
string tempnam (string dir, string prefix)
tempnam() crée un fichier temporaire unique dans le dossier dir. Si le dossier n’existe pas, tempnam() va générer un
nom de fichier dans le dossier temporaire du système.
Avant PHP 4.0.6, le comportement de tempnam() dépendait de l’OS sous-jacent. Sous Windows, la variable
d’environnement TMP remplace le paramètre dir; sous Linux, la variable d’environnement TMPDIR a la priorité, tandis
que pour les OS en système V R4, le paramètre dir sera toujours utilisé, si le dossier qu’il représente existe. Consultez
votre documentation pour plus de détails.
tempnam() retourne le nom du fichier temporaire, ou la chaîne NULL en cas d’échec.
Exemple 1. Exemple avec tempnam()
<?php
$tmpfname = tempnam("/tmp", "FOO");
?>
tmpfile (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Crée un fichier temporaire
int tmpfile (void)
tmpfile() crée un fichier temporaire avec un nom unique, ouvert en écriture, et retourne un pointeur de fichier, identique à
ceux retournés par fopen(). Ce fichier sera automatiquement effacé lorsqu’il sera fermé (avec fclose()), ou lorsque le script
sera terminé.
Pour plus de détails, consultez votre documentation système sur la fonction tmpfile(3), et sur stdio.h.
Voir aussi tempnam().
360
Système de fichiers
touch (PHP 3, PHP 4 >= 4.0b1)
Affecte une nouvelle date de modification à un fichier.
int touch (string filename, int time)
touch() tente de forcer la date de modification du fichier nommé filename à la date de time. Si time est omis, c’est
l’heure courante qui est utilisée.
Si le fichier n’existe pas, il est créé.
touch() retourne TRUE en cas de succès, et FALSE sinon.
Exemple 1. Exemple avec touch()
if ( touch($NomDeFichier) ) {
print "La date de modification de $NomDeFichier a été fixée à maintenant";
} else {
print "Désolé, il est impossible de changer la date de modification de $NomDeFichier";
}
umask (PHP 3, PHP 4 >= 4.0b1)
Change le "umask" courant.
int umask (int mask)
umask() change le umask de PHP : mask & 0777 et retourne le vieux umask. Lorsque PHP est utilisé comme module de
serveur, le umask reprend sa valeur à la fin de chaque script.
umask() appelé sans argument retourne simplement le umask courant.
unlink (PHP 3, PHP 4 >= 4.0b1)
Efface un fichier.
int unlink (string filename)
unlink() efface filename. Identique à la fonction Unix C unlink().
unlink() retourne FALSE en cas d’échec.
Voir aussi rmdir() pour supprimer des dossiers.
Note : unlink() ne fonctionne pas sous Windows.
361
XXVII. Forms Data Format
Forms Data Format (FDF) est un format de fomulaire pour les documents PDF. Vous pouvez lire la documentation (en
anglais) à http://partners.adobe.com/asn/developer/acrosdk/forms.html pour plus de détails sur les tenants et les
aboutissants.
Note : Si vous rencontrez des problèmes de configuration de PHP avec le support fdftk, vérifiez bien que le fichier
d’en-têtes FdfTk.h et la librairie libFdfTk.so sont bien situés. Elle devrait être dans les dossiers fdftk-dir/include
et fdftk-dir/lib. Cela ne sera pas le cas si vous avez simplement décompressé la distribution FdfTk.
L’esprit de FDF est similaire à celui des formulaires HTML. Les différences résident dans les moyens de transmission des
données au serveur, lorsque le bouton "submit" (soumettre) est pressé (ce qui est du ressort de Form Data Format) et le
format de formulaire lui-même (qui est plutôt du ressort de Portable Document Format, PDF). Gérer des données FDF est
un des objectifs des fonctions FDF. Mais il y en a d’autres. Vous pouvez aussi prendre un formulaire PDF, et pré-remplir
les champs, sans modifier le formulaire lui-même. Dans ce cas, on va créer un document FDF (fdf_create()), remplir les
champs (fdf_set_value()) et l’associer à un fichier PDF (fdf_set_file()). Finalement, le tout sera envoyé au client, avec le
type MIME "application/vnd.fdf". Le module "Acrobat reader" de votre navigateur va reconnaître ce type MIME, et lire le
fichier PDF, puis le remplis avec FDF.
Si vous éditez un fichier FDF avec un éditeur de texte, vous trouverez un catalogue d’objet avec le nom de FDF. Cet objet
peut contenir des entrées telles que Fields, F, Status etc.. Les entrées les plus couramment utilisées sont Fields, qui
indique une liste de champs de contrôle, et F qui contient le nom du fichier PDF a qui appartiennent ces données. Ces
entrées sont désignées dans la documentation PDF sous le nom de /F-Key ou /Status-Key. La modification de ces entrées
est possible avec les fonctions fdf_set_file() et fdf_set_status(). Les champs sont modifiables avec les fonctions
fdf_set_value(), fdf_set_opt() etc..
Les exemples suivants montre comme évaluer les données du formulaire.
Exemple 1. Evaluer un document FDF
<?php
// Sauver le fichier FDF dans un fichier temporaire.
$fdffp = fopen("test.fdf", "w");
fwrite($fdffp, $HTTP_FDF_DATA, strlen($HTTP_FDF_DATA));
fclose($fdffp);
// Ouvrir le fichier temporaire, et utiliser les données.
// Le formulaire pdf contenait différents fichiers texte, avec pour nom :
// volume, date, comment, publisher, preparer, ainsi que deux boîtes
// à cocher show_publisher et show_preparer.
$fdf = fdf_open("test.fdf");
$volume = fdf_get_value($fdf, "volume");
echo "La valeur du champs volume était : ’<B>$volume</B>’<br>";
$date = fdf_get_value($fdf, "date");
echo "La valeur du champs date était ’<B>$date</B>’<br>";
$comment = fdf_get_value($fdf, "comment");
echo "La valeur du champs comment était ’<B>$comment</B>’<br>";
if(fdf_get_value($fdf, "show_publisher") == "On") {
$publisher = fdf_get_value($fdf, "publisher");
echo "La valeur du champs publisher était : ’<B>$publisher</B>’<br>";
} else
echo "La valeur du champs ne doit pas être affichée.<br>";
if(fdf_get_value($fdf, "show_preparer") == "On") {
$preparer = fdf_get_value($fdf, "preparer");
echo "La valeur du champs preparer était ’<B>$preparer</B>’<br>";
} else
echo "La valeur du champs Preparer ne doit pas être affiché.<br>";
fdf_close($fdf);
?>
362
FDF
fdf_open (PHP 3>= 3.0.6, PHP 4 >= 4.0b1)
Ouvre un document FDF.
resource fdf_open (string filename)
fdf_open() ouvre un fichier avec formulaire. Le fichier doit contenir les données retournées par le formulaire PDF.
Actuellement, le fichier doit être créée ’manuellement’, en utilisant la fonction fopen() et en y écrivant le contenu du
tableau HTTP_FDF_DATA avec la fonction fwrite(). Un mécanisme comparable aux formulaires HTML qui créent une
variable pour chaque champs entrant, n’existe pas.
Exemple 1. Accéder aux données du formulaire
<?php
// Sauver le fichier FDF dans un fichier temporaire.
$fdffp = fopen("test.fdf", "w");
fwrite($fdffp, $HTTP_FDF_DATA, strlen($HTTP_FDF_DATA));
fclose($fdffp);
// Ouvrir le fichier temporaire, et utiliser les données.
$fdf = fdf_open("test.fdf");
...
fdf_close($fdf);
?>
Voir aussi fdf_close().
fdf_close (PHP 3>= 3.0.6, PHP 4 >= 4.0b1)
Ferme un document FDF.
boolean fdf_close (resource fdf_document)
fdf_close() ferme le document FDF.
Voir aussi fdf_open().
fdf_create (PHP 3>= 3.0.6, PHP 4 >= 4.0b1)
Crée un nouveau document FDF.
int fdf_create (void )
fdf_create() crée un nouveau document FDF. Cette fonction est nécessaire pour ceux qui veulent pré remplir les champs
d’un formulaire dans un fichier PDF.
Exemple 1. Pré remplir un formulaire PDF
<?php
$outfdf = fdf_create();
fdf_set_value($outfdf, "volume", $volume, 0);
fdf_set_file($outfdf, "http:/testfdf/resultlabel.pdf");
fdf_save($outfdf, "outtest.fdf");
fdf_close($outfdf);
Header("Content-type: application/vnd.fdf");
363
FDF
$fp = fopen("outtest.fdf", "r");
fpassthru($fp);
unlink("outtest.fdf");
?>
Voir aussi fdf_close(), fdf_save() et fdf_open().
fdf_save (PHP 3>= 3.0.6, PHP 4 >= 4.0b1)
Sauver un document FDF.
int fdf_save (string filename)
fdf_save() sauve un document FDF. Le FDF Toolkit fournit un moyen d’envoyer le contenu d’un document FDF à au
fichier de sortie stdout si le paramètre filename vaut ’.’. Ceci ne fonctionne pas si PHP est sous la forme d’un module
Apache. Dans ce cas, il faudra écrire le résultat dans un fichier, et utiliser fpassthru() pour l’afficher au client.
Voir aussi fdf_close() et pour avoir un exemple fdf_create().
fdf_get_value (PHP 3>= 3.0.6, PHP 4 >= 4.0b1)
Mot la valeur d’un champs.
string fdf_get_value (int fdf_document, string fieldname)
fdf_get_value() retourne la valeur d’un champs.
Voir aussi fdf_set_value().
fdf_set_value (PHP 3>= 3.0.6, PHP 4 >= 4.0b1)
Fixe la valeur d’un champs.
boolean fdf_set_value (int fdf_document, string fieldname, string value, int isName)
fdf_set_value() fixe la valeur d’un champs. Le dernier paramètre détermine si la valeur doit être convertie en nom PDF
(isName = 1) ou affecter une chaîne PDF à un contrôle (isName = 0).
Voir aussi fdf_get_value().
fdf_next_field_name (PHP 3>= 3.0.6, PHP 4 >= 4.0b1)
Lit le nom du champs suivant.
string fdf_next_field_name (int fdf_document, string fieldname)
fdf_next_field_name() retourne le nom du champs après le champs fieldname ou le nom du premier champs, si le
second paramètre est NULL.
Voir aussi fdf_set_value() et fdf_get_value().
364
FDF
fdf_set_ap (PHP 3>= 3.0.6, PHP 4 >= 4.0b1)
Fixe l’apparence d’un champs.
boolean fdf_set_ap (int fdf_document, string field_name, int face, string filename, int
page_number)
fdf_set_ap() fixe l’apparence d’un champs (i.e. la valeur de la clé /AP). Les valeurs possibles de face sont sont
1=FDFNormalAP, 2=FDFRolloverAP, 3=FDFDownAP.
fdf_set_status (PHP 3>= 3.0.6, PHP 4 >= 4.0b1)
Fixe la valeur de la clé /STATUS.
boolean fdf_set_status (int fdf_document, string status)
fdf_set_status() fixe la valeur de la clé /STATUS.
Voir aussi fdf_get_status().
fdf_get_status (PHP 3>= 3.0.6, PHP 4 >= 4.0b1)
Lit la valeur de la clé /STATUS.
string fdf_get_status (int fdf_document)
fdf_get_status() retourne la valeur de la clé /STATUS.
Voir aussi fdf_set_status().
fdf_set_file (PHP 3>= 3.0.6, PHP 4 >= 4.0b1)
Fixe la valeur de la clé /F.
boolean fdf_set_file (int fdf_document, string filename)
fdf_set_file() Fixe la valeur de la clé /F. la clé /F est simplement une référence sur un formulaire PDF qui doit être
pré-remplis. Dans un environnement web, c’est une URL (e.g. http:/testfdf/resultlabel.pdf).
Voir aussi fdf_get_file() et pour un exemple, fdf_create().
fdf_get_file (PHP 3>= 3.0.6, PHP 4 >= 4.0b1)
Lit la valeur de la clé /F.
string fdf_get_file (int fdf_document)
fdf_set_file() lit la valeur de la clé /F.
Voir aussi fdf_set_file().
365
FDF
fdf_set_flags (PHP 4 >= 4.0.2)
Modifie une option d’un champs
boolean fdf_set_flags (int fdf_document, string fieldname, int whichFlags, int newFlags)
fdf_set_flags() modifie certaines options du champs fieldname.
Voir aussi fdf_set_opt().
fdf_set_opt (PHP 4 >= 4.0.2)
Modifie une option d’un champs
boolean fdf_set_opt (int fdf_document, string fieldname, int element, string str1, string
str2)
fdf_set_opt() modifie les options du champs fieldname.
Voir aussi fdf_set_flags().
fdf_set_submit_form_action (PHP 4 >= 4.0.2)
Modifie l’action javascript d’un champs
boolean fdf_set_submit_form_action (int fdf_document, string fieldname, int trigger, string
script, int flags)
fdf_set_submit_form_action() affecte un javascript au champs fieldname, exécuté lors de la validation d’un
formulaire.
Voir aussi fdf_set_javascript_action().
fdf_set_javascript_action (PHP 4 >= 4.0.2)
Modifie l’action javascript d’un champs
boolean fdf_set_javascript_action (int fdf_document, string fieldname, int trigger, string
script)
fdf_set_javascript_action() affecte un javascript au champs fieldname, exécuté lors de la validation d’un formulaire.
Voir aussi fdf_set_submit_form_action().
fdf_set_encoding (unknown)
Modifie l’encodage des caractères
bool fdf_set_encoding (int fdf_document, string encoding)
fdf_set_encoding() modifie l’encodage des caractères du document FDF fdf_document. Le paramètre encoding
doit être un nom d’encodage valide, tels que "Shift-JIS" ou "Unicode".
366
FDF
fdf_set_encoding() a été ajoutée en PHP 4.0.7.
367
XXVIII. FTP
FTP : File Transfer Protocol (Protocole de transfert de fichiers). Ces fonctions implémentent un client pour accéder aux
serveurs FTP, comme défini dans http://www.faqs.org/rfcs/rfc959.html.
Les constantes suivantes sont définies dans le module FTP : FTP_ASCII et FTP_BINARY.
Pour activer le module FTP de votre configuration PHP, il faut utiliser l’option --enable-ftp en PHP 4, et l’option
--with-ftp en PHP 3 avec le script de configuration.
Exemple 1. Exemple de connexion FTP
<?php
// création de la connexion
$conn_id = ftp_connect("$ftp_server");
// authentification avec nom de compte et mot de passe
$login_result = ftp_login($conn_id, "$ftp_user_name", "$ftp_user_pass");
// vérification de la connexion
if ((!$conn_id) || (!$login_result)) {
echo "La connexion FTP a échoué!";
echo "Tentative de connexion à $ftp_server avec $user";
die;
} else {
echo "Connecté à $ftp_server, avec $user";
}
// téléchargement d’un fichier
$upload = ftp_put($conn_id, "$destination_file", "$source_file", FTP_BINARY);
// Vérification de téléchargement
if (!$upload) {
echo "Le téléchargement Ftp a échoué!";
} else {
echo "Téléchargement de $source_file sur $ftp_server en $destination_file";
}
// fermeture de la connexion FTP.
ftp_quit($conn_id);
?>
368
FTP
ftp_connect (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Ouvre une connexion FTP
resource ftp_connect (string host, int [port])
ftp_connect() retourne un flot FTP en cas de succès, et FALSE sinon.
ftp_connect() ouvre une connexion FTP avec l’hôte host. Le paramètre port spécifie le port de connexion. S’il est
omis, le port 21 sera utilisé.
ftp_login (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Authentification d’une connexion FTP
bool ftp_login (resource ftp_stream, string username, string password)
ftp_login() retourne TRUE en cas de succès, et FALSE sinon.
ftp_login() authentifie le flot FTP.
ftp_pwd (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Retourne le nom du dossier courant.
string ftp_pwd (resource ftp_stream)
ftp_pwd() retourne le nom du dossier courant, ou FALSE en cas d’erreur.
ftp_cdup (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Change de dossier, et passe au dossier parent.
bool ftp_cdup (resource ftp_stream)
ftp_cdup() retourne TRUE en cas de succès, et FALSE sinon.
ftp_cdup() change de dossier, et passe au dossier parent.
ftp_chdir (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Change le dossier courant.
bool ftp_chdir (resource ftp_stream, string directory)
ftp_chdir() retourne TRUE en cas de succès, et FALSE sinon.
ftp_chdir() change le dossier courant en directory.
369
FTP
ftp_mkdir (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Crée un dossier.
string ftp_mkdir (resource ftp_stream, string directory)
ftp_mkdir() retourne le nom du dossier ainsi créé en cas de succès, et FALSE sinon.
ftp_mkdir() crée le dossier nommé directory.
ftp_rmdir (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Efface un dossier.
bool ftp_rmdir (resource ftp_stream, string directory)
ftp_rmdir() retourne TRUE en cas de succès, et FALSE sinon.
ftp_rmdir() efface le dossier directory.
ftp_nlist (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Retourne la liste des fichiers dans un dossier.
array ftp_nlist (resource ftp_stream, string directory)
ftp_nlist() retourne un tableau de nom de fichiers en cas de succès, et FALSE sinon.
ftp_rawlist (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Fait une liste détaillée de fichiers dans un dossier.
array ftp_rawlist (resource ftp_stream, string directory)
ftp_rawlist() exécute la commande FTP LIST, et retourne le résultat dans un tableau. Chaque élément du tableau
correspond à une ligne du résultat de la commande. Le résultat n’est pas analysé, et est retourné brut. L’identifiant de
système retourné par ftp_systype() sera utile pour déterminer la façon d’interpréter le résultat.
ftp_systype (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Retourne un identifiant de type de serveur FTP.
string ftp_systype (resource ftp_stream)
ftp_systype() retourne le type de serveur, ou FALSE en cas d’erreur.
370
FTP
ftp_pasv (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Active ou désactive le mode passif.
bool ftp_pasv (resource ftp_stream, int pasv)
ftp_pasv() retourne TRUE en cas de succès, et FALSE sinon.
ftp_pasv() active le mode passif si pasv est à TRUE (et le désactive si pasv est à FALSE). En mode passif, les données de
connexion sont initiées par le client, plutôt que par le serveur.
ftp_get (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Télécharge un fichier depuis un serveur FTP.
bool ftp_get (resource ftp_stream, string local_file, string remote_file, int mode)
ftp_get() retourne TRUE en cas de succès, et FALSE sinon.
ftp_get() télécharge le fichier remote_file depuis le serveur FTP, et le sauve dans le fichier local local_file. Le
mode de transfert mode spécifié doit être soit FTP_ASCII ou FTP_BINARY.
ftp_fget (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Télécharge un fichier depuis un serveur FTP et le sauve dans un fichier déjà ouvert.
bool ftp_fget (resource ftp_stream, int fp, string remote_file, int mode)
ftp_fget() retourne TRUE en cas de succès, et FALSE sinon.
ftp_fget() télécharge le fichier remote_file depuis le serveur FTP, et l’écrit dans le fichier identifié par fp. Le mode de
transfert mode spécifié doit être FTP_ASCII ou FTP_BINARY.
ftp_put (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Charge un fichier sur un serveur FTP.
bool ftp_put (resource ftp_stream, string remote_file, string local_file, int mode)
ftp_put() retourne TRUE en cas de succès, et FALSE sinon.
ftp_put() enregistre le fichier local_file sur le serveur FTP, sous le nom de remote_file. Le mode de transfert
mode spécifié doit être FTP_ASCII ou FTP_BINARY.
ftp_fput (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Charge un fichier ouvert sur un serveur FTP.
bool ftp_fput (resource ftp_stream, string remote_file, int fp, int mode)
ftp_fput() retourne TRUE en cas de succès, et FALSE sinon.
371
FTP
ftp_fput() charge les données issues du fichier identifié par fp jusqu’à la fin du fichier. Le résultat est stocké dans le fichier
remote_file sur le serveur FTP. Le mode de transfert mode spécifié doit être FTP_ASCII ou FTP_BINARY.
ftp_size (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Retourne la taille d’un fichier.
int ftp_size (resource ftp_stream, string remote_file)
ftp_size() retourne la taille du fichier en cas de succès, et FALSE sinon.
ftp_size() retourne la taille d’un fichier sur un serveur FTP. Si une erreur survient, ou que le fichier n’existe pas, la valeur
-1 est retournée. Certains serveurs FTP ne supportent pas cette fonction.
ftp_mdtm (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Retourne la date de dernière modification d’un fichier sur un serveur FTP.
int ftp_mdtm (resource ftp_stream, string remote_file)
ftp_mdtm() retourne un UNIX timestamp en cas de succès, et FALSE sinon.
ftp_mdtm() lit la date de dernière modification d’un fichier et retourne le UNIX timestamp. Si une erreur survient, ou si le
fichier n’existe pas,la valeur -1 est retournée. Certains serveurs FTP ne supportent pas cette fonction.
ftp_rename (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Renomme un fichier sur un serveur FTP.
bool ftp_rename (resource ftp_stream, string from, string to)
ftp_rename() retourne TRUE en cas de succès, et FALSE sinon.
ftp_rename() renomme le fichier ou dossier from en to, sur le serveur ftp_stream.
ftp_delete (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Efface un fichier sur un serveur FTP.
bool ftp_delete (resource ftp_stream, string path)
ftp_delete() retourne TRUE en cas de succès, et FALSE sinon.
ftp_delete() efface le fichier path sur un serveur FTP.
ftp_site (PHP 3>= 3.0.15, PHP 4 >= 4.0RC1)
Envoie la commande SITE au serveur.
bool ftp_site (resource ftp_stream, string cmd)
372
FTP
ftp_site() retourne TRUE en cas de succès, et FALSE sinon.
ftp_site() envoie la commande cmd au serveur FTP. Les commandes SITE ne sont pas normalisées, et peuvent varier d’un
serveur à l’autre. Elles permettent de gérer notamment les permissions de fichier, et les groupes.
ftp_quit (PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Ferme une connexion FTP.
bool ftp_quit (resource ftp_stream)
ftp_connect() ferme la connexion ftp_stream.
373
XXIX. Fonctions
Ces fonctions effectuent les manipulations liées à la gestion des fonctions.
374
Fonctions
call_user_func_array (PHP 4 >= 4.0.4)
Appelle une fonction utilisateur avec les paramètres rassemblés en tableau
mixed call_user_func_array
(string function_name [, array paramarr])
call_user_func_array() appelle la fonction utilisateur function_name avec les paramètres paramarr, rassemblés
dans un tableau. Par exemple:
<?php
function debug($var, $val)
echo "***DEBUGGING\nVARIABLE: $var\nVALUE:";
if (is_array($val) || is_object($val) || is_resource($val))
print_r($val);
else
echo "\n$val\n";
echo "***\n";
}
$c = mysql_connect();
$host = $HTTP_SERVER_VARS["SERVER_NAME"];
call_user_func_array (’debug’, array("host", $host));
call_user_func_array (’debug’, array("c", $c));
call_user_func_array (’debug’, array("HTTP_POST_VARS", $HTTP_POST_VARS));
?>
Voir aussi call_user_func(), call_user_method() et call_user_method_array().
Note : call_user_func_array() a été ajouté en version PHP 4.05.
call_user_func (PHP 3>= 3.0.3, PHP 4 >= 4.0b1)
Appelle une fonction utilisateur
mixed call_user_func
(string function_name [, mixed parameter [, mixed ...]])
call_user_func() appelle la fonction utilisateur function_name, et lui passe les paramètres parameter. Par exemple
:
function barbier ($type) {
print "Vous vouliez une coupe $type, pas de problème";
}
call_user_func (’barbier’, "iroquois");
call_user_func (’barbier’, "militaire");
call_user_func (’barbier’, "au bol");
Voir aussi call_user_func_array(), call_user_method() et call_user_method_array().
375
Fonctions
create_function (PHP 4 >= 4.0.1)
Crée une fonction anonyme (style lambda)
string create_function (string args, string code)
create_function() crée une fonction anonyme, à partir des paramètres passés, et retourne un nom de fonction unique.
Généralement, les arguments args sont présentés sous la forme d’une chaîne à guillemets simples, et la même
recommandation vaut pour code. La raison de l’utilisation des guillemets simples est de proteger les noms de variables du
remplacement par leur valeur. Si vous utilisez les guillemets doubles, n’oubliez pas d’échapper les noms de variables (i.e.
\$avar).
Vous pouvez utiliser cette fonction pour (par exemple) créer une fonction à partir d’informations récoltés durant
l’éxécution.
Exemple 1. Création d’une fonction anonyme avec create_function()
<?php
$newfunc = create_function(’$a,$b’,’return "ln($a) + ln($b) = ".log($a * $b);’);
echo "Nouvelle fonction anonyme : $newfunc\n";
echo $newfunc(2,M_E)."\n";
// affichera :
// Nouvelle fonction anonyme : lambda_1
// ln(2) + ln(2.718281828459) = 1.6931471805599
?>
Ou, pour pouvoir appliquer une fonction générique à une liste d’arguments.
Exemple 2. Traitement générique par fonction avec create_function()
<?php
function process($var1, $var2, $farr) {
for ($f=0; $f < count($farr); $f++)
echo $farr[$f]($var1,$var2)."\n";
}
// création d’une série de fonction mathématiques
$f1 = ’if ($a>=0) {return "b*a^2 = ".$b*sqrt($a);} else {return FALSE;}’;
$f2 = "return \"min(b^2+a, a^2,b) = \".min(\$a*\$a+\$b,\$b*\$b+\$a);";
$f3 = ’if ($a> 0 && $b != 0) {return "ln(a)/b = ".log($a)/$b;} else {return FALSE;}’;
$farr = array(
create_function(’$x,$y’, ’return "un peu de trigo : ".(sin($x) + $x*cos($y));’),
create_function(’$x,$y’, ’return "une hypoténuse: ".sqrt($x*$x + $y*$y);’),
create_function(’$a,$b’, $f1),
create_function(’$a,$b’, $f2),
create_function(’$a,$b’, $f3)
);
echo "\nUtilisation de la première liste de fonctions anonymes\n";
echo "paramétres: 2.3445, M_PI\n";
process(2.3445, M_PI, $farr);
// Maintenant une liste de fonction sur chaîne de caractères
$garr = array(
create_function(’$b,$a’,’if (strncmp($a,$b,3) == 0) return "** \"$a\" ’.
’et \"$b\"\n** Ces chaînes de ressemblent!! (regarde les trois premiers caractères)";’),
create_function(’$a,$b’,’; return "CRCs: ".crc32($a)." , ".crc32(b);’),
create_function(’$a,$b’,’; return "similarité(a,b) = ".similar_text($a,$b,&$p)."($p%)";’)
);
echo "\nUtilisation de la secondes liste de fonctions anonymes\n";
process("Twas brilling and the slithy toves", "Twas the night", $garr);
?>
Et lorsque vous utilisez le code ci-dessus, l’affichage va être
376
Fonctions
Utilisation de la première liste de fonctions anonymes
paramétres: 2.3445, M_PI
Un peu de trigo: -1.6291725057799
Une hypoténuse: 3.9199852871011
b*a^2 = 4.8103313314525
min(b^2+a, a^2,b) = 8.6382729035898
ln(a/b) = 0.27122299212594
Utilisation de la seconde liste de fonctions anonymes
** "Twas the night" et "Twas brilling and the slithy toves"
** Ces chaînes de ressemblent!! (regarde les trois premiers caractères)
CRCs: -725381282 , 1908338681
similarité(a,b) = 11(45.833333333333%)
Mais l’utilisation la plus courante des fonctions lambda est la fonction de callback, par exemple lors de l’utilisation de
array_walk() ou usort()
Exemple 3. Utilisation de fonctions anonymes comme fonction de callback
<?php
$av = array("la ","une ","cette ","une certaine ");
array_walk($av, create_function(’&$v,$k’,’$v = $v."maison";’));
print_r($av); // En PHP 3 utilisez var_dump()
// affiche:
// Array
// (
//
[0] => la maison
//
[1] => une maison
//
[2] => cette maison
//
[3] => une certaine maison
// )
// un tableau de chaîne classé par taille
$sv = array("petite","moyenne","tres longue","vraiment tres longue");
print_r($sv);
// affiche:
// Array
// (
//
[0] => petite
//
[1] => moyenne
//
[2] => tres longue
//
[3] => vraiment tres longue
// )
// Tri par ordre de taille décroissant
usort($sv, create_function(’$a,$b’,’return strlen($b) - strlen($a);’));
print_r($sv);
// outputs:
// Array
// (
//
[0] => vraiment tres longue
//
[1] => tres longue
//
[2] => moyenne
//
[3] => petite
// )
?>
func_get_arg (PHP 4 >= 4.0b4)
Retourne un élément de la liste des arguments
mixed func_get_arg (int arg_num)
377
Fonctions
func_get_arg() retourne l’argument à la position arg_num dans la liste d’argument d’une fonction utilisateur. Les
arguments sont comptés en commençant à zéro. func_get_arg() générera une alerte si elle est appelée hors d’une fonction.
Si arg_num est plus grand que le nombre d’arguments passés, une alerte est générée et la fonction retourne FALSE.
<?php
function foo() {
$numargs = func_num_args();
echo "Nombre d’arguments: $numargs<br>\n";
if ($numargs >= 2) {
echo "Le second argument est: " . func_get_arg (1) . "<br>\n";
}
}
foo(1, 2, 3);
?>
func_get_arg() peut être utilisé conjointement à func_num_args() et func_get_args() pour permettre aux fonctions
utilisateurs d’accepter un nombre variable d’arguments.
Note : func_get_arg() a été ajoutée en PHP 4.
func_get_args (PHP 4 >= 4.0b4)
Retourne les arguments d’une fonction sous forme de tableau
array func_get_args (void )
func_get_args() retourne un tableau dont les éléments correspondent aux éléments de la liste d’arguments de la fonction.
func_get_args() générera une alerte si elle est appelée hors d’une fonction.
<?php
function foo() {
$numargs = func_num_args();
echo "Nombre d’arguments: $numargs<br>\n";
if ($numargs >= 2) {
echo "Le second argument est: " . func_get_arg (1) . "<br>\n";
}
$arg_list = func_get_args();
for ($i = 0; $i < $numargs; $i++) {
echo "L’argument $i est: " . $arg_list[$i] . "<br>\n";
}
}
foo (1, 2, 3);
?>
func_get_arg() peut être utilisé conjointement à func_num_args() et func_get_args() pour permettre aux fonctions
utilisateurs d’accepter un nombre variable d’arguments.
Note : func_get_arg() a été ajoutée en PHP 4.
378
Fonctions
func_num_args (PHP 4 >= 4.0b4)
Retourne le nombre d’arguments passé à la fonction
int func_num_args (void )
func_num_args() retourne le nombre d’arguments passé à la fonction utilisateur courante. func_num_args() générera une
alerte si elle est appelée hors d’une fonction.
<?php
function foo() {
$numargs = func_num_args();
echo "Nombre d’arguments: $numargs\n";
}
foo (1, 2, 3);
// affiche ’Nombre d’arguments: 3’
?>
func_get_arg() peut être utilisé conjointement à func_num_args() et func_get_args() pour permettre aux fonctions
utilisateurs d’accepter un nombre variable d’arguments.
Note : func_get_arg() a été ajoutée en PHP 4.
function_exists (PHP 3>= 3.0.7, PHP 4 >= 4.0b1)
Indique si une fonction est définie.
boolean function_exists (string function_name)
function_exists() vérifie la liste des fonctions définies par l’utilisateur, et retourne TRUE si function_name y est trouvé,
FALSE sinon.
<?php
if (function_exists(’imap_open’)) {
echo "Les fonctions IMAP sont disponibles.<br>\n";
} else {
echo "Les fonctions IMAP ne sont pas disponibles.<br>\n";
}
?>
Notez qu’une fonction peut exister, même si elle est indisponible, à cause de la configuration ou des options de compilation.
Voir aussi method_exists().
get_defined_functions (PHP 4 >= 4.0.4)
Liste toutes les fonctions définies
array get_defined_functions (void )
get_defined_functions() retourne un tableau multi- dimensionnel, contenant la liste de toutes les fonctions définies, aussi
bien les fonctions internes à PHP que celle déjà définie par l’utilisateur. Les noms des fonctions internes sont accessibles
via $arr["internal"], et les fonctions utilisateur sont accessibles via $arr["user"].
379
Fonctions
<?php
function maligne($id, $data) {
return "<tr><th>$id</th><td>$data</td></tr>\n";
}
$arr = get_defined_functions();
print_r($arr);
?>
Ce script va afficher :
Array
(
[internal] => Array
(
[0] => zend_version
[1] => func_num_args
[2] => func_get_arg
[3] => func_get_args
[4] => strlen
[5] => strcmp
[6] => strncmp
...
[750] => bcscale
[751] => bccomp
)
[user] => Array
(
[0] => maligne
)
)
Voir aussi get_defined_vars().
register_shutdown_function (PHP 3>= 3.0.4, PHP 4 >= 4.0b1)
Enregistre une fonction pour exécution à l’extinction
int register_shutdown_function
(string func)
register_shutdown_function() enregistre la fonction func pour exécution à l’extinction du script.
Erreur courante :
Etant donné qu’aucun affichage n’est possible depuis la fonction func, vous ne pouvez pas y mettre d’informations de
débuggage par print() ou echo()!
register_tick_function (PHP 4 >= 4.0.3)
Enregistre une fonction exécutée à chaque tick
void register_tick_function
(string func [, mixed arg])
register_tick_function() enregistre la fonction func pour être exécutée à chaque fois qu’un tick est appelé.
380
Fonctions
unregister_tick_function (PHP 4 >= 4.0.3)
Annule la fonction exécutée à chaque tick
void unregister_tick_function
(string func [, mixed arg])
unregister_tick_function() annule l’exécution automatique de func à chaque tick.
381
XXX. GNU Gettext
Les fonctions gettext implémente l’API NLS (Native Language Support) qui peut servir à internationaliser vos scripts PHP.
Lisez la documentation GNU pour plus d’explications sur ces fonctions.
382
gettext
bindtextdomain (PHP 3>= 3.0.7, PHP 4 >= 4.0b1)
Fixe le chemin d’un domaine.
string bindtextdomain (string domain, string directory)
bindtextdomain() fixe le chemin du domaine domain à directory.
dcgettext (PHP 3>= 3.0.7, PHP 4 >= 4.0b1)
Remplace le domaine lors d’une recherche.
string dcgettext (string domain, string message, int category)
dcgettext() permet de remplacer le domaine courant lors de la rechrche d’un message. Elle permet aussi de spécifier une
catégorie.
dgettext (PHP 3>= 3.0.7, PHP 4 >= 4.0b1)
Remplace le domaine courant.
string dgettext (string domain, string message)
dgettext() remplace le domaine courant.
gettext (PHP 3>= 3.0.7, PHP 4 >= 4.0b1)
Recherche un message dans le domaine courant.
string gettext (string message)
gettext() retourne une chaîne traduite, si elle en a trouvé une dans la table de traduction, ou bien le message message, s’il
n’a pas été trouvé. Vous pouvez utiliser le caractère souligné (_) comme alias de cette fonction.
Exemple 1. Vérfication gettext()
<?php
// Choix l’allemand
putenv("LANG=de");
// Spécifie la localisation des tables de traduction
bindtextdomain("myPHPApp", "./locale");
// Choisi le domaine
textdomain("myPHPApp");
// Affiche un message de test
print (gettext ("Bienvenue sur mon application PHP"));
?>
383
gettext
textdomain (PHP 3>= 3.0.7, PHP 4 >= 4.0b1)
Fixe le domaine par défaut.
string textdomain (string text_domain)
textdomain() fixe le domaine à utiliser lors de recherche avec gettext(). Ce domaine dépend généralement de
l’application. Le domaine par défaut précédent est retourné. Appelez cette fonction sans paramètre pour avoir la valeur
courante, sans la modifier.
384
XXXI. GMP
Ces fonctions vous permettent de travailler avec des nombres de taille arbitraire, en utilisant la librairie GNU MP. Pour
pouvoir y accéder, vous devez compiler PHP avec le support GMP en utilisant l’option --with-gmp.
Vous pouvez télécharger GMP sur le site de http://www.swox.com/gmp/. Ce site propose aussi un manuel GMP.
Vous devez utiliser GMP version 2 ou plus récent pour utiliser ces fonctions. Certaines d’entre elles peuvent requérir une
version encore plus récente de GMP.
Ces fonctions ont été ajoutée dans PHP 4.0.4.
Note : La plupart des fonctions GMP acceptent des nombres GMP comme arguments, définis ci-dessous comme
resource. Cependant, la plus part de ces fonctions acceptent aussi des nombres et des chaînes à partir du moment
où on peut les convertir en nombre. Si une fonction utilisant les entiers est plus rapide, elle sera automatiquement
appelée si les arguments fournis sont des entiers. Cela se fait de manière transparante : vous pouvez donc utiliser des
entiers avec les fonctions GMP sans perte de vitesse. Voir aussi gmp_init().
Exemple 1. Factorielle avec GMP
<?php
function fact($x) {
if($x <= 1)
return 1;
else
return gmp_mul($x,fact($x-1));
}
print gmp_strval(fact(1000))."\n";
?>
Cet exemple va calculer factiorielle de 1000 (un plutôt grand nombre) très vite.
385
GMP
gmp_init (PHP 4 >= 4.0.

Manuels associés