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

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
A propos de ce manuel
I. Comment Commencer
1. Introduction
2. Installation
3. Configuration
4. Sécurité
II. Référence
5. La syntaxe de base
6. Types
7. Les variables
8. Les constantes
9. Les expressions
10. Les opérateurs
11. Les structures de contrôle
12. Fonctions
13. Classes et objets
14. Les références
III. Caractéristiques
15. Gestion des erreurs
16. Création d'images
17. Authentification HTTP avec PHP
18. Cookies
19. Gestion des chargements de fichier
20. Utilisation des fichiers à distance
21. Gestion des connexions
22. Connexions persistantes aux bases de données
IV. Index des fonctions
I. Apache
II. Tableaux
III. Aspell
IV. Nombres de grande taille
V. Compression Bzip2
VI. Calendrier
VII. Paiement CCVS
VIII. Support COM pour Windows
IX. Objets
X. ClibPDF
XI. CURL
XII. Paiement Cybercash
XIII. Caractères
XIV. DBA
XV. Dates et heures
XVI. dBase
XVII. DBM
XVIII. Accès aux dossiers
XIX. DOM XML
XX. Gestion des erreurs
XXI. FilePro
XXII. Système de fichiers
XXIII. Forms Data Format
XXIV. FTP
XXV. Fonctions
XXVI. GNU Gettext
XXVII. GMP
XXVIII. HTTP
XXIX. Hyperwave
XXX. ICAP
XXXI. Images
XXXII. IMAP
XXXIII. Informix
XXXIV. Fonctions InterBase
XXXV. Ingres II
XXXVI. LDAP
XXXVII. Email
XXXVIII. Mathématiques
XXXIX. MCAL
XL. Cryptage
XLI. Hash
XLII. Microsoft SQL Server
XLIII. Fonctions diverses
XLIV. mnoGoSearch
XLV. mSQL
XLVI. MySQL
XLVII. Réseau
XLVIII. ODBC unifié
XLIX. Oracle 8
L. OpenSSL
LI. Oracle
LII. Ovrimos SQL
LIII. Entrées/sorties
LIV. PDF
LV. Verisign Payflow Pro Paiement
LVI. Options PHP & informations
LVII. POSIX
LVIII. PostgreSQL
LIX. Exécution de programmes externes
LX. Pspell
LXI. Readline GNU
LXII. Recode (GNU)
LXIII. Expressions régulières compatibles Perl
LXIV. Expressions régulières
LXV. Satellite CORBA client extension
LXVI. Sémaphores et gestion de la mémoire partagée
LXVII. SESAM
LXVIII. Sessions
LXIX. Mémoire partagée
LXX. Shockwave Flash
LXXI. SNMP
LXXII. Sockets
LXXIII. Chaîne de caractères
LXXIV. Sybase
LXXV. URL
LXXVI. Variables
LXXVII. WDDX
LXXVIII. Analyseur syntaxique XML
LXXIX. XSLT
LXXX. YAZ
LXXXI. NIS
LXXXII. Zlib (Compression)
V. Appendices
A. Migration de PHP/FI 2.0 à PHP 3.0
B. Migration de PHP 3.0 à PHP 4.0
C. Développement PHP
D. Débuggeur PHP

Préface

PHP, signifie "PHP: Hypertext Preprocessor" (Préprocesseur HyperTexte) , est un langage de script HTML. L'essentiel de sa syntaxe est empruntée aux langages C, Java et Perl, mais y ajoute plusieurs fonctionnalités uniques. Le but de ce langage est de permettre aux développeurs web de concevoir rapidement des sites aux pages dynamiques


A propos de ce manuel

Ce manuel est écrit en SGML en utilisant DocBook DTD, avec DSSSL (Document Style and Semantics Specification Language) pour le formatage. Les utilitaires utilisés pour générer les formats HTML, TeX et RTF sont Jade, écrit par James Clark et The Modular DocBook Stylesheets écrit par Norman Walsh. La documentation PHP a été assemblée par Stig Sæther Bakken.

Vous pouvez télécharger le manuel en diverses langues et formats, y compris PDF, texte simple, HTML, WinHelp, et RTF à l'adresse : http://www.php.net/docs.php.

Le manuel est mis à jour tous les jours, y compris les traductions. Il est disponible à l'adresse http://snaps.php.net/manual/. Ce manuel a été traduit en Français par Damien Seguy, avec un coup de pouce de Ghislain Seguy. La version française est disponible chez Nexen nexen.net/. Il 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.

Vous pouvez trouver plus d'informations sur comment télécharger le code de cette documentation XML à http://cvs.php.net/. La documentation est stockées dans le module phpdoc.

I. Comment Commencer


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 DInterBasePostgreSQL
dBaseFrontBaseSesam
EmpressmSQLSolid
FilePro (lecutre seule)Direct MS-SQLSybase
HyperwaveMySQLVelocis
IBM DB2ODBCUnix dbm
InformixOracle (OCI7 et OCI8) 
IngresOvrimos 

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.

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 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, et leurs statistiques Netcraft Web Server 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 pour améliorer les performances et améliorera le support des serveurs web autres que Apache.


Chapitre 2. Installation

Télécharger la dernière version

Le code source ainsi que des binaires pour certaines plates-formes (notamment Windows), sont disponibles à l'adresse suivante: http://www.php.net/ .


Installation sous UNIX

Ce chapitre va vous aider lors de la configuration et de l'installation du PHP. Les connaissances requises sont les suivantes :

  • Connaissances basiques d'UNIX (savoir faire un "make" et utiliser un compilateur C)

  • Avoir un compilateur C ANSI installé

  • Avoir installé un serveur web

Il y a plusieurs façons de compiler et configurer PHP pour une plate-forme UNIX. Le processus de compilation est contrôler entièrement par les options de ligne de commande du script configure Cette documentation souligne les options les plus fréquentes, mais il en existe un grand nombre. Jetez un oeil à la liste complète des option pour une documentation exhaustive.


Installation rapide (Version Module Apache)

PHP peut être compilé de nombreuses manières différentes pour en faire un module Apache. Voyons d'abord les instructions rapides, puis une liste d'exemples divers, avec les explications. Comme cela nous aurons survolé l'ensemble de l'installation.

Vous pouvez selectionner les arguments à ajouter à la commande configure (ligne 8, ci dessous) parmi la liste complète des options de configuration..

Exemple 2-1. Instructions d'installation rapide (Version Module Apache)


1.  gunzip apache_1.3.x.tar.gz
2.  tar xvf apache_1.3.x.tar
3.  gunzip php-3.0.x.tar.gz
4.  tar xvf php-3.0.x.tar
5.  cd apache_1.3.x
6.  ./configure --prefix=/www
7.  cd ../php-3.0.x
8.  ./configure --with-mysql --with-apache=../apache_1.3.x --enable-track-vars
9.  make
10. make install
11. cd ../apache_1.3.x
12. ./configure --prefix=/www --activate-module=src/modules/php3/libphp3.a
13. make
14. make install
     

A la place de cette étape, vous pouvez simplement écraser le binaire httpd. Assurez-vous d'avoir bien arrêté le démon d'abord.


15. cd ../php-3.0.x
16. cp php3.ini-dist /usr/local/lib/php3.ini
      

Vous pouvez éditer le fichier de configuration /usr/local/lib/php3.ini. Si vous préférez installer le fichier dans un autre répertoire, il faut utiliser l'option de configuration --with-config-file-path=/path à l'étape 8.


17. Editez le fichier de configuration apache httpd.conf ou srm.conf et ajoutez :
      AddType application/x-httpd-php3 .php3
	  

Ici, il faut choisir l'extension que vous souhaitez donner au fichier php. .php est simplement celle que nous suggérons.


18. Utilisez la procédure normale afin de démarrer le serveur Apache. (Vous
    devez impérativement arrêter et redémarrer le serveur Apache, et pas
    seulement le relancer à l'aide d'un signal HUP ou USR1).
      


./configure --with-apxs --with-pgsql
       

Cette option va créer un fichier libphp4.so, qui est une librairie partagée, chargée par Apache grâce à la ligne LoadModule dans le fichier de configuration d'Apache httpd.conf. Le suport de la base de données PostgreSQL est compris dans la librairie libphp4.so.


./configure --with-apxs --with-pgsql=shared
       

Cette option va créer un fichier libphp4.so qui est une librairie partagée Apache, mais elle va aussi créer une librairie partagée pgsql.so qui sera chargée par PHP soit avec les directives de chargement du fichier de configuration php.ini ou avec la fonction de chargement dl().


./configure --with-apache=/path/to/apache_source --with-pgsql
       

Cette option va créer la librairie libmodphp4.a, le fichier mod_php4.c et quelques autres fichiers utilitaires, puis copier tout cela dans le dossier src/modules/php4 du dossier source Apache. Lorsque vous compilez Apache avec l'option --activate-module=src/modules/php4/libphp4.a, le compilateur d'Apache créera le fichier libphp4.a et le liera statiquement avec httpd. Le support PostgreSQL est inclus directement dnas l'exécutable httpd, ce qui fait que le résultat est un fichier exécutable unique httpd, qui combine Apache et tout PHP.


./configure --with-apache=/path/to/apache_source --with-pgsql=shared
       

Même chose que le précédent, mais au lieu d'inclure le support de PostgreSQL directement dans le httpd final, vous obtiendrez une librairie partagée pgsql.so que vous pourrez charger dans PHP, grâce au fichier de configuration php.ini ou la fonction dl().

Lors du choix de compilation de PHP, prenez bien en considération les avantages et les inconvénients de chaque méthode. Compiler PHP comme une librairie partagée vous permet de compiler séparément Apache et toutes les extensions PHP. Compiler PHP statiquement vous donne une plus grande vitesse d'exécution. Pour plus de détails reportez vous à la documentation Apache support DSO (en anglais).


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


Autres serveurs web

PHP peut être compiler 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.


/usr/local/src/fhttpd

Par défaut, PHP est compilé comme une CGI. Si vous voulez que votre serveur web supporte le PHP, compiler le PHP comme une 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.


Options de base de données

PHP dispose du support natif d'un grand nombre de base de données et d'ODBC. Pour activer les différentes bases de données, vous pouvez utiliser les options du script configure, au moment de la compilation. Lisez la liste des options de bases de données pour plus de détails.

La liste complète des options de configure, reportez vous à la liste complète des options de configuration.


Compilation

Lorsque PHP est configuré, vous êtes prêts à compiler un exécutable CGI, ou une librairie HP. La commande make devrait faire le travail. Si ce n'est pas le cas, et que vous comprenez pas pourquoi, allez à la section des problèmes.


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 risquer 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é si le "safe mode" fonctionne. Utilisez l'option max_execution_time pour contrôler le temps d'éxécutions de vos scripts. make bench ignore le fichier de configuration file.

Note : make bench n'est disponible qu'en PHP 3.


Liste complète des options de configuration

Note : Ces options ne sont utilisées que lors de la compilation. Si vous voulez modifier le comportement de PHP au moment de l'exécution, reportez vous à la partie configuration.

Ceci est la liste complète des options de configurations supportées par le script de configuration PHP 3 et PHP 4 configure, utilisé lors de la compilation en environnement UNIX. Certaines sont disponibles sous PHP 3, d'autres sous PHP 4, d'autres encore pour les deux versions. De nombreuses options ont changé de nom entre PHP 3 et PHP 4, mais font exactement la même chose. Les entrées disposent d'un lien entre elles (si vous avez un problème avec une option PHP 3, vérifier ainsi que les noms n'ont pas changé).


Configuration pour le support des bases de données

PHP supporte de nombreuses bases de données (et aussi ODBC):

Pour la liste détaillée des options de configure, reportez vous à la liste complète des options..

--with-adabas[=DIR]

PHP 3, PHP 4: Ajoute le support Adabas. DIR est le dossier de l'installation Adabas (par défaut : /usr/local).

Site d'Adabas

--enable-dba=shared

PHP 3: Option non disponible en PHP 3

PHP 4: Compile DBA comme librairie partagée

--enable-dbase

PHP 3: Option non disponible; utilisez --with-dbase.

PHP 4: Active la librairie dbase. Par de librairie externe nécessaire.

--with-dbase

PHP 3: Inclus la librairie dbase. Par de librairie externe nécessaire.

PHP 4: Option non disponible; utilisez --enable-dbase.

--with-db2[=DIR]

PHP 3, PHP 4: Ajoute le support de Berkeley DB2

--with-db3[=DIR]

PHP 3: Option non disponible en PHP 3

PHP 4: Inclus le support Berkeley DB3

--with-dbm[=DIR]

PHP 3, PHP 4: Inclus le support DBM

--with-dbmaker[=DIR]

PHP 3: Option non disponible en PHP 3

PHP 4: Inclus le support DBMaker. DIR est le dossier de l'installation de DBMaker (par défaut, c'est le chemin jusqu'à la dernière installation de DBMaker, ou /home/dbmaker/3.6).

--with-empress[=DIR]

PHP 3, PHP 4: Inclus le support Empress. DIR est le dossier d'installation d'Empress (par défaut, $EMPRESSPATH).

--enable-filepro

PHP 3: Option non disponible; utilisez --with-filepro.

PHP 4: Active le support de filePro (lecture seule). Par de librairie externe nécessaire.

--with-filepro

PHP 3: Active le support de filePro (lecture seule). Par de librairie externe nécessaire.

PHP 4: Option non disponible; utilisez --enable-filepro.

--with-gdbm[=DIR]

PHP 3, PHP 4: Inclus le support GDBM

--with-hyperwave

PHP 3, PHP 4: Inclus le support Hyperwave

--with-ibm-db2[=DIR]

PHP 3, PHP 4: Inclus le support IBM DB2. DIR est le chemin jusqu'au dossier d'installation de DB2 (par défaut /home/db2inst1/sqllib).

Site IBM DB2

--with-informix[=DIR]

PHP 3, PHP 4: Inclus le support Informix. DIR est le dossier d'installation de Informix (pas de valeur par défaut).

--with-ingres[=DIR]

PHP 3: Option non disponible en PHP 3

PHP 4: Inclus le supportIngres II support. DIR est le dossier d'installation de Ingres (par défault /II/ingres)

--with-interbase[=DIR]

PHP 3, PHP 4: Inclus le support InterBase. DIR est le dossier d'installation de InterBase (par défaut /usr/interbase).

Fonctions Interbase

Site Interbase

--with-ldap[=DIR]

PHP 3: Inclus le support LDAP. DIR est le dossier d'installation de LDAP (par défaut /usr et /usr/local).

PHP 4: Inclus le support LDAP. DIR est le dossier d'installation de LDAP.

Cette option fournit un accès aux serveurs LDAP (Lightweight Directory Access Protocol support). Le paramètre est le dossier d'installation de LDAP (par défaut, /usr/local/ldap).

Pour plus de détails sur LDAP allez à RFC1777 et RFC1778.

--with-msql[=DIR]

PHP 3, PHP 4: Active le support mSQL. Le paramètre est le dossier d'installation de mSQL (par défaut, /usr/local/Hughes, le dossier par défaut de l'installation mSQL 2.0). configure automatiquement détecte quelle version de mSQL vous utilisez et gère le point avec les deux versions 1.0 et 2.0, mais si vous compilez PHP avec mSQL 1.0, vous ne pourrez accéder qu'aux bases mSQL 1.0, et vice-versa.

Voir aussi les directives de Configuration mSQL du fichier de configuration.

site mSQL

--with-mysql[=DIR]

PHP 3: Inclus le support MySQL. DIR est le dossier d'installation de MySQL (par défaut, il recherche dans les lieux standards d'installation de MySQL).

PHP 4: Inclus le support MySQL. DIR est le dossier d'installation de MySQL. Si il n'est pas spécifié, la librairie MySQL sera utilisée (option par défaut).

Voir aussi les directives de configuration MySQL du fichier de configuration.

Site de MySQL

--with-ndbm[=DIR]

PHP 3, PHP 4: Inclus le support NDBM

--with-oci8[=DIR]

PHP 3: Option non disponible en PHP 3

PHP 4: Inclus le support Oracle-oci8. DIR est le dossier d'installation de Oracle (par défaut ORACLE_HOME).

--with-oracle[=DIR]

PHP 3: Inclus le support Oracle . DIR est le dossier d'installation de Oracle (par défaut $ORACLE_HOME).

PHP 4: Inclus le support Oracle-oci7. DIR est le dossier d'installation de Oracle (par défaut ORACLE_HOME).

Inclus le support Oracle. Cette option a été testée et devrait fonctionner au moins avec les versions d'Oracle de 7.0 à 7.3. Le paramètre DIR est ORACLE_HOME. Vous n'avez pas à spécifier ce paramètre, si votre environnement Oracle a été installé.

Site Oracle

--with-pgsql[=DIR]

PHP 3: Inclus le support PostgresSQL. DIR est le dossier d'installation de PostgresSQL (par défaut /usr/local/pgsql).

PHP 4: Inclus le support PostgreSQL. DIR est le dossier d'installation de PostgreSQL (par défaut /usr/local/pgsql). Utilisez "shared" pour compiler PostgreSQL en librairie dynamique, ou "shared,DIR" pour compiler PostgreSQL en librairie dynamique tout en spécifiant DIR.

Voir aussiles directives de configurations de Postgres dans le fichier de configuration file.

Site PostgreSQL

--with-solid[=DIR]

PHP 3, PHP 4: Inclus le support Solid. DIR est le dossier d'installation de Solid (par défaut /usr/local/solid).

Site Solid

--with-sybase-ct[=DIR]

PHP 3, PHP 4: Inclus le support Sybase-CT. DIR est le dossier d'installation de Sybase (par défaut /home/sybase).

Voir aussi les directives de configuration de Sybase-CT dans le fichier de configuration.

--with-sybase[=DIR]

PHP 3, PHP 4: Inclus le support Sybase-DB. DIR est le dossier d'installation de Sybase (par défaut /home/sybase).

Voir aussi les directives de configuration de Sybase dans le dossier de configuration.

site Sybase

--with-openlink[=DIR]

PHP 3, PHP 4: Inclus le support OpenLink ODBC . DIR est le dossier d'installation de OpenLink (par défaut /usr/local/openlink).

Site OpenLink Software

--with-iodbc[=DIR]

PHP 3, PHP 4: Inclus le support iODBC. DIR est le dossier d'installation de iODBC (par défaut /usr/local).

Cette option a été développée pour le gestionnaire de pilote iODBC, qui était librement redistribuable, et fonctionnait sous la plus part des UNIX.

Site FreeODBC or Site iODBC

--with-custom-odbc[=DIR]

PHP 3, PHP 4: Inclus le support pour une librairie arbitraire ODBC. Le paramètre est le dossier d'installation et par défaut, c'est /usr/local.

Cette option implique que vous avez définit la variable CUSTOM_ODBC_LIBS, lorsque vous exécutez le script de configuration. Vous devez aussi fournir un entête odbc.h valide, dans le chemin d'inclusion. Si vous n'en avez pas, créez le, et incluez y vos entêtes spécifiques. Ces entêtes peuvent aussi utiliser des définitions supplémentaires, surtout si ils sont multi-plateformes. Définissez les dans CFLAGS.

Par exemple, vous pouvez utiliser Sybase SQL Anywhere sous QNX comme suit : 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 ODBC unifié. Uniquement utile si iODBC, Adabas, Solid, Velocis ou une interface ODBC personnalisée est activée.

PHP 4: Option non disponible en PHP 4

Le module ODBC unifié, qui est une interface répandue vers toutes les bases de données ODBC, comme par exemple Solid, IBM DB2 et Adabas D. Elle fonctionne aussi pour les librairie ODBC normales. Elle a été testée avec iODBC, Solid, Adabas D, IBM DB2 et Sybase SQL Anywhere. Requiert qu'un (et seulement un) de ces module ait été activé, ou que le module Velocis soit activé, ou encore que la librairie ODBC personnalisée soit chargée. Cette option ne sert que si l'une de ces options est utilisée : --with-iodbc, --with-solid, --with-ibm-db2, --with-adabas, --with-velocis, ou --with-custom-odbc.

Voir aussi les directives de configuration de ODBC unifié dans le fichier de configuration.

--with-unixODBC[=DIR]

PHP 3: Option non disponible en PHP 3

PHP 4: Inclus le support unixODBC. DIR est le dossier d'installation de 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).

Site Velocis


Ecommerce

--with-ccvs[=DIR]

PHP 3: Option non disponible en PHP 3

PHP 4: Inclus le support CCVS de PHP 4. Passez le dossier d'installation de CCVS comme valeur de DIR.

--with-mck[=DIR]

PHP 3: Inclus le support Cybercash MCK. DIR est le dossier d'installation de cybercash mck (par défaut /usr/src/mck-3.2.0.3-linux). Pour plus d'informations, extra/cyberlib.

PHP 4: Option non disponible; utilisez --with-cybercash.

--with-cybercash[=DIR]

PHP 3: Option non disponible; utilisez plutôt --with-mck.

PHP 4: Inclus 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: Inclus de support Verisign Payflow Pro.


Graphisme

--enable-freetype-4bit-antialias-hack

PHP 3: Option non disponible en PHP 3

PHP 4: Inclus le support de FreeType2 (expérimental).

--with-gd[=DIR]

PHP 3: Inclus le support GD (DIR est le dossier d'installation de GD).

PHP 4: Inclus le support GD (DIR est le dossier d'installation de GD). Utilisez "shared" pour compiler GD en librairie dynamique, ou "shared,DIR" pour compiler GD en librairie dynamique tout en spécifiant DIR.

--without-gd

PHP 3, PHP 4: Inactive le support GD.

--with-imagick[=DIR]

PHP 3: Inclus le support ImageMagick. DIR est le dossier d'installation (par défaut, PHP essaiera de se débrouiller).[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

--with-png-dir[=DIR]

PHP 3: Option non disponible en PHP 3

PHP 4: Dossier png pour pdflib 3.x

--enable-t1lib

PHP 3: Active le support t1lib.

PHP 4: Option non disponible; utilisez plutôt --with-t1lib.

--with-t1lib[=DIR]

PHP 3: Option non disponible; utilisez plutôt --enable-t1lib.

PHP 4: Inclus le support t1lib.

--with-tiff-dir[=DIR]

PHP 3: Dossier tiff pour pdflib 2.0

PHP 4: Dossier tiff pour pdflib 3.x

--with-ttf[=DIR]

PHP 3, PHP 4: Inclus le support ttf

--with-xpm-dir[=DIR]

PHP 3: Option non disponible en PHP 3

PHP 4: Dossier xpm pour gd-1.8+


Divers

Cette section est en cours de tri.

--disable-bcmath

PHP 3: Inactive la librairie de nombre BC (taille arbitraire). Ces fonctions vous permettent de manipuler des nombres hors des limites habituelles des entiers et des nombres à virgules flottantes. Voir aussi Mathématiques sur de grands nombres.

PHP 4: Option non disponible; bcmath n'est pas compilé par défaut. Utilisez --enable-bcmath.

--disable-display-source

PHP 3: Compilation sans affichage du source.

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 (peut bloquer certaines compilations paralelle).

--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 objets partagés.

--disable-posix

PHP 3: Option non disponible en PHP 3; utilisez --without-posix.

PHP 4: Désactive les fonctions POSIX.

--disable-rpath

PHP 3: Option non disponible en PHP 3

PHP 4: Inactive le passage automatique de dossier de recherche supplémentaires.

--disable-session

PHP 3: Option non disponible en PHP 3

PHP 4: Inactive les sessions

--enable-bcmath

PHP 3: Option non disponible en PHP 3; bcmath est compilé par Utilisez --disable-bcmath pour le désactiver.

PHP 4: Compile PHP avec les fonctions mathématiques BC. Lisez le fichier README-BCMATH pour connaître les instructions d'installation de ce module. Ces fonctions vous permettent de travailler avec des nombres de tailles illimitées. Reportez vous aux fonctions Mathématiques sur de grands nombres pour plus d'informations.

--enable-c9x-inline

PHP 3: Option non disponible en PHP 3

PHP 4: Active la sémantique 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: Ajoute le débuggage des symboles.

--enable-debugger

PHP 3: Ajoute les fonctions de débuggage distants.

PHP 4: Option non disponible en PHP 4

--enable-discard-path

PHP 3, PHP 4: Si cette option est activée, l'exécutable PHP CGI peut être placé sÛrement hors de l'arborescence web, et personne ne pourra contourer la sécurité .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

--enable-experimental-zts

PHP 3: Option non disponible en PHP 3

PHP 4: Cette option risque de détruire votre compilation

--enable-fast-install[=PKGS]

PHP 3: Option non disponible en PHP 3

PHP 4: Optimise la vitesse d'exécution [ par défaut=yes]

--enable-force-cgi-redirect

PHP 3, PHP 4: Active la vérification des redirections internes au serveur. Il est recommandé d'utiliser cette option si vous utilisez la version CGI avec Apache.

--enable-inline-optimization

PHP 3: Option non disponible en PHP 3

PHP 4: Si vous avez beaucoup de mémoire libre, et que vous utilisez gcc, vous pouvez essayer cela.

--enable-libgcc

PHP 3: Option non disponible en PHP 3

PHP 4: Active explicitement le linkage avec libgcc

--enable-maintainer-mode

PHP 3, PHP 4: Active des règles de compilation rarement utile ( et même parfois confuse) à l'installeur occasionnel.

--enable-memory-limit

PHP 3, PHP 4: Compile avec limitation de consommation de mémoire. [default=no]

--enable-safe-mode

PHP 3, PHP 4: Active le safe mode par défaut.

--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 interne à PHP.

--enable-static[=PKGS]

PHP 3: Option non disponible en PHP 3

PHP 4: Compile les librairies statiquement [par défaut=yes]

--enable-sysvsem

PHP 3, PHP 4: Active le support des sémaphores System V.

--enable-sysvshm

PHP 3, PHP 4: Active le système System V de mémoire partagée

--enable-trans-sid

PHP 3: Option non disponible en PHP 3

PHP 4: Active la propagation transparente d'identification de session

--with-cdb[=DIR]

PHP 3, PHP 4: Inclus le support cdb

--with-config-file-path=PATH

PHP 3: Indique le chemin dans lequel il faut chercher le fichier php3.ini (par défaut, /usr/local/lib).

PHP 4: Indique le chemin dans lequel il faut chercher le fichier php.ini (par défaut, /usr/local/lib).

--with-cpdflib[=DIR]

PHP 3: Inclus le support cpdflib. DIR est le dossier d'installation de ClibPDF (par défaut, /usr/local).

PHP 4: Inclus le support cpdflib (requiert cpdflib >= 2). DIR est le dossier d'installation de ClibPDF (par défaut, /usr/local).

--with-esoob[=DIR]

PHP 3: Option non disponible en PHP 3

PHP 4: Inclus 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: Autorise uniquement les exécutables dans le dossier DIR lorsque le safe mode est activé (par défaut, /usr/local/php/bin).

--with-fdftk[=DIR]

PHP 3, PHP 4: Inclus 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: Suppor que le compilateur C utilise GNU ld [par défaut =no]

--with-icap[=DIR]

PHP 3: Option non disponible en PHP 3

PHP 4: Inclus le support ICAP.

--with-imap[=DIR]

PHP 3, PHP 4: Inclus le support IMAP. DIR est le dossier d'installation de IMAP (celui qui contient les include et c-client.a).

--with-imsp[=DIR]

PHP 3: Inclus le support IMSP (DIR est le dossier d'installation de IMSP (celui qui contient les include et c-client.a).

PHP 4: Option non disponible en PHP 4

--with-java[=DIR]

PHP 3: Option non disponible en PHP 3

PHP 4: Inclus le support Java. DIR est le dossier d'installation du JDK. Cette extension ne peut être compilé que comme une librairie partagée.

--with-kerberos[=DIR]

PHP 3: Option non disponible en PHP 3

PHP 4: Inclus le support Kerberos avec IMAP.

--with-mcal[=DIR]

PHP 3, PHP 4: Inclus le support MCAL.

--with-mcrypt[=DIR]

PHP 3, PHP 4: Inclus le support mcrypt. DIR est le dossier d'installation de mcrypt.

--with-mhash[=DIR]

PHP 3, PHP 4: Inclus le support mhash. DIR est le dossier d'installation de mhash.

--with-mm[=DIR]

PHP 3: Option non disponible en PHP 3

PHP 4: Inclus le support mm pour le stockage des sessions

--with-mod_charset

PHP 3, PHP 4: Active les tables de transfert pour mod_charset (Rus Apache).

--with-pdflib[=DIR]

PHP 3: Inclus le support pdflib (testée avec 0.6 et 2.0). DIR est le dossier d'installation de pdflib (par défaut, /usr/local).

PHP 4: Inclus le support pdflib 3.x. DIR est le dossier d'installation de pdflib (par défaut, /usr/local).

--with-readline[=DIR]

PHP 3: Option non disponible en PHP 3

PHP 4: Inclus le support readline. DIR est le dossier d'installation de readline.

--with-regex=TYPE

PHP 3: Option non disponible en PHP 3

PHP 4: Librairie de regex : system, apache, php

--with-servlet[=DIR]

PHP 3: Option non disponible en PHP 3

PHP 4: Inclus le support des servlets . DIR est le dossier d'installation du JSDK. Ces SAPI requiert la compliation de l'extension Java comme librairie partagée.

--with-swf[=DIR]

PHP 3: Option non disponible en PHP 3

PHP 4: Inclus le support swf.

--with-system-regex

PHP 3: N'utilise pas la librairie de regex fournie.

PHP 4: (obsolète) Utilise la librairie de regex.

--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 le système X Window

PHP 4: Option non disponible en PHP 4

--with-zlib-dir[=DIR]

PHP 3: Dossier zlib pour pdflib 2.0 ou Inclus le support zlib

PHP 4: Dossier zlib pour pdflib 3.x ou Inclus le support zlib

--with-zlib[=DIR]

PHP 3, PHP 4: Inclus le support zlib (requiert zlib >= 1.0.9). DIR est le dossier d'installation de zlib (par défaut, /usr).

--without-pcre-regex

PHP 3: Exclus les expressions régulières compatibles Perl.

PHP 4: Exclus les expressions régulières compatibles Perl. Use --with-pcre-regex=DIR pour spécifier le dossier DIR qui contient les dossier d'include et de libraries, si vous n'utilisez pas la librairie fournie.

--without-posix

PHP 3: Exclus les fonctions POSIX

PHP 4: Option non disponible en PHP 4; utilisez --disable-posix.


Réseau

--with-curl[=DIR]

PHP 3: Option non disponible en PHP 3

PHP 4: Inclus le support CURL

--enable-ftp

PHP 3: Option non disponible; utilisez plutôt --with-ftp.

PHP 4: Enable FTP support

--with-ftp

PHP 3: Inclus le support FTP.

PHP 4: Option non disponible; utilisez plutôt --enable-ftp instead

--disable-url-fopen-wrapper

PHP 3, PHP 4: Inactive la version améliorée de fopen, qui permet l'accès aux fichiers par HTTP ou FTP.

--with-mod-dav=DIR

PHP 3, PHP 4: Inclus le support DAV grâce à mod_dav, DIR est le dossier d'installation de mod_dav's (version Apache module seulement!)

--with-openssl[=DIR]

PHP 3, PHP 4: Inclus le support OpenSSL de SNMP.

--with-snmp[=DIR]

PHP 3, PHP 4: Inclus le support SNMP. DIR est le dossier d'installation de SNMP (par défaut, PHP va chercher dans les un certain nombre d'endroits classiques d'installation de SNMP). Utilisez "shared" pour compiler SNMP en librairie dynamique, ou "shared,DIR" pour compiler SNMP en librairie dynamique tout en spécifiant DIR.

--enable-ucd-snmp-hack

PHP 3, PHP 4: Active le hack UCD SNMP

--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: Inclus le support YAZ (ANSI/NISO Z39.50). DIR est le dossier d'installation de YAZ.

--enable-yp

PHP 3: Option non disponible; utilisez plutôt --with-yp.

PHP 4: Inclus le support YP

--with-yp

PHP 3: Inclus le support YP

PHP 4: Option non disponible; utilisez plutôt --enable-yp.


Configuration de PHP

--enable-magic-quotes

PHP 3, PHP 4: Active les magic quotes par défaut.

--disable-short-tags

PHP 3, PHP 4: Désactive les balises courtes (<?).

--enable-track-vars

PHP 3: Active la lecture des variables GET/POST/Cookie par défaut.

PHP 4: Option non disponible en PHP 4; sous PHP 4.0.2, track_vars est toujours à on.


Serveur

--with-aolserver-src=DIR

PHP 3: Option non disponible en PHP 3

PHP 4: Specifie le chemin jusqu'à la distribution du serveur AOLserver

--with-aolserver=DIR

PHP 3: Option non disponible en PHP 3

PHP 4: Specifie le chemin jusqu'au serveur AOLserver

--with-apache[=DIR]

PHP 3, PHP 4: Compile un module Apache. DIR est le dossier d'installation d'Apache (par défaut, /usr/local/etc/httpd).

--with-apxs[=FILE]

PHP 3, PHP 4: Compile un module partagé Apache. FILE est un chemin optionnel jusqu'aux outils Apache apxs (par défauts, apxs).

--enable-versioning

PHP 3: Profite du versioning et du scoping de Solaris 2.x et Linux

PHP 4: Export uniquement les symboles requis. Voir INSTALL pour plus d'informations.

--with-fhttpd[=DIR]

PHP 3, PHP 4: Compile un 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: Specifie le chemin jusqu'à 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 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 avec Zend Thread Safety.

--with-thttpd=SRCDIR

PHP 3: Option non disponible en PHP 3

PHP 4:

--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: Inclus le support ASPELL.

--with-gettext[=DIR]

PHP 3, PHP 4: Inclus le support GNU gettext. DIR est le dossier d'installation de gettext (par défaut, /usr/local).

--with-pspell[=DIR]

PHP 3: Option non disponible en PHP 3

PHP 4: Inclus le support PSPELL.

--with-recode[=DIR]

PHP 3: Include GNU recode support.

PHP 4: Inclus le support recode. DIR est le dossier d'installation de recode.


XML

--with-dom[=DIR]

PHP 3: Option non disponible en PHP 3

PHP 4: Inclus 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: Inclus le support Sablotron

--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 fonctionnalités XML ne sont pas compilées par défaut. Utilisez --with-xml.

PHP 4: Désactive le support XML qui utilise la librairie fournie expat.

--with-xml

PHP 3: Inclus le support XML

PHP 4: Option non disponible; XML est compilé par défaut. Utilisez --disable-xml pour le désactiver.


Installation sous Windows 95/98/NT

Ce guide d'installation vous aidera à installer et configurer PHP sur vos serveurs Windows 9x/NT. Ce guide a été compilé par Bob Silva. La dernière révision peut être trouvée http://www.umesd.k12.or.us/php/win32install.html.

Ce guide fourni 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


Installation

Les instructions doivent être faîtes pour toutes les installations avant d'attaquer les insctructions spécifiques à chaque serveur.

  • Extrayez la distribution dans un dossier de votre choix. "C:\PHP\" est une bonne idée.

  • Copiez le fichier, 'php.ini-dist' dans le dossier '%WINDOWS%' et renommer le en php.ini. '%WINDOWS%' est typiquement

    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 PHP a plus d'informations sur ces librairies. Vous pouvez aussi charger dynamiquement ces librairies avec dl("php_*.dll");

    • 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 mirroir, selectionnez le bouton "source" pour le voir en action.

Les DLLs des extensions PHP sont préfixé avec 'php_', pour éviter les confusions entre les extenions PHP et leur librairies.


Windows 95/98/NT et PWS/IIS 3

La méthode recommendé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 :

ATTENTION: Ces instructions requièrt 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 ne pourra pas être reconnue responsable d'un quelconque dommage dans votre registry.

  • Lancez Regedit.

  • Naviguez jusqu'à : HKEY_LOCAL_MACHINE /System /CurrentControlSet /Services /W3Svc /Parameters /ScriptMap.

  • Dans le menu edit, selectionnez : New->String Value.

  • 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épetez ces instructions pour toutes les extensions que vous voulez associer aux scripts PHP.

  • Naviguez jusqu'à : HKEY_CLASSES_ROOT

  • Dans le menu edit, selectionnez: New->Key.

  • Donnez le nom de votre extension à la clé : ex: .php

  • Selectionnez le nom de la nouvelle clée dans le panneau de droite, et double cliquez dans "default value", puis entrez phpfile.

  • Répetez ces instructions pour toutes les extensions que vous avez associé aux scripts PHP.

  • Créez une autre New->Key sous HKEY_CLASSES_ROOT et nommez la phpfile.

  • Selectionnez la nouvelle clé phpfile et dans le panneau de doite, double cliquez dans "default value" et entrez PHP Script.

  • Faîtes un clic droit dans phpfile et selectionnez New->Key, appelez-le Shell.

  • Faîtes un clic droit dans Shell et selectionnez New->Key, appelez-le open.

  • Faîtes un clic droit dans open et selectionnez New->Key, appelez-le command.

  • Selectionnez la nouvelle clée command et dans le panneau de droite, faîtes 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).

  • Exit Regedit.

Les utilisateurs de PWS et IIS 3 sont prêts à utiliser leur serveur. Avec IIS 3, vous pouvez utiliser un outil bien pratique de Steven Genusa pour configurer votre carte des scripts.


Windows NT et IIS 4

Pour installer PHP sur des serveurs NT avec IIS 4, suivez les insctructions suivantes :

  • Dans l'Internet Service Manager (MMC), selectionnez le site web, ou le dossier racine.

  • Ouvrez la feuille de propriétés du dossier (avec un clic droit dessus, puis en selectionnant properties), puis clicquez dans l'onglet Home Directory, Virtual Directory, ou Directory.

  • Cliquez dans le bouton Configuration, puis cliquez dans l'onglet App Mappings.

  • Clicquez dans la bouton Add, et dans la boîte Executable, tapez: c:\path-to-php-dir\php.exe %s %s. Vous DEVEZ ajouter les %s %s à la fin, car sinon, PHP ne fonctionnera pas sans.

  • Dans la boîte Extension, tapez le nom de l'extension de fichier que vous voulez associer à PHP. (Vous devez répéter les étapes 5 et 6 pour toutes les extensions que vous voulez associer à PHP. (.php et .phtml sont les plus répandus).

  • Selectionnez la sécurité appropriée (grâce à l'Internet Service Manager), et si votre serveur NT utilise NTFS, ajoutez les droits d'exécutions pour I_USR_ au dossier qui contient php.exe.


Windows 9x/NT et Apache 1.3.x

Vous devez éditer srm.conf ou httpd.conf pour configurer Apache, afin qu'il fonctionne avec PHP CGI.

Bien qu'il puisse y avoir quelques variations de configurations de PHP sous Apache, elle est suffisamment simple pour être faîte par un novice. Reportez vous à la doc Apache pour plus de détails.

  • ScriptAlias /php/ "c:/path-to-php-dir/"

  • AddType application/x-httpd-php .php

  • AddType application/x-httpd-php .phtml

  • Action application/x-httpd-php "/php/php.exe"

Pour utiliser la fonction de colorisation de la syntaxe, créez simplement un script PHP, et ajoutez le code suivant : <?php show_source("original_php_script.php"); ?>. Substitutez original_php_script.php avec le nom du fichier dont vous voulez voir le source (c'est le seul moyen de faire cela). Note: Sous Win-Apache tous les antislash (\) dans un chemin de fichier (tel que "c:\directory\file.ext"), doivent être convertis en slash (/).


Omni HTTPd 2.0b1 pour Windows

La méthode la plus simple pour configurer le serveur est :

  • Step 1: Installez Omni server

  • Step 2: Faîtes un clic-droit sur l'icone bleur d'OmniHTTPd, sur le bureau, et selectionnez 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

  • Step 5: Dans l'onglet Mime, entrez: virtual = wwwserver/stdcgi | actual = .php

  • Step 6: Cliquez sur OK

Réptez les étapes 2 à 6 pour chaque extension que vous voulez associer à PHP.


Installshield

L'installeur PHP pour Windows PHP, disponibles depuis les pages de téléchargement à http://www.php.net/ installe la version CGI de PHP et, pour IIS, PWS, et Xitami, configure le serveur web en même temps.

Installez votre serveur HTTP sur votre système, puis assurez vous qu'il fonctionne.

Lancez l'installeur (.exe), et suivez les insctructions fournies par le wizard. Deux types d'installations sont supportés : standard, qui effectue une configuration standard, et avancé, qui demande la configuration au fur et à mesure.

Le wizard d'installation rassemble suffisamment d'informations pour configurer le fichier php.ini et configurer le serveur web pour qu'il utiliser PHP. Pour IIS et PWS sous NT Workstation, il affiche une liste de tous les noeuds du serveur, avec leur configuration. Vous pouvez alors choisir quels noeuds bénéficieront de la configuration PHP.

Une fois l'installation complète, l'installeur indiquera qu'il faut redémarrer votre système, et le fera pour voir. Ou bien, vous pourrez immédiatement utiliser PHP.


Modules PHP

Tableau 2-1. Modules PHP

php_calendar.dllFonctions de conversions calendaires
php_crypt.dllFonctions de cryptage
php_dbase.dllFonctions DBase
php_dbm.dllLibrairie d'émulation GDBM via Berkely DB2
php_filepro.dllLecture des bases filepro
php_gd.dllBibliothèque GD (pour les manipulations d'images)
php_hyperwave.dllFonctions HyperWave
php_imap4r2.dllFonctions IMAP 4
php_ldap.dllFonctions LDAP
php_msql1.dllFonctions mSQL 1
php_msql2.dllFonctions mSQL 2
php_mssql.dllFonctions MSSQL (requiert MSSQL DB-Libraries)
php3_mysql.dll (compilé dans PHP 4)Fonctions MySQL
php_nsmail.dllFonctions Netscape mail
php_oci73.dllFonctions Oracle
php_snmp.dllFonctions SNMP get et walk (NT uniquement!)
php_zlib.dllFonctions ZLib


Problèmes?

Lisez la FAQ

Certains problèmes sont récurrents : Les plus commun sont listés dans la FAQ PHP, disponible à http://www.php.net/FAQ.php


Rapport 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 connait peut être pas, et sans le signaler, vos chances de voir le bug corrigés sont nulles. Vous pouvez rapporter des bugs grâce au système de suivi, accessible à http://www.php.net/bugs.php.


Autres problèmes

Si vous êtes complètements 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 à php-general-subscribe@lists.php.net. L'adresse de la mailing liste : php-general@lists.php.net.

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.


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.

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 bitniveau choisi
1erreurs normales
2alertes normales
4erreurs d'analyseur (parser errors)
8alertes 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.

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.

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

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


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.

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

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.

uodbc.max_links entier

Nombre maximum de connexions (persistantes ou non), par processus, à la base de données.


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 permettront 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 fragilise 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é comple simple SSI (server side include) avec peu de risque, dans un environnement à sécurité renforcée. Comment créer cet environnement et le sécurisé est largement à la charge du développeur PHP.

Ce chapitre commence par expliquer les différentes options de configuration et les situations où 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 plupart 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 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 pour 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 si 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 au document 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 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 si 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 manières pour utiliser 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 plupart des administrateurs préfèrent mettre en place un répertoire spécial pour les scripts qui est 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 quel.

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éfinit. (à 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, seulement les fichiers contenues 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
      

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 "noboby"). Par exemple, si vous utilisez PHP pour accéder à une base de données à moins que la base n'ai un système de droits d'accès interne, vous devrez rendre la base accessible à l'utilisateur "nobody". Cela signifie qu'un script malintentionné 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 ainsi 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 include ce code dans tous vos scripts PHP.

Souvent, lorsqu'on a établit les droits pour que 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, tell que l'utilisation des sudo ou du chroot. Une telle utilisation est à exclure pour les profesionnels de la sécurité.


Sécurité des fichiers

PHP est soumis aux règles de sécurité intrinsèques de la plus part des systèmes serveurs : il respecte notamment les droits des fichiers, et des dossiers. Une attention particulière doit être portée aux fichiers qui sont accessible à 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, ils 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 passer "../etc/" et "passwd" comme arguments!. Le code serait éxécuté tel que :

Exemple 4-2. Une attaque du système de fichier!


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

Voici le script renforcé :

Exemple 4-3. Une vérification renforcée


<?php
// Efface un fichier sur le disque où l'utilisateur à le droit
$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érfication 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 hacker de lire de nombreuses informations sur le serveur, et 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 scripts, car elles donnent de précieux renseignements tels que quelle fonction a échoué, quel fichier n'a pas été trouvé, 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 dangeureuses.

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 érronées, par exemple, un pirate peut determiner l'ordre d'authentification dans un script (à partir des lignes d'erreurs), et 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.


User Submitted Data

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'éxaminer 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 suffisament vérifiée 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érents?

  • 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 commencant vos projets avec ces recommandations en têtes, vous 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).


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 prendrai 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é (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é à 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 qu'un employé négligent, un hacker 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 voir d'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, bloquant votre site, 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 grandes tailles, est constamment testé et amélioré. Chaque nouvelle version rassemble des modifications majeures et mineures, aussi bien pour renforcer la sécurité, 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.


Chapitre 5. La syntaxe de base

Le passage du HTML au 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"); ?>
2.  <?php echo("Si vous voulez afficher du XML ou du XHTML, faîtes comme ceci.\n"); ?>
3.  <script language="php">
        echo ("Certains éditeur HTML (comme FrontPage)
         n'accepte 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.


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

Faîtes 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 */
 */
?>
    


Chapitre 6. Types

PHP supporte les types suivants :

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.


Entiers

Il est possible de spécifier les nombres entiers (integers) de la manière suivante :


<?php
$a = 1234; # nombre entier en base 10
$a = -123; # nombre entier négatif
$a = 0123; # nombre entier en base 8, octale (équivalent à 83 en base 10)
$a = 0x12; # nombre entier en base 16, hexadécimale (équivalent à 18 en base 10)
?>
     


Les nombres à virgule flottante

Les nombres à virgule flottante ("double") peuvent êtres spécifiés en utilisant la syntaxe suivante:


<?php
$a = 1.234;
$a = 1.2e3;
?>
     

Avertissement

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 faîtes donc jamais confiance aux nombres à virgule jusqu'à leur dernière décimale, et ne comparer 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 peuvent être définies en utilisant deux types de délimiteurs.

Si la chaîne de caractères est délimitée par des guillemets doubles ("), les variables à l'intérieur de la chaîne seront évaluées, et remplacées par leur valeur. Comme en C ou en Perl, le caractère antislash (\) est utilisé pour protéger (échapper) un caractère spécial.

Tableau 6-1. Les caractères spéciaux

séquencevaleur
\nNouvelle ligne (linefeed, LF ou 0x0A en ASCII)
\rRetour à la ligne(carriage return, CR ou 0x0D en ASCII)
\tTabulation horizontale (HT ou 0x09 en ASCII)
\\Antislash
\$Caractère $
\"Guillemet double
\[0-7]{1,3} Une séquence de caractère qui permet de rechercher un nombre en notation octale.
\x[0-9A-Fa-f]{1,2} Une séquence de caractère qui permet de rechercher un nombre en notation hexadécimale.

Vous pouvez utiliser le caractère d'échappement antislash sur n'importe quel autre caractère, mais cela produira une alerte (si le niveau d'alerte maximal a été fixé). En PHP 3.0, une alerte sera affichée, si le niveau de rapport d'erreur est à E_NOTICE. En PHP 4.0, aucune alerte ne sera générée.

Le deuxième moyen de délimiter une chaîne de caractère est d'utiliser les guillemets simples ("'"). Dans une telle chaîne de caractères, les variables ne seront pas évaluées, et le caractère antislash n'aura aucun effet (à deux exceptions près, pour "\\" et "\'", afin de pouvoir utiliser les caractères guillemets simples, et antislash dans la chaîne de caractères).

Un autre moyen de délimiter les chaînes est d'utiliser la syntaxe de "Here doc" (en français, doc 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 nouvelle ligne. L'identifiant utilisé doit suivre les mêmes règles que les étiquettes PHP : il ne doit contenir un uniquement des caractères alpha-numériques, et des soulignés ("_"), et enfin, commencer par un caractère alphabétique ou un souligné.

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 aporté que dans les chaînes à guillemets doubles.

Exemple 6-1. Exemple de chaîne Here Doc


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

Les chaînes peuvent être concaténées avec l'opérateur '.' (point). Notez que l'opérateur '+' (addition) ne fonctionera pas. Reportez vous à Opérateurs de chaînes pour plus d'informations.

Exemple 6-2. Quelques exemples de chaînes


<?php
/* Assignation d'une chaîne */
$str = "Ceci est une chaîne ";
/*  Concaténation d'une chaîne */
$str = $str . " avec une extension";
/* Une autre méthode de concaténation, y compris une nouvelle ligne */
$str .= " et terminée par une nouvelle ligne.\n";
/* Cette chaî se terminera par '<B>Nombre: 9</B>' */
$nombre = 9;
$str = "<B>Nombre: $nombre</B>";
/* Cette ci sera '<B>Nombre: $num</B>' */
$num = 9;
$str = '<B>Nombre: $num</B>';
/* Lire le premier caractère d'une chaîne  */
$str = 'Ceci est un test.';
$first = $str[0];
/* Lire le dernier caractère d'une chaîne */
$str = 'Ceci est un autre test.';
$last = $str[strlen($str)-1];
?>
     


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  double (11.5)
$foo = 1 + "-1.3e3";            // $foo est du type  double (-1299)
$foo = 1 + "bob-1.3e3";         // $foo est du type  integer (1)
$foo = 1 + "bob3";              // $foo est du type  integer (1)
$foo = 1 + "10 Small Pigs";     // $foo est du type  integer (11)
$foo = 1 + "10 Little Piggies"; // $foo est du type  integer (11)
$foo = "10.0 pigs " + 1;        // $foo est du type  integer (11)
$foo = "10.0 pigs " + 1.0;      // $foo est du type  double (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

Les tableaux ressemblent aux tables de hashage (tableaux associatifs) et aux tableaux indexés (vecteurs).


Tableaux à une dimension

PHP supporte les tableaux scalaires et les tableaux associatifs. En fait, il n'y a aucune différence entre les deux. Vous pouvez créer un tableau en utilisant les fonctions list() ou array(), ou bien en affectant explicitement chacune des valeurs.


<?php
$a[0] = "abc";
$a[1] = "def";
$b["foo"] = 13;
?>
      

Vous pouvez aussi créer un tableau en ajoutant simplement les valeurs à ce tableau.


<?php
$a[] = "Bonjour"; // $a[2] == "Bonjour";
$a[] = "Monde"; // $a[3] == "Monde";
?>
      

Un tableau peut être trié en utilisant les fonctions asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), ou uksort() en fonction du type de classement que vous voulez.

Vous pouvez compter le nombre d'éléments qu'il y a dans un tableau en utilisant la fonction count().

Vous pouvez vous déplacer à l'intérieur d'un tableau en utilisant les fonctions next() et prev(). Un autre moyen de se déplacer dans un tableau est d'utiliser la fonction each().


Tableaux à plusieurs dimensions

Les tableaux à plusieurs dimensions sont extrêmement simples. Pour chaque dimension du tableau, vous ajouter une nouvelle [clef] à la fin:


<?php
$a[1]      = $f;               # tableau à une dimension
$a["foo"]  = $f;
$a[1][0]     = $f;             # tableau à deux dimensions
$a["foo"][2] = $f;             # vous pouvez mélanger les indices associatifs et numériques
$a[3]["bar"] = $f;             # vous pouvez mélanger les indices associatifs et numériques
$a["foo"][4]["bar"][0] = $f;   # tableau à quatre dimensions
?>
      

En PHP 3 il n'est pas possible de référencer un tableau à l'intérieur d'une chaîne. Par exemple, ceci ne fonctionne pas :


<?php
$a[3]['bar'] = 'Bob';
echo "Cela ne marche pas : $a[3][bar]";
?>
      

En PHP 3, l'exemple ci dessu va afficher : Cela ne marche pas : Array[bar]. L'opérateur de concaténation, peut être utilisé pour corriger cela :


<?php
$a[3]['bar'] = 'Bob';
echo "Cela ne marche pas : " . $a[3][bar];
?>
      

En PHP 4, cependant, le problème peut être contourné en entourant le tableau par des accolades :


<?php
$a[3]['bar'] = 'Bob';
echo "Cela marche  : {$a[3][bar]}";
?>
      

Vous pouvez remplir un tableau à plusieurs dimensions par de nombreux moyens mais la méthode la plus simple à comprendre est l'utilisation de la fonction array(). Les deux exemples suivants montre comment remplir un tableau à une dimension:


<?php
# Exemple 1:
$a["couleur"]	= "rouge";
$a["saveur"]	= "sucrée";
$a["forme"]		= "rond";
$a["nom"]		= "pomme";
$a[3]			= 4;
# Exemple 2:
$a = array(
     "couleur" => "rouge",
     "saveur" => "sucrée",
     "forme" => "rond",
     "nom"  => "pomme",
     3       => 4
);
?>
      

La fonction array() peut être emboîtée pour remplir un tableau à plusieurs dimensions :


<?php
$a = array(
     "pomme"  => array(
          "couleur"  => "rouge",
          "saveur"  => "sucrée",
          "forme"  => "rond"
     ),
     "orange"  => array(
          "couleur"  => "orange",
          "saveur"  => "amère",
          "forme"  => "rond"
     ),
     "banane"  => array(
          "couleur"  => "jaune",
          "saveur"  => "paste-y",
          "forme"  => "bananoïde"
     )
);
echo $a["pomme"]["saveur"];    # va afficher "sucrée"
?>
      


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->do_foo();
?>
      


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 = "0";  // $foo est une chaîne de caractères (ASCII 48)
$foo++;      // $foo est la chaîne de caractères "1" (ASCII 49)
$foo += 1;   // $foo est maintenant du type entier (2)
$foo = $foo + 1.3;  // $foo est maintenant du type double (3.3)
$foo = 5 + "10 Petits cochons"; // $foo est du type entier (15)
$foo = 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 est un entier
$a[0] = "f";  // $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 est une chaîne
$a[0] = "f";  // 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.


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

  • (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 le résultat attendu. Par exemple :

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;
echo $obj->scalar;  // affiche 'ciao'
?>
      


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ées PHP. Un nom de variable valide doit commencer par une lettre ou un souligné (_), suivi de lettres, chiffres ou soulignés. Exprimé sous forme d'expressions 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 PHP3, 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 une variable n'aura pas d'effet sur l'autre. Pour plus de détails sur ce genre d'assignement, reportez vous à Expressions.

PHP 4.0 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'assignement est donc beaucoup plus rapide. Cela se fera notamment sentir dans des boucles, ou lors d'assignement de grands objets (tableaux).

Pour assigner par référence, ajoute 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';              // Assigne la valeur 'Pierre' à $foo
$bar = &$foo;              // Référence $foo avec $bar.
$bar = "Mon nom est Pierre";  // Modifie $bar...
echo $foo;                 // $foo est aussi modifiée
echo $bar;
?>
     

Une chose importante à noter est que seules, les variables nommées peuvent être assignées par référence.


<?php
$foo = 25;
$bar = &$foo;      // Assignement valide .
$bar = &(24 * 7);  // Assignement Invalide : référence une expression sans nom
function test() {
   return 25;
}
$bar = &test();    // Invalide.
?>
     


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 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. 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, et on peut s'attendre à les retrouver.

Notez que peu d'entre elles seront accessible 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ées dans les entê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'entête Accept: de la requête courant, si il y en a une.

HTTP_ACCEPT_CHARSET

Contenu de l'entête Accept-Charset: de la requête courante, si il existe. Par exemple : 'iso-8859-1,*,utf-8'.

HTTP_ENCODING

Contenu de l'entête Accept-Encoding: de la requête courante, si elle existe. Par exemple : 'gzip'.

HTTP_ACCEPT_LANGUAGE

Contenu de l'entête Accept-Language: de la requête courante, si elle existe. Par exemple : 'en'.

HTTP_CONNECTION

Contenu de l'entête Connection: de la requête courante, si elle existe. Par exemple : 'Keep-Alive'.

HTTP_HOST

Contenu de l'entê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'entê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é 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é à la directive SERVER_ADMIN (pour Apache), dans le fichier de configuration. Si le script est exécuté par un hôte virtuel, cela 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 à 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 suceptibles 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'environments inclues les variables CGI, placées ici, quelque fois la méthode d'éxécution de PHP (CGI ou module).


Variables PHP

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 malintentionnées de ces variables.

Note : Depuis PHP 4.0.3, track_vars est toujours activé, quelque soit la configuration.

Si la directive register_globals est activée, alors ces variables seront aussi disponibles comme variable global 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é par les données d'entrée de l'utilisateur, avec des intrusions possibles. Si vous ne pouvez pas desactiver register_globals, vous devez prendre toutes les dispositions possibles pour vous assurer que les données utilisées sont sÛres.

argv

Tableau des rguments passées au script. Lorsque le script est appelé en ligne de commande, cela dconne 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 (s'il 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 PHP 4.0.0 et plus récent.

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

La portée d'une variable dépends du contexte dans lequel la variable est définie. Pour la plupart 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 global */
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érieure 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 global les variables $a et $b localement dans la fonction, 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 pé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;
    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 faîtes 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 affecté et utilisé 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, hello, 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}";
?>
    

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 a 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 ambiguité 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é 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.


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 remarquerons 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. 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é 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Ûre de la valeur. La fonction getenv() peut être utilisé pour récupéré la valeur des variables d'environnement. Vous pouvez aussi affecter une variable d'environnement grâce à la fonction putenv().


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

Parce que 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 inclus des fonctions permettant de déterminer le type d'une variable. Les fonctions gettype(), is_long(), is_double(), is_string(), is_array(), et is_object().


Chapitre 8. Les constantes

PHP définit un certain nombre de constantes et propose des mécanismes pour en définir d'autres durant l'exécution. Les constantes se comportent des variables, à l'exception du fait que leur valeur est définie grâce à la fonction define(), et qu'elle ne peut pas être modifiée par la suite.

Les constantes prédéfinies (toujours disponibles) sont :

__FILE__

Le nom du fichier qui est actuellement exécuté. Si cette constante est utilisée dans le cadre d'un fichier "inclus" (aprè utilisation de require()), alors le nom du fichier inclus est renvoyé, et non le nom du fichier parent.

__LINE__

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è 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. Par exemple, 'Linux'.

TRUE

La valeur TRUE.

FALSE

La valeur FALSE.

E_ERROR

Dénote une erreur autre qu'une "parsing error" (erreur d'analyse) qu'il n'est pas possible de corriger.

E_WARNING

Dénote un contexte dans lequel le PHP trouve que quelque chose qui 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-1. Définition de constantes


<?php
define("CONSTANT", "Bonjour le monde.");
echo CONSTANT; // affiche "Bonjourle monde."
?>
     

Exemple 8-2. Utilisation des constantes __FILE__ et __LINE__


<?php
function report_error($file, $line, $message) {
    echo "Une erreur a eu lieu dans le fichier $file à la ligne $line: $message.";
}
report_error(__FILE__,__LINE__, "Y a un problème!");
?>
     


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


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

ExempleNomRésultat
$a + $bAddition Somme de $a et $b.
$a - $bSoustractionDifférence de $a et $b.
$a * $bMultiplicationProduit de $a et $b.
$a / $bDivisionQuotient de $a et $b.
$a % $bModuloReste 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 entiers. 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'assignement

L'opérateurs d'assignement 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'assignement est la valeur assignée. Par exemple, la valeur de l'expression '$a = 3' est la valeur 3. Cela permet de faire 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'assignement, 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 (correspond à $b = $b." tout le monde!";
?>
      

On peut noter que l'assignement copie le contenu de la variable originale dans la nouvelle (assignement 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'assignement par référence, en utilisant la syntaxe $var = &$othervar;, mais ce n'était pas possible en PHP 3. 'L'assignement 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 coté, la recopie est très rapide.


Bitwise Operators

Les opérateurs sur les bits vous permettent de manipuler les bits dans un entier.

Tableau 10-2. Les opérateurs sur les bits

exemplenomrésultat
$a & $bET (AND) Les bits positionnés à 1 dans $a ET dans $b sont positionnés à 1.
$a | $bOU (OR) Les bits positionnés à 1 dans $a OU $b sont sont positionnés à 1.
$a ^ $bXor Les bits positionnés à 1 dans $a OU dans $b sont positionnés à 1.
~ $aNON (Not) Les bits qui sont positionnés à 1 dans $a sont positionnés à 0, et vice versa.
$a << $bDécalage à gauche Décale les bits de $a dans $b par la gauche (chaque décalage équivaut à une multiplication par 2).
$a >> $bDé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

ExempleNomRésultat
$a == $bEgalVrai si $a est égal à $b.
$a === $bIdentique Vrai si $a est égal à $b et qu'ils sont de même type (PHP 4 seulement).
$a != $bDifférentVrai si $a est différent de $b.
$a < $bPlus petit queVrai si $a est plus petit strictement que $b.
$a > $bPlus grandVrai si $a est plus grand strictement que $b.
$a <= $bInférieur ou égalVrai si $a est plus petit ou égal à $b.
$a >= $bSupérieur ou égalVrai 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ératuer 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.

Si l'option track_errors est activée, les messages d'erreurs générés une expression seront sauvé 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 SQL intentionnelle (trop de guillemets): */
$res = @mysql_query( "select nom, code from 'listedenom" ) ou
   die( "La requête a échoué : l'erreur est '$php_errormsg'" );
?>
     

Voir aussi error_reporting().


Opérateur d'exécutions

PHP supporte un opérateur d'exécution : guillemets obliques ("``"). Notez bien la différence avec 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'incrementation/Décrementation

PHP supporte les opérateurs de pré et post incrémentation et décrémentation, comme en C.

Tableau 10-4. Opérateurs d'incrementation/Décrementation

ExempleNomRésultat
++$aPré-incrémenteIncrémente $a de 1, puis retourne $a.
$a++Post-incrémenteRetourne $a, puis l'incrémente $a de 1.
--$aPré-décrémenteDécrémente $a de 1, puis retourne $a.
$a--Post-décrémenteRetourne $a, puis décrémente $a de 1.

Voici un exempla simple


<?php
echo "<h3>Post-incrémentation</h3>";
$a = 5;
echo "Devrait valoir  5: " . $a++ . "<br>\n";
echo "Devrait valoir  6: " . $a . "<br>\n";
echo "<h3>Pré-incrémentation</h3>";
$a = 5;
echo "Devrait valoir  6: " . ++$a . "<br>\n";
echo "Devrait valoir  6: " . $a . "<br>\n";
echo "<h3>Post-décrémentation</h3>";
$a = 5;
echo "Devrait valoir  5: " . $a-- . "<br>\n";
echo "Devrait valoir  4: " . $a . "<br>\n";
echo "<h3>Pré-décrementation</h3>";
$a = 5;
echo "Devrait valoir  4: " . --$a . "<br>\n";
echo "Devrait valoir  4: " . $a . "<br>\n";
?>
	 


Les opérateurs logiques

Tableau 10-5. Les opérateurs logiques

ExempleNomRésultat
$a and $bET (And) Vrai si $a ET $b sont vrais.
$a or $bOU (Or)Vrai si $a OU $b est vrai
$a xor $bXOR (Xor)Vrai si $a OU $b est vrai, mais pas les deux en même temps.
! $aNON (Not)Vrai si $a est faux.
$a && $bET (And)Vrai si $a ET $b sont vrais.
$a || $bOU (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,
gaucheor
gauchexor
gaucheand
droiteprint
gauche= += -= *= /= .= %= &= |= ^= ~= <<=>>=
gauche? :
gauche||
gauche&&
gauche|
gauche^
gauche&
non-associative== != ===
non-associative< <= > >=
gauche<< >>
gauche+ - .
gauche* / %
droite! ~ ++ -- (int) (double) (string) (array) (object) @
droite[
non-associativenew


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'assignement concaténant ('.='). Reportez vous à Opérateurs d'assignements pour plus de détails.


<?php
$a = "Bonjour ";
$b = $a . "Monde!"; // $b contient "Bonjour Monde!"
$a = "Bonjour ";
$a = $a . "Monde!"; // $a contient "Bonjour Monde!"
?>
     


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 conditonnelle 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 avec 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";
}
?>
     

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 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 est plus grand que b";
} elseif ($a == $b) {
    print "a est égal à b";
} else {
    print "a 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

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, 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";
    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).

Il n'y a qu'un 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++) {
    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) inclus 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é à $value et le pointeur interne de tableau est avancé d'un élément (ce qui fait qu'à la prochaîne 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émare, 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.

Vous pouvez remarquer que les exemples suivants fonctionnent de manière identique :


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 :


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: valeur seule */
$a = array (1, 2, 3, 17);
foreach ($a as $v) {
   print "Valeur courante de \$a: $v.\n";
}
/* exemple 1: valeur (avec clé associée) */
$a = array (1, 2, 3, 17);
$i = 0; /* pour affichage seulement*/
foreach($a as $v) {
    print "\$a[$i] => $k.\n";
}
/* exemple 1: valeur et clé */
$a = array (
    "un" => 1,
    "deux" => 2,
    "trois" => 3,
    "dix-sept" => 17
);
foreach($a as $k => $v) {
    print "\$a[$k] => $v.\n";
}
?>
     


break

L'instruction break permet de sortir d'une structure if, for, while, ou switch.

break accepte un argument numérique optionnel qui vous indiquera combien de structures emboîté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 emboîtées ont été ignorées.


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

L4es 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:


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 :


switch ($i) {
    case 0:
        print "i égale 0";
    case 1:
        print "i égale 1";
    case 2:
        print "i égale 2";
}
     

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 à, 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 si il est possible que vous l'omettiez dans certaines circonstances).

Dans une commande switch, une condition n'est évaluée qu'une fois, est 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 commande d'un case peut être vide, auquel cas PHP utilisera la liste de commandes du cas suivant.


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. Par exemple :


switch ($i) {
    case 0:
        print "i égale 0";
        break;
    case 1:
        print "i égale 1";
        break;
    case 2:
        print "i égale  2";
        break;
    default:
        print "i 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ère. Les tableaux sont sans interêt dans ce contexte-là.

La syntaxe alternative pour cette structure de contrôle est la suivante : pour plus d'informations, voir syntaxes alternatives).


switch ($i):
    case 0:
        print "i égale 0";
        break;
    case 1:
        print "i égale 1";
        break;
    case 2:
        print "i égale 2";
        break;
    default:
        print "i n'est ni égal à 2, ni à 1, ni à 0";
endswitch;
     


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 un instruction du langage. Elle ne fonctionne pas comme les fonctions standards. Par exemple, require() ne peut pas contenir d'autres structures de contrôle. De plus, il 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().


require ('header.inc');
     

Attention : include() et require() ajoute le contenu du fichier cible dans le script lui-même. Elle n'utilise 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.


require ("file.inc?varone=1&vartwo=2"); /* Ne fonctionne pas. */
$varone = 1;
$vartwo = 2;
require ("file.inc");  /* $varone et $vartwo seront accessible à 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 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. Si vous en avez besoin, utilisez plutôt include().


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 a lieu à chaque fois que la fonction include() est rencontrée. Donc vous 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 si il est placé dans une structure conditionnelle, comme dans un if).

Parce que la fonction include() nécessite une construction particulière, vous devez l'inclure dans un bloc si elle est inclue dans une structure conditionnelle.


<?php
/*  Ceci est faux, et ne fonctionnera pas ce qu'on attends. */
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";
?>
     

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. Lors que 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 habituelle de PHP.


include ("file.inc?varone=1&vartwo=2"); /* ne fonctionne pas. */
$varone = 1;
$vartwo = 2;
include ("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éfintions 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

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 le fichier en avoid_error_require_once.php, on obtiend :

Exemple 11-5. foolib.inc (corrigé)


<?php
require_once("utils.inc");
function showVar($var) {
?>
	 

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éprocesseur 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() inclus 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 sur 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().


Chapitre 12. Fonctions

Les fonctions utilisateurs

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 par référence. Les listes variable d'arguments sont supportées par PHP 4 et plus récent. 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 puisse 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';
foo ($str);
echo $str;    // affiche 'Ceci est une chaîne'
foo (&$str);
echo $str;    // 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 ou ni un membre de classe.

Il est à noter que vous utilisez les arguments par défaut, la valeur par défaut doit se trouver du côté droit du signe '='; 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 cette exemple est le suivant :

Préparer un bol de acidophilus framboise.
     


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éfintion de la fonction, et se comportera comme normalement.


Les valeurs de retour

Les valeurs sont renvoyées en utilisant une instruction de retour optionnelle. Tous types de variables peuvent être renvoyées, tableaux et objets compris.


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.


function petit_nombre() {
    return array (0, 1, 2);
}
list ($zero, $one, $two) = petit_nombre();
     

Pour retourner une référence d'une fonction,& aussi bien dans la déclaration de la fonction que dans l'assignation de la valeur de retour.


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

Avertissement

Les fonctions déclarées comme old_function ne peuvent pas être appelée à 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 appelera la fonction old_function.


Variable functions

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, lors pour faire des fonctions call-back, des tables de fonctions...

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' );
?>
     


Chapitre 13. Classes et 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 Cart {
    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 Cart 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.

Note : En PHP 4, seuls les initialiseurs constants pour les variables var sont autorisés. Utilisez les constructeurs pour les initialisation variables.

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 Cart;
 $cart->add_item("10", 1);
?>
    

L'instruction ci-dessus crée l'objet $cart de la class Cart. La fonction add_idem() est appelée afin d'ajouter l'article numéro 10 dans la panier.

Une classe peut être une extension d'une autre classe. Les classes "extended" ou "derived" héritent de toutes les variables et de toutes les fonctions de la classe père plus toutes les définitions que vous rajoutez à cette classe. Cela se fait avec le mot clef "extends". L'héritage multiple n'est pas supporté.


<?php
class Named_Cart extends Cart {
    var $owner;
    function set_owner ($name) {
        $this->owner = $name;
    }
}
?>
    

L'exemple ci-desssus définit la classe Named_Cart qui possède les même variables que la classe Cart 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, 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 Named_Cart;    // 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)
?>
    

Dans les fonctions d'une classe, la variable $this est égale à l'objet de la classe. Vous pouvez utilisez la forme "$this->quelquechose" pour accéder aux fonctions ou aux variables de l'objet courant.

Le constructeur est la fonction qui est appelée automatiquement par la classe lorsque vous créez une nouvelle instance d'une classe. La fonction constructeur a le même nom que la classe.


<?php
class Auto_Cart extends Cart {
    function Auto_Cart () {
        $this->add_item ("10", 1);
    }
}
?>
    

L'exemple ci-dessus définit la classe Auto_Cart qui hérite de la classe Cart 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.


<?php
class Constructor_Cart extends Cart {
    function Constructor_Cart ($item = "10", $num = 1) {
        $this->add_item ($item, $num);
    }
}
// Place dans le caddie toujours la même chose...
$default_cart   = new Constructor_Cart;
// Place dans le caddie des objets différents, comme dans la
// réalité
$different_cart = new Constructor_Cart ("20", 17);
?>
    

Attention

Pour les classes qui utilisent l'héritage, le constructeur de la classe père n'est pas automatiquement appelé lorsque le constructeur de la classe dérivée est appelé.


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 faîtes :


<?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 interet 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 interêts 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 de à quoi on peut s'attendre :


<?php
function foo (&$var) {
    $var =& $GLOBALS["baz"];
}
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 le 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. (il est représenté par $var, mais $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 :

    
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 :


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.


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


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é dans find_var et lui sera affecté, 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 assigner aussi par référence (pas la copie habituelle).


Détruire une références

Lorsque vous détruiser une référence, vous ne faîtes 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 implementé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 global

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.


$this

Dans une méthode d'objet, $this est toujours une référence sur l'objet courant.


Chapitre 15. Gestion des erreurs

Il y a plusieurs types d'erreur et d'alerte.

Tableau 15-1. Types d'erreur PHP

ValeurConstanteDescriptionNote
1E_ERRORErreur fatale d'exécution 
2E_WARNINGAlerte d'exécution ( erreur non-fatale ) 
4E_PARSEErreur de compilation 
8E_NOTICE Notes d'exécution (moins critique que les alertes)  
16E_CORE_ERRORErreurs qui surviennent lors de l'initialisation de PHPPHP 4 seulement
32E_CORE_WARNING Alertes qui surviennent lors de l'initialisation de PHP PHP 4 seulement
64E_COMPILE_ERRORErreur fatale de compilationPHP 4 seulement
128E_COMPILE_WARNINGAlerte de compilation (erreur non fatale)PHP 4 seulement
256E_USER_ERRORErreur générée par l'utilisateurPHP 4 seulement
512E_USER_WARNINGAlerte générée par l'utilisateurPHP 4 seulement
1024E_USER_NOTICE Note générée par l'utilisateurPHP 4 seulement
 E_ALLToutes 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.

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("phpdev@mydomain.com","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];
        $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()


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.


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";
}
?>
   

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.


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


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 texte binaire. 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">
Send this file: <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 track_vars est activé, mais track_vars est toujours activé dans les versions de PHP supérieure à 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'ai é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 modificaion 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.

Exemple 19-2. Validation de fichiers téléchargés

Les exemples suivants fonctionnent sur les versions de PHP 3 supérieure à la version 3.0.16, et supérieure à 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 quelques chose comme :

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 on évoluée après cette version.


<?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'.";
}
?>
     

Le script PHP qui recoit 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 petit. Vous pouvez utiliser la variable $file_type pour recaler les fichiers qui n'ont pas le bon type. Quelque soit 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, si 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 Megaoctets.

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'entête MIME. Tant que c'est le cas, CERN httpd ne pourra pas effectuer de chargement.


Chargement multiples de fichiers

Il est possible de charger plusieurs fichiers en même temps, et 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îte à 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 est 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. Sans 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);
?>
     

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


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:password@ftp.example.com/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().


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.


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

I. Apache

Table des matières
apache_lookup_uri — Effectue une requête partielle pour l'URI spécifiée et renvoie toutes les informations.
apache_note — Affiche ou affecte le paramètre "apache request notes".
getallheaders — Récupère tous les entêtes des requêtes HTTP.
virtual — Effectue une sous-requête Apache
ascii2ebcdic — Transforme une chaîne ASCII en EBCDIC
ebcdic2ascii — Transforme une chaîne EBCDIC en ASCII

apache_lookup_uri

(PHP 3>= 3.0.4, PHP 4 )

apache_lookup_uri --  Effectue une requête partielle pour l'URI spécifiée et renvoie toutes les informations.

Description

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 : Note: apache_lookup_uri ne fonctionne que lorsque le PHP est installé sous la forme d'un module Apache.

apache_note

(PHP 3>= 3.0.2, PHP 4 )

apache_note --  Affiche ou affecte le paramètre "apache request notes".

Description

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 la fonction est appelée avec deux arguments, la variable note_name la valeur note_value et la fonction retournera la valeur précédente de la variable note_name.

getallheaders

(PHP 3, PHP 4 )

getallheaders --  Récupère tous les entêtes des requêtes HTTP.

Description

array getallheaders (void)

getallheaders() renvoie un tableau associatif de tous les entêtes HTTP correspondants à la requête courante.

Note : 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 en CGI. Utilisez la fonction phpinfo() pour avoir une liste de toutes les variables d'environnement disponibles.

Exemple 1. Exemple d'utilisation de la fonction getallheaders()


<?php
$headers = getallheaders();
while (list($entete, $valeur) = each($headers)) {
    echo "$entete: $valeur<br>\n";
}
?>
      
Cette exemple est un exemple d'affichage de toutes les entêtes de la requête courante.

Note : Note: La fonction getallheaders() ne fonctionne que si PHP est installé comme module Apache.

virtual

(PHP 3, PHP 4 )

virtual -- Effectue une sous-requête Apache

Description

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 entête valide, c'est-à-dire, au minimum une entê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.

ascii2ebcdic

(PHP 3>= 3.0.17)

ascii2ebcdic -- Transforme une chaîne ASCII en EBCDIC

Description

int ascii2ebcdic (string ascii_str)

ascii2ebcdic() est une fonction spéficique à Apache, qui n'est disponible que sur les OS qui gère 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 la fonction complémentaire : ebcdic2ascii()

ebcdic2ascii

(PHP 3>= 3.0.17)

ebcdic2ascii -- Transforme une chaîne EBCDIC en ASCII

Description

int ebcdic2ascii (string ebcdic_str)

ebcdic2ascii() est une fonction spéficique à Apache, qui n'est disponible que sur les OS qui gère 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 la fonction complémentaire : ascii2ebcdic()

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éé 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().

Table des matières
array — Crée un tableau
array_count_values — Compte le nombre de valeurs dans un tableau
array_diff — Calcule la différence entre deux tableaux
array_flip — Remplace les clés par les valeurs, et les valeurs par les clés
array_intersect — Calcule l'intersection de tableaux
array_keys — Retourne toutes les clés d'un tableau
array_merge — Rassemble plusieurs tableaux
array_merge_recursive — Combine plusieurs tableaux ensemble, récursivement
array_multisort — Tri multi-dimensionnel
array_pad — Complète un tableau jusqu'à la longueur spécifiée, avec une valeur.
array_pop — Dépile un élément de la fin d'un tableau
array_push — Empile un ou plusieurs éléments à la fin d'un tableau
array_reverse — Retourne un tableau dont les éléments sont classés en sens inverse.
array_rand — Prend une ou plusieurs valeurs, au hasard dans un tableau
array_shift — Dépile un élément au début d'un tableau
array_slice — Extrait une portion de tableau
array_splice — Efface et remplace une portion de tableau
array_unique — Dédoublonne un tableau
array_unshift — Empile un ou plusieurs éléments au début d'un tableau
array_values — Retourne les valeurs d'un tableau
array_walk — Exécute une fonction sur chacun des membres d'un tableau.
arsort — Trie un tableau en ordre inverse
asort — Trie un tableau en ordre
compact — Crée un tableau contenant les variables et leur valeur
count — Compte le nombre d'élément d'un tableau
current — Transforme une variable en tableau
each — Retourne chaque paire clé/valeur d'un tableau
end — Positionne le pointeur de tableau en fin de tableau
extract — Importe les variables dans la table des symboles
in_array — Indique si une valeur appartient à un tableau
key — Retourne une clé d'un tableau associatif
krsort — Trie un tableau en sens inverse et suivant les clés
ksort — Trie un tableau suivant les clés
list — Transforme une liste de variables en tableau
natsort — Tri d'un tableau avec l'algorithme à "ordre naturel"
natcasesort — Tri d'un tableau avec l'algorithme à "ordre naturel" insensible à la casse
next — Avance le pointeur interne d'un tableau
pos — Retourne l'élément courant d'un tableau
prev — Recule le pointeur courant de tableau
range — Crée un tableau contenant un intervalle d'entiers
reset — Remet le pointeur interne de tableau au début
rsort — Trie en ordre inverse
shuffle — Mélange les éléments d'un tableau
sizeof — Retourne le nombre d'élément d'un tableau
sort — Trie le tableau
uasort — Trie un tableau en utilisant une fonction de comparaison définie par l'utilisateur.
uksort — Trie les clés d'un tableau en utilisant une fonction de comparaison définie par l'utilisateur
usort — Trie les valeurs d'un tableau en utilisant une fonction de comparaison définie par l'utilisateur

array

(unknown)

array --  Crée un tableau

Description

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és 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,  1, 8=>1,  4=>1, 19, 3=>13);
print_r($array);
?>
      
qui affichera :


Array
(
    [0] => 1
    [1] => 1
    [2] => 1
    [3] => 13
    [4] => 1
    [8] => 1
    [9] => 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 commence à 1.

Exemple 3. Tableau d'index commencant à 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)

array_count_values -- Compte le nombre de valeurs dans un tableau

Description

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 dans PHP 4.0.

array_diff

(PHP 4 >= 4.0.1)

array_diff -- Calcule la différence entre deux tableaux

Description

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.

Exemple 1. Exemple avec array_diff()


<?php
$array1 = array ("a" => "vert", "rouge", "bleu");
$array2 = array ("b" => "vert", "jaune", "rouge");
$result = array_diff ($array1, $array2);
?>
      

$result contient array("bleu");

Voir aussi array_intersect().

array_flip

(PHP 4 >= 4.0b4)

array_flip --  Remplace les clés par les valeurs, et les valeurs par les clés

Description

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.

Exemple 1. Exemple avec array_flip()


<?php
$trans = array_flip ($trans);
$original = strtr ($str, $trans);
?>
      

Note : array_flip() a été ajoutée dans PHP 4.0.

array_intersect

(PHP 4 >= 4.0.1)

array_intersect -- Calcule l'intersection de tableaux

Description

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 )

array_keys -- Retourne toutes les clés d'un tableau

Description

array array_keys (array input [, mixed search_value])

array_keys() retourne les clés numériques et lité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.

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 dans 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_merge

(PHP 4 )

array_merge -- Rassemble plusieurs tableaux

Description

array array_merge (array array1, array array2 [, ...])

array_merge() rassemble les éléments de plusieurs tableaux ensemble, en ajoutant les valeurs de l'un à la fin de l'autre. Le résultat est un tableau.

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)

array_merge_recursive -- Combine plusieurs tableaux ensemble, récursivement

Description

array array_merge_recursive (array array1, array array2 [, array ...])

array_merge_recursive() rassemble tous les éléments de plusieurs tableaux ensemble, en ajoutant les éléments de l'un à la suite des éléménts 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é à 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)

array_multisort -- Tri multi-dimensionnel

Description

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

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

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, 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 correspondent 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)

array_pad --  Complète un tableau jusqu'à la longueur spécifiée, avec une valeur.

Description

array array_pad (array input, int pad_size, mixed pad_value)

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, si 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, 5, 0);
// Le résultat est array (12, 10, 9, 0, 0)
$result = array_pad ($input, -7, -1);
// Le résultat est array (-1, -1, -1, -1, 12, 10, 9)
$result = array_pad ($input, 2, "noop");
// pas complété
?>
      

array_pop

(PHP 4 )

array_pop --  Dépile un élément de la fin d'un tableau

Description

mixed array_pop (array array)

array_pop() dépile et retourne le dernier élément du tableau array, le raccourcissant d'un élément.

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 dans PHP 4.0.

array_push

(PHP 4 )

array_push --  Empile un ou plusieurs éléments à la fin d'un tableau

Description

int array_push (array array, mixed var [, ...])

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;
?>
     
repeté pour chaque var.

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 dans PHP 4.0.

array_reverse

(PHP 4 >= 4.0b4)

array_reverse --  Retourne un tableau dont les éléments sont classés en sens inverse.

Description

array array_reverse (array array [, bool 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, TRUE);
?>
      
Au final, $result contient (array ("rouge", "vert"), 4.0, "php"). Mais $result2[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é éjouté en PHP 4.0.3.

array_rand

(PHP 4 >= 4.0.0)

array_rand --  Prend une ou plusieurs valeurs, au hasard dans un tableau

Description

mixed array_rand (array input [, int num_req])

array_rand() est pratique lorsque vous voulez selectionner 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 selection au hasard de clés, ou bien de valeur.

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 )

array_shift --  Dépile un élément au début d'un tableau

Description

mixed array_shift (array array)

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.

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 dans PHP 4.0.

array_slice

(PHP 4 )

array_slice -- Extrait une portion de tableau

Description

array array_slice (array array, int offset [, int length])

array_slice() retourne une série d' élément du tableau array commencant à 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 commencant à la fin du tableau array.

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 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"
$output = array_slice ($input, 2, -1);  // 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 dans PHP 4.0.

array_splice

(PHP 4 )

array_splice --  Efface et remplace une portion de tableau

Description

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 commencant à 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 précisé 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_splice($input, count($input), 0, array($x, $y))
array_pop($input)              array_splice($input, -1)
array_shift($input)            array_splice($input, 0, 1)
array_unshift($input, $x, $y)  array_splice($input, 0, 0, array($x, $y))
$a[$x] = $y                    array_splice($input, $x, 1, $y)
?>
     

array_splice() retourne le tableau des éléments supprimés.

Exemple 1. Exemples avec array_splice()


<?php
$input = array("rouge", "vert", "bleu", "jaune");
array_splice($input, 2);      // $input est array("rouge", "vert")
array_splice($input, 1, -1);  // $input est array("rouge", "yellow")
array_splice($input, 1, count($input), "orange");
                              // $input est array("rouge", "orange")
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 dans PHP 4.0.

array_unique

(PHP 4 >= 4.0.1)

array_unique -- Dédoublonne un tableau

Description

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.

Exemple 1. Exemple avec array_unique()


<?php
$input = array ("a" => "vert", "rouge", "b" => "vert", "bleu", "rouge");
$result = array_unique ($input);
?>
      

$result contient array ("a" => "vert", "rouge", "bleu");.

array_unshift

(PHP 4 )

array_unshift --  Empile un ou plusieurs éléments au début d'un tableau

Description

int array_unshift (array array, mixed var [, ...])

array_unshift() ajoute les éléments passé 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.

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 dans PHP 4.0.

array_values

(PHP 4 )

array_values -- Retourne les valeurs d'un tableau

Description

array array_values (array input)

array_values()retourne les valeurs du tableau input.

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 dans 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 )

array_walk --  Exécute une fonction sur chacun des membres d'un tableau.

Description

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;

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 valeur 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 : Passez les clés et userdata à func a été ajouté dans PHP 4.0.

Dans PHP 4, reset() doit être appelés 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 ) {
   $item1 = 'bidon';
}
function test_print( $item2 ) {
   echo "$item2<br>\n";
}
array_walk( $fruits, 'test_print' );
array_walk( $fruits, 'test_alter' );
array_walk( $fruits, 'test_print' );
?>
      

Voir aussi each() et list().

arsort

(PHP 3, PHP 4 )

arsort --  Trie un tableau en ordre inverse

Description

void arsort (array array)

arsort() trie un tableau de telle manière que la corrélation entre les index et les valeurs soient conservées. 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[a] = orange fruits[d] = papaye fruits[b] = banane fruits[c] = ananas Les fruits ont été triés en ordre alphabétique inverse, et leur index respectifs ont été conservé.

Voir aussi: asort(), rsort(), ksort(), et sort().

asort

(PHP 3, PHP 4 )

asort -- Trie un tableau en ordre

Description

void asort (array array)

asort() trie un tableau de telle manière que la corrélation entre les index et les valeurs soient conservées. 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[d] = papaye fruits[a] = orange Les fruits ont été triés par ordre alphabétique, et leur index respectifs ont été conservé.

Voir aussi arsort(), rsort(), ksort(), et sort().

compact

(PHP 4 )

compact --  Crée un tableau contenant les variables et leur valeur

Description

array compact (string varname | array varnames [, ...])

compact() accepte différents paramètres. Les paramètres peuvent être des variables contenant des chaînes, ou un tableau de chaîne, qui peut contenir d'autres tableau 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(). 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 dans PHP 4.0.

count

(PHP 3, PHP 4 )

count -- Compte le nombre d'élément d'un tableau

Description

int count (mixed var)

count() retourne le nombre d'élément dans var, qui est généralement un tableau (et tout le reste n'aura qu'un élément).

Retourne 1 si la variable n'est pas un tableau.

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.

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 )

current -- Transforme une variable en tableau

Description

mixed current (array array)

Chaque tableau entretien un pointeur interne, qui est initialisé lors 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. current() ne déplace pas le pointeur. Si le pointeur est au dela 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 determiner 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 )

each --  Retourne chaque paire clé/valeur d'un tableau

Description

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
  • 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éments, 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 )

end --  Positionne le pointeur de tableau en fin de tableau

Description

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 )

extract --  Importe les variables dans la table des symboles

Description

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

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 les collisions est déterminée 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éfault.

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ééllement importées dans la table des symbols.

Une utilisation possible de extract() est l'exportation vers la table des symboles de tableau de variables retourné 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 )

in_array --  Indique si une valeur appartient à un tableau

Description

bool in_array (mixed needle, array haystack, bool strict)

in_array() recherche needle dans haystack et retourne TRUE si il s'y trouve, ou FALSE sinon.

Si le troisième paramètre strict est optionel. S'il vaut TRUE alors in_array() vérifiera aussi les types du paramètre needle 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 dans PHP 4.0.

key

(PHP 3, PHP 4 )

key -- Retourne une clé d'un tableau associatif

Description

mixed key (array array)

key() retourne l'index de la clé courante dans un tableau.

Voir aussi: current(), et next()

krsort

(PHP 3>= 3.0.13, PHP 4 >= 4.0b4)

krsort --  Trie un tableau en sens inverse et suivant les clés

Description

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 asort(), arsort(), ksort() sort(), et rsort().

ksort

(PHP 3, PHP 4 )

ksort -- Trie un tableau suivant les clés

Description

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 asort(), arsort(), sort(), et rsort().

Note : Le second paramètre a été ajouté dans PHP 4.

list

(unknown)

list --  Transforme une liste de variables en tableau

Description

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 variable en une seule ligne.

Exemple 1. Exemple avec list()


<?php
<table>
 <tr>
  <th>Employee name</th>
  <th>Salary</th>
 </tr>
<?php
$result = mysql ($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>$salary</td>\n".
           " </tr>\n");
}
?>
</table>
?>
      

Voir aussi: each(), array().

natsort

(PHP 4 >= 4.0RC2)

natsort --  Tri d'un tableau avec l'algorithme à "ordre naturel"

Description

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
Array
(
    [0] => img1.png
    [1] => img10.png
    [2] => img12.png
    [3] => img2.png
)
Tri par Ordre Naturel
Array
(
    [3] => img1.png
    [2] => img2.png
    [1] => img10.png
    [0] => img12.png
)
?>
      

Pour plus de détails, rendez vous sur le site de Martin Pool Natural Order String Comparison.

Voir aussi natcasesort(), strnatcmp() et strnatcasecmp().

natcasesort

(PHP 4 >= 4.0RC2)

natcasesort --  Tri d'un tableau avec l'algorithme à "ordre naturel" insensible à la casse

Description

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.

Voir aussi sort(), natsort(), strnatcmp() et strnatcasecmp().

next

(PHP 3, PHP 4 )

next --  Avance le pointeur interne d'un tableau

Description

mixed next (array array)

next() retourne l'élément suivant du tableau, ou FALSE si 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()

pos

(PHP 3, PHP 4 )

pos -- Retourne l'élément courant d'un tableau

Description

mixed pos (array array)

pos() est une fonction alias de current().

Voir aussi: end(), next(), prev() et reset().

prev

(PHP 3, PHP 4 )

prev -- Recule le pointeur courant de tableau

Description

mixed prev (array array)

prev() repositionne le pointeur interne de tableau à la dernière place qu'il occupait, ou bien retourne FALSE si 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)

range --  Crée un tableau contenant un intervalle d'entiers

Description

array range (int low, int high)

range() retourne un tableau contenant tous les entiers depuis low jusqu'à high, inclus.

Voir shuffle() pour un exemple d'utilisation.

reset

(PHP 3, PHP 4 )

reset --  Remet le pointeur interne de tableau au début

Description

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

rsort

(PHP 3, PHP 4 )

rsort -- Trie en ordre inverse

Description

void rsort (array array)

rsort() effectue un trie 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: arsort(), asort(), ksort(), sort(), et usort().

shuffle

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

shuffle -- Mélange les éléments d'un tableau

Description

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 arsort(), asort(), ksort(), rsort(), sort() et usort().

sizeof

(PHP 3, PHP 4 )

sizeof -- Retourne le nombre d'élément d'un tableau

Description

int sizeof (array array)

sizeof() retourne le nombre d'élément d'un tableau.

Voir aussi: count()

sort

(PHP 3, PHP 4 )

sort -- Trie le tableau

Description

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é dans l'ordre alphabétique.

Voir aussi: arsort(), asort(), ksort(), rsort(), et usort().

uasort

(PHP 3>= 3.0.4, PHP 4 )

uasort --  Trie un tableau en utilisant une fonction de comparaison définie par l'utilisateur.

Description

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 )

uksort --  Trie les clés d'un tableau en utilisant une fonction de comparaison définie par l'utilisateur

Description

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 qui 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";
}
?>
      
Cet exemple affichera: 20: vingt 10: dix 4: quatre 3: trois

Voir aussi: arsort(), asort(), uasort(), ksort(), rsort(), et sort().

usort

(PHP 3>= 3.0.3, PHP 4 )

usort --  Trie les valeurs d'un tableau en utilisant une fonction de comparaison définie par l'utilisateur

Description

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;
}
$a = array(3,2,5,6,1);
usort($a, "cmp");
while(list($key,$value) = each($a)) {
    echo "$key: $value\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: arsort(), asort(), ksort(), rsort() et sort().

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

Table des matières
aspell_new — Charge un nouveau dictionnaire
aspell_check — Vérifie un mot
aspell_check-raw — Vérifie un mot sans en changer la casse et sans essayer de supprimer les espaces aux extrémités.
aspell_suggest — Suggère l'orthographe d'un mot

aspell_new

(PHP 3>= 3.0.7, PHP 4 )

aspell_new -- Charge un nouveau dictionnaire

Description

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


<?php
$aspell_link=aspell_new("english");
?>
      

aspell_check

(PHP 3>= 3.0.7, PHP 4 )

aspell_check -- Vérifie un mot

Description

boolean aspell_check (int 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. 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 )

aspell_check-raw --  Vérifie un mot sans en changer la casse et sans essayer de supprimer les espaces aux extrémités.

Description

boolean aspell_check_raw (int 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. 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";
}
?>
      

aspell_suggest

(PHP 3>= 3.0.7, PHP 4 )

aspell_suggest -- Suggère l'orthographe d'un mot

Description

array aspell_suggest (int dictionary_link, string word)

aspell_suggest() retourne un tableau contenant les orthographes possibles d'un mot mal formé.

Exemple 1. 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>";
    }
}
?>
      

IV. Nombres de grande taille

Ces fonctions ne sont disponibles que si l'option de configuration --enable-bcmath a é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.

Table des matières
bcadd — Addionne deux nombres de taille arbitraire.
bccomp — Compare deux nombres de taille arbitraire.
bcdiv — Divise deux nombres de taille arbitraire.
bcmod — Retourne le reste d'une division entre nombre de taille arbitraire.
bcmul — Multiplie deux nombres de taille arbitraire.
bcpow — Elève un nombre à la puissance n-ième.
bcscale — Détermine le nombre de décimales par défaut pour les fonctions de précision mathématiques.
bcsqrt — Renvoie la racine carrée d'un nombre de taille arbitraire.
bcsub — Soustrait un nombre de taille arbitraire à un autre.

bcadd

(PHP 3, PHP 4 )

bcadd -- Addionne deux nombres de taille arbitraire.

Description

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 )

bccomp -- Compare deux nombres de taille arbitraire.

Description

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 (integer). 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 )

bcdiv -- Divise deux nombres de taille arbitraire.

Description

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 )

bcmod --  Retourne le reste d'une division entre nombre de taille arbitraire.

Description

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 )

bcmul -- Multiplie deux nombres de taille arbitraire.

Description

string bcmul (string left operand, string right operand [, int scale])

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 )

bcpow --  Elève un nombre à la puissance n-ième.

Description

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 )

bcscale --  Détermine le nombre de décimales par défaut pour les fonctions de précision mathématiques.

Description

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 )

bcsqrt --  Renvoie la racine carrée d'un nombre de taille arbitraire.

Description

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 )

bcsub --  Soustrait un nombre de taille arbitraire à un autre.

Description

string bcsub (string left operand, string right operand [, int scale])

bcsub() soustrait l'opérande right operand de 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().

V. Compression Bzip2

Ce module utilise les fonctions de la librairie 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);

?>
     
Table des matières
bzclose — Ferme un fichier bzip2
bzcompress — Compresse une chaîne avec bzip2
bzdecompress — Décompresse une chaîne bzip2
bzerrno — Retourne le numéro d'erreur bzip2
bzerror — Retourne le numéro et le message d'erreur bzip2 dans un tableau
bzerrstr — Retourne le message d'erreur bzip2
bzflush — Force l'écriture de toutes les données compressées
bzopen — Ouvre un fichier compressé avec bzip2
bzread — Lecture binaire de fichier bzip2
bzread — Ecriture binaire dans un fichier bzip2

bzclose

(unknown)

bzclose -- Ferme un fichier bzip2

Description

int bzclose (int 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

(unknown)

bzcompress -- Compresse une chaîne avec bzip2

Description

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

(unknown)

bzdecompress -- Décompresse une chaîne bzip2

Description

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 pour plus de détails sur cette fonctionnalité.

Exemple 1. Exemple avec bzdecompress()


<?php
$str = $bzdecompress($bzstr);
?>
      

Voir aussi bzcompress().

bzerrno

(unknown)

bzerrno -- Retourne le numéro d'erreur bzip2

Description

int bzerrno (int bz)

bzerrno() retourne le numéro d'erreur du fichier bz2 représenté par le pointeur bz.

Voir aussi bzerror() et bzerrstr().

bzerror

(unknown)

bzerror -- Retourne le numéro et le message d'erreur bzip2 dans un tableau

Description

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

(unknown)

bzerrstr -- Retourne le message d'erreur bzip2

Description

string bzerrstr (int bz)

bzerrstr() retourne le message d'erreur du fichier bz2 représenté par le pointeur bz.

Voir aussi bzerrno() et bzerror().

bzflush

(unknown)

bzflush --  Force l'écriture de toutes les données compressées

Description

int bzflush (int 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

(unknown)

bzopen -- Ouvre un fichier compressé avec bzip2

Description

int 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

(unknown)

bzread -- Lecture binaire de fichier bzip2

Description

string bzread (int 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 intervient. Si le paramètre optionnel length est omis, bzread() lit 1024 octets (non compressé) 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().

bzread

(unknown)

bzread -- Ecriture binaire dans un fichier bzip2

Description

int bzwrite (int 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() and bzopen().

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.

Table des matières
JDToGregorian — Convertit le nombre de jours du calendrier Julien en date grégorienne.
GregorianToJD — Convertit une date grégorienne en nombre de jours du calendrier julien.
JDToJulian — Convertit le nombre de jours du calendrier Julien en date du calendrier Julien.
JulianToJD — Convertit le nombre de jour du calendrier Julien en date du calendrier Julien.
JDToJewish — Convertit le nombre de jours du calendrier julien en date du calendrier juif.
JewishToJD — Convertit une date du calendrier juif en nombre de jours du calendrier julien.
JDToFrench — Convertit le nombre de jours du calendrier julien en date du calendrier français républicain
FrenchToJD — Convertit une date du calendrier français républicain en nombre de jours du calendrier julien.
JDMonthName — Retourne le nom du mois.
JDDayOfWeek — Retourne le numéro du jour de la semaine.
easter_date — Retourne un timestamp UNIX pour Pàques, à minuit, pour une année donnée.
easter_days — Retourne le nombre de jour entre le 21 Mars et Pàques, pour une année donnée.
unixtojd — Convertit un timestamp UNIX en nombre de jours Julien
jdtounix — Convertit un nombre de jour Julien en timestamp UNIX

JDToGregorian

(PHP 3, PHP 4 )

JDToGregorian --  Convertit le nombre de jours du calendrier Julien en date grégorienne.

Description

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 )

GregorianToJD --  Convertit une date grégorienne en nombre de jours du calendrier julien.

Description

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 )

JDToJulian --  Convertit le nombre de jours du calendrier Julien en date du calendrier Julien.

Description

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 )

JulianToJD --  Convertit le nombre de jour du calendrier Julien en date du calendrier Julien.

Description

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.

JDToJewish

(PHP 3, PHP 4 )

JDToJewish --  Convertit le nombre de jours du calendrier julien en date du calendrier juif.

Description

string jdtojewish (int julianday)

jdtojewish() convertit le nombre de jours du calendrier julien en date du calendrier juif.

JewishToJD

(PHP 3, PHP 4 )

JewishToJD --  Convertit une date du calendrier juif en nombre de jours du calendrier julien.

Description

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 )

JDToFrench --  Convertit le nombre de jours du calendrier julien en date du calendrier français républicain

Description

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 )

FrenchToJD --  Convertit une date du calendrier français républicain en nombre de jours du calendrier julien.

Description

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 )

JDMonthName --  Retourne le nom du mois.

Description

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

Tableau 1. Modes de calendrier

ModeSignification
0Grégorien - abrégé
1Grégorien
2Julien - abrégé
3Julien
4Juif
5Républicain français

JDDayOfWeek

(PHP 3, PHP 4 )

JDDayOfWeek --  Retourne le numéro du jour de la semaine.

Description

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

ModeSignification
0Retourne le numéro du jour comme un entier (0=dimanche, 1=lundi, etc.)
1Retourne une chaîne contenant le nom du jour (anglais grégorien)
2Retourne 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)

easter_date --  Retourne un timestamp UNIX pour Pàques, à minuit, pour une année donnée.

Description

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) );        /* "04 avril 1999" */
echo date( "M-d-Y", easter_date(2000) );        /* "23 avril 2000" */
echo date( "M-d-Y", easter_date(2001) );        /* "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 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, <webmaster@ely.anglican.org>)

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)

easter_days --  Retourne le nombre de jour entre le 21 Mars et Pàques, pour une année donnée.

Description

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);        /* 14, i.e. 4 Avril   */
echo easter_days(1492);        /* 32, i.e. 22 Avril  */
echo easter_days(1913);        /*  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, <webmaster@ely.anglican.org>)

Voir aussi easter_date().

unixtojd

(PHP 4 >= 4.0RC2)

unixtojd -- Convertit un timestamp UNIX en nombre de jours Julien

Description

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.

jdtounix

(PHP 4 >= 4.0RC2)

jdtounix -- Convertit un nombre de jour Julien en timestamp UNIX

Description

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.

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

Table des matières

(unknown)

 -- 

()

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.

Table des matières
com_load — Crée une nouvelle référence sur un composant COM
com_invoke — Appelle une méthode d'un composant
com_propget — Retourne la valeur d'un propriété d'un composant COM
com_get — Retourne la valeur d'un propriété d'un composant COM
com_propput — Modifie une propriété d'un composant COM
com_propset — Modifie une propriété d'un composant COM
com_set — Modifie une propriété d'un composant COM

com_load

(PHP 3>= 3.0.3, PHP 4 )

com_load --  Crée une nouvelle référence sur un composant COM

Description

string com_load (string module name [, string server name])

com_load() crée un nouveau composant COM, et retourne une référence dessus. Retourne FALSE en cas d'échec.

com_invoke

(PHP 3>= 3.0.3, PHP 4 )

com_invoke --  Appelle une méthode d'un composant

Description

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

com_propget --  Retourne la valeur d'un propriété d'un composant COM

Description

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 )

com_get --  Retourne la valeur d'un propriété d'un composant COM

Description

mixed com_get (resource com_object, string property)

com_get() retourne la valeur de la propriété property du composant COM com_object. Retourne FALSE en cas d'erreur.

com_propput

(PHP 3>= 3.0.3, PHP 4 )

com_propput --  Modifie une propriété d'un composant COM

Description

void com_propput (resource com_object, string property, mixed value)

com_propput() est un alias de com_set().

com_propset

(PHP 3>= 3.0.3, PHP 4 )

com_propset --  Modifie une propriété d'un composant COM

Description

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 )

com_set --  Modifie une propriété d'un composant COM

Description

void com_set (resource com_object, string property, mixed value)

Remplace la valeur de la propriété property du composante COM com_object par value. Retourne TRUE en cas de succès, et FALSE sinon.

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, si 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, y compris 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))
        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 les exemples ci-dessus, les objets $feuilles sont une instance de Epinard 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
       

Table des matières
get_declared_classes — Liste toutes les classes définies
call_user_method — Appelle une méthode utilisateur d'un objet
class_exists — Vérifie q'une classe a été définie
get_class — Retourne la classe d'un objet
get_class_methods — Retourne les noms des méthodes d'une classe.
get_class_vars — Retourne les valeurs par défaut des attributs d'une classe.
get_object_vars — Retourne un talbeau associatif des propriétés d'un objet
get_parent_class — Retourne le nom de la classe d'un objet
is_subclass_of — Détermine si un objet est une sous-classe
method_exists — Vérifie que la méthode existe pour une classe.

get_declared_classes

(PHP 4 >= 4.0RC2)

get_declared_classes -- Liste toutes les classes définies

Description

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

call_user_method

(PHP 3>= 3.0.3, PHP 4 )

call_user_method --  Appelle une méthode utilisateur d'un objet

Description

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";
$cntry->print_info();
echo "\n* Appel de la méthode indirectement\n";
call_user_method ("print_info", $unPays, "\t");
?>
      

See also call_user_func().

class_exists

(PHP 4 >= 4.0b4)

class_exists -- Vérifie q'une classe a été définie

Description

bool class_exists (string class_name)

class_exists() retourne TRUE si la classe class_name a été définie, et FALSE sinon.

get_class

(PHP 4 >= 4.0b2)

get_class -- Retourne la classe d'un objet

Description

string get_class (object obj)

get_class() retourne la classe de l'objet obj.

Voir aussi get_parent_class(), is_subclass_of()

get_class_methods

(PHP 4 >= 4.0RC1)

get_class_methods -- Retourne les noms des méthodes d'une classe.

Description

array get_class_methods (string class_name)

get_class_methods() retourne un tableau contenant les noms des méthodes de la classe class_name.

Voir aussi get_class_vars(), get_object_vars()

get_class_vars

(PHP 4 >= 4.0RC1)

get_class_vars --  Retourne les valeurs par défaut des attributs d'une classe.

Description

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.

get_object_vars

(PHP 4 >= 4.0RC1)

get_object_vars --  Retourne un talbeau associatif des propriétés d'un objet

Description

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(), get_class_vars()

get_parent_class

(PHP 4 >= 4.0b2)

get_parent_class -- Retourne le nom de la classe d'un objet

Description

string get_parent_class (object obj)

get_parent_class() retourne le nom de la classe de l'objet obj.

Voir aussi get_class(), is_subclass_of()

is_subclass_of

(PHP 4 >= 4.0b4)

is_subclass_of --  Détermine si un objet est une sous-classe

Description

bool 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(), get_parent_class()

method_exists

(PHP 4 >= 4.0b2)

method_exists --  Vérifie que la méthode existe pour une classe.

Description

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

X. ClibPDF

ClibPDF vous permet de créer des documents PDF avec PHP. Cette librairie est disponible à FastIO 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);
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);
  /* minute strokes */
  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);
  /* 5 minute strokes */
  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();
  /* draw hour hand */
  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);
  /* draw minute hand */
  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);
  /* draw second hand */
  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);
  /* draw little circle at center */
  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);
cpdf_close($pdf);
?>
    
Table des matières
cpdf_global_set_document_limits — Fixe les limites d'un document PDF.
cpdf_set_creator — Fixe le créateur d'un document PDF.
cpdf_set_title — Fixe le titre d'un document PDF.
cpdf_set_subject — Fixe le sujet d'un document PDF.
cpdf_set_keywords — Fixe les mot clés d'un document PDF.
cpdf_open — Oouvre un nouveau document PDF.
cpdf_close — Ferme un fichier PDF.
cpdf_page_init — Commence une nouvelle page.
cpdf_finalize_page — Termine une page.
cpdf_finalize — Termine un document.
cpdf_output_buffer — Envoie le document PDF dans un buffer mémoire.
cpdf_save_to_file — Ecrit un document PDF dans un fichier.
cpdf_set_current_page — Fixe la page courante.
cpdf_begin_text — Démarre une section de texte.
cpdf_end_text — Termine une section de texte.
cpdf_show — Imprime un texte à la position courante.
cpdf_show_xy — Affiche un texte à une position.
cpdf_text — Imprime un texte avec des options.
cpdf_set_font — Selectionne la police courante, et sa taille.
cpdf_set_leading — Fixe la distance entre deux lignes.
cpdf_set_text_rendering — Détermines le rendu du texte.
cpdf_set_horiz_scaling — Fixe l'échelle horizontale du texte.
cpdf_set_text_rise — Fixe l'élévation du texte.
cpdf_set_text_matrix — Fixe la matrice du texte.
cpdf_set_text_pos — Fixe la position du texte.
cpdf_set_char_spacing — Fixe l'espacement des caractères.
cpdf_set_word_spacing — Fixe l'espacement des mots.
cpdf_continue_text — Imprime le texte à la ligne suivante.
cpdf_stringwidth — Retourne la taille de la chaîne.
cpdf_save — Sauve l'environnement courant.
cpdf_restore — Restaures un environnement.
cpdf_translate — Modifie l'origine du système de coordonées.
cpdf_scale — Modifie l'echelle.
cpdf_rotate — Effectue une rotation.
cpdf_setflat — Fixe la platitude (flatness).
cpdf_setlinejoin — Fixe le paramètre linejoin.
cpdf_setlinecap — Fixe le paramètre linecap.
cpdf_setmiterlimit — Fixe le paramètre miter limit.
cpdf_setlinewidth — Fixe la largeur de ligne.
cpdf_setdash — Fixe le motif de pointillé.
cpdf_newpath — Commence un nouveau chemin
cpdf_moveto — Fixe le point courant.
cpdf_rmoveto — Fixe le point courant relativement.
cpdf_curveto — Dessine une courbe.
cpdf_lineto — Dessine une ligne.
cpdf_rlineto — Dessine une ligne, relativement.
cpdf_circle — Dessine un cercle.
cpdf_arc — Dessine un arc de cercle.
cpdf_rect — Dessine un rectangle.
cpdf_closepath — Ferme le chemin.
cpdf_stroke — Dessine une ligne le long du chemin.
cpdf_closepath_stroke — Ferme le fichier et dessine une ligne le long du chemin.
cpdf_fill — Remplis le chemin courant.
cpdf_fill_stroke — Remplis le chemin, et dessine le bord.
cpdf_closepath_fill_stroke — Remplis le chemin, dessine le bord et ferme le chemin.
cpdf_clip — Aligne les dessins sur le chemin courant.
cpdf_setgray_fill — Modifie le niveau de gris comme couleur de remplissage.
cpdf_setgray_stroke — Choisit un niveau de gris comme couleur de dessin.
cpdf_setgray — Modifie un niveau de gris comme couleur de dessin et de remplissage.
cpdf_setrgbcolor_fill — Choisit une couleur rgb comme couleur de remplissage.
cpdf_setrgbcolor_stroke — Choisit une couleur rgb comme couleur de dessin.
cpdf_setrgbcolor — Choisit une couleur rgb comme couleur de dessin et de remplissage.
cpdf_add_outline — Ajoute un signet à la page courante.
cpdf_set_page_animation — Fixe l'animation de la transition entre les pages.
cpdf_import_jpeg — Ouvre une image JPEG.
cpdf_place_inline_image — Place une image dans la page.
cpdf_add_annotation — Ajoute une annotation.

cpdf_global_set_document_limits

(PHP 4 >= 4.0b4)

cpdf_global_set_document_limits -- Fixe les limites d'un document PDF.

Description

void cpdf_global_set_document_limits (int maxpages, int maxfonts, int maximages, int maxannotations, int maxobjects)

cpdf_global_set_document_limits() permet de fixer plusieurs limites au document PDF. Cette fonction 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)

cpdf_set_creator -- Fixe le créateur d'un document PDF.

Description

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(), cpdf_set_keywords().

cpdf_set_title

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

cpdf_set_title -- Fixe le titre d'un document PDF.

Description

void cpdf_set_title (string title)

cpdf_set_title() fixe le titre d'un document PDF.

Voir aussi cpdf_set_subject(), cpdf_set_creator(), cpdf_set_keywords().

cpdf_set_subject

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

cpdf_set_subject -- Fixe le sujet d'un document PDF.

Description

void cpdf_set_subject (string subject)

cpdf_set_subject() fixe le sujet d'un document PDF.

Voir aussi cpdf_set_title(), cpdf_set_creator(), cpdf_set_keywords().

cpdf_set_keywords

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

cpdf_set_keywords -- Fixe les mot clés d'un document PDF.

Description

void cpdf_set_keywords (string keywords)

cpdf_set_keywords() fixe les mot clés d'un document PDF.

Voir aussi cpdf_set_title(), cpdf_set_creator(), cpdf_set_subject().

cpdf_open

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

cpdf_open -- Oouvre un nouveau document PDF.

Description

int 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(), cpdf_output_buffer().

cpdf_close

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

cpdf_close -- Ferme un fichier PDF.

Description

void cpdf_close (int 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)

cpdf_page_init -- Commence une nouvelle page.

Description

void cpdf_page_init (int 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)

cpdf_finalize_page -- Termine une page.

Description

void cpdf_finalize_page (int pdf document, int page number)

cpdf_finalize_page() termine la page de numéro page number. Cette fonction fait que 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)

cpdf_finalize -- Termine un document.

Description

void cpdf_finalize (int 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)

cpdf_output_buffer -- Envoie le document PDF dans un buffer mémoire.

Description

void cpdf_output_buffer (int 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)

cpdf_save_to_file -- Ecrit un document PDF dans un fichier.

Description

void cpdf_save_to_file (int pdf document, string filename)

cpdf_save_to_file() 'crit un document PDF dans un fichier, s'il a été créé en mémoire. Cette fonction n'est pas nécessaire si un nom de fichier a été fourni lors de l'appel à cpdf_open().

Voir aussi cpdf_output_buffer(), cpdf_open().

cpdf_set_current_page

(PHP 3>= 3.0.9, PHP 4 >= 4.0b4)

cpdf_set_current_page -- Fixe la page courante.

Description

void cpdf_set_current_page (int 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().

cpdf_begin_text

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

cpdf_begin_text -- Démarre une section de texte.

Description

void cpdf_begin_text (int 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)

cpdf_end_text -- Termine une section de texte.

Description

void cpdf_end_text (int 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)

cpdf_show -- Imprime un texte à la position courante.

Description

void cpdf_show (int pdf document, string text)

cpdf_show() imprime la chaîne text, à la position courante.

Voir aussi cpdf_text(), cpdf_begin_text(), cpdf_end_text().

cpdf_show_xy

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

cpdf_show_xy -- Affiche un texte à une position.

Description

void cpdf_show_xy (int 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)

cpdf_text -- Imprime un texte avec des options.

Description

void cpdf_text (int 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)

cpdf_set_font -- Selectionne la police courante, et sa taille.

Description

void cpdf_set_font (int 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)

cpdf_set_leading -- Fixe la distance entre deux lignes.

Description

void cpdf_set_leading (int 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().

cpdf_set_text_rendering

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

cpdf_set_text_rendering -- Détermines le rendu du texte.

Description

void cpdf_set_text_rendering (int 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)

cpdf_set_horiz_scaling -- Fixe l'échelle horizontale du texte.

Description

void cpdf_set_horiz_scaling (int 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)

cpdf_set_text_rise -- Fixe l'élévation du texte.

Description

void cpdf_set_text_rise (int 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)

cpdf_set_text_matrix -- Fixe la matrice du texte.

Description

void cpdf_set_text_matrix (int 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)

cpdf_set_text_pos -- Fixe la position du texte.

Description

void cpdf_set_text_pos (int 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().

cpdf_set_char_spacing

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

cpdf_set_char_spacing -- Fixe l'espacement des caractères.

Description

void cpdf_set_char_spacing (int 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)

cpdf_set_word_spacing -- Fixe l'espacement des mots.

Description

void cpdf_set_word_spacing (int 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)

cpdf_continue_text -- Imprime le texte à la ligne suivante.

Description

void cpdf_continue_text (int 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)

cpdf_stringwidth -- Retourne la taille de la chaîne.

Description

double cpdf_stringwidth (int 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)

cpdf_save -- Sauve l'environnement courant.

Description

void cpdf_save (int pdf document)

cpdf_save() sauve l'environnement courant. Cette fonction 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().

cpdf_restore

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

cpdf_restore -- Restaures un environnement.

Description

void cpdf_restore (int 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)

cpdf_translate --  Modifie l'origine du système de coordonées.

Description

void cpdf_translate (int 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)

cpdf_scale -- Modifie l'echelle.

Description

void cpdf_scale (int 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)

cpdf_rotate -- Effectue une rotation.

Description

void cpdf_rotate (int pdf document, double angle)

cpdf_rotate() effectue une rotation, d'un angle de angle degrés.

cpdf_setflat

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

cpdf_setflat -- Fixe la platitude (flatness).

Description

void cpdf_setflat (int 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)

cpdf_setlinejoin -- Fixe le paramètre linejoin.

Description

void cpdf_setlinejoin (int 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)

cpdf_setlinecap -- Fixe le paramètre linecap.

Description

void cpdf_setlinecap (int 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)

cpdf_setmiterlimit -- Fixe le paramètre miter limit.

Description

void cpdf_setmiterlimit (int 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)

cpdf_setlinewidth -- Fixe la largeur de ligne.

Description

void cpdf_setlinewidth (int 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)

cpdf_setdash -- Fixe le motif de pointillé.

Description

void cpdf_setdash (int pdf document, double white, double black)

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)

cpdf_newpath -- Commence un nouveau chemin

Description

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)

cpdf_moveto -- Fixe le point courant.

Description

void cpdf_moveto (int 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)

cpdf_rmoveto -- Fixe le point courant relativement.

Description

void cpdf_rmoveto (int 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)

cpdf_curveto -- Dessine une courbe.

Description

void cpdf_curveto (int 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().

cpdf_lineto

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

cpdf_lineto -- Dessine une ligne.

Description

void cpdf_lineto (int 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)

cpdf_rlineto -- Dessine une ligne, relativement.

Description

void cpdf_rlineto (int 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(), cpdf_curveto().

cpdf_circle

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

cpdf_circle -- Dessine un cercle.

Description

void cpdf_circle (int 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)

cpdf_arc -- Dessine un arc de cercle.

Description

void cpdf_arc (int 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().

cpdf_rect

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

cpdf_rect -- Dessine un rectangle.

Description

void cpdf_rect (int 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)

cpdf_closepath -- Ferme le chemin.

Description

void cpdf_closepath (int pdf document)

cpdf_closepath() ferme le chemin courant.

cpdf_stroke

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

cpdf_stroke -- Dessine une ligne le long du chemin.

Description

void cpdf_stroke (int 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)

cpdf_closepath_stroke --  Ferme le fichier et dessine une ligne le long du chemin.

Description

void cpdf_closepath_stroke (int 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)

cpdf_fill -- Remplis le chemin courant.

Description

void cpdf_fill (int pdf document)

cpdf_fill() rempli l'intérieur du chemin courant avec la couleur courante.

Voir aussi cpdf_closepath(), cpdf_stroke(), cpdf_setgray_fill(), cpdf_setgray(), cpdf_setrgbcolor_fill(), cpdf_setrgbcolor().

cpdf_fill_stroke

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

cpdf_fill_stroke -- Remplis le chemin, et dessine le bord.

Description

void cpdf_fill_stroke (int pdf document)

cpdf_fill_stroke() remplis 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(), cpdf_setrgbcolor().

cpdf_closepath_fill_stroke

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

cpdf_closepath_fill_stroke -- Remplis le chemin, dessine le bord et ferme le chemin.

Description

void cpdf_closepath_fill_stroke (int pdf document)

cpdf_closepath_fill_stroke() remplis 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(), cpdf_setrgbcolor().

cpdf_clip

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

cpdf_clip -- Aligne les dessins sur le chemin courant.

Description

void cpdf_clip (int pdf document)

cpdf_clip() aligne les dessins sur le chemin courant.

cpdf_setgray_fill

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

cpdf_setgray_fill --  Modifie le niveau de gris comme couleur de remplissage.

Description

void cpdf_setgray_fill (int 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)

cpdf_setgray_stroke -- Choisit un niveau de gris comme couleur de dessin.

Description

void cpdf_setgray_stroke (int pdf document, double gray value)

cpdf_setgray_stroke() remplace le niveau de gris, couleur de dessin courante, par value.

Voir aussi cpdf_setrgbcolor_stroke().

cpdf_setgray

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

cpdf_setgray --  Modifie un niveau de gris comme couleur de dessin et de remplissage.

Description

void cpdf_setgray (int 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)

cpdf_setrgbcolor_fill -- Choisit une couleur rgb comme couleur de remplissage.

Description

void cpdf_setrgbcolor_fill (int 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)

cpdf_setrgbcolor_stroke -- Choisit une couleur rgb comme couleur de dessin.

Description

void cpdf_setrgbcolor_stroke (int 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(), cpdf_setrgbcolor().

cpdf_setrgbcolor

(PHP 3>= 3.0.8, PHP 4 >= 4.0b4)

cpdf_setrgbcolor --  Choisit une couleur rgb comme couleur de dessin et de remplissage.

Description

void cpdf_setrgbcolor (int 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(), cpdf_setrgbcolor_fill().

cpdf_add_outline

(PHP 3>= 3.0.9, PHP 4 >= 4.0b4)

cpdf_add_outline -- Ajoute un signet à la page courante.

Description

void cpdf_add_outline (int pdf document, string text)

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)

cpdf_set_page_animation -- Fixe l'animation de la transition entre les pages.

Description

void cpdf_set_page_animation (int 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)

cpdf_import_jpeg -- Ouvre une image JPEG.

Description

int cpdf_import_jpeg (int 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().

cpdf_place_inline_image

(PHP 3>= 3.0.9, PHP 4 >= 4.0b4)

cpdf_place_inline_image -- Place une image dans la page.

Description

void cpdf_place_inline_image (int 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)

cpdf_add_annotation -- Ajoute une annotation.

Description

void cpdf_add_annotation (int 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é.

XI. CURL

PHP supporte libcurl, une librairie créée par Daniel Stenberg, qui vous permet de vous connecter de commniquer 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'autentification par mot de passe et nom de compte.

Pour pouvoir utiliser les fonctions CURL, vous devez installer le package CURL. 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 dossier 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);
?>
     

Table des matières
curl_init — Initialise une session CURL
curl_setopt — Modifie une option de transfert CURL
curl_exec — Excécute une session CURL
curl_close — Ferme une session CURL
curl_version — Retourne la version courante de CURL

curl_init

(PHP 4 >= 4.0.2)

curl_init -- Initialise une session CURL

Description

int 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 sessions 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_setopt

(PHP 4 >= 4.0.2)

curl_setopt -- Modifie une option de transfert CURL

Description

bool curl_setopt (int 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 (specifié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: Choississez une valeur non nulle pour que CURL vous affiche tous les événements.

  • CURLOPT_HEADER: Choississez une valeur non nulle pour que CURL inclus l'entête dans la valeur de retour.

  • CURLOPT_NOPROGRESS: Choississez 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: Choississez une valeur non nulle pour que le corps du transfert ne soit pas inclus dans la valeur de retour.

  • CURLOPT_FAILONERROR: Choississez 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: Choississez une valeur non nulle pour que PHP prépare un chargement.

  • CURLOPT_POST: Choississez 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: Choississez une valeur non nulle pour que PHP ne fasse que lister les noms d'un dossier FTP.

  • CURLOPT_FTPAPPEND: Choississez une valeur non nulle pour que PHP concatène le fichier distant, plutôt que de l'écraser.

  • CURLOPT_NETRC: Choississez 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: Choississez une valeur non nulle pour suivre toutes les entêtes "Location: " que le serveur envoie dans les entêtes HTTP (notez que cette fonction est récursive, et que PHP suivra toutes les entêtes "Location: " qu'il trouvera).

  • CURLOPT_PUT: Choississez 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: Choississez 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 v aleur lors de l'appel à curl_init(). function.

  • 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'entête de "REFERER", utilisé lors d'une requête HTTP.

  • CURLOPT_USERAGENT: Passez une chaîne de caractères qui contient l'entê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'entête HTTP.

  • CURLOPT_SSLCERT: Passez une chaîne de caractères qui contiendra le nom de fichier du certificat, au format PEM.

  • 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 entê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'entête de la sortie du transfert.

  • CURLOPT_STDERR: Le fichier d'erreurs.

curl_exec

(PHP 4 >= 4.0.2)

curl_exec -- Excécute une session CURL

Description

bool curl_exec (int 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)

curl_close -- Ferme une session CURL

Description

void curl_close (int ch)

Cette fonction ferme une session CURL et libère toutes les ressources reservées. L'identifiant CURL, ch, est aussi effacé.

curl_version

(PHP 4 >= 4.0.2)

curl_version -- Retourne la version courante de CURL

Description

string curl_version (void);

curl_version() retourne une chaîne avec la version courante de la librairie CURL.

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.

cybercash_encr

(PHP 4 >= 4.0b4)

cybercash_encr -- 

Description

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)

cybercash_decr -- 

Description

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)

cybercash_base64_encode -- 

Description

string cybercash_base64_encode (string inbuff)

cybercash_base64_decode

(PHP 4 >= 4.0b4)

cybercash_base64_decode -- 

Description

string cybercash_base64_decode (string inbuff)

XIII. Caractères

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

Table des matières
ctype_alnum — Vérifie qu'un caractère est alpha-numérique
ctype_alpha — Vérifie qu'un caractère est alphabétique
ctype_cntrl — Vérifie qu'un caractère est un caractère de contrôle
ctype_digit — Vérifie qu'un caractère est numérique
ctype_lower — Vérifie qu'un caractère est en minuscule
ctype_graph — Vérifie qu'un caractère est imprimable (sauf " ", espace)
ctype_print — Vérifie qu'un caractère est imprimable
ctype_punct — Vérifie qu'un caractère est imprimable, sans être ni un espace, ni un caractère alpha-numérique
ctype_space — Vérifie qu'un caractère est caractère blanc (espace, tabulation...)
ctype_upper — Vérifie qu'un caractère est en majuscule
ctype_xdigit — Vérifie qu'un caractère représente un nombre héxadécimal

ctype_alnum

(unknown)

ctype_alnum -- Vérifie qu'un caractère est alpha-numérique

Description

bool ctype_alnum (string c)

Voir aussi setlocale().

ctype_alpha

(unknown)

ctype_alpha -- Vérifie qu'un caractère est alphabétique

Description

bool ctype_alpha (string c)

ctype_cntrl

(unknown)

ctype_cntrl -- Vérifie qu'un caractère est un caractère de contrôle

Description

bool ctype_cntrl (string c)

ctype_digit

(unknown)

ctype_digit -- Vérifie qu'un caractère est numérique

Description

bool ctype_digit (string c)

ctype_lower

(unknown)

ctype_lower -- Vérifie qu'un caractère est en minuscule

Description

bool ctype_lower (string c)

ctype_graph

(unknown)

ctype_graph -- Vérifie qu'un caractère est imprimable (sauf " ", espace)

Description

bool ctype_graph (string c)

ctype_print

(unknown)

ctype_print -- Vérifie qu'un caractère est imprimable

Description

bool ctype_print (string c)

ctype_punct

(unknown)

ctype_punct --  Vérifie qu'un caractère est imprimable, sans être ni un espace, ni un caractère alpha-numérique

Description

bool ctype_punct (string c)

ctype_space

(unknown)

ctype_space -- Vérifie qu'un caractère est caractère blanc (espace, tabulation...)

Description

bool ctype_space (string c)

ctype_upper

(unknown)

ctype_upper -- Vérifie qu'un caractère est en majuscule

Description

bool ctype_upper (string c)

ctype_xdigit

(unknown)

ctype_xdigit --  Vérifie qu'un caractère représente un nombre héxadécimal

Description

bool ctype_xdigit (string c)

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

Pour ajouter le support d'une base dba, il suffit d'ajouter l'option de configuration --with adéquate. Les bases suivantes sont supportées :

  • 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 est un nouveau type de dbm plus flexible. Il a cependant la majorité des limitations du genre. (--with-ndbm)

  • gdbm est la base dbm GNU. (--with-gdbm)

  • db2 est DB2 de Sleepycat Software. 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 est le DB3 de Sleepycat Software. (--with-db3)

  • 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. 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);
?>
     

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);
?>
	 

Table des matières
dba_close — Ferme une base.
dba_delete — Efface une entrée.
dba_exists — Vérifie qu'une clé existe.
dba_fetch — Lit les données liées à une clé.
dba_firstkey — Lit la première clé.
dba_insert — Insère une entrée.
dba_nextkey — Lit la clé suivante.
dba_popen — Ouvre une connexion persistante à une base de données.
dba_open — Ouvre une base de données.
dba_optimize — Optimise une base.
dba_replace — Remplace ou insère une entrée.
dba_sync — Synchronise une base de données.

dba_close

(PHP 3>= 3.0.8, PHP 4 >= 4.0b2)

dba_close -- Ferme une base.

Description

void dba_close (int handle)

dba_close() ferme le lien établit 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 >= 4.0b2)

dba_delete -- Efface une entrée.

Description

string dba_delete (string key, int 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 >= 4.0b2)

dba_exists -- Vérifie qu'une clé existe.

Description

bool dba_exists (string key, int 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érfié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 >= 4.0b2)

dba_fetch -- Lit les données liées à une clé.

Description

string dba_fetch (string key, int 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().

dba_firstkey

(PHP 3>= 3.0.8, PHP 4 >= 4.0b2)

dba_firstkey -- Lit la première clé.

Description

string dba_firstkey (int 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().

dba_insert

(PHP 3>= 3.0.8, PHP 4 >= 4.0b2)

dba_insert -- Insère une entrée.

Description

bool dba_insert (string key, string value, int 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 >= 4.0b2)

dba_nextkey -- Lit la clé suivante.

Description

string dba_nextkey (int 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 >= 4.0b2)

dba_popen -- Ouvre une connexion persistante à une base de données.

Description

int dba_popen (string path, string mode, string handler [, ...])

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.

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 >= 4.0b2)

dba_open -- Ouvre une base de données.

Description

int dba_open (string path, string mode, string handler [, ...])

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 >= 4.0b2)

dba_optimize -- Optimise une base.

Description

bool dba_optimize (int 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 >= 4.0b2)

dba_replace -- Remplace ou insère une entrée.

Description

bool dba_replace (string key, string value, int 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().

dba_sync

(PHP 3>= 3.0.8, PHP 4 >= 4.0b2)

dba_sync -- Synchronise une base de données.

Description

bool dba_sync (int 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().

XV. Dates et heures

Table des matières
checkdate — Valide une date/heure.
date — Formate une date/heure locale
getdate — Retourne la date/heure
gettimeofday — Retourne l'heure actuelle
gmdate — Formate une date/heure GMT/CUT.
gmmktime — Retourne le timestamp UNIX d'une date GMT.
gmstrftime — Formate une date/heure GMT/CUT en fonction des paramétrages locaux.
localtime — Lit l'heure locale
microtime — Retourne le timestamp UNIX actuel avec microsecondes.
mktime — Retourne le timestamp UNIX d'une date.
strftime — Formate une date/heure locale avec les options locales.
time — Retourne le timestamp UNIX actuel.
strtotime — Transforme un texte anglais en timestamp

checkdate

(PHP 3, PHP 4 )

checkdate -- Valide une date/heure.

Description

int checkdate (int month, int day, int year)

checkdate() retourne TRUE si la date fournie est valide, et sinon FALSE. La date est considérée comme valide si :

  • L'année est comprise entre entre 0 et 32767 inclus

  • Le mois est compris entre 1 et 12 inclus

  • Le jour est compris dans l'intervalle de date du mois. Les années bissextiles sont prises en compte.

date

(PHP 3, PHP 4 )

date -- Formate une date/heure locale

Description

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'hivers est activée, "0" sinon.

  • 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 bisextile ("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"

  • s - Secondes; i.e. "00" à "59"

  • S - Suffixe ordinal d'un nombre, en anglais, sur deux lettres : i.e. "th", "nd"

  • t - Nombre de jour 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()


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 futur ou dans 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);
?>
      

Pour formater des dates dans d'autres langues, utilisez les fonctions setlocale() et strftime().

Voir aussi gmdate() et mktime().

getdate

(PHP 3, PHP 4 )

getdate -- Retourne la date/heure

Description

array getdate ([int timestamp])

getdate() retourne un tableau associatif contenant les informations de date et 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

  • "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"

gettimeofday

(PHP 3>= 3.0.7, PHP 4 >= 4.0b4)

gettimeofday -- Retourne l'heure actuelle

Description

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

gmdate

(PHP 3, PHP 4 )

gmdate -- Formate une date/heure GMT/CUT.

Description

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 )

gmmktime -- Retourne le timestamp UNIX d'une date GMT.

Description

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)

gmstrftime --  Formate une date/heure GMT/CUT en fonction des paramétrages locaux.

Description

string gmstrftime (string format [, int timestamp])

gmstrftime() se comporte exactement comme strftime() hormis le fait 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()


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

localtime

(PHP 4 >= 4.0RC2)

localtime -- Lit l'heure locale

Description

array localtime ([int timestamp [, bool 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() a 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 )

microtime --  Retourne le timestamp UNIX actuel avec microsecondes.

Description

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 gettimeofday().

Voir aussi time().

mktime

(PHP 3, PHP 4 )

mktime --  Retourne le timestamp UNIX d'une date.

Description

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 date ("M-d-Y", mktime (0,0,0,12,32,1997));
echo date ("M-d-Y", mktime (0,0,0,13,1,1997));
echo date ("M-d-Y", mktime (0,0,0,1,1,1998));
echo date ("M-d-Y", mktime (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 jours 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 )

strftime --  Formate une date/heure locale avec les options locales.

Description

string strftime (string format [, int timestamp])

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 suivant 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 - same as %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 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 `%' lité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.

Exemple 1. Exemple strftime()


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() et mktime() et le groupe de spécifications de strftime().

time

(PHP 3, PHP 4 )

time --  Retourne le timestamp UNIX actuel.

Description

int time (void)

time() retourne la 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 >= 4.0b2)

strtotime --  Transforme un texte anglais en timestamp

Description

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";
?>
      

XVI. 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 la même fichier dBase risque de rendre votre base de données incohérente.

A la différence des bases de données SQL, la définition des bases de données dBase, ne peut pas être changée. Une fois le fichier créé, la définition de la base est définitive. Il n'y a pas d'index qui accélèrent les recherches ou organisent vos données. Les fichiers dBase sont de simples fichiers séquentiels avec des 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 Postgres 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 de et vers votre base des données web, maintenant que le format du fichier est communément géré 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.

Table des matières
dbase_create — Crée une base de données dBase.
dbase_open — Ouverture d'une base dBase.
dbase_close — Ferme une base dBase.
dbase_pack — Compacte une base dBase.
dbase_add_record — Ajoute un enregistrement dans une base dBase.
dbase_replace_record — Remplace un enregistrement dans une base dBase.
dbase_delete_record — Defface un enregistrement dans une base dBase.
dbase_get_record — Lit un enregistrement dans une base dBase.
dbase_get_record_with_names — Lit un enregistrement dans une base, sous la forme d'un tableau associatif.
dbase_numfields — Compte le nombre de champs d'une base dBase.
dbase_numrecords — Compter le nombre d'enregistrements dans une base dBase.

dbase_create

(PHP 3, PHP 4 )

dbase_create -- Crée une base de données dBase.

Description

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 )

dbase_open -- Ouverture d'une base dBase.

Description

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

Retourne un identifiant de base de données, ou FALSE si la base n'a pas pu être selectionnée.

dbase_close

(PHP 3, PHP 4 )

dbase_close -- Ferme une base dBase.

Description

bool dbase_close (int dbase_identifier)

Ferme la base associée à dbase_identifier.

dbase_pack

(PHP 3, PHP 4 )

dbase_pack -- Compacte une base dBase.

Description

bool dbase_pack (int dbase_identifier)

Compacte la base de données spécifiée (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 )

dbase_add_record -- Ajoute un enregistrement dans une base dBase.

Description

bool dbase_add_record (int dbase_identifier, array 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 )

dbase_replace_record -- Remplace un enregistrement dans une base dBase.

Description

bool dbase_replace_record (int dbase_identifier, array record, int dbase_record_number)

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 )

dbase_delete_record -- Defface un enregistrement dans une base dBase.

Description

bool dbase_delete_record (int dbase_identifier, int record)

Marque l'enregistrement record pour l'effacement, dans la base. Pour effacer réellement l'enregistrement, il faut utiliser aussi dbase_pack().

dbase_get_record

(PHP 3, PHP 4 )

dbase_get_record -- Lit un enregistrement dans une base dBase.

Description

array dbase_get_record (int dbase_identifier, int 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 )

dbase_get_record_with_names --  Lit un enregistrement dans une base, sous la forme d'un tableau associatif.

Description

array dbase_get_record_with_names (int dbase_identifier, int record)

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 )

dbase_numfields --  Compte le nombre de champs d'une base dBase.

Description

int dbase_numfields (int dbase_identifier)

Retourne le nombre de champs (colonnes) de la base de données spécifiée. 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";
}
?>
      

dbase_numrecords

(PHP 3, PHP 4 )

dbase_numrecords --  Compter le nombre d'enregistrements dans une base dBase.

Description

int dbase_numrecords (int dbase_identifier)

Retourne le nombre d'enregistrements (lignes) dans la base spécifiée. 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).

XVII. DBM

Ces fonctions vous permettent d'écrire des lignes dans une base de donnée 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. 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);
?>
    

Table des matières
dbmopen — Ouvre une base de données dbm
dbmclose — Ferme une base de données dbm.
dbmexists — Indique si une valeur existe.
dbmfetch — Lit une valeur.
dbminsert — Insère une valeur.
dbmreplace — Remplace une valeur.
dbmdelete — Efface une valeur.
dbmfirstkey — Lit la première clé.
dbmnextkey — Lit la clé suivante.
dblist — Décrit la librairie dbm utilisée.

dbmopen

(PHP 3, PHP 4 )

dbmopen -- Ouvre une base de données dbm

Description

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

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 librairie 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 fait 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 )

dbmclose -- Ferme une base de données dbm.

Description

bool dbmclose (int dbm_identifier)

Déverrouille et ferme la base de données dbm_identifier.

dbmexists

(PHP 3, PHP 4 )

dbmexists -- Indique si une valeur existe.

Description

bool dbmexists (int dbm_identifier, string key)

Retourne TRUE si il y a une valeur associée à la clé key.

dbmfetch

(PHP 3, PHP 4 )

dbmfetch -- Lit une valeur.

Description

string dbmfetch (int dbm_identifier, string key)

Retourne la valeur associée à la clé key.

dbminsert

(PHP 3, PHP 4 )

dbminsert -- Insère une valeur.

Description

int dbminsert (int dbm_identifier, string key, string value)

Ajoute la valeur value dans la base de données, avec la clé key.

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 )

dbmreplace -- Remplace une valeur.

Description

bool dbmreplace (int dbm_identifier, string key, string value)

Remplace une valeur courante par la valeur value pour la clé key, dans une base dbm.

Cette fonction va créer la clé, si elle n'existe pas dans la base.

dbmdelete

(PHP 3, PHP 4 )

dbmdelete -- Efface une valeur.

Description

bool dbmdelete (int dbm_identifier, string key)

Efface la valeur de la clé key, dans la base dbm.

Retourne FALSE si la clé n'existe pas dans cette base.

dbmfirstkey

(PHP 3, PHP 4 )

dbmfirstkey -- Lit la première clé.

Description

string dbmfirstkey (int dbm_identifier)

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 une table de hash.

dbmnextkey

(PHP 3, PHP 4 )

dbmnextkey -- Lit la clé suivante.

Description

string dbmnextkey (int 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
$key = dbmfirstkey($dbm_id);
while ($key) {
    echo "$key = " . dbmfetch($dbm_id, $key) . "\n";
    $key = dbmnextkey($dbm_id, $key);
}
?>
      

dblist

(PHP 3, PHP 4 )

dblist -- Décrit la librairie dbm utilisée.

Description

string dblist (void)

XVIII. Accès aux dossiers

Table des matières
chdir — Change de dossier
dir — Classe dossier
closedir — Ferme le pointeur sur le dossier.
getcwd — Retourne le dossier de travail
opendir — Ouvre un dossier, et récupère un pointeur dessus.
readdir — Lit une entrée du dossier.
rewinddir — Retourne à la première entrée du dossier.

chdir

(PHP 3, PHP 4 )

chdir -- Change de dossier

Description

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 )

dir -- Classe dossier

Description

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 )

closedir -- Ferme le pointeur sur le dossier.

Description

void closedir (int dir_handle)

closedir() ferme le pointeur de dossier dir_handle. Le dossier devait avoir été ouvert avec opendir().

getcwd

(PHP 4 >= 4.0b4)

getcwd -- Retourne le dossier de travail

Description

string getcwd(void);

getcwd() retourne le nom du dossier courant.

opendir

(PHP 3, PHP 4 )

opendir --  Ouvre un dossier, et récupère un pointeur dessus.

Description

int opendir (string path)

opendir() retourne un pointeur sur un dossier pour être utilisé avec les fonctions closedir(), readdir() et rewinddir().

readdir

(PHP 3, PHP 4 )

readdir -- Lit une entrée du dossier.

Description

string readdir (int 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);
?>
      

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 )

rewinddir -- Retourne à la première entrée du dossier.

Description

void rewinddir (int dir_handle)

rewinddir() retourne à la première entrée du dossier : le prochain fichier lu sera le premier.

XIX. DOM XML

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.0.0 (la version beta ne fonctionne pas). Ces fonctions ont été ajoutées dans PHP 4.

Ce module définit les constantes suivantes :

Tableau 1. Constantes XML

ConstanteValeurDéscription
XML_ELEMENT_NODE1 
XML_ATTRIBUTE_NODE2 
XML_TEXT_NODE3 
XML_CDATA_SECTION_NODE4 
XML_ENTITY_REF_NODE5 
XML_ENTITY_NODE6 
XML_PI_NODE7 
XML_COMMENT_NODE8 
XML_DOCUMENT_NODE9 
XML_DOCUMENT_TYPE_NODE10 
XML_DOCUMENT_FRAG_NODE11 
XML_NOTATION_NODE12 
XML_GLOBAL_NAMESPACE1 
XML_LOCAL_NAMESPACE2 

Ce module définit un ensemble de classes. Les fonctions DOM XML retourne un arbre à partir d'un document XML, dont chaque noeud est un objet issu de ces classes.

Table des matières
xmldoc — Crée un objet DOM pour un document XML.
xmldocfile — Crée un objet DOM à partir d'un fichier XML
xmltree — Crée un arbre d'objet PHP, à partir d'un document XML.

xmldoc

(PHP 4 >= 4.0b4)

xmldoc -- Crée un objet DOM pour un document XML.

Description

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)

xmldocfile -- Crée un objet DOM à partir d'un fichier XML

Description

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)

xmltree --  Crée un arbre d'objet PHP, à partir d'un document XML.

Description

object xmltree (string str)

xmltree() analyse le document XML str et retourne un arbre d'objets PHP qui représente le document analysé.

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

Table des matières
error_log — Envoie un message d'erreur quelque part
error_reporting — Fixe le niveau de rapport d'erreurs PHP
restore_error_handler — Réactive l'ancienne fonction de gestion des erreurs
set_error_handler — Choisi une fonction utilisateur comme gestionnaire d'erreurs
trigger_error — Déclenche une erreur utilisateur
user_error — Génére un message d'erreur utilisateur

error_log

(PHP 3, PHP 4 )

error_log -- Envoie un message d'erreur quelque part

Description

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,
               "operateur@mondomaine.com");
}
// 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 )

error_reporting -- Fixe le niveau de rapport d'erreurs PHP

Description

int error_reporting ([int level])

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()

constantevaleur
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)

restore_error_handler --  Réactive l'ancienne fonction de gestion des erreurs

Description

void restore_error_handler (void)

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)

set_error_handler --  Choisi une fonction utilisateur comme gestionnaire d'erreurs

Description

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]))
    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>
      

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)

trigger_error --  Déclenche une erreur utilisateur

Description

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)

user_error --  Génére un message d'erreur utilisateur

Description

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

XXI. 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 Fiserv, Inc. Vous pouvez avoir plus de détails sur filePro à http://www.fileproplus.com/.

Table des matières
filepro — Lit et vérifie un fichier.
filepro_fieldname — Retourne le nom d'un champs.
filepro_fieldtype — Retourne le type d'un champs.
filepro_fieldwidth — Retourne la taille d'un champs.
filepro_retrieve — Retourne la valeur d'un champs.
filepro_fieldcount — Retourne le nombre de champs dans une base filePro.
filepro_rowcount — Retourne le nombre de champs dans une base filePro.

filepro

(PHP 3, PHP 4 )

filepro -- Lit et vérifie un fichier.

Description

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 )

filepro_fieldname -- Retourne le nom d'un champs.

Description

string filepro_fieldname (int field_number)

filepro_fieldname() retourne le nom du champs d'index field_number.

filepro_fieldtype

(PHP 3, PHP 4 )

filepro_fieldtype -- Retourne le type d'un champs.

Description

string filepro_fieldtype (int field_number)

Retourne le type du champs d'index field_number.

filepro_fieldwidth

(PHP 3, PHP 4 )

filepro_fieldwidth -- Retourne la taille d'un champs.

Description

int filepro_fieldwidth (int field_number)

Retourne la taille du champs d'index field_number.

filepro_retrieve

(PHP 3, PHP 4 )

filepro_retrieve -- Retourne la valeur d'un champs.

Description

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 )

filepro_fieldcount -- Retourne le nombre de champs dans une base filePro.

Description

int filepro_fieldcount(void);

filepro_fieldcount() retourne le nombre de champs (ou colonnes) d'une base filePro.

Voir aussi filepro().

filepro_rowcount

(PHP 3, PHP 4 )

filepro_rowcount --  Retourne le nombre de champs dans une base filePro.

Description

int filepro_rowcount(void);

filepro_rowcount() retourne le nombre de lignes dans une base filePro.

Voir aussi filepro().

XXII. Système de fichiers

Table des matières
basename — Sépare le nom du fichier et le nom du dossier.
chgrp — Change le groupe possesseur du fichier.
chmod — Change le mode du fichier.
chown — Change le groupe propriétaire du fichier.
clearstatcache — Efface le cache de la fonction "stat".
copy — Copie un fichier.
delete — Effacer
dirname — Renvoie le nom du dossier.
diskfreespace — Renvoie l'espace disque disponible dans le répertoire.
fclose — Ferme un fichier.
feof — Teste la fin du fichier.
fflush — Envoi tout le contenu généré dans un fichier
fgetc — Renvoie le caractère que pointe le pointeur du fichier.
fgetcsv — Renvoie la ligne courante sur laquelle se trouve le pointeur du fichier et cherche dans le résultat les champs CSV
fgets — Renvoie la ligne courante sur laquelle se trouve le pointeur du fichier.
fgetss — Renvoie la ligne courant sur laquelle se trouve le pointeur du fichier et élimine les balises HTML
file — Lit le fichier et renvoie le résultat dans un tableau.
file_exists — Vérifie si un fichier existe.
fileatime — Renvoie la date à laquelle le fichier a été accédé pour la dernière fois.
filectime — Renvoie l'heure à laquelle l'inode a été accédé pour la dernière fois.
filegroup — Lire le nom du groupe
fileinode — Renvoie le numéro d'inode du fichier.
filemtime — Renvoie la date de dernière modification du fichier.
fileowner — Renvoie le nom du possesseur du fichier.
fileperms — Renvoie les permissions affectées au fichier.
filesize — Renvoie la taille du fichier.
filetype — Retourne le type de fichier
flock — Verrouille le fichier.
fopen — Ouverture d'un fichier ou d'une URL.
fpassthru — Affiche la partie du fichier située après le pointeur du fichier.
fputs — Ecrit dans un fichier.
fread — Lecture du fichier en mode binaire.
fscanf — Analyse un fichier en fonction d'un format
fseek — Modifie le pointeur de fichier.
fstat — Lit les informations sur un fichier à partir d'un pointeur de fichier
ftell — Renvoie la position du pointeur du fichier.
ftruncate — Tronque une fichier.
fwrite — Ecriture du fichier en mode binaire.
set_file_buffer — Fixe la bufferisation de fichier
is_dir — Indique si le nom de fichier est un dossier.
is_executable — Indique si le fichier est exécutable.
is_file — Indique si le fichier est un véritable fichier.
is_link — Indique si le fichier est un lien symbolique.
is_readable — Indique un fichier est autorisé en lecture
is_writable — Indique un fichier est autorisé en lecture.
is_uploaded_file — Indique si le fichier a été téléchargé par HTTP POST
link — Crée un lien.
linkinfo — Renvoie les informations à propos d'un lien.
mkdir — Crée un dossier.
move_uploaded_file — Déplace un fichier téléchargé.
pclose — Ferme un processus de pointeur de fichier.
popen — Crée un processus de pointeur de fichier.
readfile — Affiche un fichier.
readlink — Renvoie le nom du fichier vers lequel pointe un lien symbolique.
rename — Renomme un fichier.
rewind — Replace le pointeur de fichier au début.
rmdir — Efface un dossier.
stat — Renvoie les informations à propos d'un fichier.
lstat — Renvoie les informations à propos d'un fichier ou d'un lien symbolique.
realpath — Retourne le chemin canonique absolu.
symlink — Crée un lien symbolique.
tempnam — Crée un fichier avec un nom unique.
tmpfile — Crée un fichier temporaire
touch — Affecte une nouvelle date de modification à un fichier.
umask — Change le "umask" courant.
unlink — Efface un fichier.

basename

(PHP 3, PHP 4 )

basename --  Sépare le nom du fichier et le nom du dossier.

Description

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éparateur 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 )

chgrp -- Change le groupe possesseur du fichier.

Description

int chgrp (string filename, mixed group)

chgrp() essaie de changer le groupe propriétaire du fichier. Seul le superuser (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.

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 )

chmod -- Change le mode du fichier.

Description

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):


chmod( "/somedir/somefile", 755 );   // notation décimale; probablement FALSE chmod( "/somedir/somefile", 0755 );  // notation octale; valeur du mode correcte
      

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 )

chown -- Change le groupe propriétaire du fichier.

Description

int chown (string filename, mixed user)

chown() change le groupe propriétaire du fichier. Seul le superutilisateur (root) peut changer le propriétaire d'un fichier.

Renvoie TRUE en cas de succès, "FALSE" sinon.

Note : Sous Windows, ne fait rien et retourne TRUE.

Voir aussi chown() et chmod().

Note : chown() est inopérante sous Windows.

clearstatcache

(PHP 3, PHP 4 )

clearstatcache -- Efface le cache de la fonction "stat".

Description

void clearstatcache(void);

L'appel à la fonction stat ou lstat est relativement couteux 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 )

copy -- Copie un fichier.

Description

int copy (string source, string dest)

copy() fait une copie du fichier. Elle renvoie TRUE en cas de succès, FALSE sinon.

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)

delete -- Effacer

Description

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, unset() pour effacer des variables.

dirname

(PHP 3, PHP 4 )

dirname -- Renvoie le nom du dossier.

Description

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)

diskfreespace --  Renvoie l'espace disque disponible dans le répertoire.

Description

float diskfreespace (string directory)

diskfreespace() retournera le nombre d'octets disponible sur le disque correspondant contenant le dossier directory.

Exemple 1. Exemple avec diskfreespace()


<?php
$df = diskfreespace("/"); // $df contient le nombre d'octets libres sur "/"
?>
      

fclose

(PHP 3, PHP 4 )

fclose -- Ferme un fichier.

Description

int fclose (int 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 )

feof -- Teste la fin du fichier.

Description

int feof (int 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().

fflush

(PHP 4 >= 4.0.1)

fflush --  Envoi tout le contenu généré dans un fichier

Description

int fflush (int fp)

fflush() forces 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 )

fgetc --  Renvoie le caractère que pointe le pointeur du fichier.

Description

string fgetc (int 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 )

fgetcsv --  Renvoie la ligne courante sur laquelle se trouve le pointeur du fichier et cherche dans le résultat les champs CSV

Description

array fgetcsv (int 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() 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.


<?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);
?>
     

fgets

(PHP 3, PHP 4 )

fgets --  Renvoie la ligne courante sur laquelle se trouve le pointeur du fichier.

Description

string fgets (int fp, int length)

fgets() retourne la chaîne lue jusqu'à la longueur length - 1 octets, ou bien la fin du fichier, ou encore un retour chariot (le premier des trois qui sera rencontré).

Si une erreur survient, 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 )

fgetss --  Renvoie la ligne courant sur laquelle se trouve le pointeur du fichier et élimine les balises HTML

Description

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 )

file --  Lit le fichier et renvoie le résultat dans un tableau.

Description

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.

Vous pouvez utiliser l'option et en la mettant à "1", si vous voulez rechercher 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 )

file_exists -- Vérifie si un fichier existe.

Description

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 )

fileatime --  Renvoie la date à laquelle le fichier a été accédé pour la dernière fois.

Description

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.

Le résultat de fileatime() est mis en cache. Reportez vous à clearstatcache() pour plus de détails.

filectime

(PHP 3, PHP 4 )

filectime --  Renvoie l'heure à laquelle l'inode a été accédé pour la dernière fois.

Description

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.

Le résultat de filectime() est mis en cache. Reportez vous à clearstatcache() pour plus de détails.

filegroup

(PHP 3, PHP 4 )

filegroup -- Lire le nom du groupe

Description

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.

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 )

fileinode -- Renvoie le numéro d'inode du fichier.

Description

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.

Note : fileinode() est inopérante sous Windows.

filemtime

(PHP 3, PHP 4 )

filemtime --  Renvoie la date de dernière modification du fichier.

Description

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.

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

fileowner

(PHP 3, PHP 4 )

fileowner -- Renvoie le nom du possesseur du fichier.

Description

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.

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 )

fileperms --  Renvoie les permissions affectées au fichier.

Description

int fileperms (string filename)

fileperms() renvoie les permissions affectées au fichier filename, ou FALSE en cas d'erreur.

Le résultat de fileperms() est mis en cache. Reportez vous à clearstatcache() pour plus de détails.

filesize

(PHP 3, PHP 4 )

filesize -- Renvoie la taille du fichier.

Description

int filesize (string filename)

filesize() renvoie la taille du fichier filename, ou FALSE en cas d'erreur.

Le résultat de filesize() est mis en cache. Reportez vous à clearstatcache() pour plus de détails.

filetype

(PHP 3, PHP 4 )

filetype -- Retourne le type de fichier

Description

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.

Le résultat de filetype() est mis en cache. Reportez vous à clearstatcache() pour plus de détails.

flock

(PHP 3>= 3.0.7, PHP 4 )

flock -- Verrouille le fichier.

Description

bool 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 plateforme (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 plus part 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 concurents du même serveur.

fopen

(PHP 3, PHP 4 )

fopen -- Ouverture d'un fichier ou d'une URL.

Description

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

Attention, fopen() ne gère pas les redirections, 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 dans 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.

  • '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 inutile sous Unix). Si 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:password@example.com/", "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 )

fpassthru --  Affiche la partie du fichier située après le pointeur du fichier.

Description

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

fputs

(PHP 3, PHP 4 )

fputs -- Ecrit dans un fichier.

Description

int fputs (int fp, string str [, int length])

fputs() est un alias de fwrite(), et lui est identique en tout point. Notez que length est un paramètre optionnel, et si il n'est pas spécifié, toute la chaîne est écrite.

fread

(PHP 3, PHP 4 )

fread -- Lecture du fichier en mode binaire.

Description

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/something.txt";
$fd = fopen ($filename, "r");
$contents = fread ($fd, filesize ($filename));
fclose ($fd);
?>
      

Voir aussi fwrite(), fopen(), fsockopen(), popen(), fgets(), fgetss(), file(), et fpassthru().

fscanf

(PHP 4 >= 4.0.1)

fscanf -- Analyse un fichier en fonction d'un format

Description

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 parsées seront retournées sous forme de tableau. Si des arguments optionnels sont passés, la fonction retournera le nombre de valeurs assignées. Les options doivent etre 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        gr
rodin  sculpteur        fr
som  oncle us
leonard   inventeur it
      

Voir aussi fread(), fgets(), fgetss(), sscanf(), printf(), et sprintf().

fseek

(PHP 3, PHP 4 )

fseek -- Modifie le pointeur de fichier.

Description

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.

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)

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

Description

array fstat (int fp)

fstat() rassemble les informations sur le fichier dont on connait 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

  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 supporte le type st_blksize typeßles autres systèmes (i.e. Windows) retourne -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 )

ftell -- Renvoie la position du pointeur du fichier.

Description

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)

ftruncate -- Tronque une fichier.

Description

int ftruncate (int fp, int size)

ftruncate() prend le pointeur de fichier fp et le tronque à la taille de size. La fonction retourne TRUE en cas de succès, et FALSE sinon.

fwrite

(PHP 3, PHP 4 )

fwrite -- Ecriture du fichier en mode binaire.

Description

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.

Voir aussi fread(), fopen(), fsockopen(), popen(), et fputs().

set_file_buffer

(PHP 3>= 3.0.8, PHP 4 >= 4.0.1)

set_file_buffer --  Fixe la bufferisation de fichier

Description

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 essaie 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 l'écriture de toutes les données par un processus avant que les autres puisse accéder au fichier.

La fonction 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(), fwrite().

is_dir

(PHP 3, PHP 4 )

is_dir -- Indique si le nom de fichier est un dossier.

Description

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

Voir aussi is_file() et is_link().

is_executable

(PHP 3, PHP 4 )

is_executable -- Indique si le fichier est exécutable.

Description

bool is_executable (string filename)

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.

Voir aussi is_file() et is_link().

is_file

(PHP 3, PHP 4 )

is_file --  Indique si le fichier est un véritable fichier.

Description

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

Voir aussi is_dir() et is_link().

is_link

(PHP 3, PHP 4 )

is_link --  Indique si le fichier est un lien symbolique.

Description

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

Voir aussi is_dir() et is_file().

Note : is_link() est inopérante sous Windows.

is_readable

(PHP 3, PHP 4 )

is_readable -- Indique un fichier est autorisé en lecture

Description

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

Voir aussi is_writable().

is_writable

(PHP 4 >= 4.0b2)

is_writable -- Indique un fichier est autorisé en lecture.

Description

bool is_writable (string filename)

is_writable() 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_writable() est mis en cache. Voir la fonction clearstatcache() pour plus de détails.

Voir aussi is_readable().

is_uploaded_file

(PHP 3>= 3.0.17, PHP 4 >= 4.0.3)

is_uploaded_file --  Indique si le fichier a été téléchargé par HTTP POST

Description

bool 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érfication est spécialement important si 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 )

link -- Crée un lien.

Description

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.

linkinfo

(PHP 3, PHP 4 )

linkinfo -- Renvoie les informations à propos d'un lien.

Description

int linkinfo (string path)

linkinfo() renvoie les informations à propos d'un lien le champs st_dev de la structure d'information d' 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 )

mkdir -- Crée un dossier.

Description

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 :


<?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)

move_uploaded_file -- Déplace un fichier téléchargé.

Description

bool 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érfication 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.

pclose

(PHP 3, PHP 4 )

pclose -- Ferme un processus de pointeur de fichier.

Description

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 )

popen -- Crée un processus de pointeur de fichier.

Description

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


<?php
$fp = popen ("/bin/ls", "r");
?>
      

Voir aussi pclose().

readfile

(PHP 3, PHP 4 )

readfile -- Affiche un fichier.

Description

int readfile (string filename [, int use_include_path])

readfile() lit le fichier filename et l'envoi à 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.

ATTENTION : PHP ne gère pas les redirections, donc il faut penser à ajouter un "/" final pour les dossiers.

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 )

readlink --  Renvoie le nom du fichier vers lequel pointe un lien symbolique.

Description

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 )

rename -- Renomme un fichier.

Description

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.

rewind

(PHP 3, PHP 4 )

rewind -- Replace le pointeur de fichier au début.

Description

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 )

rmdir -- Efface un dossier.

Description

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, retourne FALSE.

Voir aussi mkdir().

stat

(PHP 3, PHP 4 )

stat -- Renvoie les informations à propos d'un fichier.

Description

array stat (string filename)

stat() renvoie les informations à propos du fichier filename.

stat() retourne un tableau avec les éléments suivants :

  1. volume

  2. inode

  3. droits d'accès au fichier (mode de protection du inode). A convertir en octal. Voir aussi fperms().

  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 supporte le type st_blksize type les autres systèmes (i.e. Windows) retourne -1.

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 )

lstat --  Renvoie les informations à propos d'un fichier ou d'un lien symbolique.

Description

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 :

  1. volume

  2. inode

  3. droits d'accès au fichier (mode de protection du inode). A convertir en octal. Voir aussi fperms().

  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 supporte le type st_blksize type les autres systèmes (i.e. Windows) retourne -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)

realpath -- Retourne le chemin canonique absolu.

Description

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");
?>
      

symlink

(PHP 3, PHP 4 )

symlink -- Crée un lien symbolique.

Description

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 )

tempnam -- Crée un fichier avec un nom unique.

Description

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.

Le comportement de tempnam() dépend du système. Sous Windows, la variable d'environnement TMP sera prioritaire par rapport au paramètre dir; sous Linux la variable d'environnement TMPDIR aura la priorité, tandis que l'OS SVR4 utilisera toujours le paramètre dir si le dossier n'existe pas. Reportez vous à la documentation de votre système(tempnam(3)).

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)

tmpfile -- Crée un fichier temporaire

Description

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é par fopen(). Ce fichier sera automatiquement effacé lorsqu'il sera fermé (avec fclose()), ou lorsque le fichier sera termniné.

Pour plus de détails, consultez votre documentation système sur la fonction tmpfile(3), et sur stdio.h.

Voir aussi tempnam().

touch

(PHP 3, PHP 4 )

touch --  Affecte une nouvelle date de modification à un fichier.

Description

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

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 )

umask -- Change le "umask" courant.

Description

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 )

unlink -- Efface un fichier.

Description

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() peut ne pas fonctionner sous Windows.

XXIII. 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'entê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);
?>
     
Table des matières
fdf_open — Ouvre un document FDF.
fdf_close — Ferme une document FDF.
fdf_create — Crée un nouveau document FDF.
fdf_save — Sauver un document FDF.
fdf_get_value — Mot la valeur d'un champs.
fdf_set_value — Fixe la valeur d'un champs.
fdf_next_field_name — Lit le nom du champs suivant.
fdf_set_ap — Fixe l'apparence d'un champs.
fdf_set_status — Fixe la valeur de la clé /STATUS.
fdf_get_status — Lit la valeur de la clé /STATUS.
fdf_set_file — Fixe la valeur de la clé /F.
fdf_get_file — Lit la valeur de la clé /F.
fdf_set_flags — Modifie une option d'un champs
fdf_set_opt — Modifie une option d'un champs
fdf_set_submit_form_action — Modifie l'action javascript d'un champs
fdf_set_javascript_action — Modifie l'action javascript d'un champs

fdf_open

(PHP 3>= 3.0.6, PHP 4 )

fdf_open -- Ouvre un document FDF.

Description

int 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 )

fdf_close -- Ferme une document FDF.

Description

boolean fdf_close (int fdf_document)

fdf_close() ferme le document FDF.

Voir aussi fdf_open().

fdf_create

(PHP 3>= 3.0.6, PHP 4 )

fdf_create -- Crée un nouveau document FDF.

Description

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é rempir 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");
$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 )

fdf_save -- Sauver un document FDF.

Description

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 )

fdf_get_value -- Mot la valeur d'un champs.

Description

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 )

fdf_set_value -- Fixe la valeur d'un champs.

Description

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 determine 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 )

fdf_next_field_name -- Lit le nom du champs suivant.

Description

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

fdf_set_ap

(PHP 3>= 3.0.6, PHP 4 )

fdf_set_ap -- Fixe l'apparence d'un champs.

Description

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 )

fdf_set_status -- Fixe la valeur de la clé /STATUS.

Description

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 )

fdf_get_status -- Lit la valeur de la clé /STATUS.

Description

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 )

fdf_set_file -- Fixe la valeur de la clé /F.

Description

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 )

fdf_get_file -- Lit la valeur de la clé /F.

Description

string fdf_get_file (int fdf_document)

fdf_set_file() lit la valeur de la clé /F.

Voir aussi fdf_set_file().

fdf_set_flags

(PHP 4 >= 4.0.2)

fdf_set_flags -- Modifie une option d'un champs

Description

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)

fdf_set_opt -- Modifie une option d'un champs

Description

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)

fdf_set_submit_form_action -- Modifie l'action javascript d'un champs

Description

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)

fdf_set_javascript_action -- Modifie l'action javascript d'un champs

Description

boolean fdf_set_javascript_action (int fdf_document, string fieldname, int trigger, string script)

The 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().

XXIV. FTP

FTP : File Transfer Protocol (Protocole de transfert de fichiers).

Les constantes suivantes sont définies dans le module FTP : FTP_ASCII et FTP_BINARY.

Exemple 1. Exemple de connexion FTP


<?php
// création de la connection
$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);
?>
     

Table des matières
ftp_connect — Ouvre une connexion FTP
ftp_login — Authentification d'une connexion FTP
ftp_pwd — Retourne le nom du dossier courant.
ftp_cdup — Change de dossier, et passe au dossier parent.
ftp_chdir — Change le dossier courant.
ftp_mkdir — Crée un dossier.
ftp_rmdir — Efface un dossier.
ftp_nlist — Retourne la liste des fichiers dans un dossier.
ftp_rawlist — Fait une liste détaillée de fichier dans un dossier.
ftp_systype — Retourne un identifiant de type de serveur FTP.
ftp_pasv — Active ou désactive le mode passif.
ftp_get — Télécharge un fichier depuis un serveur FTP.
ftp_fget — Télécharge un fichier depuis un serveur FTP et le sauve dans un fichier déjà ouvert.
ftp_put — Charge un fichier sur un serveur FTP.
ftp_fput — Charge un fichier ouvert sur un serveur FTP.
ftp_size — Retourne la taille d'un fichier.
ftp_mdtm — Retourne la date de dernière modification d'un fichier sur un serveur FTP.
ftp_rename — Renomme un fichier sur un serveur FTP.
ftp_delete — Efface un fichier sur un serveur FTP.
ftp_site — Envoie la commande SITE au serveur.
ftp_quit — Ferme une connexion FTP.

ftp_connect

(PHP 3>= 3.0.13, PHP 4 >= 4.0b4)

ftp_connect -- Ouvre une connexion FTP

Description

int 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. Si il est omis, le port 21 sera utilisé.

ftp_login

(PHP 3>= 3.0.13, PHP 4 >= 4.0b4)

ftp_login -- Authentification d'une connexion FTP

Description

int ftp_login (int 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)

ftp_pwd -- Retourne le nom du dossier courant.

Description

int ftp_pwd (int 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)

ftp_cdup -- Change de dossier, et passe au dossier parent.

Description

int ftp_cdup (int 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)

ftp_chdir -- Change le dossier courant.

Description

int ftp_chdir (int ftp_stream, string directory)

ftp_chdir() retourne TRUE en cas de succès, et FALSE sinon.

ftp_chdir() change le dossier courant en directory.

ftp_mkdir

(PHP 3>= 3.0.13, PHP 4 >= 4.0b4)

ftp_mkdir -- Crée un dossier.

Description

string ftp_mkdir (int 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)

ftp_rmdir -- Efface un dossier.

Description

int ftp_rmdir (int 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)

ftp_nlist -- Retourne la liste des fichiers dans un dossier.

Description

int ftp_nlist (int 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)

ftp_rawlist --  Fait une liste détaillée de fichier dans un dossier.

Description

int ftp_rawlist (int 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ésutltat.

ftp_systype

(PHP 3>= 3.0.13, PHP 4 >= 4.0b4)

ftp_systype --  Retourne un identifiant de type de serveur FTP.

Description

int ftp_systype (int ftp_stream)

ftp_systype() retourne le type de serveur, ou FALSE en cas d'erreur.

ftp_pasv

(PHP 3>= 3.0.13, PHP 4 >= 4.0b4)

ftp_pasv -- Active ou désactive le mode passif.

Description

int ftp_pasv (int 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)

ftp_get --  Télécharge un fichier depuis un serveur FTP.

Description

int ftp_get (int 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)

ftp_fget --  Télécharge un fichier depuis un serveur FTP et le sauve dans un fichier déjà ouvert.

Description

int ftp_fget (int 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)

ftp_put -- Charge un fichier sur un serveur FTP.

Description

int ftp_put (int 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)

ftp_fput -- Charge un fichier ouvert sur un serveur FTP.

Description

int ftp_fput (int ftp_stream, string remote_file, int fp, int mode)

ftp_fput() retourne TRUE en cas de succès, et FALSEsinon.

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)

ftp_size --  Retourne la taille d'un fichier.

Description

int ftp_size (int 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 ficheir 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)

ftp_mdtm --  Retourne la date de dernière modification d'un fichier sur un serveur FTP.

Description

int ftp_mdtm (int ftp_stream, string remote_file)

ftp_mdtm() retourne un UNIX timestamp en cas de succès, et FALSEsinon.

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)

ftp_rename -- Renomme un fichier sur un serveur FTP.

Description

int ftp_rename (int ftp_stream, string from, string to)

ftp_rename() retourne TRUE en cas de succès, et FALSE sinon.

ftp_rename() renomme le fichier from en to.

ftp_delete

(PHP 3>= 3.0.13, PHP 4 >= 4.0b4)

ftp_delete -- Efface un fichier sur un serveur FTP.

Description

int ftp_delete (int ftp_stream, string path)

ftp_delete() retourne TRUE en cas de succès, et FALSEsinon.

ftp_delete() efface le fichier path sur un serveur FTP.

ftp_site

(PHP 3>= 3.0.15, PHP 4 >= 4.0RC1)

ftp_site -- Envoie la commande SITE au serveur.

Description

int ftp_site (int ftp_stream, string cmd)

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)

ftp_quit -- Ferme une connexion FTP.

Description

int ftp_quit (int ftp_stream)

ftp_connect() ferme la connexion ftp_stream.

XXV. Fonctions

Ces fonctions effectuent les manipulations liées à la gestion des fonctions.

Table des matières
call_user_func — Appelle une fonction utilisateur
create_function — Crée une fonction anonyme (style lambda)
func_get_arg — Retourne un élément de la liste des arguments
func_get_args — Retourne les arguments d'une fonction sous forme de tableau
func_num_args — Retourne le nombre d'arguments passé à la fonction
function_exists — Retourne TRUE si la fonction a déjà été définie.
register_shutdown_function — Enregistre une fonction pour exécution à l'extinction

call_user_func

(PHP 3>= 3.0.3, PHP 4 )

call_user_func --  Appelle une fonction utilisateur

Description

mixed call_user_func (string function_name [, mixed parameter [, mixed ...]])

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");
      

create_function

(PHP 4 >= 4.0.1)

create_function -- Crée une fonction anonyme (style lambda)

Description

string create_function (string args, string code)

Cette fonction crée une fonction anonyme, à partir des paramètres passés, et retourne un nom 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. Creation d'une fonction anonmye 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";
}
// creation 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


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)

func_get_arg --  Retourne un élément de la liste des arguments

Description

mixed func_get_arg (int arg_num)

Retourne l'argument à la position arg_num dans la liste d'argument d'une fonction utilisateur. Les arguments sont comptés en commencant à 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 : Cette fonction a été ajoutée dans PHP 4.

func_get_args

(PHP 4 >= 4.0b4)

func_get_args --  Retourne les arguments d'une fonction sous forme de tableau

Description

array func_get_args (void )

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 : Cette fonction a été ajoutée dans PHP 4.

func_num_args

(PHP 4 >= 4.0b4)

func_num_args --  Retourne le nombre d'arguments passé à la fonction

Description

int func_num_args (void )

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 : Cette fonction a été ajoutée dans PHP 4.

function_exists

(PHP 3>= 3.0.7, PHP 4 )

function_exists --  Retourne TRUE si la fonction a déjà été définie.

Description

bool function_exists (string function_name)

Vérifie la liste des fonctions définies par l'utilisateur, et retourne TRUE si function_name y est trouvé, FALSE sinon.


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

register_shutdown_function

(PHP 3>= 3.0.4, PHP 4 )

register_shutdown_function --  Enregistre une fonction pour exécution à l'extinction

Description

int register_shutdown_function (string func)

Enregistre la fonction func pour exécution à l'extinction du script.

Erreur courante :

Etant donné qu'aucuna affichage n'est possible depuis cette fonction, vous ne pouvez pas mettre d'informations de débuggage par print ou echo ici!

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

Table des matières
bindtextdomain — Fixe le chemin d'un domaine.
dcgettext — Remplace le domaine lors d'une recherche.
dgettext — Remplace le domaine courant.
gettext — Recherche un message dans le domaine courant.
textdomain — Fixe le domaine par défaut.

bindtextdomain

(PHP 3>= 3.0.7, PHP 4 )

bindtextdomain -- Fixe le chemin d'un domaine.

Description

string bindtextdomain (string domain, string directory)

bindtextdomain() fixe le chemin du domaine domain à directory.

dcgettext

(PHP 3>= 3.0.7, PHP 4 )

dcgettext -- Remplace le domaine lors d'une recherche.

Description

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 )

dgettext -- Remplace le domaine courant.

Description

string dgettext (string domain, string message)

dgettext() remplace le domaine courant.

gettext

(PHP 3>= 3.0.7, PHP 4 )

gettext -- Recherche un message dans le domaine courant.

Description

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"));
?>
     

textdomain

(PHP 3>= 3.0.7, PHP 4 )

textdomain -- Fixe le domaine par défaut.

Description

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.

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

Table des matières
gmp_init — Crée un nombre GMP
gmp_intval — Convertit un nombre GMP en entier.
gmp_strval — Convertit un nombre GMP en chaîne
gmp_add — Addition de 2 nombres GMP
gmp_sub — Soustraction de 2 nombres GMP
gmp_mul — Multiplication de 2 nombres GMP
gmp_div_q — Divisions de 2 nombres GMP
gmp_div_r — Reste de la division de deux nombres GMP
gmp_div_qr — Divise deux nombres GMP
gmp_div — Divise deux nombres GMP
gmp_mod — Modulo GMP
gmp_divexact — Division exacte de nombres GMP
gmp_cmp — Compare des nombres GMP
gmp_neg — Opposé de nombre GMP
gmp_abs — Valeur absolue GMP
gmp_sign — Signe du nombre GMP
gmp_fact — Factorielle GMP
gmp_sqrt — Racine carrée GMP
gmp_sqrtrm — Racine carrée avec reste GMP
gmp_perfect_square — Carré parfait GMP
gmp_pow — Puissance
gmp_powm — Puissance et modulo
gmp_prob_prime — Nombre GMP probablement premier
gmp_gcd — PGCD
gmp_gcdext — PGCD étendu
gmp_invert — Inverse modulo
gmp_legendre — Symbole de Legendre
gmp_jacobi — Symbole de Jacobi
gmp_random — Nombre GMP aléatoire
gmp_and — ET logique
gmp_or — OU logique
gmp_xor — OU exclusif logique
gmp_setbit — Modifie un bit
gmp_clrbit — Annule un bit
gmp_scan0 — Recherche 0
gmp_scan1 — Recherche 0
gmp_popcount — Compte de population
gmp_hamdist — Distance de Hamming

gmp_init

(unknown)

gmp_init -- Crée un nombre GMP

Description

resource gmp_init (mixed number)

gmp_init() crée un nombre GMP, à partir d'un entier ou d'une chaîne. Les chaînes peuvent être en décimal ou en hexadécimal. Dans ce dernier cas, la chaîne doit commencer par0x.

Exemple 1. Création d'un nombre GMP


<?php
  $a = gmp_init(123456);
  $b = gmp_init("0xFFFFDEBACDFEDF7200");
?>
	  

Note : Il n'est pas nécessaire d'appeler cette fonction si vous voulez utiliser des entiers ou des chaînes à la place de nombre GMP dans les fonctions GMP, comme par exemple gmp_add(). Les arguments de cette fonction sont automatiquement convertis en nombres GMP, si cette conversion est possible et nécessaire, en utilisant les mêmes règles que gmp_init().

gmp_intval

(unknown)

gmp_intval -- Convertit un nombre GMP en entier.

Description

int gmp_intval (resource gmpnumber)

gmp_intval() convertit un nombre GMP en entier.

Avertissement

gmp_intval() retourne un résultat cohérent uniquement si le nombre GMP peut être représenté par un entier PHP (i.e. type long signé). Si vous vous voulez simplement afficher un nombre GMP, utilisez plutôt gmp_strval().

gmp_strval

(unknown)

gmp_strval -- Convertit un nombre GMP en chaîne

Description

string gmp_strval (resource gmpnumber [, int base])

gmp_strval() convertit un nombre GMP en chaîne de caractères, dans la base base. La base par défaut est 10. Les valeurs possibles vont de 2 à 36.

Exemple 1. Conversion d'un nombre GMP en chaîne


<?php
  $a = gmp_init("0x41682179fbf5");
  printf("Décimal: %s, base 36: %s", gmp_strval($a), gmp_strval($a,36));
?>
	  

gmp_add

(unknown)

gmp_add -- Addition de 2 nombres GMP

Description

resource gmp_add (resource a, resource b)

gmp_add() additionne les nombres GMP a et b. Le résultat est un nombre GMP.

gmp_sub

(unknown)

gmp_sub -- Soustraction de 2 nombres GMP

Description

resource gmp_sub (resource a, resource b)

gmp_sub() soustrait le nombre GMP b de a. Le résultat est un nombre GMP.

gmp_mul

(unknown)

gmp_mul -- Multiplication de 2 nombres GMP

Description

resource gmp_mul (resource a, resource b)

gmp_mul() multiplie les nombres GMP a et b. Le résultat est un nombre GMP.

gmp_div_q

(unknown)

gmp_div_q -- Divisions de 2 nombres GMP

Description

resource gmp_div_q (resource a, resource b [, int round])

gmp_div_q() divise le nombre GMP b par a. Le résultat est un entier. L'arrondi du résultat est défini par round, qui peut prendre l'une des valeurs suivantes :

  • GMP_ROUND_ZERO: Le résultat est tronqué vers 0.

  • GMP_ROUND_PLUSINF: Le résultat est tronqué vers +infinity

  • GMP_ROUND_MINUSINF: Le résultat est tronqué vers -infinity

gmp_div_q() peut aussi être appelée gmp_div().

Voir aussi gmp_div_r(), gmp_div_qr().

gmp_div_r

(unknown)

gmp_div_r -- Reste de la division de deux nombres GMP

Description

resource gmp_div_r (resource n, resource d [, int round])

gmp_div_r() le reste de la division entière de n par d. Le reste a le même signe que n, s'il est non nul.

Voir gmp_div_q() pour une description du parmètre round.

Voir aussi gmp_div_q(), gmp_div_qr().

gmp_div_qr

(unknown)

gmp_div_qr -- Divise deux nombres GMP

Description

array gmp_div_qr (resource n, resource d [, int round])

gmp_div_qr() divise n par d et retourne un tableau, dont le premier élément est [n/d] (le quotient entier de la division) et le second est (n - [n/d] * d) (le reste).

Voir gmp_div_q() pour une description du parmètre round.

Exemple 1. Division de nombres GMP


<?php
  $a = gmp_init("0x41682179fbf5");
  $res = gmp_div_qr($a, "0xDEFE75");
  printf("Le résultat est: q - %s, r - %s", gmp_strval($res[0]), gmp_strval($res[1]));
?>
		

Voir aussi gmp_div_q(), gmp_div_r().

gmp_div

(unknown)

gmp_div -- Divise deux nombres GMP

Description

resource gmp_divexact (resource a, resource b)

gmp_divexact() est un alias de gmp_div_q().

gmp_mod

(unknown)

gmp_mod -- Modulo GMP

Description

resource gmp_mod (resource n, resource d)

gmp_mod() calcule n modulo d. Le résultat est toujours positif ou nul, car le signe de d est ignoré.

gmp_divexact

(unknown)

gmp_divexact -- Division exacte de nombres GMP

Description

resource gmp_divexact (resource n, resource d)

gmp_divexact() divis n par d, en utilisant les algorithmes de "division exacte". Cette fonction ne fournit de résultats cohérents que s'il est su par avance que d divise n.

gmp_cmp

(unknown)

gmp_cmp -- Compare des nombres GMP

Description

int gmp_cmp (resource a, resource b)

gmp_cmp() retourne une valeur positive si a > b, zéro si a = b et négative si a < b.

gmp_neg

(unknown)

gmp_neg -- Opposé de nombre GMP

Description

resource gmp_neg (resource a)

gmp_neg() retourne l'opposé de gmp_neg()a (-a).

gmp_abs

(unknown)

gmp_abs -- Valeur absolue GMP

Description

resource gmp_abs (resource a)

gmp_abs() retourne la valeur absolue de a.

gmp_sign

(unknown)

gmp_sign -- Signe du nombre GMP

Description

int gmp_sign (resource a)

gmp_sign() retourne le signe de a : 1 si a est positif et -1 s'il est négatif.

gmp_fact

(unknown)

gmp_fact -- Factorielle GMP

Description

resource gmp_fact (int a)

gmp_fact() calcule la factorielle de a : a!.

gmp_sqrt

(unknown)

gmp_sqrt -- Racine carrée GMP

Description

resource gmp_sqrt (resource a)

gmp_sqrt() calcule la racine carrée de a.

gmp_sqrtrm

(unknown)

gmp_sqrtrm -- Racine carrée avec reste GMP

Description

array gmp_sqrtrm (resource a)

gmp_sqrtrm() retourne un tableau dont le premier élément est la racine carrée entière de a (voir aussi gmp_sqrt()), et le second est le reste de (i.e., la différence entre a et le carré du premier élément).

gmp_perfect_square

(unknown)

gmp_perfect_square -- Carré parfait GMP

Description

bool gmp_perfect_square (resource a)

gmp_perfect_square() retourn TRUE si a est un carré parfait, et FALSE sinon.

Voir aussi : gmp_sqrt(), gmp_sqrtrm().

gmp_pow

(unknown)

gmp_pow -- Puissance

Description

resource gmp_pow (resource base, int exp)

gmp_pow() élève base à la puissance exp. Dans le cas de 0^0, gmp_pow() retourne 1.exp ne doit pas être négatif.

gmp_powm

(unknown)

gmp_powm -- Puissance et modulo

Description

resource gmp_powm (resource base, resource exp, resource mod)

gmp_powm() calcule (base puissnace exp) modulo mod. Si exp est négatif, le résultat est indéfini.

gmp_prob_prime

(unknown)

gmp_prob_prime -- Nombre GMP probablement premier

Description

int gmp_prob_prime (resource a [, int reps])

Si gmp_prob_prime() retourne 0, a est défini comme non premier. Si gmp_prob_prime() retourne 1, alors a est "probablement" premier. Si gmp_prob_prime() retourne 2, alors a est sÛrement premier. reps peut raisonnablement varier de 5 à 10 (par défaut, c'est 10); une valeur supérieure réduit la probabilité qu'un nombre non premier soit identifié comme "probablement" premier.

Cette focntion utilise le teste de probabilité Miller-Rabin.

gmp_gcd

(unknown)

gmp_gcd -- PGCD

Description

resource gmp_gcd (resource a, resource b)

gmp_gcd() calcule de PGCD (plus grand commun diviseur) de a et b. Le résultat est toujours positif, même si l'un des deux (ou les deux) nombres est négatif.

gmp_gcdext

(unknown)

gmp_gcdext -- PGCD étendu

Description

array gmp_gcdext (resource a, resource b)

gmp_gcdext() calcule les enti