Manuel PHP

par:
Mehdi Achour
Friedhelm Betz
Antony Dovgal
Nuno Lopes
Hannes Magnusson
Georg Richter
Damien Seguy
Jakub Vrana
2012-05-04
Édité par: Philip Olson
par:
Frédéric Blanc Traducteur
Vincent Blanchon Traducteur
Pierrick Charron Traducteur
Julien Pauli Traducteur
Mickaël Perraud Relecteur
Guillaume Plessis Traducteur
Yannick Torrès Traducteur
par:
Mehdi Achour
Vincent Briet
Jean-Sébastien Goupil
David Manusset
Damien Seguy

Copyright

Copyright @ 1997 - 2012 par le PHP Documentation Group. Ce document ne peut être redistribué qu'aux termes et aux conditions mentionnés dans la licence Open Publication License, version 1.0 ou plus récente. Une copie de la licence Creative Commons Attribution 3.0 est distribuée avec ce manuel ; la dernière version est disponible à » http://creativecommons.org/licenses/by/3.0/.

Dans le cas où vous seriez intéressés par la distribution partielle ou totale de ce document (modifié ou non) ou auriez des questions, merci de contacter les propriétaires du Copyright à » doc-license@lists.php.net. Notez que cette adresse courriel est directement redirigée vers une liste de diffusion publique et archivée.



Manuel PHP


Préface

PHP est un acronyme récursif, qui signifie "PHP: Hypertext Preprocessor" : c'est un langage de script HTML, exécuté côté serveur. Sa syntaxe est empruntée aux langages C, Java et Perl, et est facile à apprendre. Le but de ce langage est de permettre aux développeurs web d'écrire des pages dynamiques rapidement, mais vous pouvez faire beaucoup plus avec PHP.

Ce manuel est essentiellement une référence des fonctions, mais il contient aussi des informations de référence sur le langage, des explications sur les fonctionnalités principales de PHP et diverses informations supplémentaires.

Vous pouvez télécharger ce manuel sous divers formats, sur » http://www.php.net/download-docs.php. Plus d'informations sur ce manuel sont disponibles dans l'appendice À propos du manuel. Si vous voulez découvrir l'histoire de PHP.

Auteurs et Contributeurs

Nous mettons en avant les personnes les plus actives dans la préface du manuel mais il y a bien plus de contributeurs qui nous aident actuellement dans notre travail ou qui ont fournis une aide précieuse au projet dans le passé. Il y a beaucoup d'inconnus qui nous ont aidés à travers leurs notes concernant les pages du manuel qui sont continuellement incluses dans le manuel, travail dont nous sommes très reconnaissants. La liste fournie ci-dessous est classée par ordre alphabétique.

Auteurs et Éditeurs

Les contributeurs suivants ont eu un impact énorme en ajoutant du contenu dans le manuel : Bill Abt, Jouni Ahto, Alexander Aulbach, Daniel Beckham, Stig Bakken, Nilgün Belma Bugüner, Jesus M. Castagnetto, Ron Chmara, Sean Coates, John Coggeshall, Simone Cortesi, Peter Cowburn, Daniel Egeberg, Markus Fischer, Wez Furlong, Sara Golemon, Rui Hirokawa, Brad House, Pierre-Alain Joye, Etienne Kneuss, Moriyoshi Koizumi, Rasmus Lerdorf, Andrew Lindeman, Stanislav Malyshev, Justin Martin, Rafael Martinez, Rick McGuire, Moacir de Oliveira Miranda Júnior, Kalle Sommer Nielsen, Yasuo Ohgaki, Richard Quadling, Derick Rethans, Rob Richards, Sander Roobol, Egon Schmid, Thomas Schoefbeck, Sascha Schumann, Dan Scott, Masahiro Takagi, Yannick Torres, Michael Wallner, Lars Torben Wilson, Jim Winstead, Jeroen van Wolffelaar et Andrei Zmievski.

Les contributeurs suivants ont énormément aidé dans l'édition du manuel : Stig Bakken, Gabor Hojtsy, Hartmut Holzgraefe et Egon Schmid.

Mainteneurs des notes utilisateurs

Les mainteneurs actuellement les plus actifs sont : Daniel Brown, Nuno Lopes, Felipe Pena, Thiago Pojda et Maciek Sokolewicz.

Ces personnes ont également déployé énormément d'efforts dans le maintien des notes utilisateurs : Mehdi Achour, Daniel Beckham, Friedhelm Betz, Victor Boivie, Jesus M. Castagnetto, Nicolas Chaillan, Ron Chmara, Sean Coates, James Cox, Vincent Gevers, Sara Golemon, Zak Greant, Szabolcs Heilig, Oliver Hinckel, Hartmut Holzgraefe, Etienne Kneuss, Rasmus Lerdorf, Matthew Li, Andrew Lindeman, Aidan Lister, Hannes Magnusson, Maxim Maletsky, Bobby Matthis, James Moore, Philip Olson, Sebastian Picklum, Derick Rethans, Sander Roobol, Damien Seguy, Jason Sheets, Tom Sommer, Jani Taskinen, Yasuo Ohgaki, Jakub Vrana, Lars Torben Wilson, Jim Winstead, Jared Wyles et Jeroen van Wolffelaar.




Au moment de commencer



Qu'est ce que PHP?

PHP (officiellement, ce sigle est un acronyme récursif pour PHP: Hypertext Preprocessor) est un langage de scripts généraliste et Open Source, spécialement conçu pour le développement d'applications web. Il peut être intégré facilement au HTML.

Bien... mais qu'est ce que cela veut dire ? Un exemple :

Exemple #1 Exemple d'introduction

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Exemple</title>
</head>
<body>

<?php
echo "Bonjour, je suis un script PHP !";
?>

</body>
</html>

Au lieu d'utiliser des tonnes de commandes afin d'afficher du HTML (comme en C ou en Perl), les pages PHP contiennent des fragments HTML dont du code qui fait "quelque chose" (dans ce cas, il va afficher "Bonjour, je suis un script PHP !"). Le code PHP est inclus entre une balise de début <?php et une balise de fin ?> qui permettent au serveur web de passer en mode PHP.

Ce qui distingue PHP des langages de script comme le Javascript, est que le code est exécuté sur le serveur, générant ainsi le HTML, qui sera ensuite envoyé au client. 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.

Le grand avantage de PHP est qu'il est extrêmement simple pour les néophytes, mais offre des fonctionnalités avancées pour les experts. Ne craignez pas de lire la longue liste de fonctionnalités PHP. Vous pouvez vous plonger dans le code, et en quelques instants, écrire des scripts simples.

Bien que le développement de PHP soit orienté vers la programmation pour les sites web, vous pouvez en faire bien d'autres usages. Lisez donc la section Que peut faire PHP ? ou bien le tutoriel d'introduction si vous êtes uniquement intéressé dans la programmation web.



Que peut faire PHP ?

Tout. PHP est principalement conçu pour servir de langage de script coté serveur, ce qui fait qu'il est capable de réaliser tout ce qu'un script CGI quelconque peut faire, comme collecter des données de formulaire, générer du contenu dynamique, ou gérer des cookies. Mais PHP peut en faire bien plus.

Il y a trois domaines différents où PHP peut s'illustrer.

  • Langage de script coté serveur. C'est l'utilisation la plus traditionnelle, et aussi le principal objet de PHP. Vous aurez besoin de trois composants pour l'exploiter : un analyseur PHP (CGI ou module serveur), un serveur web et un navigateur web. Vous devez exécuter le serveur web en corrélation avec PHP. Vous pouvez accéder au programme PHP avec l'aide du navigateur web. Tout ceci peut fonctionner sur votre propre machine si vous êtes juste expérimenté dans la programmation en PHP. Voyez la section d'installation pour plus d'informations.
  • Langage de programmation en ligne de commande. Vous pouvez écrire des scripts PHP et l'exécuter en ligne de commande, sans l'aide du serveur web et d'un navigateur. Il vous suffit de disposer de l'exécutable PHP. Cette utilisation est idéale pour les scripts qui sont exécutés régulièrement (avec un cron sous Unix ou Linux), ou un gestionnaire de tâches (sous Windows). Ces scripts peuvent aussi être utilisés pour réaliser des opérations sur des fichiers texte. Voyez la section sur l'utilisation de PHP en ligne de commande pour plus d'informations.
  • Ecrire des applications clientes graphiques. PHP n'est probablement pas le meilleur langage pour écrire des applications clientes graphiques, mais si vous connaissez bien PHP et que vous souhaitez exploiter des fonctionnalités avancées dans vos applications clientes, vous pouvez utiliser PHP-GTK pour écrire de tels programmes. Vous avez aussi la possibilité d'écrire des applications très portables avec ce langage. PHP-GTK est une extension de PHP, qui n'est pas fournie dans la distribution de base. Si vous êtes intéressé par PHP-GTK, visitez » son site web.

PHP est utilisable sur la majorité des systèmes d'exploitation, comme Linux, de nombreuses variantes Unix (incluant HP-UX, Solaris et OpenBSD), Microsoft Windows, Mac OS X, RISC OS et d'autres encore. PHP supporte aussi la plupart des serveurs web actuels dont Apache, IIS et bien d'autres. Et ceci inclut tous les serveurs web qui peuvent utiliser le binaire PHP FastCGI, comme lighttpd et nginx. PHP fonctionne sous forme de module, ou comme processeur CGI.

Avec PHP vous avez le choix de votre système d'exploitation et de votre serveur web. De plus, vous avez aussi le choix d'utiliser la programmation procédurale ou objet (OOP), ou encore un mélange des deux.

Avec PHP, vous n'êtes pas limité à la production de code HTML. Les capacités de PHP lui permettent de générer aussi bien des images, des fichiers PDF, des animations Flash (avec l'aide des bibliothèques libswf et Ming) à la volée. Vous pouvez aussi générer facilement du texte, du code XML ou XHTML. PHP génère tous ces fichiers et les sauve dans le système de fichiers, ou bien les envoie directement au navigateur web.

Une des forces les plus significatives de PHP est qu'il supporte énormément de bases de données. Écrire une page web faisant appel à une base de données devient terriblement simple, en utilisant une des extensions spécifiques aux bases de données (i.e., pour mysql), ou utilisant une classe d'abstraction comme PDO, ou une connexion à n'importe quelle base de données supportant la connexion standard ouvert via l'extension ODBC. Les autres bases de données peuvent utiliser l'extension cURL ou sockets comme CouchDB.

PHP supporte de nombreux protocoles comme LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (sous Windows) et encore d'autres. Vous pouvez ouvrir des sockets réseau, et interagir avec n'importe quel autre protocole. PHP supporte le format complexe WDDX, qui permet de communiquer entre tous les langages web. En terme d'interconnexion, PHP supporte aussi les objets Java, et les utilise de manière transparente comme objets intégrés.

PHP possède des fonctionnalités utiles dans le traitement de texte, incluant les expressions rationnelles compatibles Perl (PCRE), ainsi que de nombres extensions et utilitaires pour analyser et accéder aux documents XML. PHP standardise toutes les extensions XML sur la solide base de libxml2, et étend le jeu de fonctionnalités en ajoutant le support de SimpleXML, XMLReader et XMLWriter.

Beaucoup d'autres extensions existent, catégorisées alphabétiquement et par catégorie. Et enfin, il existe des extensions PECL qui peuvent (ou pas) être documentées dans le manuel PHP, comme » XDebug.

Comme vous le voyez, cette page n'est pas assez grande pour lister toutes les puissantes fonctionnalités de PHP. Lisez la section sur l'installation de PHP et étudiez la liste de fonctions pour avoir plus de détails sur toutes ces technologies.




Une introduction à PHP

Sommaire

Dans cette section, nous voulons illustrer les principes de base de PHP dans une courte introduction. Ce chapitre traite uniquement de création de pages web dynamiques avec PHP, laissant de coté temporairement les autres possibilités de PHP. Voyez la section Ce que peut faire PHP pour plus d'informations.

Les pages web qui exploitent PHP sont traitées comme des pages HTML standards, et vous pouvez les créer, éditer et effacer tout comme vous le faites normalement avec des pages HTML classiques.


Le nécessaire

Dans ce tutoriel, nous présumons que vous avez un serveur web avec le support PHP activé, et que les fichiers terminés par l'extension .php sont traités par PHP. Sur la plupart des serveurs, c'est la configuration par défaut, mais n'hésitez pas à interroger votre administrateur système en cas de doute. Si votre serveur web supporte PHP, vous n'avez rien à faire. Simplement, créez un dossier, puis créez un fichier texte, avec l'extension .php : le serveur va automatiquement l'exécuter avec PHP. Il n'y a pas de compilation, ou d'installation compliquée. Gardez en tête que les fichiers sont comparables à des fichiers HTML, dans lesquels vous allez utiliser des balises magiques, qui feront beaucoup de choses pour vous. Beaucoup d'hébergeurs web proposent PHP mais si ce n'est pas le cas, lisez la section des » liens PHP pour trouver un hébergeur web le proposant.

Supposons que vous souhaitiez économiser du temps en ligne et travailler localement. Dans ce cas, vous devez installer un serveur web comme » Apache, et bien sur » PHP. Vous souhaiterez aussi installer une base de données comme » MySQL.

Vous pouvez soit installer ces logiciels individuellement ou bien d'une manière simplifiée. Notre manuel contient les instructions d'installation de PHP (en supposant que vous avez déjà un serveur web d'installé). Si vous rencontrez des problèmes dans l'installation de PHP, nous vous suggérons de poser vos questions sur notre » liste de diffusions réservée à cet usage. Si vous choisissez une version simplifiée, vous pouvez utiliser des » des installeurs qui prennent en charge l'ensemble de l'installation en quelques clics. Il est facile de configurer un serveur web avec le support de PHP sur n'importe quel système d'exploitation, y compris MacOs, Linux et Windows. Sous Linux, vous pouvez aussi trouver des commandes comme » rpmfind et » PBone très pratiques pour rechercher les paquets pré-compilés. Vous pouvez aussi visiter » apt-get, pour des paquets Debian.



Votre première page PHP

Créez un fichier appelé bonjour.php dans votre dossier web racine (DOCUMENT_ROOT) avec le contenu suivant :

Exemple #1 Notre premier script PHP : bonjour.php

<html>
 <head>
  <title>Test PHP</title>
 </head>
 <body>
 <?php echo '<p>Bonjour le monde</p>'?>
 </body>
</html>

Utilisez votre navigateur pour accéder au fichier via votre serveur web, en ajoutant le nom de fichier /bonjour.php. Si vous développez localement, votre URL ressemblera à http://localhost/bonjour.php ou encore http://127.0.0.1/bonjour.php mais cela dépend de la configuration de votre serveur web. Si celui-ci est configuré correctement, le fichier sera analysé par PHP et le résultat suivant affiché :

<html>
 <head>
  <title>Test PHP</title>
 </head>
 <body>
 <p>Bonjour le monde</p>
 </body>
</html>

Ce programme est extrêmement simple et vous n'avez pas besoin de PHP pour créer une page web comme ceci. Elle ne fait qu'afficher Bonjour le monde, grâce à la fonction echo de PHP. Notez que ce fichier n'a pas besoin d'être exécutable ou autre, dans aucun cas. Le serveur sait que ce fichier a besoin d'être interprété par PHP car vous utilisez l'extension ".php", et le serveur est configuré pour les passer à PHP. Voyez cela comme une page HTML normale qui contient une série de balises spéciales qui vont vous permettre de réaliser beaucoup de choses intéressantes.

Si vous avez essayé cet exemple et qu'il n'a rien affiché de spécial, ou même qu'une boîte de dialogue a surgi pour vous proposer de le télécharger, ou encore vous avez vu le code tel que nous l'avons écrit dans le fichier, alors votre serveur web ne supporte probablement pas PHP ou est mal configuré. Demandez à votre administrateur de l'activer pour vous, en utilisant le chapitre Installation. Si vous développez localement, lisez également le chapitre d'installation afin de vous assurer que tout est configuré correctement. Assurez-vous que vous tentez d'accéder au fichier via http et que le serveur web vous fournit la sortie. Si vous appelez votre fichier depuis votre gestionnaire de fichiers, il ne sera pas analysé par PHP. Si le problème persiste malgré cela, n'hésitez pas à utiliser une » des options de support de PHP.

Le point important de cet exemple était de montrer le format des balises spéciales PHP. Nous avons utilisé ici <?php pour indiquer le début de la balise PHP. Puis, nous avons introduit les commandes PHP et refermé les balises PHP avec ?>. Vous pouvez passer du mode PHP au mode HTML et vice-versa, de cette manière, et à votre guise. Pour plus d'informations, lisez la section du manuel sur la syntaxe basique de PHP.

Note: Une note sur les retours à la ligne

Les retours à la ligne ont une signification minime en HTML, cependant, c'est toujours une bonne idée de rendre votre HTML aussi joli et proche que possible en y ajoutant des retours à la ligne. Un retour à la ligne suivant immédiatement une balise de fermeture PHP (?>) sera supprimé par PHP. Ceci peut être vraiment très utile lorsque vous insérez plusieurs blocs PHP ou fichiers inclus contenant du PHP qui n'est pas supposé afficher quoi que ce soit. En même temps, ce peut être confus. Vous pouvez ajouter un espace après la balise fermante PHP (?>) pour forcer l'espace et un retour à la ligne à afficher, ou vous pouvez ajouter explicitement un retour à la ligne dans le dernier echo/print de votre bloc PHP.

Note: Une note sur les éditeurs de texte

Il existe de nombreux éditeurs de texte et environnements de développement (IDE) que vous pouvez utiliser pour créer, éditer et gérer vos applications PHP. Une liste partielle de ces outils est entretenue à l'adresse » PHP Editor's List. Si vous voulez recommander un éditeur particulier, rendez donc une visite à cette page, et demandez au webmestre d'ajouter votre éditeur. Avoir au minimum un éditeur de texte avec la coloration syntaxique est vivement recommandé.

Note: Une note sur les traitements de texte

Les traitements de texte tels que StarOffice Writer, Microsoft Word et Abiword sont de très mauvais choix pour éditer des scripts PHP. Si vous voulez utiliser l'un d'entre eux, malgré tout, pour tester vos scripts, vous devez vous assurer que vous sauvez les fichiers au format texte seul (plain text) : sinon, PHP ne sera pas capable de lire et d'exécuter ces scripts.

Note: Une note sur le Notepad de Windows

Si vous écrivez vos scripts PHP avec Windows Notepad, vous devez vous assurer que vos fichiers sont sauvés avec l'extension .php (Notepad ajoute automatiquement une extension .txt à vos fichiers, à moins que vous ne preniez l'une des mesures suivantes). Lorsque vous sauvez un fichier, et que vous êtes invité à lui donner un nom, placez le nom du fichier entre doubles guillemets (i.e. "hello.php"). Vous pouvez également cliquer dans le menu 'Documents texte' du dialogue de sauvegarde, et choisir l'option 'Tous les fichiers'. Vous pourrez alors saisir le nom de votre fichier sans les doubles guillemets.

Maintenant vous avez créé un script PHP qui fonctionne, c'est le moment de créer le meilleur script PHP ! Faites un appel à la fonction phpinfo() et vous verrez beaucoup d'informations intéressantes sur votre système et sa configuration comme les variables pré-définies disponibles, les modules PHP chargés ainsi que la configuration. Prenez du temps pour revoir ces informations importantes.

Exemple #2 Récupération des informations du système depuis PHP

<?php phpinfo(); ?>



Trucs pratiques

Réalisons maintenant quelque chose de plus puissant. Nous allons vérifier le type de navigateur que le visiteur de notre site utilise. Pour cela, nous allons accéder aux informations que le navigateur du visiteur nous envoie, lors de sa requête HTTP. Cette information est stockée dans une variable. Les variables sont faciles à repérer, car elles commencent toutes par un signe dollar. La variable qui nous intéresse ici est $_SERVER['HTTP_USER_AGENT'].

Note:

$_SERVER est une variable spéciale de PHP, qui contient toutes les informations relatives au serveur web. C'est une variable réservée de PHP, et une superglobale. Reportez-vous aux pages du manuel traitant des Auto-globales (aussi connues sous le nom de super-globales). Ces variables spéciales ont été introduites en » PHP 4.1.0. Auparavant, il fallait utiliser les variables $HTTP_*_VARS, comme $HTTP_SERVER_VARS. Bien qu'obsolètes, ces variables existent toujours. (Voir aussi la note sur l'ancien code.)

Pour afficher cette variable, nous pouvons simplement faire :

Exemple #1 Afficher le contenu d'une variable (élément de tableau)

<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>

Un résultat possible du script pourra alors être :


Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

Il y a de nombreux types de variables disponibles en PHP. Dans l'exemple ci-dessus, nous avons affiché un élément de Tableau (Array). Les tableaux peuvent être très utiles.

$_SERVER est juste une variable qui est automatiquement disponible dans votre script. Une liste de toutes les variables qui sont rendues disponibles est fournie dans la section Variables réservées ou vous pouvez aussi en obtenir une liste complète en lisant l'affichage de la fonction phpinfo() utilisée dans l'exemple de la section précédente.

Vous pouvez ajouter plusieurs commandes PHP dans une balise PHP, et créer de petits blocs de code qui réalisent des opérations plus complexes qu'un simple affichage. Par exemple, si nous voulons vérifier que le navigateur est bien de la famille des Internet Explorer, nous pouvons faire cela :

Exemple #2 Exemple utilisant les structures de contrôle et les fonctions

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
    echo 
'Vous utilisez Internet Explorer<br />';
}
?>

Le résultat de ce script, si vous utilisez Internet Explorer, sera :

Vous utilisez Internet Explorer<br />

Ici, nous introduisons plusieurs nouveaux concepts. Nous avons une structure if. Si vous êtes familier avec les syntaxes de base du langage C, cela ne vous surprendra pas. Si vous ne connaissez pas assez le langage C ou un autre langage dont la syntaxe est similaire à celle ci-dessus, il vaudrait mieux que vous lisiez une introduction à PHP, et assimiliez les premiers chapitres, ou bien lisez le chapitre consacré à la référence du langage.

Le second concept que nous avons introduit est la fonction strpos(). strpos() est une fonction intégrée à PHP, qui recherche la présence d'une chaîne dans une autre. Dans notre cas, nous avons recherché la chaîne "MSIE" dans la chaîne $_SERVER['HTTP_USER_AGENT']. Si cette chaîne est trouvée, la fonction retourne sa position dans la chaîne et, sinon, FALSE. Si elle ne retourne pas FALSE, la structure if reçoit TRUE et le code entre accolades {} est exécuté. Sinon, le code n'est pas exécuté. N'hésitez pas à expérimenter d'autres exemples, à l'aide de if, else, et d'autres fonctions comme strtoupper() et strlen(). Chaque page de la documentation contient aussi des exemples. Si vous n'êtes pas sûr de l'utilisation de ces fonctions, vous devez lire la page du manuel "comment lire une définition de fonction" ainsi que la section sur les fonctions PHP.

Nous pouvons maintenant progresser et vous montrer comment utiliser le mode PHP, au milieu du code HTML :

Exemple #3 Passer du mode PHP au mode HTML et vice-versa

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
?>
<h3>strpos() n'a pas retourné FALSE</h3>
<p>Vous utilisez Internet Explorer</p>
<?php
} else {
?>
<h3>strpos() a retourné FALSE</h3>
<p>Vous n'utilisez pas Internet Explorer</p>
<?php
}
?>

Un exemple de résultat obtenu dans ce script est :

<h3>strpos() n'a pas retourné FALSE</h3>
<p>Vous utilisez Internet Explorer</p>

Au lieu d'utiliser une commande echo, pour afficher du texte, vous pouvez utiliser du code HTML pur. Le point important à noter ici et que la logique de programmation est conservée. Seul un des deux blocs HTML sera affiché, suivant le résultat de la fonction strpos(). En d'autres termes, cela dépend si la chaîne MSIE a été trouvée ou non.



Utiliser un formulaire

L'un des points forts de PHP est sa capacité à gérer les formulaires. Le concept de base qui est important à comprendre est que tous les champs d'un formulaire seront automatiquement disponibles dans le script PHP d'action. Lisez le chapitre du manuel concernant les variables depuis des sources externes à PHP pour plus d'informations et d'exemples sur la façon d'utiliser les formulaires. Voici un exemple de formulaire HTML :

Exemple #1 Un simple formulaire HTML

<form action="action.php" method="post">
 <p>Votre nom : <input type="text" name="nom" /></p>
 <p>Votre âge : <input type="text" name="age" /></p>
 <p><input type="submit" value="OK"></p>
</form>

Il n'y rien de particulier dans ce formulaire. Il est en HTML pur, sans aucune configuration particulière. Lorsque le visiteur remplit le formulaire, et clique sur le bouton OK, le fichier action.php est appelé. Dans ce fichier, vous pouvez écrire le script suivant :

Exemple #2 Afficher des données issues d'un formulaire

Bonjour, <?php echo htmlspecialchars($_POST['nom']); ?>.
Tu as <?php echo (int)$_POST['age']; ?> ans.

Voici le résultat que vous pourriez obtenir, selon les valeurs que vous avez saisies :

Bonjour Jean.
Tu as 29 ans.

Mise à part les parties htmlspecialchars() et (int), ce script ne fait que des choses évidentes. htmlspecialchars() s'assure que tous les caractères spéciaux HTML sont proprement encodés afin d'éviter des injections de balises HTML et de Javascript dans vos pages. Pour l'âge, vu que nous savons que c'est un entier, vous pouvez le convertir en un entier. Vous pouvez également demander à PHP de le faire automatiquement à votre place en utilisant l'extension filter. Les variables $_POST['nom'] et $_POST['age'] sont automatiquement créées par PHP. Un peu plus tôt dans ce tutoriel, nous avons utilisé la variable $_SERVER, une superglobale. Maintenant, nous avons introduit une autre superglobale $_POST qui contient toutes les données envoyées par la méthode POST. Notez que dans notre formulaire, nous avons choisi la méthode POST. Si vous avions utilisé la méthode GET alors notre formulaire aurait placé ces informations dans la variable $_GET, une autre superglobale. Vous pouvez aussi utiliser la variable $_REQUEST, si vous ne souhaitez pas vous embarrasser de la méthode utilisée. Elle contient un mélange des données de GET, POST, COOKIE et FILE. Voyez aussi la fonction import_request_variables().

Vous pouvez également utiliser des champs XForms dans PHP, même si vous vous sentez bien avec l'utilisation des formulaires HTML. Bien que le travail avec XForms ne soit pas fait pour les débutants, vous pourriez être intéressé par cette technologie. Nous avons également une courte introduction sur le traitement des données reçues par XForms dans notre section sur les fonctionnalités.



Utiliser des codes anciens avec les nouvelles versions de PHP

Maintenant que PHP est devenu un langage de script populaire, il existe de nombreuses ressources qui vous proposent des portions de code que vous pouvez réutiliser dans vos codes. Pour la plupart, les développeurs de PHP ont tâché d'assurer la compatibilité ascendante, ce qui fait que de nombreux scripts écrits pour les anciennes versions sont aussi valables pour les nouvelles versions de PHP, idéalement sans modification. En pratique, certaines modifications doivent être apportées.

Les deux modifications récentes les plus importantes qui affectent les anciens codes sont :

  • Les anciennes variables $HTTP_*_VARS (qui devaient être indiquées comme globales pour être utilisées dans une fonction ou une méthode) sont obsolètes. Les nouveaux tableaux superglobaux ont été introduits en » PHP 4.1.0. Ce sont les variables suivantes : $_GET, $_POST, $_FILES, $_COOKIE, $_SERVER, $_ENV, $_REQUEST et $_SESSION. Les vieux tableaux $HTTP_*_VARS, tels que $HTTP_POST_VARS existent également. Depuis PHP 5.0.0, les tableaux prédéfinis PHP peuvent être désactivés avec l'option de configuration register_long_arrays.
  • Les variables externes ne sont plus enregistrées dans l'environnement par défaut. En d'autres termes, depuis PHP » 4.2.0, la directive PHP register_globals vaut off par défaut dans le php.ini. La méthode recommandée pour accéder à ces valeurs est via les tableaux superglobaux mentionnés ci-dessus. Les anciens scripts, livres et tutoriels continuent de considérer que cette directive devrait être à on. Lorsque cette directive est à on, vous pouvez utiliser la variable $id, si l'URL http://www.example.com/foo.php?id=42 a été appelée. Quelle que soit la valeur de la directive, $_GET['id'] est toujours disponible.
Pour plus de détails sur ces modifications, reportez-vous à la section sur les variables pré-définies.



Et après ?

Avec ce que vous savez, vous êtes maintenant capable de comprendre l'essentiel de la documentation PHP, et les différents scripts d'exemples disponibles dans les archives. Vous pouvez aussi trouver d'autres exemples dans la section liens ("links", en anglais) du site » http://www.php.net/links.php.

Différentes présentations des capacités de PHP sont disponibles sur le site des conférences PHP : » http://talks.php.net/.





Installation et configuration


Considérations générales sur l'installation

Avant d'installer PHP, vous devez savoir ce que vous voulez faire avec PHP. Il y a trois cas d'utilisation que vous a décrit la section Que peut faire PHP ? :

  • Sites Web et applications Web (script côté serveur)
  • Scripts en ligne de commande
  • Applications à interface graphique (GUI)

Pour la première tâche, qui est de loin la plus répandue, vous avez besoin de trois choses : PHP lui-même, un serveur Web et un navigateur. Vous avez probablement un navigateur, et en fonction de votre système d'exploitation, vous pouvez aussi disposer d'un serveur Web (i.e. Apache sous Linux ou IIS sous Windows). Vous pouvez aussi louer un espace à une société. De cette façon, vous n'aurez pas à mettre en place PHP, mais uniquement à écrire vos scripts, les charger sur le serveur et voir le résultat sur votre navigateur.

Si vous installez PHP et le serveur par vous-même, vous avez deux choix. Soit sous la forme d'un module du serveur Web (via une interface directe appelée SAPI). Les serveurs qui supportent cette solution comptent notamment Apache, Microsoft Internet Information Server, Netscape et iPlanet. D'autres serveurs ont aussi le support ISAPI, l'interface de module Microsoft (OmniHTTPd par exemple). Si PHP ne supporte pas l'interface de module de votre serveur Web, vous pouvez toujours l'utiliser comme processeur CGI ou FastCGI. Cela signifie que vous devez configurer votre serveur pour qu'il utilise l'exécutable CGI de PHP, pour qu'il traite les fichiers PHP sur le serveur.

Si vous souhaitez aussi utiliser PHP en ligne de commande (écrire des scripts de génération d'image hors ligne, par exemple, ou bien traiter des textes en fonctions d'informations que vous leur fourniriez), vous aurez besoin d'un exécutable PHP. Pour plus de détails, lisez la section écrire des applications PHP en ligne de commande. Dans ce cas, vous n'aurez pas besoin de serveur Web, ni de navigateur.

Avec PHP, vous pouvez aussi écrire des interfaces graphiques clientes, en utilisant l'extension PHP-GTK. C'est une approche complètement différente de l'écriture des pages web, car vous ne générerez pas de fichiers HTML, mais vous aurez à gérer des fenêtres et des objets. Pour plus de détails sur PHP-GTK, voyez le » site officiel. PHP-GTK n'est pas inclus dans la distribution officielle de PHP.

À partir de maintenant, cette section décrit l'installation de PHP avec un serveur Web sous Unix et Windows, sous forme de module ou d'exécutables CGI.

Les codes source et les exécutables compilés pour certains OS (y compris Windows), sont disponibles à » http://www.php.net/downloads.php. Nous recommandons l'utilisation du » miroir le plus proche pour télécharger les distributions.



Installation sur les systèmes UNIX

Sommaire

Cette section va vous guider lors du processus d'installation et de configuration de PHP sous Unix. Commencez par étudier les sections spécifiques à votre plate-forme ou à votre serveur Web avant de passer à l'installation.

Comme ce que nous avons écrit dans le manuel dans la section Considérations générales sur l'installation, nous traiterons de l'installation de PHP sur des serveurs Web dans cette section, bien que nous couvrirons également la configuration de PHP pour l'utilisation en ligne de commande.

Il y a plusieurs manières d'installer PHP sur des plates-formes Unix : soit avec un processus de compilation/configuration, soit avec des paquets précompilés. Cette documentation est particulièrement focalisée sur le processus de compilation/configuration. Beaucoup de systèmes basés sur Unix ont plusieurs sortes de paquets d'installation pour leur système. Ils permettent de vous assister dans une configuration standard, mais si vous avez besoin d'avoir des fonctionnalités différentes (comme un serveur sécurisé ou un driver différent de bases de données), vous aurez besoin de construire PHP et/ou votre serveur Web. Si vous n'êtes pas familiarisé avec la construction et la compilation de vos propres logiciels, il sera plus simple de vérifier si quelque part, personne n'a déjà construit une version de paquet de PHP avec les fonctionnalités dont vous avez besoin.

Pré-requis :

  • Connaissance de base d'UNIX (savoir faire un "make" et compiler en C, si besoin).
  • Un compilateur ANSI C (pour les codes sources)
  • Un serveur web
  • Toute bibliothèque nécessaire pour une extension spécifique (comme GD, PDF, etc.)

Lors de la compilation depuis SVN directement, ou après une modification des sources personnalisée, vous pourriez avoir aussi besoin de :

  • autoconf: 2.13+ (pour PHP < 5.4.0), 2.59+ (pour PHP >= 5.4.0)
  • automake: 1.4+
  • libtool: 1.4.x+ (sauf 1.4.2)
  • re2c: Version 0.13.4 ou plus récent
  • flex: Version 2.5.4 (pour PHP <= 5.2)
  • bison: Version 1.28 (recommandée), 1.35, ou 1.75

La configuration initiale de PHP et le processus de configuration sont contrôlés par l'utilisation du fichier configure et de ces options en lignes de commande. Vous pouvez récupérer une liste de toutes les options disponibles accompagnées d'une courte description en exécutant la commande ./configure --help. Notre manuel documente les différentes options séparément. Vous pouvez trouver les options internes en annexe, bien que les différentes options spécifiques à chaque extension sont décrites sur les pages de référence.

Lorsque PHP est configuré, vous êtes prêt à construire le module et/ou l'exécutable. La commande make devrait s'occuper de cela. Si elle échoue et que vous ne savez pas pourquoi, lisez la section Problèmes.


Apache 1.3.x sur les systèmes Unix

Cette section contient des notes spécifiques pour l'installation de PHP avec Apache sur les systèmes Unix. Des notes spécifiques pour Apache 2 sont aussi disponibles sur une page séparée.

Vous pouvez sélectionner des options à ajouter au fichier configure à la ligne 10 depuis la liste complète des options de configuration. Les numéros de versions ont été omis ici afin de s'assurer que les instructions ne soient pas incorrectes. Vous devrez donc remplacer les 'xxx' par les versions correctes de vos fichiers.

Exemple #1 Instructions d'installation de PHP (en module Apache)

1.  gunzip apache_xxx.tar.gz
2.  tar -xvf apache_xxx.tar
3.  gunzip php-xxx.tar.gz
4.  tar -xvf php-xxx.tar
5.  cd apache_xxx
6.  ./configure --prefix=/www --enable-module=so
7.  make
8.  make install
9.  cd ../php-xxx

10. Maintenant, configurez votre PHP. C'est le moment où vous configurez PHP
    avec diverses options, comme les extensions qui seront activées. Lancez
    ./configure --help pour une liste des options disponibles. Dans notre exemple,
    nous ferons un ./configure assez simple avec uniquement le support Apache et MySQL.
    Votre chemin vers apxs peut être différent de notre exemple.

      ./configure --with-mysql --with-apxs=/www/bin/apxs

11. make
12. make install

    Si vous décidez de changer vos options de configuration après l'installation,
    vous aurez juste besoin de répéter les trois dernières étapes. Vous aurez aussi besoin
    de redémarrer apache pour que le nouveau module soit chargé. Une recompilation de
    Apache n'est pas nécessaire.

    Notez que, à moins de l'avoir explicitement désactivé, 'make install' installera aussi PEAR,
    et des outils PHP tels que phpize, installera le CLI PHP, etc.

13. Configurez votre fichier php.ini :

      cp php.ini-development /usr/local/lib/php.ini

    Vous pouvez éditer votre fichier .ini pour régler certaines options PHP. Si vous souhaitez
    votre php.ini à un autre endroit, utilisez --with-config-file-path=/votre/chemin lors de
    l'étape 10.

    Si vous utilisez plutôt php.ini-production, assurez-vous de lire l'ensemble des changements
    qui y sont contenus, car ils modifient le fonctionnement de PHP.

14. Éditez votre httpd.conf afin de charger le module PHP. Le chemin dans la partie droite de la
    directive LoadModule doit pointer vers l'endroit où se trouve le module PHP sur votre système.
    Le make install lancé plus haut l'y aura certainement déjà déposé pour vous, 
    mais assurez vous en.

      LoadModule php5_module libexec/libphp5.so

15. Et dans la section AddModule de httpd.conf, quelque part en dessous de
    ClearModuleList, ajoutez ceci :

      AddModule mod_php5.c

16. Dites à Apache de faire analyser certaines extensions par PHP. Par exemple,
    faites analyser l'extension .php par PHP. Vous pouvez ajouter n'importe quelle(s)
    extension(s) à analyser juste en l'(les)ajoutant à la suite, séparée(s) par un espace.
    Nous ajouterons .phtml dans notre exemple.

      AddType application/x-httpd-php .php .phtml

    Il est assez fréquent de configurer l'extension .phps comme code source PHP colorisé,
    ce qui peut être fait ainsi :

      AddType application/x-httpd-php-source .phps

17. Utilisez votre méthode habituelle pour démarrer le serveur Apache.
    (vous devez l'éteindre et le redémarrer, pas seulement lui envoyer
    un signal HUP ou USR1.)

Alternativement, pour installer PHP en tant qu'objet statique :

Exemple #2 Instructions d'installation (installation en tant que module statique d'Apache) de PHP

1.  gunzip -c apache_1.3.x.tar.gz | tar xf -
2.  cd apache_1.3.x
3.  ./configure
4.  cd ..

5.  gunzip -c php-5.x.y.tar.gz | tar xf -
6.  cd php-5.x.y
7.  ./configure --with-mysql --with-apache=../apache_1.3.x
8.  make
9.  make install

10. cd ../apache_1.3.x

11. ./configure --prefix=/www --activate-module=src/modules/php5/libphp5.a
    (La ligne ci-dessus est correcte ! Oui, nous savons que libphp5.a n'existe pas à
    ce moment. On ne le suppose pas non plus. Il sera créé.)

12. make
    (vous devriez avoir maintenant un binaire httpd que vous pouvez copier dans votre
    dossier de binaire Apache ; si c'est votre première installation, vous devez exécuter la
    commande "make install")

13. cd ../php-5.x.y
14. cp php.ini-development /usr/local/lib/php.ini

15. Vous pouvez éditer le fichier /usr/local/lib/php.ini pour définir les options de PHP.
    Éditez votre fichier httpd.conf ou srm.conf et ajoutez :
    AddType application/x-httpd-php .php

Suivant votre installation d'Apache et votre variante d'Unix, il existe de nombreuses façons d'arrêter et redémarrer Apache. Voici une liste des commandes typiques, pour différentes installations. Remplacez /path/to/ par le chemin d'accès à vos applications sur votre système.

Exemple #3 Exemples de commandes pour le redémarrage d'apache

1. Nombreuses variantes Linux SysV :
/etc/rc.d/init.d/httpd restart

2. Avec les scripts apachectl :
/path/to/apachectl stop
/path/to/apachectl start

3. httpdctl et httpsdctl (utilisant OpenSSL), similaires à apachectl :
/path/to/httpsdctl stop
/path/to/httpsdctl start

4. En utilisant mod_ssl, ou un autre serveur SSL, vous pouvez vouloir l'arrêter
et le démarrer manuellement :
/path/to/apachectl stop
/path/to/apachectl startssl

L'emplacement des exécutables apachectl et http(s)dctl peut varier. Si votre système est pourvu des commandes locate, whereis ou which, elles peuvent vous aider à retrouver vos programmes.

Différents exemples de compilation PHP pour Apache suivent :

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

Cette commande va créer une bibliothèque partagée libphp5.so qui sera chargée par Apache avec une ligne LoadModule dans le fichier httpd.conf. Le support PostgreSQL est aussi inclus dans cette bibliothèque.

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

Cette commande va créer une bibliothèque partagée libphp5.so pour Apache, mais va aussi créer la bibliothèque partagée pgsql.so qui sera chargée dans PHP avec une directive du fichier php.ini ou en la chargeant explicitement dans le script avec la fonction dl().

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

Cette commande va créer une autre bibliothèque partagée libmodphp5.a, un fichier mod_php5.c et quelques fichiers associés dans le dossier src/modules/php4 du dossier source Apache. Puis, vous devez compiler Apache avec --activate-module=src/modules/php5/libphp5.a et le système de compilation d'Apache va créer un fichier libphp5.a et le lier statiquement avec httpd. Le support PostgreSQL est alors inclus directement dans l'exécutable httpd, ce qui fait que le résultat final est un fichier unique httpd, qui inclut Apache et PHP.

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

Comme précédemment, mais au lieu d'inclure le support PostgreSQL directement dans l'exécutable httpd final, vous allez obtenir une bibliothèque partagée pgsql.so que vous pouvez charger dans PHP soit grâce au fichier de configuration php.ini ou dynamiquement avec dl().

Lorsque vous faites votre choix entre les différents modes de compilation de PHP, vous devez prendre en compte leurs avantages et inconvénients respectifs. Les objets partagés permettent de compiler PHP et Apache de manière séparée, et vous n'aurez pas à compiler l'ensemble pour faire évoluer PHP. La compilation statique permet de charger et d'exécuter plus rapidement PHP. Pour plus d'informations, voyez la page web sur le » support des DSO.

Note:

Le httpd.conf par défaut d'Apache est fourni avec une section qui ressemble à ceci :

User nobody
Group "#-1"
À moins que vous ne changiez cette valeur par "Group nogroup" ou quelque chose comme ça ("Group daemon" est aussi classique), PHP ne sera pas capable d'ouvrir des fichiers.

Note:

Assurez-vous que vous spécifiez la version installée de apxs avec l'option --with-apxs=/path/to/apxs . Vous NE devez PAS utiliser la version d'apxs qui est dans les sources d'Apache, mais celle qui est réellement installée sur votre système.



Apache 2.x sur les systèmes Unix

Cette section contient les notes et conseils d'installation de PHP avec le serveur Apache 2.x sur les systèmes Unix.

Avertissement

Nous ne recommandons pas l'utilisation de PHP dans un environnement threadé MPM, avec Apache 2. Utilisez le mode prefork MPM, qui est le MPM par défaut pour Apache 2.0 et 2.2. Pour savoir pourquoi, lisez l'entrée de la FAQ correspondante à l'utilisation d'Apache 2 dans un environnement threadé MPM.

La » Documentation Apache est la meilleure source d'informations sur le serveur Apache 2.x. La plupart des informations sur les options d'installation d'Apache peut y être trouvée.

La version la plus récente du serveur HTTP Apache peut être obtenue depuis la » page de téléchargement d'Apache, et une version adaptée de PHP depuis les liens ci-dessus. Ce guide couvre uniquement les bases de fonctionnement d'Apache 2.x avec PHP. Pour plus d'informations, lisez la » documentation Apache. Les numéros de version sont omis ici, pour s'assurer que les instructions ne soient pas incorrectes. Dans les exemples ci-dessous, 'NN' devra être remplacé par la version spécifique d'Apache à utiliser.

Il y a actuellement 2 versions d'Apache 2.x - 2.0 et 2.2. Il y a plusieurs raisons de choisir l'une plutôt que l'autre ; néanmoins, la version 2.2 est actuellement la dernière versions disponible et c'est aussi celle que nous vous recommandons. Cependant, les instructions contenues dans ce guide devraient fonctionner pour la version 2.2 comme pour la version 2.0.

  1. Téléchargez le serveur HTTP Apache depuis le site ci-dessus et décompressez-le :

    gzip -d httpd-2_x_NN.tar.gz
    tar -xf httpd-2_x_NN.tar
    
  2. De la même façon, téléchargez et décompressez les sources de PHP :

    gunzip php-NN.tar.gz
    tar -xf php-NN.tar
    
  3. Compilez et installez Apache. Consultez la documentation sur l'installation d'Apache pour plus de détails quant à la compilation de ce logiciel.

    cd httpd-2_x_NN
    ./configure --enable-so
    make
    make install
    
  4. Maintenant que vous avez Apache 2.x.NN de disponible sous /usr/local/apache2, configurez-le avec le support pour le chargement de modules, ainsi que le MPM prefork standard. Pour tester votre installation, utilisez la procédure normale pour démarrer le serveur Apache, i.e. :

    /usr/local/apache2/bin/apachectl start
    
    et arrêtez-le pour continuer dans la configuration de PHP :
    /usr/local/apache2/bin/apachectl stop
    

  5. Maintenant, configurez et compilez PHP. Ce sera à ce moment là où vous pourrez personnaliser PHP avec les diverses options disponibles, comme la liste des extensions à activer. Dans notre exemple, nous effectuerons une configuration simple, avec Apache 2 et le support MySQL.

    Si vous voulez construire Apache depuis les sources, tel que décrit ci-dessus, l'exemple suivant devrait être correct concernant les chemins vers les apxs, mais si vous avez installez Apache d'une autre façon, vous devrez prendre en compte vos spécificités et ajustez les chemins apxs en conséquent. Notez que suivants les distributions, vous pourriez être amené à renommer apxs en apxs2.

    cd ../php-NN
    ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql
    make
    make install
    

    Si vous décidez de modifier les options de configuration après l'installation, vous devrez exécuter de nouveau les étapes "configure", "make" et "make install". Vous n'aurez alors qu'à redémarrer Apache pour que le nouveau module prenne effet. Une re-compilation d'Apache n'est pas nécessaire.

    Notez que, sauf indications contraires, l'étape "make install" installera également PEAR, mais aussi divers outils PHP comme phpsize, PHP CLI et bien plus encore.

  6. Setup your php.ini

    cp php.ini-development /usr/local/lib/php.ini
    

    Vous devez éditer le fichier .ini pour définir les options PHP. Si vous préférez bouger ce fichier dans un autre répertoire, utilisez l'option --with-config-file-path=/some/path à l'étape 5.

    Si vous choisissez le fichier php.ini-production, assurez-vous de lire la liste des modifications correspondante car il peut affecter considérablement la façon dont PHP fonctionnera.

  7. Éditez le fichier httpd.conf pour charger le module PHP. Le chemin spécifié à droite de la chaîne LoadModule, doit correspondre au chemin système du module PHP. L'étape "make install" ci-dessus devrait avoir réalisé cette opération à votre place, mais une simple vérification permettra de s'en assurer.

    LoadModule php5_module modules/libphp5.so
  8. Dîtes à Apache d'analyser certaines extensions comme étant des scripts PHP. Par exemple, laissez Apache passer à PHP les fichiers dont l'extension est .php. Au lieu d'utiliser seulement la directive AddType d'Apache, nous souhaitons éviter tout risque potentiellement dangereux, lors d'un téléchargement de de la création de fichier comme exploit.php.jpg, d'exécution PHP. En utilisant cette exemple, vous pouvez avoir n'importe quelle extension d'analyser par PHP. Nous avons ajouté .php pour l'exemple.

    <FilesMatch \.php$>
        SetHandler application/x-httpd-php
    </FilesMatch>

    Ou, si vous voulez autoriser les fichiers .php, .php2, .php3, .php4, .php5, .php6, et .phtml à être analysés par PHP, mais rien d'autre, nous utiliserons ceci :

    <FilesMatch "\.ph(p[2-6]?|tml)$">
        SetHandler application/x-httpd-php
    </FilesMatch>

    Et pour autoriser les fichiers .phps à être gérer par le filtre du code source de PHP, et ains, être affichés comme code source avec la coloration syntaxique, utilisez ceci :

    <FilesMatch "\.phps$">
        SetHandler application/x-httpd-php-source
    </FilesMatch>

    mod_rewrite peut être utilisé pour permettre à n'importe quel fichier .php d'être affiché comme code source avec coloration syntaxique, sans pour autant avoir besoin de le renommer ou de le copier avec une extension .phps. :

    RewriteEngine On
    RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]

    Le filtre de code source PHP ne devrait pas être actif sur des systèmes de production, car il peut exposer du code confidentielle ou des informations sensibles contenues dans le code source.

  9. Utilisez la procédure normale pour démarrer le serveur Apache, i.e. :

    /usr/local/apache2/bin/apachectl start
    

    Ou

    service httpd restart
    

Si vous avez suivi les étapes précédentes, vous avez maintenant un serveur web Apache2 fonctionnel avec le support PHP comme module SAPI. Bien sûr, il y a une multitude d'autres options de configuration de disponibles avec Apache et PHP. Pour plus d'informations, entrez la commande ./configure --help dans l'arbre source correspondant.

Apache peut être compilé en mode multi-threadé, en sélectionnant le MPM worker, plutôt que le standard MPM prefork. Ceci est fait en ajoutant l'option suivante à l'argument de la commande "./configure", à l'étape 3 ci-dessus :


--with-mpm=worker

Cela ne devrait pas être entreprise sans être conscients des conséquences, et ayant au moins une juste compréhension de ce que cela implique. La documentation Apache concernant » MPM-Modules vous apportera d'importantes informations qui vous permettra de prendre votre décision.

Note:

La FAQ Apache MultiViews traite de l'utilisation MultiViews avec PHP.

Note:

Pour compilez une version multi-threadée d'Apache, le système cible doit supporter les threads. Dans ce cas, PHP doit également être construit avec l'expérimental Zend Thread Safety (ZTS). Sous cette configuration, toutes les extensions ne seront pas disponibles. Nous vous recommandons de compiler Apache avec le prefork MPM-Module.



Lighttpd 1.4 sur les systèmes Unix

Cette section contient des informations spécifiques sur l'installation de PHP avec Lighttpd 1.4 sur les systèmes Unix.

Reportez-vous à » Lighttpd pour une installation correcte de Lighttpd avant de continuer.

Fastcgi est le SAPI préféré pour connecter PHP et Lighttpd. Fastcgi active automatiquement php-cgi depuis PHP 5.3.0, mais pour les versions antérieures, vous devez configurer PHP avec l'option de compilation --enable-fastcgi. Pour vous assurez de l'activation de fastcgi, le résultat de la commande php -v doit contenir PHP 5.2.5 (cgi-fcgi). Avant PHP 5.2.3, fastcgi était activé dans le binaire PHP (php-cgi n'existait pas).

Appel de PHP par Lighttpd

Pour configurer Lighttpd afin qu'il se connecte à PHP et appelle le processus fastcgi, vous devez éditez le fichier lighttpd.conf. Une connexion par sockets est la solution préférée pour les systèmes locaux.

Exemple #1 Portion du fichier lighttpd.conf

server.modules += ( "mod_fastcgi" )

fastcgi.server = ( ".php" =>
  ((
    "socket" => "/tmp/php.socket",
    "bin-path" => "/usr/local/bin/php-cgi",
    "bin-environment" => (
      "PHP_FCGI_CHILDREN" => "16",
      "PHP_FCGI_MAX_REQUESTS" => "10000"
    ),
    "min-procs" => 1,
    "max-procs" => 1,
    "idle-timeout" => 20
  ))
)

La directive bin-path permet à lighttpd d'appeler le processus fastcgi dynamiquement. PHP appellera les fils suivant la variable d'environnement PHP_FCGI_CHILDREN. La directive "bin-environment" définit l'environnement pour les processus appelés. PHP terminera un processus fils lorsque le nombre de requêtes spécifié par PHP_FCGI_MAX_REQUESTS a été atteint. Les directives "min-procs" et "max-procs" peuvent généralement être ignorées avec PHP. PHP gère ces propres fils et caches opcode comme APC qui partage uniquement les fils gérés par PHP. Si "min-procs" est défini à quelque chose de supérieur à 1, le nombre total de réponses PHP sera multiplié par PHP_FCGI_CHILDREN (2 min-procs * 16 fils, donne 32 réponses).

Appel avec spawn-fcgi

Lighttpd fournit un programme appelé spawn-fcgi afin de rendre plus facile les appels des processus fastcgi.

Appel de php-cgi

Il est possible d'appeler des processus sans spawn-fcgi, avec un minimum de configuration. La variable d'environnement PHP_FCGI_CHILDREN contrôle le nombre de fils que PHP appelle pour gérer les demandes. La variable d'environnement PHP_FCGI_MAX_REQUESTS détermine la durée de vie, en nombre de requêtes, de chaque fils. Voici un script bash simple qui permet d'aider les appels aux répondeurs PHP.

Exemple #2 Appel des répondeurs FastCGI

#!/bin/sh

# Localisation du binaire php-cgi
PHP=/usr/local/bin/php-cgi

# Localisation  du fichier PID
PHP_PID=/tmp/php.pid

# Liaison à une adresse
#FCGI_BIND_ADDRESS=10.0.1.1:10000
# Liaison à un socket du domaine
FCGI_BIND_ADDRESS=/tmp/php.sock

PHP_FCGI_CHILDREN=16
PHP_FCGI_MAX_REQUESTS=10000

env -i PHP_FCGI_CHILDREN=$PHP_FCGI_CHILDREN \
       PHP_FCGI_MAX_REQUESTS=$PHP_FCGI_MAX_REQUESTS \
       $PHP -b $FCGI_BIND_ADDRESS &

echo $! > "$PHP_PID"

Connexion à des instances FCGI distantes

Les instances Fastcgi peuvent être appelées sur plusieurs machines distantes afin de répartir les applications.

Exemple #3 Connexion à des instances distantes de php-fastcgi

fastcgi.server = ( ".php" =>
   (( "host" => "10.0.0.2", "port" => 1030 ),
    ( "host" => "10.0.0.3", "port" => 1030 ))
)


Installation sous Netscape et iPlanet Enterprise Serveur sur un système Sun Solaris

Cette section contient les notes et détails spécifiques à l'installation de PHP sur les serveurs Web Sun Java System Web Server, Sun ONE Web Server, iPlanet et Netscape server sur les systèmes Sun Solaris.

Depuis PHP 4.3.3, vous pouvez utiliser les scripts PHP avec le module NSAPI pour gérer des listes de dossiers et des pages d'erreurs personnalisées. Des fonctions supplémentaires sont disponibles pour assurer la compatibilité avec Apache. Pour du support sur les serverus courants, voyez la note sur les sous-requêtes.

Vous pouvez trouver plus d'informations sur la configuration de PHP avec Netscape Enterprise Server : » http://benoit.noss.free.fr/php/install-php4.html

Pour construire PHP avec les serveurs Web Sun JSWS/Sun ONE WS/iPlanet/Netscape, entrez le répertoire valide d'installation pour l'option --with-nsapi=[DIR]. Le répertoire par défaut est habituellement /opt/netscape/suitespot/. Lisez également le fichier /php-xxx-version/sapi/nsapi/nsapi-readme.txt.

  1. Installez les packages suivants depuis le serveur » http://www.sunfreeware.com/ ou un miroir ad hoc :

    • autoconf-2.13
    • automake-1.4
    • bison-1_25-sol26-sparc-local
    • flex-2_5_4a-sol26-sparc-local
    • gcc-2_95_2-sol26-sparc-local
    • gzip-1.2.4-sol26-sparc-local
    • m4-1_4-sol26-sparc-local
    • make-3_76_1-sol26-sparc-local
    • mysql-3.23.24-beta (si vous voulez le support MySQL)
    • perl-5_005_03-sol26-sparc-local
    • tar-1.13 (GNU tar)

  2. Assurez-vous que le path inclut bien les dossiers nécessaires : PATH=.:/usr/local/bin:/usr/sbin:/usr/bin:/usr/ccs/bin et rendez-le accessible à votre système avec export PATH.
  3. gunzip php-x.x.x.tar.gz (si vous avez une distribution .gz, ou bien allez en 4).
  4. tar xvf php-x.x.x.tar
  5. Passez dans votre dossier d'extraction PHP : cd ../php-x.x.x
  6. Pour les étapes suivantes, assurez-vous que /opt/netscape/suitespot/ correspond bien à votre installation du serveur netscape. Sinon, indiquez le chemin correct :

    ./configure --with-mysql=/usr/local/mysql \
    --with-nsapi=/opt/netscape/suitespot/ \
    --enable-libgcc

  7. Faites un make puis un make install.

Après avoir fait l'installation de base et lu les fichiers readme.txt, vous pouvez avoir besoin de faire des configurations supplémentaires.

Instructions de configuration pour Sun/iPlanet/Netscape

Tout d'abord, vous aurez besoin d'ajouter des chemins dans la variable LD_LIBRARY_PATH pour que Netscape trouve son bonheur. Il est préférable de le faire dans le script de démarrage du serveur Netscape. Les utilisateurs Windows peuvent ignorer cette étape. Le script de démarrage est souvent situé dans : /path/to/server/https-servername/start. Vous aurez peut être à éditer le fichier de configuration situé dans /path/to/server/https-servername/config/.

  1. Ajoutez les lignes suivantes dans mime.types en tant qu'administrateur :

    type=magnus-internal/x-httpd-php exts=php
    

  2. Éditez le fichier magnus.conf (pour les serveurs >= 6) ou le fichier obj.conf (pour les serveurs < 6) et ajoutez-y les lignes suivantes. shlib peut varier en fonction de votre OS. Pour Unix, c'est quelque chose comme /opt/netscape/suitespot/bin/libphp4.so. Il est conseillé de placer les lignes suivantes après les lignes de mime types init.

    Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans" shlib="/opt/netscape/suitespot/bin/libphp4.so"
    Init fn="php4_init" LateInit="yes" errorString="Failed to initialize PHP!" [php_ini="/path/to/php.ini"]
    
    (PHP >= 4.3.3) Le paramètre php_ini est optionnel mais, avec lui, vous pouvez placer votre php.ini dans le dossier de configuration de votre serveur web.

  3. Configurez l'objet par défaut dans le fichier obj.conf (pour les classes de serveur virtuel [version 6.0+] dans leur fichier vserver.obj.conf) :

    <Object name="default">
    .
    .
    .
    .#NOTE this next line should happen after all 'ObjectType' and before all 'AddLog' lines
    Service fn="php4_execute" type="magnus-internal/x-httpd-php" [inikey=value inikey=value ...]
    .
    .
    </Object>
    
    (PHP >= 4.3.3) Comme paramètres additionnels, vous pouvez ajouter quelques valeurs spéciales dans le php.ini. Par exemple, vous pouvez définir un spécifique docroot="/path/to/docroot" où le contexte php4_execute est appelé. Pour les init-keys booléens, utilisez les valeurs 0/1, et non pas "On","Off",... (cela ne fonctionnera pas correctement), e.g. zlib.output_compression=1 au lieu de zlib.output_compression="On"

  4. Cela est nécessaire uniquement si vous voulez configurer un répertoire pour accueillir des scripts PHP tout comme un répertoire cgi-bin :

    <Object name="x-httpd-php">
    ObjectType fn="force-type" type="magnus-internal/x-httpd-php"
    Service fn=php4_execute [inikey=value inikey=value ...]
    </Object>
    
    Après cela, vous pouvez configurer un répertoire dans le serveur d'administration et y assigner le style x-httpd-php. Tous les fichiers dans ce répertoire seront exécutés comme étant du PHP. C'est pratique pour cacher l'usage de PHP en renommant les fichiers en .html.

  5. Configuration de l'identification : les identifications PHP ne peuvent être utilisées avec aucune autre identification. TOUTES LES IDENTIFICATIONS SONT PASSEES À VOS SCRIPTS PHP. Pour configurer l'identification PHP pour tout le serveur web, ajoutez la ligne suivante à votre objet par défaut :

    <Object name="default">
    AuthTrans fn=php4_auth_trans
    .
    .
    .
    </Object>
    

  6. Pour utiliser l'identification PHP dans un seul répertoire, ajoutez ce qui suit :

    <Object ppath="d:\path\to\authenticated\dir\*">
    AuthTrans fn=php4_auth_trans
    </Object>
    

Note:

La taille de la pile que PHP utilise dépend de la configuration du serveur Web. Si vous rencontrez des crashs avec les grands scripts PHP, il est recommandé d'augmenter la taille de la pile avec la console d'administration : dans la section "MAGNUS EDITOR".

Environnement CGI et modifications recommandées du php.ini

Il est important de garder en tête que iPlanet/SunONE/Netscape est un serveur Web multi-threadé. Comme toutes les requêtes se situent dans le même contexte (c'est le contexte sur serveur Web), et que ce contexte est unique, si vous voulez accéder à des variables comme PATH_INFO, HTTP_HOST etc., il n'est pas recommandé d'y accéder à l'ancienne manière de PHP, avec la fonction getenv() ou une autre méthode (register globals, $_ENV). De cette manière, vous n'aurez que des valeurs d'environnement du serveur, et non pas des valeurs correctes pour le CGI.

Note:

Pourquoi est-ce que les variables CGI sont invalides ?

C'est lié au fait que le processus du serveur Web est lancé par l'administrateur du serveur, qui utilise le script de lancement au démarrage. En fait, il aurait fallu que vous lanciez vous-même le processus. C'est pour cela que l'environnement du serveur Web contient des variables d'environnement CGI. Vous pouvez vérifier cela en lançant le serveur Web depuis un autre endroit que l'administrateur du serveur : utilisez la ligne de commande Unix en tant que root : vous verrez alors qu'il n'y a pas de variables d'environnement.

Changez simplement vos scripts pour lire les variables CGI, en utilisant le tableau superglobal $_SERVER. Si vous avez d'autres scripts qui utilisent encore $HTTP_HOST et compagnie, il est recommandé d'activer l'option register_globals dans le php.ini et de changer l'ordre des variables. IMPORTANT : supprimez le "E" dans cette option, car vous n'en avez pas besoin pour cet environnement.

variables_order = "GPCS"
register_globals = On

Utilisation particulière pour les pages d'erreurs ou les listages spécifiques de dossier (PHP >= 4.3.3)

Vous pouvez utiliser PHP pour générer des pages d'erreurs de type "404 Not Found" ou apparentée. Ajoutez la ligne suivante dans le fichier obj.conf pour chaque page d'erreur que vous souhaitez remplacer :

Error fn="php4_execute" code=XXX script="/chemin/vers/script.php" [inikey=value inikey=value...]
XXX est le code d'erreur HTTP. Effacez toute autre directive Error qui pourrait interférer avec la vôtre. Si vous voulez utiliser une page pour toutes les erreurs qui existent, laissez le paramètre code vide. Votre script peut obtenir le code de statut HTTP dans la variable $_SERVER['ERROR_TYPE'].

Une autre possibilité est de générer une liste de dossiers personnalisée. Créez simplement un script PHP qui affiche le contenu du dossier, et remplacez la ligne Service par défaut par type="magnus-internal/directory" dans obj.conf avec ceci :

Service fn="php4_execute" type="magnus-internal/directory" script="/chemin/vers/script.php" [inikey=value inikey=value...]
Pour ces deux points, l'URI originale et l'URI traduite sont dans les variables $_SERVER['PATH_INFO'] et $_SERVER['PATH_TRANSLATED'].

Note au sujet de nsapi_virtual() et des requêtes (PHP >= 4.3.3)

Le module NSAPI supporte désormais la fonction nsapi_virtual() (alias : virtual()), pour réaliser des sous requêtes au serveur Web, et inclure le résultat dans une page. Le problème est que cette fonction utilise une fonctionnalité non documentée de la bibliothèque NSAPI. Sous Unix, ce n'est pas un problème, car le module va automatiquement rechercher les fonctions nécessaires, et les utiliser si elles sont disponibles. Sinon, nsapi_virtual() sera désactivée.

Note:

Soyez prévenu : le support de nsapi_virtual() est EXPERIMENTAL !



CGI et configuration en ligne de commande

Par default, PHP est construit comme programmes à la fois CLI et CGI, pouvant être utilisé comme processeur CGI. Si vous utilisez un serveur qui supporte le module PHP, vous devriez en général utiliser cette solution pour des raisons de performances. Cependant, la version CGI permet aux utilisateurs de lancer des pages PHP sous différent id utilisateurs (Unix).

Avertissement

En utilisant le mode CGI, votre serveur est ouvert à de possibles attaques sérieuses. Lisez attentivement notre section sur la sécurité en mode CGI pour apprendre comment vous défendre contre ces attaques.

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, plutôt que d'attendre qu'ils surviennent.

Utiliser les variables prédéfinies

Certaines variables d'environnement fournies par les serveurs Web ne sont pas disponibles dans les » spécifications CGI/1.1 actuelles. Seules les variables suivantes sont définies, et les autres doivent être considérées comme spécifiques aux serveurs Web : AUTH_TYPE, CONTENT_LENGTH, CONTENT_TYPE, GATEWAY_INTERFACE, PATH_INFO, PATH_TRANSLATED, QUERY_STRING, REMOTE_ADDR, REMOTE_HOST, REMOTE_IDENT, REMOTE_USER, REQUEST_METHOD, SCRIPT_NAME, SERVER_NAME, SERVER_PORT, SERVER_PROTOCOL et SERVER_SOFTWARE.



Installation sous HP-UX

Cette section contient les notes et conseils d'installation de PHP sur les distributions HP-UX.

Il y a deux façons d'installer PHP sur les systèmes HP-UX. Soit en le compilant, soit en installant des binaires précompilés.

Les paquets pré-compilés officiels sont disponibles ici : » http://software.hp.com/

En attendant que cette section du manuel soit réécrite, la documentation concernant la compilation de PHP (ainsi que les extensions associées) sur les systèmes HP-UX a été effacée. Pour le moment, veuillez-vous référer à cette ressource externe : » Mise en place d'Apache et de PHP sous HP-UX 11.11



Installation sur les systèmes OpenBSD

Cette section contient les notes spécifiques à l'installation de PHP sous » OpenBSD 3.6.

Utilisation des paquets binaires

Cette méthode est la méthode recommandée pour installer PHP sur OpenBSD. C'est aussi la méthode la plus simple. Le paquet core a été séparé des modules et chacun d'entre eux peut être installé et supprimé indépendamment des autres. Les fichiers dont vous avez besoin sont sur le CD OpenBSD ou sur le site FTP.

Le paquet principal que vous devez installer est php4-core-4.3.8.tgz, qui contient le moteur de base, plus gettext et iconv). Puis, jetez un oeil aux paquets de module, comme php4-mysql-4.3.8.tgz ou php4-imap-4.3.8.tgz. Vous devez utiliser la commande phpxs pour activer et désactiver ces modules dans votre php.ini.

Exemple #1 Exemple d'installation de PHP sous OpenBSD avec Ports

# pkg_add php4-core-4.3.8.tgz
# /usr/local/sbin/phpxs -s
# cp /usr/local/share/doc/php4/php.ini-recommended /var/www/conf/php.ini
  (add in mysql)
# pkg_add php4-mysql-4.3.8.tgz
# /usr/local/sbin/phpxs -a mysql
  (add in imap)
# pkg_add php4-imap-4.3.8.tgz
# /usr/local/sbin/phpxs -a imap
  (remove mysql as a test)
# pkg_delete php4-mysql-4.3.8
# /usr/local/sbin/phpxs -r mysql
  (install the PEAR libraries)
# pkg_add php4-pear-4.3.8.tgz

Lisez la page de manuel Unix » packages(7) pour plus de détails sur les packages binaires d'OpenBSD.

Utilisation des ports

Vous pouvez aussi compiler PHP en utilisant » l'arbre des ports. Cette méthode est recommandée aux utilisateurs expérimentés de OpenBSD. Le port PHP4 est scindé en deux sous-dossiers : core et extensions. Le dossier extensions génère les sous paquets de tous les modules PHP. Si vous souhaitez ne pas créer ces modules, vous pouvez utiliser la commande en ligne no_* FLAVOR. Par exemple, pour ne pas compiler le module imap, utilisez FLAVOR avec la valeur no_imap.

Problèmes courants

  • L'installation par défaut d'Apache fonctionne dans un » contexte chroot(2), qui va limiter l'accès des scripts PHP au dossier /var/www. Vous devez donc créer un dossier /var/www/tmp pour que les sessions PHP soient stockées, ou bien utiliser une autre solution de sauvegarde. De plus, les sockets de bases de données doivent être placés dans ce dossier, ou bien utiliser l'interface localhost. Si vous utilisez des fonctions de réseau avec des fichiers comme /etc, par exemple /etc/resolv.conf, et /etc/services, vous devrez les rendre accessibles aussi dans /var/www/etc. Le paquet OpenBSD PEAR installe automatiquement les bons dossiers, ce qui fait que rien n'est nécessaire. Plus d'informations sur OpenBSD Apache sont disponibles sur » OpenBSD FAQ.
  • Le paquet OpenBSD 3.6 pour l'extension » gd requiert XFree86. Si vous n'avez pas besoin des fonctionnalités de polices qui demandent X11, installez le paquet php4-gd-4.3.8-no_x11.tgz.

Versions plus anciennes

Les anciennes versions de OpenBSD utilisaient le système des FLAVORS pour compiler statiquement PHP. Comme il est trop difficile de générer des packages binaires avec cette méthode, elle est considérée comme obsolète. Vous pouvez toujours utiliser les anciennes versions stables, mais sachez qu'elles ne sont plus supportées par l'équipe d'OpenBSD. Si vous avez des commentaires sur le sujet, le responsable actuel est Anil Madhavapeddy (avsm_arobase_openbsd_point_org).



Installation sous Solaris

Cette section contient les notes et conseils d'installation de PHP sur les distributions Solaris.

Logiciels nécessaires

L'installation Solaris oublie généralement les compilateurs C, et leurs utilitaires. Lisez cette FAQ pour savoir pourquoi est-ce que les versions GNU de certains de ces outils sont nécessaires.

Pour décompresser la distribution PHP, vous avez besoin de

  • tar
  • gzip ou
  • bzip2

Pour compiler PHP, vous avez besoin de

  • gcc (recommandé, les autres compilateurs C peuvent aussi fonctionner)
  • make
  • GNU sed

Pour construire les extensions additionnelles ou modifier le code de PHP, vous pouvez également avoir besoin de

  • flex (à partir de PHP 5.2)
  • re2c
  • bison
  • m4
  • autoconf
  • automake
De plus, vous devrez aussi installer (et peut être aussi compiler) toutes les bibliothèques nécessaires aux extensions comme MySQL, Oracle, etc.

Utilisation des paquets

Vous pouvez simplifier l'installation Solaris en utilisant pkgadd pour installer la plupart des composants. Le système de paquets des images (IPS) pour Solaris 11 Express contient également les composants nécessaires pour l'installation utilisant la commande pkg.



Notes d'installation sous Debian GNU/Linux

Cette section contient des notes et des astuces spécifiques à l'installation de PHP sous » Debian GNU/Linux.

Avertissement

Les compilations non officielles de sources tierces ne sont pas supportées ici. Tout bogue devrait être reporté à l'équipe Debian sauf s'il peut être reproduit en utilisant les dernières compilations de notre » section téléchargements .

Bien que les instructions pour compiler PHP sous Unix s'appliquent aussi à Debian, cette page de manuel contient des informations spécifiques pour les autres manières d'installer PHP, telles que l'utilisation de apt-get ou aptitude. Cette page de manuel utilise indifféremment l'une ou l'autre.

Utilisation de APT

Tout d'abord, veuillez noter que d'autres paquets peuvent être souhaitables, comme libapache2-mod-php5 pour l'intégration avec Apache 2, et php-pear pour PEAR.

Ensuite, avant d'installer un paquet, il est sage de s'assurer que la liste des paquets est à jour. D'habitude, on le fait en utilisant la commande apt-get update.

Exemple #1 Exemple d'installation sous Debian avec Apache 2

# apt-get install php5-common libapache2-mod-php5 php5-cli

APT installera et activera automatiquement le module PHP 5 pour Apache 2, ainsi que toutes ses dépendances. Apache devra être relancé pour que les changements soient effectifs. Par exemple :

Exemple #2 Stopper et démarrer Apache une fois PHP installé

# /etc/init.d/apache2 stop
# /etc/init.d/apache2 start

Un meilleur contrôle de la configuration

Dans l'exemple précédent, PHP a été installé avec juste les composants principaux. Il y a fort à parier que des modules supplémentaires soient nécessaires, tels que MySQL, cURL, GD, etc. Ils peuvent aussi être installés via la commande apt-get.

Exemple #3 Méthodes pour lister les paquets PHP 5 supplémentaires

# apt-cache search php5
# aptitude search php5
# aptitude search php5 |grep -i mysql

Ces exemples montreront de nombreux paquets, donc beaucoup spécifiques à PHP, comme php5-cgi, php5-cli et php5-dev. Déterminez ceux qui sont nécessaires et installez les comme n'importe quel autre en utilisant apt-get ou aptitude. Et vu que Debian effectue une vérification des dépendances, on vous avertira de ces dernières, comme pour installer MySQL et cURL :

Exemple #4 Installer PHP avec MySQL et cURL

# apt-get install php5-mysql php5-curl

APT ajoutera automatiquement les bonnes lignes aux fichiers connexes à php.ini, comme /etc/php5/apache2/php.ini, /etc/php5/conf.d/pdo.ini, etc. et selon l'extension, il ajoutera des entrées semblables à extension=foo.so. De plus, redémarrer le serveur web (Apache, par exemple) est nécessaire pour que ces changements soient effectifs.

Problèmes courants

  • Si les scripts PHP ne sont pas interprétés par le serveur web, il est probable que PHP n'ait pas été ajouté aux fichier de configuration du serveur web, c'est-à-dire, sous Debian, /etc/apache2/apache2.conf ou équivalent. Consultez le manuel Debian pour davantage de détails.
  • Si une extension a apparemment été installée mais que ses fonctions ne sont pas définies, assurez vous que les lignes adéquates ont été insérées dans les fichiers .ini et/ou que le serveur web a été redémarré après l'installation.
  • Il y a deux commandes de base pour installer des paquets sous Debian (et d'autres variantes de Linux) : apt-get et aptitude. Expliquer les différences subtiles entre les deux sort du cadre de ce manuel.



Installation sur un système Mac OS X

Sommaire

Cette section contient les notes et conseils pour installer PHP sur un système Mac OS X. PHP est inclus avec les Macs, et pour compiler, la procédure est identique à l'installation sous Unix.


Utilisation des paquets

Il existe quelques versions pré-packagées et pré-compilées de PHP pour Mac OS X. Cela peut être utile pour mettre en place une configuration standard, mais si vous avez besoin d'accéder à des fonctionnalités spécifiques (comme un serveur sécurisé, ou un pilote de bases de données exotiques), vous aurez à compiler PHP et/ou votre serveur Web vous-même. Si vous n'êtes pas familier avec la compilation et la mise en place d'applications, il est bon de vérifier si personne d'autre n'a pas déjà réalisé un paquet contenant les fonctionnalités que vous désirez.

Les ressources suivantes offrent la possibilité d'installer des paquets et des binaires précompilés pour PHP sous Mac OS :



Utilisation de PHP embarqué

PHP est fourni en standard avec Macs depuis OS X version 10.0.0. Activer PHP avec le serveur Web par défaut nécessite de décommenter quelques lignes dans le fichier de configuration d'Apache httpd.conf tandis que le mode CGI et/ou CLI sont activés par défaut (accès simple via le terminal).

L'activation de PHP en suivant ces instructions permet de configurer rapidement un environnement local de développement. Il est vivement recommandé de toujours mettre à jour PHP à sa version la plus récente. Comme la plupart des programmes, les nouvelles versions sont créées pour corriger les bogues et ajouter des fonctionnalités et c'est le cas de PHP. Reportez-vous à la documentation de l'installation de MAC OS X pour plus de détails. Les instructions suivantes sont destinées au débutant, en fournissant juste assez de détails pour mettre en place une configuration par défaut pour travailler. Tous les utilisateurs sont vivement encouragés à compiler et installer une version récente du paquet.

Le type d'installation standard utilise mod_php, et active le mod_php embarqué sur Mac OS X pour le serveur Web Apache (le serveur Web par défaut qui est accessible via les préférences systèmes), en quelques étapes :

  1. Trouvez et ouvrez le fichier de configuration d'Apache. Par défaut, ce sera : /private/etc/apache2/httpd.conf Utilisez le programme Finder ou Spotlight pour trouver ce fichier peut s'avérer difficile, sachant que, par défaut, il appartient à l'utilisateur root.

    Note: Une façon de l'ouvrir est d'utiliser un éditeur de texte Unix dans un terminal, par exemple, nano, et sachant que le fichier est la propriété de l'utilisateur root, vous devrez utiliser la commande sudo pour l'ouvrir (en tant que root) ; aussi, vous devrez entrer la commande suivante dans votre Terminal (votre mot de passe vous sera demandé) : sudo nano /private/etc/apache2/httpd.conf Quelques commandes nano : ^w (recherche), ^o (sauvegarde), et ^x (sortie) où ^ représente la touche Ctrl.

    Note: Les versions de Mac OS X antérieures à 10.5 fournissent d'anciennes versions de PHP et d'Apache. Aussi, le fichier de configuration d'Apache sur les machines originales peut être /etc/httpd/httpd.conf.

  2. Avec un éditeur de texte, décommentez les lignes (en effaçant le caractère #) qui ressemblent aux lignes suivantes (ces 2 lignes ne se trouvent pas au même endroit) :

    # LoadModule php5_module libexec/httpd/libphp5.so
    
    # AddModule mod_php5.c
    
    Notez le chemin. Dans le futur, lorsque vous compilerez PHP, les fichiers ci-dessus doivent être remplacés ou commentés.

  3. Assurez-vous que les extensions désirées soient analysées par PHP (exemples : .php .html et .inc)

    Sachant que ce comportement a déjà été activé dans votre fichier httpd.conf (depuis Mac Panther), une fois PHP activé, les fichiers .php seront automatiquement analysés par PHP.

    <IfModule mod_php5.c>
        # If php is turned on, we respect .php and .phps files.
        AddType application/x-httpd-php .php
        AddType application/x-httpd-php-source .phps
    
        # Since most users will want index.php to work we
        # also automatically enable index.php
        <IfModule mod_dir.c>
            DirectoryIndex index.html index.php
        </IfModule>
    </IfModule>
    

    Note:

    Avant OS X 10.5 (Leopard), PHP 4 était livré par défaut plutôt que PHP 5. Ainsi, les instructions ci-dessus diffèreront juste en changeant 5 en 4. 5's to 4's.

  4. Assurez-vous que DirectoryIndex charge le fichier index par défaut. Ceci est également définit dans le fichier httpd.conf. Normalement, les fichiers index.php et index.html sont utilisés. Par défaut, index.php est activé car il est également dans la vérification de PHP ci-dessus. Ajustez-le suivant votre besoin.
  5. Définissez le chemin vers le fichier php.ini ou utilisez le chemin par défaut. Le chemin par défaut sur Mac OS X is /usr/local/php/php.ini et un appel à la fonction phpinfo() révèlera cette information. Si aucun fichier php.ini n'est utilisé, PHP utilisera toutes les valeurs par défaut. Reportez-vous à la FAQ sur "trouver le fichier php.ini".
  6. Trouvez et définissez le DocumentRoot C'est le dossier principal pour tous les fichiers Web. Les fichiers dans ce dossier seront servis par le serveur Web, et donc, les fichiers PHP seront analysés par PHP avant de les envoyer au navigateur. Le chemin par défaut est /Library/WebServer/Documents mais peut être défini à n'importe quelle valeur dans le fichier httpd.conf. De plus, le dossier DocumentRoot pour les différentes utilisateurs est /Users/yourusername/Sites
  7. Créez un fichier phpinfo().

    La fonction phpinfo() affiche les informations sur PHP. Créez un fichier dans le DocumentRoot avec le code PHP suivant :

    <?php phpinfo(); ?>

  8. Redémarrez Apache et chargez le fichier PHP que nous venons de créer. Pour redémarrez, exécutez la commande sudo apachectl graceful dans un terminal ou arrêter/démarrer l'option "Personal Web Server" dans les préférences systèmes OS X. Par défaut, le chargement de fichiers locaux dans le navigateur s'effectue via des URL comme ceci : http://localhost/info.php ou, si vous utilisez le DocumentRoot d'un dossier utilisateur, l'URL ressemblera à : http://localhost/~yourusername/info.php

CLI (ou CGI dans les anciennes versions) est nommé php et réside normalement dans /usr/bin/php. Ouvrez un terminal, lisez la section sur la ligne de commande du manuel PHP, et exécutez la commande php -v pour vérifier la version PHP de ce binaire. Un appel à la fonction phpinfo() pourra également vous révéler cette information.



Compiler PHP sur Mac OS X

Référez-vous au guide d'installation sous Unix pour compiler PHP sur Mac OS X.




Installation sur les système Windows

Sommaire

Cette section est applicable à Windows 98/Me et Windows NT/2000/XP/2003. PHP devrait fonctionner sur les plates-formes 16 bits comme Windows 3.1 et parfois, on décrira les plates-formes supportées sous le nom de Win32.

Note:

Windows 98/Me/NT4 n'est plus supporté depuis PHP 5.3.0.

Note:

Windows 95 n'est plus supporté depuis PHP 4.3.0.

Il y a deux méthodes principales pour installer PHP sous Windows : soit manuellement, soit avec l'installeur.

Si vous avez un environnement de développement comme Microsoft Visual Studio, vous pouvez aussi compiler PHP à partir des sources.

Une fois que PHP est installé sur votre Windows, vous pouvez aussi ajouter diverses extensions.

Avertissement

Il y a beaucoup d'installeurs "tout en un" sur Internet, mais aucun n'est approuvé par Php.net, car nous pensons que l'utilisation d'un des paquets officiels pour Windows depuis » http://www.php.net/downloads.php reste le meilleur choix et vous assurera d'avoir un système sécurisé et optimisé.


L'installeur Windows (PHP version 5.1.0 et inférieures)

L'installeur Windows de PHP disponible depuis les pages de » http://www.php.net/downloads.php, installe la version CGI de PHP, et configure les serveurs web IIS, PWS, et Xitami. L'installeur n'inclut aucune extension externe supplémentaire de PHP (php_*.dll), vous les trouverez uniquement dans le paquet zippé Windows et dans les téléchargements PECL.

Note:

Notez bien que bien que l'installeur soit une méthode simple pour installer PHP, il est limité dans plusieurs aspects : par exemple, la configuration automatique des extensions n'est pas prise en compte. Utiliser l'installateur n'est pas la méthode préférée pour installer PHP.

Tout d'abord, installez votre serveur HTTP favori sur votre système et assurez-vous qu'il fonctionne.

Exécutez l'installeur et suivez les instructions fournies par l'assistant. Deux types d'installation sont fournis : standard, qui utilise toutes les configurations par défaut les plus pratiques, et avancée, qui pose un maximum de questions pour paramétrer le plus finement.

L'assistant d'installation rassemble suffisamment d'informations pour configurer php.ini ainsi que certains serveurs web pour utiliser PHP. Un des serveurs web pour lequel l'installeur PHP n'effectue pas de configuration automatique est Apache, vous devez donc le configurer manuellement.

Une fois l'installation terminée, l'installeur vous informera que vous devez redémarrer. Suivez ce conseil, ou commencez à utiliser PHP immédiatement.

Avertissement

Gardez bien à l'esprit que cette installation de PHP n'est pas sécurisée. Si vous voulez avoir une installation sécurisée de PHP, vous devriez commencer par lire la documentation, et choisir toutes vos options avec soin. Cet installeur automatique vous permet de réaliser l'installation en un tour de main, mais n'est pas destiné à l'utilisation sur des serveurs de production.



Installeur Windows (PHP 5.2 et suivant)

L'installeur PHP pour Windows pour les versions suivantes de PHP est construit en utilisant la technologie MSI via le kit d'outils Wix (» http://wix.sourceforge.net/). Il installe et configure PHP ainsi que toutes les extensions internes et PECL, mais aussi, configure les serveurs web les plus populaires comme IIS, Apache, et Xitami.

Tout d'abord, installez votre serveur HTTP (web) sur votre système et assurez-vous qu'il fonctionne correctement. Puis, utilisez l'un des types d'installation de PHP suivants.

Installation normale

Exécutez l'installeur MSI et suivez les instructions fournies par l'assistant d'installation. Il vous sera demandé de sélectionner le serveur Web que vous voulez configurer en premier, ainsi que tous les détails de configuration nécessaires.

Ensuite, il vous sera demandé de sélectionner quelles fonctionnalités et extensions vous voulez installer et activer. En sélectionnant "Will be installed on local hard drive" dans le menu pour chaque élément, vous pouvez contrôler l'installation ou non de la fonctionnalité. En sélectionnant "Entire feature will be installed on local hard drive", vous pourrez installer toutes les sous-fonctionnalités de la fonctionnalité principale (par exemple, en sélectionnant la fonctionnalité "PDO", vous installerez également tous les drivers PDO).

Avertissement

Il n'est pas recommandé d'installer toutes les extensions par défaut, sachant que la plupart nécessite des dépendances externes à PHP afin de fonctionner correctement. Préférez l'utilisation du mode de réparation qui est accessible via le panneau de contrôle "Ajout/Suppression de programmes" pour activer ou désactiver les extensions ou fonctionnalités, après l'installation.

L'installeur configurera donc PHP pour l'utiliser sous Windows, le fichier php.ini ainsi que certains serveurs Web. L'installeur configure actuellement IIS, Apache, Xitami et Sambar ; si vous utilisez un serveur web différent de ceux-ci, vous devrez le configurer manuellement.

Installation silencieuse

L'installeur supporte également un mode silencieux, qui est utile pour les administrateurs systèmes pour déployer PHP facilement. Pour utiliser le mode silencieux, entrez la commande suivante :

msiexec.exe /i php-VERSION-win32-install.msi /q

Vous pouvez contrôler le dossier d'installation en le passant comme paramètre à l'installeur. Par exemple, pour installer PHP dans le dossier e:\php :

msiexec.exe /i php-VERSION-win32-install.msi /q INSTALLDIR=e:\php
Vous pouvez également utiliser la même syntaxe pour spécifier le dossier de configuration d'Apache (APACHEDIR), le dossier du serveur Sambar (SAMBARDIR), et le dossier du serveur Xitami (XITAMIDIR).

Vous pouvez également spécifier quelles fonctionnalités devront être installées. Par exemple, pour installer l'extension mysqli et l'exécutable CGI :

msiexec.exe /i php-VERSION-win32-install.msi /q ADDLOCAL=cgi,ext_php_mysqli

Voici la liste courante des fonctionnalités à installer :

MainExecutable - exécutable php.exe
ScriptExecutable - exécutable php-win.exe ( N'est plus disponible depuis PHP 5.2.10/5.3.0; il est maintenant inclut par défaut )
ext_php_* - les diverses extensions ( par exemple : ext_php_mysql for MySQL )
apache13 - module Apache 1.3
apache20 - module Apache 2.0
apache22 - module Apache 2.2
apacheCGI - exécutable Apache CGI
iis4ISAPI - module IIS ISAPI
iis4CGI - exécutable IIS CGI
iis4FastCGI - exécutable IIS CGI
NSAPI - module serveur Sun/iPlanet/Netscape
netserve - exécutable NetServe Web Server CGI
Xitami - exécutable Xitami CGI
Sambar - module Sambar Server ISAPI
CGI - exécutable php-cgi.exe
PEAR - installeur PEAR
Manual - manuel PHP au format CHM

Pour plus d'informations sur l'installation via les installeurs MSI depuis la ligne de commande, visitez » http://msdn.microsoft.com/en-us/library/aa367988.aspx

Mise à jour de PHP avec l'installeur

Pour effectuer une mise à jour, exécutez l'installeur soit en mode graphique, soit en ligne de commande. L'installeur lira vos options d'installation, effacera votre ancienne installation et réinstallera PHP avec les mêmes options que précédemment. Il est recommandé d'utiliser cette méthode pour mettre à jour votre installation de PHP plutôt que d'aller remplacer manuellement les fichiers dans le dossier d'installation.



Étapes pour une installation manuelle

Cette section contient les instructions pour installer manuellement et configurer PHP sous Microsoft Windows. Si vous recherchez la façon dont doit être utilisé l'installeur PHP pour installer et configurer PHP et un serveur Web sous Windows, référez-vous à l'installeur Windows (PHP 5.2 et suivants).

Sélection et téléchargement de PHP

Téléchargez l'archive PHP depuis » PHP pour Windows: Binaires et sources. Il y a plusieurs versions de l'archive zip - choisissez la version correspondante au serveur web que vous utilisez :

  • Si PHP est utilisé avec IIS, alors choisissez PHP 5.3 VC9 Non Thread Safe ou PHP 5.2 VC6 Non Thread Safe;

  • Si PHP est utilisé avec IIS7 ou supérieure et PHP 5.3+, alors les binaires VC9 de PHP doivent être utilisés.

  • Si PHP est utilisé avec Apache 1 ou Apache 2, alors choisissez PHP 5.3 VC6 ou PHP 5.2 VC6.

Note:

Les versions VC9 sont compilées avec le compilateur Visual Studio 2008 et sont optimisées en terme de performance et de stabilité. Les versions VC9 nécessitent d'avoir » Microsoft 2008 C++ Runtime (x86) ou » Microsoft 2008 C++ Runtime (x64) d'installé.

La structure et le contenu du paquet PHP

Décompressez le contenu de l'archive zip dans le dossier de votre choix, par exemple C:\PHP\. La structure des dossiers et des fichiers extraits depuis l'archive zip ressemble à ceci :

Exemple #1 Structure d'un paquet PHP 5


c:\php
   |
   +--dev
   |  |
   |  |-php5ts.lib                 -- php5.lib en version non thread safe
   |
   +--ext                          -- bibliothèques DLLs pour PHP
   |  |
   |  |-php_bz2.dll
   |  |
   |  |-php_cpdf.dll
   |  |
   |  |-...
   |
   +--extras                       -- vide 
   |
   +--pear                         -- copie initiale de PEAR
   |
   |
   |-go-pear.bat                   -- script d'installation de PEAR
   |
   |-...
   |
   |-php-cgi.exe                   -- exécutable CGI
   |
   |-php-win.exe                   -- exécution de scripts sans avoir un prompt de commande ouvert
   |
   |-php.exe                       -- exécutable de ligne de commande (CLI)
   |
   |-...
   |
   |-php.ini-development           -- configuration par défaut du php.ini
   |
   |-php.ini-production            -- configuration recommandée du php.ini
   |
   |-php5apache2_2.dll             -- n'existe pas dans la version non thread safe
   |
   |-php5apache2_2_filter.dll      -- n'existe pas dans la version non thread safe
   |
   |-...
   |
   |-php5ts.dll                    -- bibliothèque DLL coeur de PHP ( php5.dll en version non thread safe)
   | 
   |-...

Voici la liste des modules et des exécutables inclus dans l'archive zip de PHP :

  • go-pear.bat - le script de configuration de PEAR. Référez-vous à l'» installation de PEAR pour plus de détails.

  • php-cgi.exe - exécutable CGI qui peut être utilisé lors de l'exécution de PHP sous IIS via CGI ou FastCGI.

  • php-win.exe - l'exécutable PHP pour l'exécution de scripts PHP sans fenêtre de ligne de commande (par exemple, des applications PHP qui utilisent un GUI Windows).

  • php.exe - l'exécutable PHP pour l'exécution de scripts PHP dans une interface de ligne de commande (CLI).

  • php5apache2_2.dll - module Apache 2.2.X.

  • php5apache2_2_filter.dll - filtre Apache 2.2.X.

Modification du fichier php.ini

Après l'extraction du contenu du paquet PHP, copiez le fichier php.ini-production dans le fichier php.ini du même dossier. Si nécessaire, il est également possible de placer le fichier php.ini dans le dossier de votre choix mais cela nécessite d'autres étapes de configuration décrites dans la configuration de PHP.

Le fichier php.ini indique à PHP la façon doit il doit se configurer, mais aussi la façon dont il doit travailler avec l'environnement sur lequel il s'exécute. Voici quelques concfigurations du fichier php.ini qui aide PHP à fonctionner d'une meilleure façon sous Windows. Quelques-unes sont optionnelles. Il y a bien d'autres directives utiles pour votre environnement - référez-vous à la liste des directives du php.ini pour plus d'informations.

Directives nécessaires :

  • extension_dir = <chemin vers le dossier des extensions> - extension_dir doit pointer vers le dossier contenant les fichiers des extensions PHP. Le chemin peut être absolu (e.g. "C:\PHP\ext") ou relatif (e.g. ".\ext"). Les extensions listées ci-dessous dans le fichier php.ini doivent se trouver dans le dossier extension_dir.

  • extension = xxxxx.dll - Pour chaque extension que vous voulez activer, vous avez besoin d'une directive "extension=" qui indique à PHP quelles extensions du dossier extension_dir doivent être chargées au démarrage.

  • log_errors = On - PHP a une fonctionnalité permettant d'historiser les erreurs, pouvant être utilisée pour envoyer les erreurs dans un fichier, ou vers un service (i.e. syslog) et fonctionne en conjonction de la directive error_log ci-dessous. Lors de l'exécution sous IIS, log_errors devrait être activée, avec une valeur valide de error_log.

  • error_log = <chemin vers le fichier d'historisation des erreurs> - error_log doit spécifier le chemin absolu ou relatif vers un fichier où les erreurs PHP doivent être écrites. Le fichier doit être accessible en écriture par le serveur web. L'endroit commun de ce fichier est le dossier TEMP, par exemple, "C:\inetpub\temp\php-errors.log".

  • cgi.force_redirect = 0 - Cette directive est nécessaire pour le fonctionnement sous IIS. Elle est relative à la sécurité et est nécessaire par bons nombres de serveurs web. Cependant, son activation sous IIS fera échouer le moteur PHP sous Windows.

  • cgi.fix_pathinfo = 1 - Cette directive permet à PHP d'accéder aux informations concernant le chemin réel suivi par la spécification CGI. Cette directive est nécessaire lors de l'implémentation de FastCGI sous IIS.

  • fastcgi.impersonate = 1 - FastCGI sous IIS supporte la possibilité de rendre impersonnels les éléments relatifs à la sécurité lors d'un appel client. Ceci permet à IIS de définir le contexte de sécurité sur lequel la demande est effectuée.

  • fastcgi.logging = 0 - L'historisation FastCGI doit être désactivé sous IIS. S'il est activé, alors tous les messages de toutes les classes seront traités par FastCGI comme des conditions d'erreur, ce qui fera qu'IIS générera des exceptions HTTP 500.

Directives optionnelles

  • max_execution_time = ## - Cette directive demande à PHP un maximum de temps afin d'exécuter un script donné. Par défaut, c'est 30 secondes. Augmentez la valeur de cette direction si l'application PHP prend plus de temps à s'exécuter.

  • memory_limit = ###M - La mémoire maximale disponible pour le processus PHP, en méga-octets. Par défaut, c'est 128, ce qui est parfait pour la plupart des applications PHP. Pour des applications plus complexes, il peut être nécessaire d'augmenter cette valeur.

  • display_errors = Off - Cette directive indique à PHP si les messages d'erreur doivent être inclus dans le flux retourné au serveur web. Si défini à "On", alors PHP les enverra, suivants les classes d'erreur que vous avez définies avec la directive error_reporting, au serveur web comme partie du flux d'erreur. Pour des raisons de sécurité, il est recommandé de définir à "Off" cette directive sur les serveurs de production afin de ne pas révéler les informations concernant la sécurité, qui sont inclues dans les messages d'erreur.

  • open_basedir = <chemins vers les dossiers, séparés par un point virgule>, e.g. openbasedir="C:\inetpub\wwwroot;C:\inetpub\temp". Cette directive spécifie le chemin vers le dossier où PHP est autorisé à effectuer des opérations sur le système de fichiers. Toute opération en dehors de ces chemins retournera une erreur. Cette directive est spécialement utile pour cantonner l'installation de PHP dans des environnements partagés afin d'éviter que les scripts PHP accèdent à tout fichier se trouvant en dehors du dossier racine du site web.

  • upload_max_filesize = ###M et post_max_size = ###M - La taille maximale autorisée, respectivement, d'un fichier téléchargé et des données de type POST. Les valeurs de ces directives devraient être augmentées si les applications PHP doivent effectuer de gros téléchargements, comme des images ou des fichiers vidéos.

PHP est maintenant configuré pour votre système. La prochaine étape est de choisir un serveur web et de la configurer pour y faire fonctionner PHP. Choisissez un serveur web depuis la table de contenus.

En plus de faire fonctionner PHP via un serveur web, PHP peut être exécuté depuis la ligne de commande, à la façon des scripts .BAT. Reportez-vous au chapitre sur la ligne de commande PHP sous Microsoft Windows pour plus d'informations.



Microsoft IIS

Cette section contient les instructions spécifiques d'installation de PHP sous Microsoft Internet Information Services (IIS).



Microsoft IIS 5.1 et IIS 6.0

Cette section contient les instructions pour une installation manuelle sous IIS (Internet Information Services) 5.1 et IIS 6.0 de PHP sous Microsoft Windows XP et Windows Server 2003. Pour des instructions sur la configuration sous IIS 7.0 et supérieur sous Windows Vista, Windows Server 2008, Windows 7 et Windows Server 2008 R2, reportez-vous à la section Microsoft IIS 7.0 et suivant.

Configuration sous IIS pour traiter les requêtes PHP

Téléchargez et installez PHP suivant les instructions décrites dans les étapes d'installation manuelle.

Note:

La version PHP non thread-safe est recommandé lors de l'utilisation d'IIS. Ces versions sont disponibles sur la page » PHP pour Windows : Binaires et sources.

Configurez les options CGI- et FastCGI du fichier php.ini comme ceci :

Exemple #1 Options de configuration de CGI et FastCGI du fichier php.ini

fastcgi.impersonate = 1
fastcgi.logging = 0
cgi.fix_pathinfo=1
cgi.force_redirect = 0

Téléchargez et installez l'extension » Microsoft FastCGI pour IIS 5.1 et 6.0. L'extension est disponible pour les plate-formes 32-bit et 64-bit - sélectionnez le bon paquet pour votre plate-forme..

Configurez l'extension FastCGI pour gérer les requêtes spécifiques PHP en exécutant la commande ci-dessous. Remplacez la valeur du paramètre "-path" avec le chemin absolu vers le fichier php-cgi.exe.

Exemple #2 Configuration de l'extension FastCGI pour gérer les requêtes PHP

cscript %windir%\system32\inetsrv\fcgiconfig.js -add -section:"PHP" ^
-extension:php -path:"C:\PHP\php-cgi.exe"

Cette commande va créer un mapping des scripts IIS pour les extensions de fichiers *.php, ce qui aura pour effet la gestion de toutes les URLs se terminant par .php par l'extension FastCGI. De plus, la commande configurera l'extension FastCGI lui demandant d'utiliser l'exécutable php-cgi.exe pour traiter les requêtes PHP.

Note:

A ce point, les étapes d'installation et de configuration nécessaires sont terminées. Les instructions qui suivent dans cette section sont optionnelles mais vivement recommandées afin d'atteindre des fonctionnalités et des performances optimales de PHP sous IIS.

Usurpation d'identité et accès au système de fichiers

Il est recommandé d'activer l'usurpation d'identité pour FastCGI en PHP lors de l'utilisation avec IIS. Ce mode est contrôlé par la directive fastcgi.impersonate du fichier php.ini. Lorsque ce mode est activé, PHP effectuera toutes les opérations du système de fichiers avec le compte utilisateur qui a été choisi pour l'authentification IIS. Ceci assure que, même si le même processus PHP est partagé avec différents sites web IIS, les scripts PHP de ces sites web ne pourront pas accéder aux autres fichiers tant que différents comptes utilisateurs sont utilisées pour l'authentification IIS de chaque site web.

Par exemple, IIS 5.1 et IIS 6.0, dans leurs configurations par défaut, ont d'activé l'authentification anonyme avec le compte interne IUSR_<MACHINE_NAME> utilisé comme identité par défaut. Ceci signifie que, afin de permettre à IIS d'exécuter des scripts PHP, il est nécessaire de donner les droits de lecture au compte IUSR_<MACHINE_NAME> pour ces scripts. Si les applications PHP doivent effectuer des opérations en écriture sur certains fichiers ou écrire des fichiers dans des dossiers, le compte IUSR_<MACHINE_NAME> doit avoir les permissions en écriture sur ces différents éléments.

Pour déterminer quel est le compte utilisateur utilisé par l'authentification anonyme IIS, suivez ces étapes :

  1. Dans le menu de démarrage de Windows, choisissez : "Run:", tapez "inetmgr" et cliquez sur "Ok";

  2. Dépliez la liste des sites Web sous le nœud "Web Sites" de l'arbre, faîtes un clic droit sur un site web utilisé et sélectionnez "Properties";

  3. Cliquez sur l'onglet "Directory Security";

  4. Prenez note du champ "User name:" dans le dialogue "Authentication Methods"

Authentification anonyme pour 5.1 et IIS 6.0

Pour modifier la configuration des permissions sur des fichiers ou des dossiers, utilisez l'explorateur Windows ou la commande icacls.

Exemple #3 Configuration des permissions d'accès

icacls C:\inetpub\wwwroot\upload /grant IUSR:(OI)(CI)(M)

Définition du fichier index.php comme document par défaut sous IIS

Les documents par défaut IIS sont utilisés pour les requêtes HTTP qui ne spécifie pas de nom de document. Avec les applications PHP, index.php agit généralement comme document par défaut. Pour ajouter index.php à la liste des documents par défaut IIS, suivez ces étapes :

  1. Dans le menu de démarrage Windows, choisissez "Run:", tapez "inetmgr" et cliquez sur "Ok";

  2. faîtes un clic droit sur le nœud "Web Sites" de l'arbre et sélectionnez "Properties";

  3. Cliquez sur l'onglet "Documents";

  4. Cliquez sur le bouton "Add..." et entrez "index.php" comme "Default content page:".

Configuration de la page index.php comme document par défaut sous IIS

Configuration du recyclage FastCGI et PHP

Configurez l'extension IIS FastCGI pour le recyclage des processus PHP en utilisant la commande ci-dessous. La directive instanceMaxRequests de FastCGI contrôle le nombre de requêtes a traité par un seul processus php-cgi.exe avant l'extinction de l'extension FastCGI. La variable d'environnement PHP PHP_FCGI_MAX_REQUESTS contrôle le nombre de requêtes qu'un seul processus php-cgi.exe peut gérer avant de ce recycler lui-même. Assurez-vous que la valeur spécifiée pour la directive InstanceMaxRequests FastCGI est inférieure ou égale à la valeur spécifiée pour la directive PHP_FCGI_MAX_REQUESTS.

Exemple #4 Configuration du recyclage FastCGI et PHP

cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
-InstanceMaxRequests:10000

cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
-EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000

Configuration du délai d'expiration FastCGI

Augmentez le délai d'expiration pour l'extension FastCGI s'il y a des applications dont les scripts PHP mettent beaucoup de temps à s'exécuter. Les 2 configurations qui contrôlent les délais d'expiration sont ActivityTimeout et RequestTimeout. Referez-vous à la » configuration de l'extension FastCGI pour IIS 6.0 pour plus d'informations sur ces configurations.

Exemple #5 Configuration du délai d'expiration FastCGI

cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
-ActivityTimeout:90

cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
-RequestTimeout:90

Modification du dossier contenant le fichier php.ini

PHP recherche le fichier php.ini dans différents endroits et il est possible de modifier ces endroits de recherche du fichier php.ini en utilisant la variable d'environnement PHPRC. Pour demander à PHP de charger le fichier de configuration depuis un dossier personnalisé, exécutez la commande ci-dessous. Le chemin absolu du dossier contenant le fichier php.ini doit être spécifié sous la variable d'environnement PHPRC.

Exemple #6 Modification du dossier contenant le fichier php.ini

cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
-EnvironmentVars:PHPRC:"C:\Some\Directory\"



Microsoft IIS 7.0 et suivants

Cette section contient les instructions pour une configuration manuelle d'IIS (Internet Information Services) 7.0 et suivants pour fonctionner avec PHP sous Microsoft Windows Vista SP1, Windows 7, Windows Server 2008 et Windows Server 2008 R2. Pour des instructions de configuration d'IIS 5.1 et IIS 6.0 sous Windows XP et Windows Server 2003, reportez-vous à la documentation sur Microsoft IIS 5.1 et IIS 6.0.

Activation du support FastCGI sous IIS

Le module FastCGI est désactivé par défaut sous IIS. Les étapes pour l'activer diffèrent suivant la version de Windows utilisée.

Pour activer le support FastCGI sous Windows Vista SP1 et Windows 7 :

  1. Dans le menu de démarrage Windows, choisissez "Run:", tapez "optionalfeatures.exe" et cliquez sur "Ok";

  2. Dans la fenêtre "Windows Features", dépliez l'arbre "Internet Information Services", "World Wide Web Services", "Application Development Features", puis, activez la boite à cocher "CGI";

  3. Cliquez sur OK et attendez que l'installation se termine.

Activation du support FastCGI pour IIS7 sous Windows Vista SP1 et Windows 7

Pour activer le support FastCGI sous Windows Server 2008 et Windows Server 2008 R2 :

  1. Dans le menu de démarrage Windows, choisissez "Run:", tapez "CompMgmtLauncher" et cliquez sur "Ok";

  2. Si le rôle "Web Server (IIS)" n'est pas présent dans le nœud "Roles" , ajoutez-le en cliquant sur "Add Roles";

  3. Si le rôle "Web Server (IIS)" est présent, cliquez sur "Add Role Services", puis, activez la boite à cocher "CGI" sous le groupe "Application Development";

  4. Cliquez sur "Next", puis "Install", et attendez la fin de l'installation.

Activation du support FastCGI sous Windows Server 2008 et Windows Server 2008 R2

Configuration d'IIS pour traiter les requêtes PHP

Téléchargez et installez PHP suivant les instructions décrites dans les étapes d'installation manuelle.

Note:

La version PHP non thread-safe est recommandée lors de l'utilisation d'IIS. Les versions non thread-safe sont disponibles sur la page » PHP pour Windows : Binaires et sources.

Configurez les options CGI et FastCGI dans le fichier php.ini comme ceci :

Exemple #1 Options CGI et FastCGI dans le fichier php.ini

fastcgi.impersonate = 1
fastcgi.logging = 0
cgi.fix_pathinfo=1
cgi.force_redirect = 0

Configurez le gestionnaire de mapping IIS pour PHP en utilisant soit l'interface de gestion utilisateurs IIS ou l'outil en ligne de commande.

Utilisation de l'interface de gestion utilisateurs IIS pour créer un gestionnaire de mapping pour PHP

Suivez ces étapes pour créer un gestionnaire de mapping IIS pour PHP dans l'interface de gestion utilisateurs IIS :

  1. Dans le menu démarrer de Windows, choisissez "Run:", tapez "inetmgr" et cliquez sur "Ok";

  2. Dans l'interface de gestion utilisateurs IIS, sélectionnez le nœud correspondant au serveur dans l'arbre "Connections";

  3. Dans la page "Features View", ouvrez la fonctionnalité "Handler Mappings";

    Création d'un gestionnaire de mapping IIS pour PHP : Localisation du gestionnaire de mappings

  4. Dans le panneau "Actions", cliquez sur "Add Module Mapping...";

  5. Dans la fenêtre "Add Module Mapping", entrez ceci :

    • Request path: *.php
    • Module: FastCgiModule
    • Executable: C:\[Path to PHP installation]\php-cgi.exe
    • Name: PHP_via_FastCGI

  6. Cliquez sur le bouton "Request Restrictions", puis, configurez le mappin pour appeler le gestionnaire uniquement si la requête est mappée à un fichier ou un dossier;

  7. Cliquez sur OK sur tous les dialogues pour sauvegarder la configuration.

Création d'un gestionnaire de mapping pour PHP : Ajout d'un gestionnaire de mapping

Utilisation de l'outil en ligne de commande pour créer un gestionnaire de mapping pour PHP

Utilisez la commande suivante pour créer une file de processus IIS FastCGI qui utilisera l'exécutable php-cgi.exe pour traiter les requêtes PHP. Remplacez la valeur du paramètre fullPath avec le chemin absolu vers le fichier php-cgi.exe.

Exemple #2 Création d'une file de processus IIS FastCGI

%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI ^
/+[fullPath='c:\PHP\php-cgi.exe']

Configurez IIS pour gérer les requêtes PHP spécifiques en exécutant la commande suivante. Remplacez la valeur du paramètre scriptProcessor avec le chemin absolu vers le fichier php-cgi.exe.

Exemple #3 Création d'un gestionnaire de mapping pour les requêtes PHP

%windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers ^
/+[name='PHP_via_FastCGI', path='*.php',verb='*',modules='FastCgiModule',^
scriptProcessor='c:\PHP\php-cgi.exe',resourceType='Either']

Cette commande crée un gestionnaire de mapping IIS pour les fichiers dont l'extension est *.php, ce qui fera que toutes les URLs qui se terminent par .php seront gérées par le module FastCGI.

Note:

À ce moment, les étapes d'installation et de configuration nécessaires sont terminées. Les instructions qui suivent sont optionnelles mais vivement recommandées afin d'avoir un maximum de fonctionnalités mais aussi de bonnes performances pour PHP sous IIS.

Usurpation d'identité et l'accès au système de fichiers

Il est recommandé d'activer l'usurpation d'identité FastCGI en PHP lors de l'utilisation avec IIS. Ce mode est contrôlé par la directive fastcgi.impersonate du fichier php.ini. Lorsque l'usurpation d'identité est active, PHP effectuera toutes les opérations sur le systèmes de fichiers en se faisant passer pour le compte utilisateur qui a été déterminé par l'authentification IIS. Ceci assure que même si le même processus PHP est partagé sur plusieurs sites Web IIS, les scripts PHP de ces sites Web ne pourront pas accéder aux autres fichiers sachant qu'un compte utilisateur différent est utilisé pour l'authentification IIS de chacun de ces sites.

Par exemple, IIS 7, dans sa configuration par défaut, a d'activer l'authentification anonyme avec le compte utilisateur interne IUSR, utilisé comme identité par défaut. Ceci signifie que, pour qu'IIS puisse exécuter des scripts PHP, il est nécessaire d'avoir une permission en lecture pour le compte utilisateur IUSR sur ces scripts. Si les applications PHP doivent effectuer des opérations en écriture sur certains fichiers ou écrire des fichiers dans des dossiers, alors le compte IUSR doit avoir les bonnes permissions en écriture.

Pour déterminer le compte utilisateur utilisé comme identité anonyme sous IIS 7, utilisez la commande suivante. Remplacez "Default Web Site" avec le nom du site web IIS que vous utilisez. Dans l'élément de configuration XML, regardez l'attribut userName.

Exemple #4 Déterminer le compte utilisé comme identité anonyme sous IIS

%windir%\system32\inetsrv\appcmd.exe list config "Default Web Site" ^
/section:anonymousAuthentication

<system.webServer>
  <security>
    <authentication>
      <anonymousAuthentication enabled="true" userName="IUSR" />
    </authentication>
   </security>
</system.webServer>

Note:

Si l'attribut userName n'est pas présent dans l'élément anonymousAuthentication, ou s'il est vide, alors cela signifie que l'identité de l'application est bien l'identité anonyme pour ce site web.

Pour modifier la configuration sur les permissions de ces fichiers ou ces dossiers, utilisez l'interface de l'explorateur Windows ou la ligne commande icacls.

Exemple #5 Configuration des permissions d'accès aux fichiers

icacls C:\inetpub\wwwroot\upload /grant IUSR:(OI)(CI)(M)

Définir index.php comme document par défaut sous IIS

Les documents par défaut IIS sont utilisés pour les requêtes HTTP qui ne spécifient pas un nom de document. Avec les applications PHP, index.php agit généralement comme document par défaut. Pour ajouter index.php à la liste des documents par défaut d'IIS, utilisez la commande suivante :

Exemple #6 Définir index.php comme document par défaut sous IIS

%windir%\system32\inetsrv\appcmd.exe set config ^
-section:system.webServer/defaultDocument /+"files.[value='index.php']" ^
/commit:apphost

Configuration du recyclage FastCGI et PHP

Configurez l'extension IIS FastCGI pour le recyclage des processus PHP en utilisant la commande ci-dessous. La directive instanceMaxRequests de FastCGI contrôle le nombre de requêtes a traité par un seul processus php-cgi.exe avant l'extinction d'IIS. La variable d'environnement PHP PHP_FCGI_MAX_REQUESTS contrôle le nombre de requêtes qu'un seul processus php-cgi.exe peut gérer avant de ce recycler lui-même. Assurez-vous que la valeur spécifiée pour la directive InstanceMaxRequests FastCGI est inférieure ou égale à la valeur spécifiée pour la directive PHP_FCGI_MAX_REQUESTS.

Exemple #7 Configuration du recyclage FastCGI et PHP

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/[fullPath='c:\php\php-cgi.exe'].instanceMaxRequests:10000

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/+"[fullPath='C:\{php_folder}\php-cgi.exe'].environmentVariables.^
[name='PHP_FCGI_MAX_REQUESTS',value='10000']"

Configuration du délai d'expiration FastCGI

Augmentez le délai d'expiration pour l'extension FastCGI s'il y a des applications dont les scripts PHP mettent beaucoup de temps à s'exécuter. Les 2 configurations qui contrôlent les délais d'expiration sont activityTimeout et requestTimeout. Utilisez les commandes ci-dessous pour modifier la configuration du délai d'expiration. Assurez-vous de remplacer la valeur du paramètre fullPath par le chemin absolu vers le fichier php-cgi.exe.

Exemple #8 Configuration du délai d'expiration FastCGI

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/[fullPath='C:\php\php-cgi.exe',arguments=''].activityTimeout:"90"  /commit:apphost

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/[fullPath='C:\php\php-cgi.exe',arguments=''].requestTimeout:"90"  /commit:apphost

Modification du dossier contenant le fichier php.ini

PHP recherche le fichier php.ini dans différents endroits et il est possible de modifier ces endroits de recherche du fichier php.ini par défaut en utilisant la variable d'environnement PHPRC. Pour demander à PHP de charger le fichier de configuration depuis un dossier personnalisé, exécutez la commande ci-dessous. Le chemin absolu du dossier contenant le fichier php.ini doit être spécifié sous la variable d'environnement PHPRC.

Exemple #9 Modification du dossier contenant le fichier php.ini

appcmd.exe set config  -section:system.webServer/fastCgi ^
/+"[fullPath='C:\php\php.exe',arguments=''].environmentVariables.^
[name='PHPRC',value='C:\Some\Directory\']" /commit:apphost



Installer PHP sous Microsoft Windows avec Apache 1.3.x

Cette section contient des notes et conseils spécifiques pour l'installation de PHP avec Apache 1.3.x sur les systèmes Microsoft Windows. Il y a aussi des instructions et des notes spécifiques pour Apache 2 sur une page séparée.

Note:

Lisez les étapes d'installation du manuel d'abord !

Il y a deux méthodes pour faire fonctionner PHP avec Apache 1.3.x sous Windows. La première est d'utiliser l'exécutable CGI (php.exe pour PHP 4 et php-cgi.exe pour PHP 5), l'autre est d'utiliser les modules Apache DLL. Dans les deux cas, vous devez arrêter le serveur Apache, éditer votre fichier httpd.conf pour dire à Apache de prendre PHP en compte et redémarrer Apache.

Maintenant que le module SAPI a été rendu plus stable sous Windows, nous recommandons son usage plutôt que celui de l'exécutable CGI, car il est plus transparent et sécurisé.

Bien qu'il puisse y avoir quelques différences de configuration de PHP sous Apache, le processus reste simple et à la portée du néophyte. Reportez-vous aux documentations Apache pour plus de détails sur ces directives.

Après avoir modifié le fichier de configuration, pensez à redémarrer le serveur web, par exemple avec NET STOP APACHE suivi de NET START APACHE, si vous utilisez Apache comme service Windows, ou bien utilisez vos alias classiques.

Note: Souvenez-vous que lorsque vous ajoutez des valeurs représentants un chemin dans la configuration d'Apache sous Windows, tous les antislash, comme c:\repertoire\fichier.ext, devraient être convertis en slashes, comme c:/repertoire/fichier.ext. Un slash final peut également être nécessaire pour les dossiers.

Installation de PHP en tant que module Apache

Vous devez ajouter les lignes suivantes à votre fichier de configuration Apache httpd.conf :

Exemple #1 PHP comme module Apache 1.3.x

Cet exemple suppose que PHP est installé dans le dossier c:\php. Ajustez le chemin si ce n'est pas le cas.

Pour PHP 4 :

# À ajouter à la fin de la section LoadModule
# N'oubliez pas de copier ce fichier depuis le dossier sapi !
LoadModule php4_module "C:/php/php4apache.dll"

# À ajouter à la fin de la section AddModule
AddModule mod_php4.c

Pour PHP 5 :

# À ajouter à la fin de la section LoadModule
LoadModule php5_module "C:/php/php5apache.dll"

# À ajouter à la fin de la section AddModule
AddModule mod_php5.c

Pour les deux :

# Ajoutez cette ligne dans les parenthèses conditionnelles <IfModule mod_mime.c>
AddType application/x-httpd-php .php

# Pour les fichiers de syntaxe colorisée .phps, ajoutez également
AddType application/x-httpd-php-source .phps

Installation comme binaire CGI

Si vous avez dézippé le paquet PHP dans le répertoire c:\php\ comme décrit dans la section sur les étapes d'installation du manuel, vous devez insérer ces lignes à votre fichier de configuration Apache pour activer le binaire CGI :

Exemple #2 PHP et Apache 1.3.x en tant que CGI

ScriptAlias /php/ "c:/php/"
AddType application/x-httpd-php .php

# Pour PHP 4
Action application/x-httpd-php "/php/php.exe"

# Pour PHP 5
Action application/x-httpd-php "/php/php-cgi.exe"

# spécifez le répertoire où se trouve php.ini
SetEnv PHPRC C:/php
Notez que la seconde ligne dans l'exemple ci-dessus peut être touvée dans l'actuelle version de votre httpd.conf, mais elle est commentée. Souvenez-vous également de faire correspondre le chemin c:/php/ à votre chemin actuel vers PHP.

Avertissement

En utilisant le mode CGI, votre serveur est ouvert à de possibles attaques sérieuses. Lisez attentivement notre section sur la sécurité en mode CGI pour apprendre comment vous défendre contre ces attaques.

Si vous voulez présenter la source de vos fichiers PHP avec la coloration syntaxique, il n'existe pas d'option équivalente de celle de la version module de PHP. Si vous choisissez de configurer Apache pour utiliser PHP en mode CGI, vous aurez besoin d'utiliser la fonction highlight_file(). Pour réaliser cela simplement, créez un script PHP dans un fichier et ajoutez ce code : <?php highlight_file('original_php_script.php'); ?>.



Installation des serveurs Apache 2.x sur les systèmes Microsoft Windows

Cette section contient les notes et conseils d'installation de PHP avec le serveur Apache 2.x sur les systèmes Microsoft Windows. Nous avons également des notes et des instructions pour Apache 1.3.x sur une page séparée.

Note:

Vous devriez lire les étapes d'installation du manuel d'abord !

Note: Support Apache 2.2

Les utilisateurs d'Apache 2.2 doivent conserver à l'esprit que la bibliothèque DLL d'Apache 2.2 sont nommées php5apache2_2.dll plutôt que php5apache2.dll et n'est disponible que pour PHP 5.2.0 et suivant. Voir aussi » http://snaps.php.net/

Il est vivement recommandé de consulter la » documentation Apache pour avoir une meilleure connaissance du serveur web Apache 2.x. Lisez également les » notes spécifiques à Windows pour Apache 2.x avant de lire cette documentation.

Apache 2.x est prévu pour fonctionner sur les versions de Windows désignées comme serveurs, comme Windows NT 4.0, Windows 2000, Windows XP, ou Windows 7. Bien qu'Apache 2.x fonctionne parfaitement bien sous Windows 9x, le support de ces plateformes est incomplet et quelques fonctionnalités peuvent ne pas fonctionner correctement ; et il n'est pas prévu d'améliorer cela.

Téléchargez la version la plus récente de » Apache 2.x et une version de PHP. Suivez les instructions d'installation manuelle puis revenez ici pour réaliser l'intégration de PHP et Apache.

Il y a trois méthodes pour que PHP fonctionne avec Apache 2.x sous Windows. Vous pouvez exécuter PHP comme gestionnaire, comme CGI ou comme FastCGI.

Note: Souvenez-vous que lorsque vous ajoutez des valeurs représentants un chemin dans la configuration d'Apache sous Windows, tous les antislash, comme c:\repertoire\fichier.ext, devraient être convertis en slashes, comme c:/repertoire/fichier.ext. Un slash final peut également être nécessaire pour les dossiers.

Installation d'Apache comme gestionnaire

Vous devez insérer les lignes suivantes dans le fichier de configuration httpd.conf d'Apache pour charger le module PHP pour Apache 2.x :

Exemple #1 PHP et Apache 2.x comme gestionnaire

# 
LoadModule php5_module "c:/php/php5apache2.dll"
AddHandler application/x-httpd-php .php

# configure the path to php.ini
PHPIniDir "C:/php"

Note: Rappelez-vous de placer votre chemin actuel de PHP dans le chemin C:/php/ des exemples ci-dessous. Assurez-vous d'utiliser soit php5apache2.dll, soit php5apache2_2.dll dans la directive LoadModule et de vérifiez que le fichier correspondant est en réalité situé dans le chemin utilisé dans cette directive.

La configuration suivante activera le gestionnaire PHP pour tous les fichiers qui ont l'extension .php, même si d'autres extensions sont utilisées pour ces fichiers. Par exemple, un fichier nommé example.php.txt sera exécuté par le gestionnaire PHP. Pour vous assurez que seuls les fichiers se terminant par .php sont exécutés, utilisez plutôt la configuration suivante :

<FilesMatch \.php$>
      SetHandler application/x-httpd-php
 </FilesMatch>

Exécution de PHP en tant que CGI

Vous devriez consulter la » documentation Apache CGI où vous trouverez toutes les informations nécessaires à l'exécution d'Apache CGI.

Pour exécuter PHP en tant que CGI, vous devez placer tous vos fichiers php-cgi dans un dossier désigné comme dossier CGI en utilisant la directive ScriptAlias.

Vous devez ensuite insérer une ligne #! dans vos fichiers PHP, pointant vers le binaire PHP :

Exemple #2 PHP et Apache 2.x en tant que CGI

#!C:/php/php.exe
<?php
  phpinfo();
?>

Avertissement

En utilisant le mode CGI, votre serveur est ouvert à de possibles attaques sérieuses. Lisez attentivement notre section sur la sécurité en mode CGI pour apprendre comment vous défendre contre ces attaques.

Exécuter PHP en tant que FastCGI

L'exécution de PHP en tant que FastCGI a un beaucoup d'avantages contrairement à son exécution en tant que CGI. Sa mise en place de cette manière est assez simple :

Récupérez mod_fcgid depuis » http://httpd.apache.org/mod_fcgid/. Les bibliothèques Win32 sont disponibles au téléchargement depuis ce site. Installez le module suivant les instructions fournies.

Configurez votre serveur web comme ci-dessous, en vous assurant d'ajuster tous les chemins pour refléter votre configuration système particulière :

Exemple #3 Configuration d'Apache pour exécuter PHP en tant que FastCGI

LoadModule fcgid_module modules/mod_fcgid.so  

# Où se trouve le fichier php.ini ?
FcgidInitialEnv PHPRC        "c:/php" 

AddHandler fcgid-script .php  
FcgidWrapper "c:/php/php-cgi.exe" .php  
Les fichiers avec l'extension .php seront maintenant exécutés par le gestionnaire PHP FastCGI.



Serveurs Sun, iPlanet et Netscape servers sur Microsoft Windows

Cette section contient les notes et détails spécifiques à l'installation de PHP sur des serveurs Sun Java System Web Server, Sun ONE web Server, Netscape et iPlanet, sous Windows.

Depuis PHP 4.3.3, vous pouvez utiliser les scripts PHP avec le module NSAPI pour gérer des listes de dossiers et des pages d'erreurs personnalisées. Des fonctions supplémentaires sont disponibles pour assurer la compatibilité avec Apache. Pour du support sur les serveurs courants, voyez la note sur les sous-requêtes.

Configuration en CGI sur les serveurs Sun, iPlanet et Netscape

Pour installer PHP en CGI, suivez ce qui suit :

  • Copiez le fichier php4ts.dll dans votre dossier principal (le dossier où vous avez installé Windows)
  • Faites un fichier d'association depuis la ligne de commande. Tapez les lignes suivantes :

    assoc .php=PHPScript
    ftype PHPScript=c:\php\php.exe %1 %*

  • Dans le serveur Netscape Enterprise Administration Server, créez un dossier shellcgi et supprimez-le aussitôt (cette opération crée 5 lignes importantes dans le fichier obj.conf et permet au serveur de gérer les scripts CGI).
  • Dans le serveur Netscape Enterprise Administration Server, créez un nouveau type MIME : Category: type, Content-Type: magnus-internal/shellcgi, File Suffix:php.
  • Recommencez pour chaque instance de serveur web qui devra exécuter PHP.

Plus de détails sur la configuration de PHP comme CGI sont disponibles à » http://benoit.noss.free.fr/php/install-php.html

Configuration NSAPI sur les serveurs Sun, iPlanet et Netscape

Pour installer PHP avec l'interface NSAPI, faites ceci :

  • Copiez le fichier php4ts.dll dans votre dossier systemroot (le dossier où vous avez installé windows)
  • Faites un fichier d'association depuis la ligne de commande. Tapez les lignes suivantes :

    assoc .php=PHPScript
    ftype PHPScript=c:\php\php.exe %1 %*

  • Dans le serveur Netscape Enterprise Administration Server, créez un nouveau type MIME : Category: type, Content-Type: magnus-internal/shellcgi, File Suffix:php.
  • Éditez le fichier magnus.conf (pour les serveurs >= 6) ou obj.conf (pour les serveurs < 6) et ajoutez ce qui suit : Vous devez placer ces lignes après mime types init.

    Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans" shlib="c:/php/sapi/php4nsapi.dll"
    Init fn="php4_init" LateInit="yes" errorString="Failed to initialise PHP!" [php_ini="c:/path/to/php.ini"]
    
    (PHP >= 4.3.3) Le paramètre php_ini est optionnel, mais si vous le définissez, vous pourrez placer votre fichier php.ini dans le dossier de configuration de votre serveur web.

  • Configurez l'objet par défaut dans le fichier obj.conf (pour les classes de serveur virtuel [Sun Web Server 6.0+], dans le fichier vserver.obj.conf) : dans la section <Object name="default">, placez cette ligne nécessairement avant toutes les lignes 'ObjectType' et après toutes les lignes 'ObjectType' :

    Service fn="php4_execute" type="magnus-internal/x-httpd-php" [inikey=value inikey=value ...]
    
    (PHP >= 4.3.3) Comme paramètres supplémentaires, vous pouvez ajouter quelques valeurs spéciales du php.ini, par exemple, vous pouvez définir un docroot="/path/to/docroot" spécifique au contexte où php4_execute est appelé, non pas "On","Off",... (cela ne fonctionnerait pas correctement), e.g. zlib.output_compression=1 à la place de zlib.output_compression="On"

  • Cela n'est nécessaire que si vous voulez configurer un dossier qui ne contiendra que vos scripts PHP (tout comme un dossier cgi-bin) :

    <Object name="x-httpd-php">
    ObjectType fn="force-type" type="magnus-internal/x-httpd-php"
    Service fn=php4_execute [inikey=value inikey=value ...]
    </Object>
    
    Après cela, vous pouvez configurer un dossier dans l'administration du serveur et lui assigner le style x-httpd-php. Tous les fichiers s'y trouvant seront exécutés comme étant des scripts PHP. Cela peut être pratique pour cacher l'usage de PHP en renommant les fichiers en .html.

  • Redémarrez votre serveur web pour que les modifications prennent effet.
  • Faites cela pour chaque instance du serveur web où vous voulez exécuter PHP.

Note:

Plus de détails sur la configuration de PHP comme filtre NSAPI peuvent être trouvés ici : » http://benoit.noss.free.fr/php/install-php4.html

Note:

La taille de la pile que PHP utilise dépend de la configuration du serveur web. Si vous rencontrez des crashs avec les grands scripts PHP, il est recommandé d'augmenter la taille de la pile avec la console d'administration : dans la section "MAGNUS EDITOR".

Environnement CGI et modifications recommandées du php.ini

Il est important de garder en tête que iPlanet/SunONE/Netscape est un serveur web multi-threadé. Comme toutes les requêtes se situent dans le même contexte (c'est le contexte sur serveur web), et que ce contexte est unique. SI vous voulez accéder a des variables comme PATH_INFO, HTTP_HOST etc. il n'est pas recommandé d'y accéder à l'ancienne manière de PHP, avec la fonction getenv() ou une autre méthode (register globals, $_ENV). De cette manière, vous n'aurez que des valeurs d'environnement du serveur, et non pas des valeurs correctes pour le CGI.

Note:

Pourquoi est-ce que les variables CGI sont invalides ?

C'est lié au fait que le processus du serveur web est lancé par l'administrateur du serveur, qui utilise le script de lancement au démarrage. En fait, il aurait fallu que vous lanciez vous-même le processus. C'est pour cela que l'environnement du serveur web contient des variables d'environnement CGI. Vous pouvez vérifier cela en lançant le serveur web depuis un autre endroit que l'administrateur du serveur : utilisez la ligne de commande Unix en tant que root : vous verrez alors qu'il n'y a pas de variables d'environnement.

Changez simplement vos scripts pour lire les variables CGI, en utilisant le tableau superglobal $_SERVER. Si vous avez d'autres scripts qui utilisent encore $HTTP_HOST et compagnie, il est recommandé d'activer l'option register_globals dans le php.ini et de changer l'ordre des variables. IMPORTANT : supprimez le "E" dans cette option, car vous n'en avez pas besoin pour cet environnement.

variables_order = "GPCS"
register_globals = On

Utilisation particulière pour les pages d'erreurs ou les listages spécifiques de dossiers (PHP >= 4.3.3)

Vous pouvez utiliser PHP pour générer des pages d'erreurs de type "404 Not Found" ou apparentée. Ajoutez la ligne suivante dans le fichier obj.conf pour chaque page d'erreur que vous souhaitez remplacer :

Error fn="php4_execute" code=XXX script="/path/to/script.php" [inikey=value inikey=value...]
XXX est le code d'erreur HTTP. Effacez toute autre directive Error qui pourrait interférer avec la vôtre. Si vous voulez utiliser une page pour toutes les erreurs qui existent, laissez le paramètre code vide. Votre script peut obtenir le code de statut HTTP dans la variable $_SERVER['ERROR_TYPE'].

Une autre possibilité est de générer une liste de dossiers personnalisée. Créez simplement un script PHP qui affiche le contenu du dossier, et remplacez la ligne Service par défaut par type="magnus-internal/directory" dans obj.conf avec ceci :

Service fn="php4_execute" type="magnus-internal/directory" script="/path/to/script.php" [inikey=value inikey=value...]
Pour ces deux points, l'URI originale et l'URI traduite sont dans les variables $_SERVER['PATH_INFO'] et $_SERVER['PATH_TRANSLATED'].

Note au sujet de nsapi_virtual() et des requêtes (PHP >= 4.3.3)

Le module NSAPI supporte désormais la fonction nsapi_virtual() (alias : virtual()), pour réaliser des sous requêtes au serveur web, et inclure le résultat dans une page. Le problème est que cette fonction utilise une fonctionnalité non documentée de la bibliothèque NSAPI.

Sous Unix, ce n'est pas un problème, car le module va automatiquement rechercher les fonctions nécessaires, et les utiliser si elles sont disponibles. Sinon, nsapi_virtual() sera désactivée.

Sous Windows, des limitations dans la gestion des DLL impose l'utilisation de la plus récente bibliothèque ns-httpdXX.dll. Cela a été testé pour les serveurs jusqu'à la version 6.0. Si une nouvelle version de SunONE server est utilisée, la détection échoue, et nsapi_virtual() est désactivée.

Dans ce cas, essayez ceci : ajoutez le paramètre suivant à php4_init dans magnus.conf/obj.conf :

Init fn=php4_init ... server_lib="ns-httpdXX.dll"
XX est le numéro correct de la version de la DLL. Pour la connaître, regardez dans le server-root pour connaître le nom correct de la DLL. La DLL la plus grande en taille est la bonne.

Vous pouvez vérifier le statut en utilisant la fonction phpinfo().

Note:

Soyez prévenu : le support de nsapi_virtual() est expérimental.



Sambar Server on Microsoft Windows

Cette section contient les notes et conseils d'installation de PHP sur les serveurs » Sambar, sur Windows.

Note:

Vous devriez lire les étapes d'installation du manuel d'abord !

Cette liste décrit comment configurer le module ISAPI avec le serveur Sambar sous Windows.

  • Trouvez le fichier appelé mappings.ini (dans le dossier de configuration), dans le dossier d'installation de Sambar.

  • Ouvrez mappings.ini et ajoutez la ligne suivante, sous la section [ISAPI] :

    Exemple #1 Configuration ISAPI de Sambar

    #pour PHP 4
    *.php = c:\php\php4isapi.dll
    
    #pour PHP 5
    *.php = c:\php\php5isapi.dll
    
    (Cette ligne suppose que PHP a été installé dans le dossier c:\php).

  • Maintenant, redémarrez le serveur Sambar pour que les modifications prennent effet.

Note:

Si vous voulez utiliser PHP pour communiquer avec les ressources se trouvant sur un autre ordinateur de votre réseau, vous devez modifier le compte utilisé par le service Sambar Server. Le compte par défaut utilisé par le service Sambar Server est LocalSystem, qui n'a pas accès aux ressources distantes. Le compte peut être modifié en utilisant les options des services, se trouvant dans le centre de contrôle de Windows.



Installation Xitami sur Microsoft Windows

Cette section contient les conseils d'installation spécifiques à » Xitami sur Microsoft Windows.

Note:

Vous devriez lire les étapes d'installation du manuel d'abord !

Cette liste décrit comment installer PHP comme CGI exécutable avec Xitami sous Windows.

Note: Important pour les utilisateurs de CGI

Lisez la FAQ sur cgi.force_redirect pour d'importants détails. Cette directive doit être configurée à 0. Si vous voulez utiliser $_SERVER['PHP_SELF'], vous devez activer la directive cgi.fix_pathinfo.

Avertissement

En utilisant le mode CGI, votre serveur est ouvert à de possibles attaques sérieuses. Lisez attentivement notre section sur la sécurité en mode CGI pour apprendre comment vous défendre contre ces attaques.

  • Assurez-vous que le serveur web fonctionne, et allez dans la console d'administration du serveur (généralement http://127.0.0.1/admin), puis cliquez sur "Configuration".

  • Naviguez dans les Filters, et ajoutez l'extension que vous souhaitez (souvent .php) dans le champ File extensions.

  • Dans la commande Filter, ajoutez le nom et le chemin de votre exécutable PHP i.e C:\php\php.exe pour PHP 4 ou C:\php\php-cgi.exe pour PHP 5.

  • Cliquez sur le bouton Save.

  • Redémarrez le serveur pour prendre en compte les modifications.



Compilation des sources

Ce chapitre va vous apprendre à compiler PHP depuis les sources sous Windows, en utilisant les utilitaires Microsoft. Pour compiler PHP avec Cygwin, référez-vous à Installation sur les systèmes UNIX.

Reportez-vous à la documentation fournie par le wiki : » http://wiki.php.net/internals/windows/stepbystepbuild.



Installation des extensions sous Windows

Après avoir installé PHP et un serveur web sous Windows, vous devriez probablement vouloir installer quelques extensions pour avoir des fonctionnalités supplémentaires. Vous pouvez choisir quelles extensions seront chargées lors du démarrage de PHP en modifiant votre php.ini. Vous pouvez également en charger dynamiquement dans vos scripts à l'aide de la fonction dl().

Les bibliothèques DLLs pour les extensions PHP sont préfixées par php_.

Beaucoup d'extensions sont incluses dans la version pour Windows de PHP. Cela signifie que les bibliothèques DLL additionnelles et la directive extension ne sont pas utilisées pour charger ces extensions. La table des extensions PHP pour Windows liste les extensions qui requièrent des bibliothèques DLL additionnelles PHP. Voici une liste d'extensions internes :

En PHP 4 (mise à jour : PHP 4.3.11) : BCMath, Caledar, COM, Ctype, FTP, MySQL, ODBC, Overload, PCRE, Session, Tokenizer, WDDX, XML et Zlib

En PHP 5 (mise à jour : PHP 5.0.4), les changements suivants existent. En interne : DOM, LibXML, Iconv, SimpleXML, SPL et SQLite Les suivants ne sont plus intégrés : MySQL and Overload.

Le dossier par défaut dans lequel PHP cherche des extensions est c:\php4\extensions en PHP 4 et c:\php5 en PHP 5. Pour changer ce comportement pour refléter votre installation de PHP, éditez votre fichier php.ini :

  • Vous devriez pouvoir changer le paramètre extension_dir pour pointer vers le dossier contenant vos extensions ou l'endroit où vous avez placé vos fichiers php_*.dll. Par exemple :

    extension_dir = c:\php\extensions

  • Pour activer ces extensions dans votre php.ini, vous devez décommenter les lignes extension=php_*.dll dans votre php.ini. Cela se fait en effaçant le point virgule (";") du début de la ligne que vous voulez activer.

    Exemple #1 Activer l'extension Bzip2 pour PHP-Windows

    // changez la ligne suivante :
    ;extension=php_bz2.dll
    
    // En :
    extension=php_bz2.dll

  • Quelques extensions ont besoin de bibliothèques DLLs supplémentaire pour fonctionner. La plupart d'entre elles peuvent être trouvées dans le paquet de votre distribution de PHP, dans le dossier c:\php\dlls\ en PHP 4 ou dans le dossier principal en PHP 5 mais quelques autres, comme Oracle (php_oci8.dll), requierent des DLLs qui ne sont pas fournies avec votre distribution de PHP. Si vous installez PHP 4, copiez les bibliothèques DLLs depuis le dossier C:\php\dlls vers le dossier principal C:\php. N'oubliez pas d'inclure le dossier C:\php dans la variable d'environnement PATH (ce processus est expliqué dans une entrée de la FAQ).

  • Quelques-unes de ces bibliothèques ne sont pas incluses dans la distribution de PHP. Lisez la documentation de chaque extension pour plus de détails. Lisez également la section du manuel nommée Installation d'extensions PECL pour plus de détails sur PECL. Un nombre toujours plus important d'extensions PHP se trouve dans PECL, et ces extensions nécessitent un téléchargement séparé.

Note: Si vous utilisez PHP en tant que module d'un serveur web, pensez à redémarrer votre serveur web pour charger les modifications apportées au fichier php.ini.

La table suivante décrit quelques extensions disponibles requérant des bibliothèques DLLs supplémentaires.

Extensions PHP
Extension Description Notes
php_bz2.dll bzip2 : fonctions de compression Non
php_calendar.dll Calendar : fonctions de conversion Intégrées à PHP depuis la version 4.0.3
php_crack.dll Fonctions Crack None
php_ctype.dll Famille de fonctions ctype Intégrées à PHP depuis la version 4.3.0
php_curl.dll Fonctions de bibliothèque client CURL Requiert : libeay32.dll, ssleay32.dll (intégré)
php_dba.dll DBA: DataBase (dbm-style) Fonctions d'abstraction Non
php_dbase.dll Fonctions dBase Non
php_dbx.dll Fonctions dbx  
php_domxml.dll Fonctions DOM XML PHP <= 4.2.0 requiert : libxml2.dll (intégré) PHP >= 4.3.0 requiert : iconv.dll (intégré)
php_dotnet.dll Fonctions .NET PHP <= 4.1.1
php_exif.dll Fonctions EXIF php_mbstring.dll. Attention, php_exif.dll doit être chargé après php_mbstring.dll dans le php.ini.
php_fbsql.dll Fonctions FrontBase PHP <= 4.2.0
php_fdf.dll FDF : fonctions Forms Data Format. Requiert : fdftk.dll (intégré)
php_filepro.dll Fonctions filePro Accès en lecture seule
php_ftp.dll Fonctions FTP Intégrées à PHP depuis la version 4.0.3
php_gd.dll GD : bibliothèque de fonctions image Supprimer en PHP 4.3.2. Notez que les fonctions sur les couleurs vraies ne sont pas disponibles en GD1 ; utilisez plutôt php_gd2.dll.
php_gd2.dll GD : Bibliothèque de fonctions image GD2
php_gettext.dll Fonctions Gettext PHP <= 4.2.0 requiert gnu_gettext.dll (intégré), PHP >= 4.2.3 requiert libintl-1.dll, iconv.dll (intégré).
php_hyperwave.dll Fonctions HyperWave Non
php_iconv.dll ICONV : conversion de jeux de caractères Requiert : iconv-1.3.dll (intégré), PHP >=4.2.1 iconv.dll
php_ifx.dll Fonctions Informix Requiert : bibliothèque Informix
php_iisfunc.dll Fonctions d'administration IIS Non
php_imap.dll IMAP : fonctions POP3 et NNTP Non
php_ingres.dll Fonctions Ingres Requiert : bibliothèque Ingres
php_interbase.dll Fonctions InterBase Requiert : gds32.dll (intégré)
php_java.dll Fonctions Java PHP <= 4.0.6 requit : jvm.dll (intégré)
php_ldap.dll Fonctions LDAP PHP <= 4.2.0 requiert libsasl.dll (intégré), PHP >= 4.3.0 requiert libeay32.dll, ssleay32.dll (intégré)
php_mbstring.dll Fonctions Chaînes multioctets Non
php_mcrypt.dll Fonctions Mcrypt Encryption Requiert : libmcrypt.dll
php_mhash.dll Fonctions Mhash PHP >= 4.3.0 requiert : libmhash.dll (intégré)
php_mime_magic.dll Fonctions Mimetype Requiert : magic.mime (intégré)
php_ming.dll Fonctions Ming pour Flash Non
php_msql.dll Fonctions mSQL Requiert : msql.dll (intégré)
php_mssql.dll Fonctions MSSQL Requiert : ntwdblib.dll (intégré)
php_mysql.dll Fonctions MySQL PHP >= 5.0.0, requires libmysql.dll (intégré)
php_mysqli.dll Fonctions MySQLi PHP >= 5.0.0, requires libmysql.dll (libmysqli.dll en PHP <=5.0.2) (intégré)
php_oci8.dll Fonctions Oracle 8 Requiert : bibliothèque cliente Oracle 8.1+
php_openssl.dll Fonctions OpenSSL Requiert : libeay32.dll (intégré)
php_overload.dll Fonctions Object overloading Intégrée à PHP depuis la version 4.3.0
php_pdf.dll Fonctions PDF Non
php_pgsql.dll Fonctions PostgreSQL Non
php_printer.dll Fonctions Printer Non
php_shmop.dll Fonctions de partage de mémoire Non
php_snmp.dll Fonctions SNMP NT seulement !
php_soap.dll Fonctions SOAP PHP >= 5.0.0
php_sockets.dll Fonctions Socket Non
php_sybase_ct.dll Fonctions Sybase Requiert : bibliothèque cliente Sybase
php_tidy.dll Fonctions Tidy PHP >= 5.0.0
php_tokenizer.dll Fonctions Tokenizer Intégrées à PHP depuis la version 4.3.0
php_w32api.dll Fonctions W32api Non
php_xmlrpc.dll Fonctions XML-RPC PHP >= 4.2.1 requiert : iconv.dll (intégré)
php_xslt.dll Fonctions XSLT PHP <= 4.2.0 requiert sablot.dll, expat.dll (intégré). PHP >= 4.2.1 requiert sablot.dll, expat.dll et iconv.dll (intégré).
php_yaz.dll Fonctions YAZ Requiert : yaz.dll (intégré)
php_zip.dll Fonctions Zip File Accès en lecture seule
php_zlib.dll Fonctions de compression ZLib Intégrées à PHP depuis la version 4.3.0



Ligne de commande PHP sous Microsoft Windows

Cette section contient les notes et les astuces spécifiques à l'installation de PHP depuis la ligne de commande sous Windows.

Note:

Vous devriez lire les étapes du manuel d'installation d'abord !

Faire fonctionner PHP depuis la ligne de commande peut être effectué sans aucune modification de Windows.

C:\PHP5\php.exe -f "C:\PHP Scripts\script.php" -- -arg1 -arg2 -arg3

Mais il existe quelques étapes à suivre pour rendre ceci plus simple. La plupart de ces étapes ont déjà dû être faite, mais elles sont répétées ici pour fournir une séquence étape par étape complète.

  • Ajouter la localisation de l'exécutable PHP (php.exe, php-win.exe ou php-cli.exe suivant la version de PHP ainsi que les préférences d'affichage) à la variable d'environnement PATH. Vous trouverez plus d'informations concernant l'ajout du dossier PHP à la variable PATH dans l'entrée correspondante de la FAQ.

  • Ajouter l'extension .PHP à la variable d'environnement PATHEXT. Ceci peut être fait lors de la modification de la variable d'environnement PATH. Suivez les mêmes étapes que celles décrites dans la FAQ mais utilisez la variable PATHEXT au lieu de la variable d'environnement PATH.

    Note:

    La position à laquelle vous placez le .PHP déterminera le script ou le programme à exécuter lorsqu'un nom de fichier de cette forme sera trouvé. Par exemple, le fait de placer .PHP avant .BAT fera que votre script sera exécuté à la place du fichier batch, s'il y a un fichier batch avec le même nom.

  • Associer l'extension .PHP avec un type de fichier. Ceci peut être fait en exécutant la commande suivante :

    assoc .php=phpfile
    

  • Associer le type de fichier phpfile avec l'exécutable PHP approprié. Ceci peut être fait en exécutant la commande suivante :

    ftype phpfile="C:\PHP5\php.exe" -f "%1" -- %~2
    

Ces étapes permettent aux scripts PHP d'être exécutés depuis n'importe quel répertoire, sans pour autant spécifier l'exécutable PHP ou l'extension .PHP, et tous les paramètres seront passés au script pour traitement.

L'exemple ci-dessous montre les modifications pouvant être faites manuellement au registre Windows.

Exemple #1 Modification du registre

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.php]
@="phpfile"
"Content Type"="application/php"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile]
@="PHP Script"
"EditFlags"=dword:00000000
"BrowserFlags"=dword:00000008
"AlwaysShowExt"=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\DefaultIcon]
@="C:\\PHP5\\php-win.exe,0"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell]
@="Open"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell\Open]
@="&Open"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell\Open\command]
@="\"C:\\PHP5\\php.exe\" -f \"%1\" -- %~2"

Avec ces modifications, la même commande peut maintenant être écrite comme ceci :

"C:\PHP Scripts\script" -arg1 -arg2 -arg3
ou, si le chemin "C:\PHP Scripts" est présent dans la variable d'environnement PATH :
script -arg1 -arg2 -arg3

Note:

Il y a un petit problème si vous tentez d'utiliser cette technique et qu'en même temps, vous utilisez votre script PHP comme filtre d'une commande, comme ceci :

dir | "C:\PHP Scripts\script" -arg1 -arg2 -arg3
ou
dir | script -arg1 -arg2 -arg3
Vous pourriez trouver que le script s'interrompt et que rien ne s'affiche. Afin de rendre ceci opérationnel, vous devez effectuer une nouvelle modification au registre Windows.
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer]
"InheritConsoleHandles"=dword:00000001
Plus d'informations concernant ce problème peuvent être trouvées dans »  l'article de la base de connaissance Microsoft : 321788.




Installation sur des plateformes de Cloud Computing

Sommaire

PHP s'installe sur le cloud. Vers le cloud PHP !


Microsoft Azure

PHP s'installe sur la plateforme » Azure cloud.

Pour en savoir plus, voyez le » SDK Azure pour PHP.



Amazon EC2

Installation de PHP sur » la plateforme clod EC2.

Voir aussi l'» AWS SDK pour PHP.




FastCGI Process Manager (FPM)

Sommaire

FPM (FastCGI Process Manager) est une implémentation alternative à PHP FastCGI avec quelques fonctionnalités additionnelles particulièrement utiles pour les environnements à haute charge.

Ces fonctionnalités incluent :

  • Gestion avancée des processus avec stop/start doux (graceful) ;

  • Possibilité de démarrer des processus avec différents uid/gid/chroot/environment, écoutant sur différents ports et utilisant différents php.ini (remplace le safe_mode) ;

  • Journalisation stdout et stderr ;

  • Redémarrage d'urgence en cas de destruction accidentelle du cache opcode ;

  • Support de l'upload acccéléré ;

  • "slowlog" - journalisation des scripts (pas juste leurs noms, mais leur backtrace PHP également, utilisant ptrace ou équivalent pour lire le processus distant) qui s'éxecutent de manière anormalement lente ;

  • fastcgi_finish_request() - fonction spéciale pour terminer la requête et vider toutes les données tout en continuant d'exécuter une tâche consommatrice (conversion vidéo par exemple) ;

  • Naissance de processus fils dynamic/static ;

  • Informations sur la SAPI (similaire à mod_status d'Apache) ;

  • Fichier de configuration basé sur php.ini


Installation

Compiler depuis les sources

Pour activer FPM dans votre construction de PHP vous devez ajouter la ligne --enable-fpm à votre ligne de configure.

Il existe de multiples options de configure pour FPM (toutes optionnelles):

  • --with-fpm-user - l'utilisateur FPM (defaut - nobody).

  • --with-fpm-group - le groupe FPM (defaut - nobody).



Configuration

FPM utilise la syntaxe php.ini pour son fichier de configuration - php-fpm.conf.

Liste des directives globales de php-fpm.conf

pid string

Chemin vers le fichier PID. Par défaut: none.

error_log string

Chemin vers le fichier de journal. Par défaut: #INSTALL_PREFIX#/log/php-fpm.log.

log_level string

Niveau de journalisation d'erreur. Valeurs possibles: alert, error, warning, notice, debug. Par défaut: notice.

emergency_restart_threshold int

Si ce nombre de processus fils terminent avec un SIGSEGV ou SIGBUS dans l'intervalle de temps précisé dans emergency_restart_interval, alors FPM redémarrera. Une valeur de 0 signifie 'Off'. Valeur par défaut: 0 (Off).

emergency_restart_interval mixed

Interval de temps utilisé par emergency_restart_interval pour determiner lorsqu'un redémarrage doux doit être lancé. Ceci peut être utile pour contourner des corruptions accidentelles dans la mémoire partagée d'un acccelérateur. Unités disponibles: s(econdes), m(inutes), h(eures), ou d(ays). Unité par défaut: secondes. Valeur par défaut: 0 (Off).

process_control_timeout mixed

Temps limite qu'attendront les processus fils pour réagir aux signals du père. Unités disponibles: s(econdes), m(inutes), h(eures), ou d(ays) Unité par défaut: secondes. Valeur par défaut: 0.

daemonize boolean

Envoie FPM en arrière plan. Mettez 'no' pour garder FPM au premier plan lors du débogage. Valeur par défaut: yes.

Liste des directives de pool

Avec FPM vous pouvez executer plusieurs pools de processus avec des paramètres différents. Voici les paramètres qui peuvent être ajustés par pool.

listen string

L'adresse pour accepter des requêtes FastCGI. Syntaxes valides: 'ip.add.re.ss:port', 'port', '/path/to/unix/socket'. Cette option est obligatoire pour chaque pool.

listen.backlog int

Affecte listen(2) backlog. Une valeur de '-1' signifie illimité. Valeur par défaut: -1.

listen.allowed_clients string

Liste d'adresses ipv4 des clients FastCGI autorisés à se connecter. C'est équivalent à la variable d'environnement FCGI_WEB_SERVER_ADDRS dans le système FastCGI original de PHP (5.2.2+). N'a de sens qu'avec un socket tcp en écoute. Chaque adresse doit être séparée par une virgule. Si cette valeur n'est pas précisée, les connexions seront accceptées depuis toute adresse ip. Valeur par défaut: any.

listen.owner string

Affecte les permissions pour le socket Unix si utilisé. Sous Linux, les permissions read/write doivent être affectées pour autoriser des connexions depuis un serveur web. Beaucoup de systèmes dérivés BSD autorisent les connexions quelles que soient les permissions. Valeurs par défaut: user et group sont ceux de l'utilisateur courant, le mode est 0666.

listen.group string

Voyez listen.owner.

listen.mode string

Voyez listen.owner.

user string

Utilisateur Unix des processus FPM. Cette option est obligatoire.

group string

Groupe Unix des processus FPM. Si non précisé, le groupe de l'utilisateur est utilisé.

pm string

Choisi comment le gestionnaire de processus va contrôler le nombre de processus fils. Valeurs possibles : static, ondemand, dynamic. Option obligatoire.

static - nombre de processus fils fixés (pm.max_children).

ondemand - le processus se réactive à la demande (lorsque demandé, c'est l'opposé de dynamique où pm.start_servers sont démarrés lorsque le service démarre).

dynamic - nombre de processus fils dynamiques basé sur le directives suivantes: pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers.

pm.max_children int

Nombre de processus fils à créer lorsque pm est réglé sur static. Nombre maximum de processus fils à créer lorsque pm est réglé sur dynamic. Options obligatoire.

Cette option affecte la limite du nombre de requêtes simultanées qui seront servies. Equivalent à ApacheMaxClients avec mpm_prefork et à PHP_FCGI_CHILDREN dans l'implémentation originale de FastCGI de PHP.

pm.start_servers in

Nombre de processus fils à créer au démarrage. Utilisé seulement si pm est réglé sur dynamic. Valeur par défaut: min_spare_servers + (max_spare_servers - min_spare_servers) / 2.

pm.min_spare_servers int

Nombre minimum de processus au repos (idle) voulus. Utilisé seulement si pm est réglé sur dynamic. Obligatoire dans ce cas.

pm.max_spare_servers int

Nombre maximum de processus au repos (idle) voulus. Utilisé seulement si pm est réglé sur dynamic. Obligatoire dans ce cas.

pm.max_requests int

Nombre de requête que chaque processus fils devrait exécuter avant de renaitre. Ceci peut être utile pour contourner des fuites mémoires dans des librairies tierces. Pour un traitement sans fin des requêtes, précisez '0'. Equivalent à PHP_FCGI_MAX_REQUESTS. Par défaut: 0.

pm.status_path string

L'URI vers la page de statut de FPM. Si cette valeur n'est pas précisée, aucune page de statut ne sera utilisée, ce qui est le cas par défaut.

ping.path string

L'URI de ping pour appeler la page de monitoring de FPM. Si aucune valeur n'est précisée, aucune page de ping ne sera disponible. Ceci pourrait être utilisé pour tester depuis l'extérieur si FPM est toujours disponible et prêt à répondre. Notez que la valeur doit commencer par un slash (/).

ping.response string

Cette directive est utile pour personnaliser la réponse à une requête de ping. La réponse est formatée comme text/plain avec un code de réponse de 200. Valeur par défaut: pong.

request_terminate_timeout mixed

Le timeout pour servir une requête après lequel le processus concerné sera tué. Cette option devrait être utilisée lorsque l'option 'max_execution_time' ne stoppe pas l'exécution du script pour une raison quelconque. Une valeur de '0' signifie 'Off'. Unités disponibles: s(econdes)(défaut), m(inutes), h(eures), ou d(ays). Par défaut: 0.

request_slowlog_timeout mixed

Le timeout pour servir une requête dans laquelle la backtrace PHP sera vidée dans le fichier 'slowlog'. Une valeur de '0' signifie 'Off'. Unités disponibles: s(econdes)(défaut), m(inutes), h(eures), ou d(ays). Par défaut: 0.

slowlog string

Le journal pour les requêtes lentes, par défaut: #INSTALL_PREFIX#/log/php-fpm.log.slow.

rlimit_files int

Affecte la rlimit pour les descripteurs de fichiers ouverts. Valeur par défaut: valeur du système.

rlimit_core int

Affecte la taille maximale de rlimit. Valeurs possibles: 'unlimited' ou un entier plus grand ou égal à 0. Valeur par défaut: valeur définie par le système.

chroot string

Chroot vers ce dossier au démarrage. Cette valeur doit être un chemin absolu. Si cette valeur n'est pas définie, chroot n'est pas utilisé.

chdir string

Chdir vers ce dossier au démarrage. Cette valeur doit être un chemin absolu. Valeur par défaut: dossier courant ou / si chroot.

catch_workers_output boolean

Redirige stdout et stderr vers le journal d'erreur principal. Si non précisé, stdout et stderr seront redirigés vers /dev/null selon les specifications FastCGI. Valeur par défaut: no.

Il est possible de passer des variables d'environnement additionnelles et mettre à jour les paramètres de PHP d'un pool. Pour ce faire, vous devez ajouter les options suivantes à php-fpm.conf

Exemple #1 Passer des variables d'environnement et des paramètres PHP à un pool

env[HOSTNAME] = $HOSTNAME
       env[PATH] = /usr/local/bin:/usr/bin:/bin
       env[TMP] = /tmp
       env[TMPDIR] = /tmp
       env[TEMP] = /tmp

       php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
       php_flag[display_errors] = off
       php_admin_value[error_log] = /var/log/fpm-php.www.log
       php_admin_flag[log_errors] = on
       php_admin_value[memory_limit] = 32M
Les paramètres PHP passés avec php_value ou php_flag écraseront leur valeur précédente. Notez que définir disable_functions ou disable_classes n'écrasera pas les valeurs concernées précédemment définies dans php.ini, mais rajouteront les valeurs à la suite des anciennes.

Les paramètres définis avec php_admin_value et php_admin_flag ne peuvent être surchargés via ini_set().




Installation d'extensions PECL

Sommaire


Introduction aux installations PECL

» PECL est un dépôt d'extensions PHP qui sont disponibles via le système de paquet » PEAR. Cette section du manuel vous guide dans l'obtention et l'installation d'extensions PECL.

Ces instructions supposent que /your/phpsrcdir/ est le chemin jusqu'aux sources de la distribution PHP, et extname est le nom de votre extension PECL : adaptez les commandes qui suivent à votre situation. Ces instructions supposent aussi que vous êtes familier avec l'utilisation des » commandes pear. Les informations dans le manuel PEAR pour la commande pear sont également applicables à la commande pecl.

Pour être utilisée, une extension partagée doit être compilée, installée et chargée. Les méthodes décrites ci-dessous vous fournissent diverses instructions sur la façon de compiler et d'installer des extensions mais ne les chargent pas automatiquement. Les extensions peuvent être chargées en ajoutant une directive d'extension au fichier php.ini ou à l'aide de la fonction dl().

Lorsque vous compilez des modules PHP, il est important d'avoir les outils dans leurs versions appropriées, tels que autoconf, automake, libtool, etc. Voyez les » Instructions pour le SVN anonyme, afin de connaître les utilitaires nécessaires, et leurs versions.



Télécharger des extensions PECL

Il existe plusieurs méthodes pour télécharger des extensions PECL :

    La commande pecl install extname télécharge le code des extensions automatiquement, ce qui évite de réaliser un téléchargement particulier.

  • » http://pecl.php.net/ Le site Web de PECL contient diverses informations sur les différentes extensions offertes par l'équipe de développement de PHP. Vous pourrez consulter les modifications entre les versions, les notes de versions, ce qui est requis pour faire fonctionner l'extension ainsi que d'autres détails similaires.
  • pecl download extname Les extensions PECL listées sur le site web de PECL sont disponibles et peuvent être téléchargées et installées en utilisant la » commande pecl. La version spécifique de l'extension peut également être spécifiée.
  • SVN La plupart des fichiers PECL sont conservés dans le serveur SVN. Une interface Web est disponible à » http://svn.php.net/viewvc/pecl/. Pour télécharger directement depuis SVN, suivez la séquence d'instructions ci-dessous :


    $ svn checkout http://svn.php.net/repository/pecl/extname/trunk extname

  • Téléchargements pour Windows Pour le moment, le projet PHP ne compile pas les binaires Windows pour les extensions PECL. Cepdendant, pour compiler PHP sous Windows, reportez-vous au chapitre intitulé Compiler PHP sous Windows.


Installer une extension PHP sous Windows

Sur Windows, vous avez deux moyens de charger une extension PHP : soit vous la compilez dans PHP, soit vous chargez une DLL. Charger une extension précompilée est la méthode la plus pratique et la plus recommandée.

Pour charger une extension, vous devez disposer de son fichier ".dll" sur votre système. Toutes les extensions sont automatiquement et périodiquement compilée par le groupe PHP (voyez la section de téléchargements).

Pour compiler une extension dans PHP, reportez-vous à la documentation sur la compilation des sources.

Pour compiler une extension autonome, (c'est-à-dire un fichier DLL), reportez-vous documentation sur la compilation des sources. Si le fichier DLL est absent de votre distribution PHP et de PECL, il vous faudra la compiler avant de pouvoir l'utiliser.

Où trouver une extension ?

Les extensions PHP sont généralement appelées "php_*.dll" (où les astérisques représentent le nom de l'extension) et elles sont rangées dans le dossier "PHP\ext" ("PHP\extensions" en PHP 4).

PHP est livré avec les extensions qui sont les plus utiles à la majorité des utilisateurs. Elles sont appelées des extensions coeur, ou "core".

Cependant, si vous avez besoins de fonctionnalités qui ne sont pas fournies par une extension coeur, vous pourriez quand même les trouver dans PECL. Le PHP Extension Community Library (PECL, aussi dit Bibliothèque d'Extensions Communautaires de PHP) est un dépôt de code pour les extensions PHP, qui fournit un annuaire de toutes les extensions connues, et un service d'hébergement pour télécharger et développer ces extensions.

Si vous avez développé une extension pour votre propre usage, vous pourriez avoir envie de l'héberger sur PECL, pour que tous ceux qui ont eu le même problème que vous, puissent avoir accès à la même solution. Cela vous donne de bonnes chances d'avoir des retours de la communauté, et, peut-être, des remerciements, des rapports de bugs, et même des correctifs. Avant que vous n'envoyez votre extension sur les serveurs PECL, il est recommandé de lire http://pecl.php.net/package-new.php.

Quelles extensions télécharger ?

Souvent, vous trouverez plusieurs versions de chaque DLL :

  • Différents numéros de versions (au moins, les deux premiers chiffres doivent être les mêmes)
  • Différentes configurations de sécurité de threads
  • Différentes architectures de processeurs (x86, x64...)
  • Différentes configurations de débogage
  • etc.

Il est recommandé de choisir les extensions pour qu'elles soient adaptées à la machine serveur sur laquelle vous utilisez PHP. Le script suivant va vous afficher toutes vos configurations PHP :

Exemple #1 Appel de la fonction phpinfo()

<?php
phpinfo
();
?>

Ou bien, en ligne de commande :

drive:\\path\to\php\executable\php.exe -i

Charger une extension

Le moyen le plus courant pour charger une extension PHP est de l'inclure dans votre fichier de configuration php.ini. Notez que de nombreuses extensions sont déjà présentes dans le fichier php.ini et que vous avez simplement à supprimer le point-virgule pour les activer.

;extension=php_extname.dll
extension=php_extname.dll

Cependant, certains serveurs Web sont déroutants, car ils n'utilisent pas le fichier php.ini rangé avec votre exécutable PHP. Pour en savoir plus sur votre véritable php.ini, recherchez son dossier dans le fichier phpinfo():

Configuration File (php.ini) Path   C:\WINDOWS
Loaded Configuration File   C:\Program Files\PHP\5.2\php.ini

Après activation d'une extension, sauvegardez le fichier php.ini, et relancez le serveur Web, puis vérifiez à nouveau le fichier phpinfo(). La nouvelle extension devrait y avoir sa section.

Résolution de problèmes

Si l'extension n'apparaît pas dans le fichier phpinfo(), vous devriez jeter un oeil dans les logs pour savoir d'où vient le problème.

Si vous utilisez PHP en ligne de commande (CLI), l'erreur de chargement de l'extension devrait être lisible directement sur l'écran.

Si vous utilisez PHP sur un serveur Web, la position et le format des logs varient grandement d'un serveur à l'autre. Lisez la documentation de votre serveur Web pour savoir où ils sont : PHP ne peut pas vous aider pour cela.

Les problèmes les plus courants sont la localisation du fichier DLL, la valeur de la directive "extension_dir" dans le php.ini et les incohérences de compilations.

Si le problème est une incohérence de compilation, vous avez probablement téléchargé une mauvaise DLL. Essayez d'en charger une nouvelle, avec les bonnes configurations pour votre serveur. phpinfo() vous sera alors très utile.



Compilation d'extensions PECL partagées avec la commande pecl

PECL facilite la création d'extension PHP partagées. En utilisant la » commande pecl, faites ceci :


$ pecl install extname

Ceci va télécharger le fichier source de l'extension extname, le compiler et installer le fichier extname.so dans votre dossier extension_dir. extname.so doit ensuite être chargé via php.ini.

Par défaut, la commande pecl n'installera pas les paquets marqués comme étant alpha ou beta. Si aucun paquet stable est disponible, vous devrez installer un paquet beta en utilisant la commande suivante :


$ pecl install extname-beta

Vous pouvez également installer une version spécifique en utilisant la commande :


$ pecl install extname-0.1

Note:

Après avoir activée cette extension dans le php.ini, relancez le serveur Web afin de la prendre en compte.



Compilation des extensions partagées avec phpize

Parfois, l'utilisation de l'installeur pecl n'est pas une bonne option. Ceci parce que vous être derrière un pare-feu ou parce que l'extension que vous voulez installer n'est pas disponible en tant que paquet PECL comme une extension uniquement disponible via SVN. Si vous devez compiler une telle extension, vous pouvez utiliser l'utilitaire de compilation afin d'exécuter la compilation manuellement.

La commande phpize est utilisée pour préparer l'environnement de compilation pour une extension PHP. Dans l'exemple suivant, les sources de l'extension sont dans un dossier appelé extname :

$ cd extname
$ phpize
$ ./configure
$ make
# make install

Une installation réussie aura créé un fichier extname.so et l'aura placé dans le dossier des extensions de PHP. Vous devez ajouter la ligne extension=extname.so dans votre php.ini avant de pouvoir utiliser l'extension.

Si le système ne possède pas la commande phpize et que vous utilisez des paquets précompilés (comme des RPM), assurez-vous d'installer également la version de développement appropriée des paquets PHP car elle inclut également la commande phpize ainsi que les en-têtes appropriés pour construire PHP et ses extensions.

Exécutez la commande phpize --help pour afficher des informations d'utilisation supplémentaires.



php-config

php-config est un petit script shell pour obtenir des informations sur la configuration installée de PHP.

Lors de la compilation des extensions, si vous avez plusieurs versions PHP d'installées, vous devez spécifier l'installation pour laquelle vous souhaitez les compiler en utilisant l'option --with-php-config lors de la configuration, spécifiant ainsi le chemin vers le script php-config.

La liste des options de ligne de commande fournies par le script php-config peut être obtenue en exécutant le script php-config avec l'option -h :

Usage: /usr/local/bin/php-config [OPTION]
Options:
  --prefix            [...]
  --includes          [...]
  --ldflags           [...]
  --libs              [...]
  --extension-dir     [...]
  --include-dir       [...]
  --php-binary        [...]
  --php-sapis         [...]
  --configure-options [...]
  --version           [...]
  --vernum            [...]

Options de ligne de commande
Option Description
--prefix Préfixe du dossier où PHP est installé, i.e. /usr/local
--includes Liste des options -I avec tous les fichiers inclus
--ldflags Drapeaux LD qui ont été compilés avec PHP
--libs Bibliothèques additionnelles qui ont été compilées avec PHP
--extension-dir Dossiers où les extensions sont recherchées par défaut
--include-dir Préfixe du dossier où les en-têtes de fichiers sont installés par défaut
--php-binary Chemin complet vers le CLI PHP ou le binaire CGI
--php-sapis Affiche tous les modules SAPI disponibles
--configure-options Options de configuration pour recréer la configuration de l'installation courante de PHP
--version Version de PHP
--vernum Version de PHP sous la forme d'un entier



Compilation des extensions PECL statiquement dans PHP

Il peut arriver que vous ayez à compiler votre extension PECL statiquement dans votre binaire PHP. Pour ce faire, vous devez placer les sources de l'extension dans le dossier php-src/ext/ et exécuter à nouveau le script de configuration de PHP.

$ cd /your/phpsrcdir/ext
$ pecl download extname
$ gzip -d < extname.tgz | tar -xvf -
$ mv extname-x.x.x extname
$ rm package.xml

Cela générera le dossier suivant :


/your/phpsrcdir/ext/extname

À partir de la, forcez PHP à reconstruire le script de configuration, puis, suivez le processus classique de compilation de PHP :


$ cd /your/phpsrcdir
$ rm configure
$ ./buildconf --force
$ ./configure --help
$ ./configure --with-extname --enable-someotherext --with-foobar
$ make
$ make install

Note: Pour exécuter le script 'buildconf', vous devez posséder autoconf 2.13 et automake 1.4+ (les versions plus récentes de autoconf peuvent fonctionner, mais ne sont pas supportées).

L'utilisation de --enable-extname ou --with-extname dépend de l'extension. Généralement, une extension qui ne dépend pas d'une bibliothèque externe utilise --enable. Pour être certain, utilisez la commande suivante après avoir utilisé buildconf :


$ ./configure --help | grep extname




Des problèmes ?

Sommaire


Lisez la FAQ

Certains problèmes sont récurrents : les plus communs sont listés dans la FAQ PHP, disponible dans ce manuel.



Autres problèmes

Si vous êtes complètement bloqué, 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/support.php. Pour souscrire à la liste de diffusion, envoyez un mail vide à » php-install-subscribe@lists.php.net. L'adresse de la liste de diffusion est » php-install@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, etc.), et n'hésitez pas à envoyer suffisamment de code pour que nous puissions reproduire et tester l'erreur.



Rapports de Bogue

Si vous pensez avoir trouvé un bogue dans PHP, n'oubliez pas de le signaler. L'équipe de développement PHP ne le connaît peut être pas et, si vous ne le signalez pas, vos chances de voir le bogue corrigé sont nulles. Vous pouvez rapporter des bogues grâce au système de suivi, accessible à » http://bugs.php.net/. S'il vous plait, n'envoyez pas de rapports de bogue sur les listes de diffusion ou par courier personnel. Le système de suivi est de plus prévu pour permettre la proposition de nouvelles fonctionnalités.

Lisez le guide » Comment rapporter un bogue (Les bogues : ce qu'il faut faire, et ce qu'il ne faut pas faire) avant d'envoyer n'importe quel rapport !




Configuration à l'exécution

Sommaire


Le fichier de configuration

Le fichier de configuration (php.ini) est lu par PHP au démarrage. Si vous avez compilé PHP en module, le fichier n'est lu qu'une seule fois, au lancement du serveur web. Pour les versions CGI et CLI le fichier est lu à chaque invocation.

Le php.ini est cherché dans ces endroits (et dans cet ordre) :

  • L'endroit spécifique du module SAPI (la directive PHPIniDir d'Apache 2, l'option de la ligne de commande -cen CGI et en CLI, le paramètre php_ini en NSAPI, la variable d'environnement PHP_INI_PATH en THTTPD)
  • La variable d'environnement PHPRC. Avant PHP 5.2.0, cette variable était récupérée après la clé de registre mentionnée ci-dessous.
  • Depuis PHP 5.2.0, l'endroit où se trouve le fichier php.ini peut être définis pour différentes versions de PHP. Les clés de registre suivantes sont cherchées dans cet ordre : [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z], [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y] and [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x], où x, y et z signifie les versions majeures, mineures et normales. S'il y a une valeur pour IniFilePath dans ces clés, la première trouvée sera utilisée comme endroit où se trouve le fichier php.ini (uniquement sous Windows).
  • [HKEY_LOCAL_MACHINE\SOFTWARE\PHP], valeur de IniFilePath (uniquement sous Windows).
  • Le dossier courant de travail (sauf pour CLI)
  • Le dossier du serveur web (pour les modules SAPI), ou le dossier contenant PHP (autrement sous Windows)
  • Le dossier Windows (C:\windows ou C:\winnt) (pour Windows), ou l'option de compilation --with-config-file-path lors de la compilation

Si le fichier php-SAPI.ini existe (où SAPI utilise SAPI, donc le nom du fichier est e.g. php-cli.ini ou php-apache.ini), il sera utilisé à la place du php.ini. Le nom SAPI peut être déterminé en utilisant la fonction php_sapi_name().

Note:

Le serveur web Apache change ce dossier en dossier root au démarrage, ce qui fait que PHP essaye de lire php.ini depuis le système de fichiers racine s'il existe.

Les directives php.ini sont directement documentées, par extensions, sur les pages respectives du manuel de ces extensions. La liste des directives internes est disponible en annexe. Il est probable que toutes les directives PHP ne sont pas documentées dans le manuel. Pour une liste complète des directives disponibles dans votre version de PHP, merci de lire les commentaires de votre propre fichier php.ini. Vous pouvez également trouver la » dernière version du php.ini sur SVN.

Exemple #1 Extrait du php.ini

; tout texte sur une ligne, situé après un point-virgule ";" est ignoré
[php] ; les marqueurs de section (texte entre crochets) sont aussi ignorés
; Les valeurs booléennes peuvent être spécifiées comme ceci :
;    true, on, yes
; ou false, off, no, none
register_globals = off
track_errors = yes

; vous pouvez placer les chaînes de caractères entre guillemets
include_path = ".:/usr/local/lib/php"

; Les antislash sont traités comme n'importe quel caractère
include_path = ".;c:\php\lib"

Depuis PHP 5.1.0, il est possible de se référer à des variables .ini depuis des fichiers .ini. Par exemple : open_basedir = ${open_basedir} ":/new/dir".



Fichiers .user.ini

Depuis PHP 5.3.0, PHP inclut le support des fichiers INI au style .htaccess sur une base par dossier. Ces fichiers sont analysés uniquement par le SAPI CGI/FastCGI. Cette fonctionnalité rend obsolète l'extension PECL htscanner. Si vous utilisez Apache, l'utilisation des fichiers .htaccess produit le même effet.

En plus du fichier php.ini principal, PHP analyse les fichiers INI contenu dans chaque dossier, en commençant par le dossier depuis lequel le fichier PHP courant est appelé, et parcours les dossiers jusqu'au dossier racine courant (tel que défini par la variable $_SERVER['DOCUMENT_ROOT']). Dans le cas où le fichier PHP est hors de la racine web, seul sont dossier est scanné.

Seuls les configurations INI avec les modes PHP_INI_PERDIR et PHP_INI_USER seront reconnues dans les fichiers INI .user.ini-style.

Deux nouvelles directives INI, user_ini.filename et user_ini.cache_ttl contrôlent l'utilisation des fichiers INI définis par l'utilisateur.

user_ini.filename définit le nom du fichier cherché par PHP dans chaque dossier ; si cette directive est définie à une chaîne vide, PHP n'analysera rien du tout. Par défaut, vaut .user.ini.

user_ini.cache_ttl contrôle la durée entre 2 re-lectures des fichiers INI définis par l'utilisateur. Par défaut, vaut 300 secondes (5 minutes).



Où une directive de configuration peut être modifiée

Ces modes déterminent quand et où une directive PHP peut ou ne peut pas être modifiée, et chaque directive du manuel est dirigée par un de ces modes. Par exemple, certaines directives peuvent être modifiées dans un script PHP avec la fonction ini_set(), alors que d'autres ont besoin d'être modifiées dans les fichiers php.ini ou httpd.conf.

Par exemple, la directive output_buffering a le mode PHP_INI_PERDIR alors elle ne peut pas être modifiée avec la fonction ini_set(). D'un autre coté, la directive display_errors a le mode PHP_INI_ALL, et peut être modifiée n'importe où, y compris avec la fonction ini_set().

Définition des modes PHP_INI_*
Mode Signification
PHP_INI_USER La directive peut être modifiée dans un script utilisateur, avec la fonction ini_set(), ou via la base de registre Windows
PHP_INI_PERDIR La directive peut être modifiée dans les fichiers php.ini, .htaccess ou httpd.conf
PHP_INI_SYSTEM La directive peut être modifiée dans les fichiers php.ini ou httpd.conf
PHP_INI_ALL La directive peut être modifiée n'importe où



Comment modifier la configuration

Exécuter PHP comme module Apache

Lorsque vous utilisez le module Apache, vous pouvez aussi changer les paramètres de configuration en utilisant les directives dans les fichiers de configuration d'Apache (httpd.conf) et dans les fichiers .htaccess. Vous aurez besoin des privilèges "AllowOverride Options" ou "AllowOverride All".

Il y a de nombreuses directives Apache qui vous permettent de modifier la configuration de PHP à partir des fichiers de configuration Apache. Pour une liste des directives qui sont PHP_INI_ALL, PHP_INI_PERDIR ou PHP_INI_SYSTEM reportez-vous à l'annexe Liste des directives du php.ini.

php_value nom valeur

Modifie la valeur de la directive spécifiée. Cette instruction n'est utilisable qu'avec les directives PHP de type PHP_INI_ALL et PHP_INI_PERDIR. Pour annuler une valeur qui aurait été modifiée au préalable, utilisez la valeur none.

Note: N'utilisez pas php_value pour configurer des valeurs booléennes. php_flag (voir plus bas) doit être utilisée.

php_flag nom on|off

Cette instruction est utilisée pour activer ou désactiver une option. Cette instruction n'est utilisable qu'avec les directives PHP de type PHP_INI_ALL et PHP_INI_PERDIR.

php_admin_value nom valeur

Cette instruction affecte une valeur à la variable spécifiée. Cette instruction NE peut PAS être utilisée dans un fichier .htaccess. Toute directive de PHP configurée avec le type php_admin_value ne peut pas être modifiée en utilisant le fichier .htaccess ou la fonction ini_set(). Pour annuler une valeur qui aurait été modifiée au préalable, utilisez la valeur none.

php_admin_flag name on|off

Cette directive est utilisée pour activer ou désactiver une option. Cette instruction NE peut PAS être utilisée dans un fichier .htaccess. Toute directive de PHP configurée avec le type php_admin_flag ne peut pas être modifiée en utilisant le fichier .htaccess ou par la fonction ini_set().

Exemple #1 Exemple de configuration Apache

<IfModule mod_php5.c>
  php_value include_path ".:/usr/local/lib/php"
  php_admin_flag engine on
</IfModule>
<IfModule mod_php4.c>
  php_value include_path ".:/usr/local/lib/php"
  php_admin_flag engine on
</IfModule>

Attention

Les constantes PHP n'existent pas en dehors de PHP. Par exemple, dans le fichier httpd.conf, vous ne pouvez pas utiliser des constantes PHP telles que E_ALL ou E_NOTICE pour spécifier le niveau de rapport d'erreur, car ces constantes n'ont pas de signification pour Apache, et seront remplacées par 0. Utilisez les valeurs numériques à la place. Les constantes peuvent être utilisées dans le php.ini

Modifier la configuration de PHP via la base de registre Windows

Lorsque vous utilisez PHP sur Windows, la configuration peut être modifiée dossier par dossier en utilisant la base de registres de Windows. Les valeurs de configuration sont stockées avec la clé de registre HKLM\SOFTWARE\PHP\Per Directory Values, dans les sous-clés correspondantes aux noms de dossier. Par exemple, la valeur d'une option dans le dossier c:\inetpub\wwwroot sera stockée dans la clé HKLM\SOFTWARE\PHP\Per Directory Values\c\inetpub\wwwroot. La valeur de cette option sera utilisée pour tous les scripts qui fonctionnent dans ce dossier ou ses sous-dossiers. Les valeurs sous la clé doivent avoir le nom d'une direction de configuration PHP, et la valeur correspondante. Les constantes PHP ne sont pas utilisables : il faut mettre la valeur entière. Cependant, seules les valeurs des configurations dans PHP_INI_USER peuvent être fixées de cette manière, celles dans PHP_INI_PERDIR ne peuvent l'être.

Autres interfaces de configuration de PHP

Suivant la façon dont vous exécutez PHP, vous pouvez changer certaines valeurs durant l'exécution de vos scripts en utilisant ini_set(). Voir la documentation de la fonction ini_set() pour plus d'informations.

Si vous êtes intéressé par une liste complète des options configurées sur votre système avec leurs valeurs courantes, vous pouvez exécuter la fonction phpinfo() et consulter la page résultante. Vous pouvez aussi accéder individuellement aux directives de configuration pendant l'exécution de vos scripts en utilisant soit la fonction ini_get(), soit la fonction get_cfg_var().





Référence du langage


La syntaxe de base

Sommaire


Balises PHP

Lorsque PHP traite un fichier, il cherche les balises d'ouverture et de fermeture (<?php et ?>) qui délimitent le code qu'il doit interpréter. De cette manière, cela permet à PHP d'être intégré dans toutes sortes de documents, car tout ce qui se trouve en dehors des balises ouvrantes / fermantes de PHP est ignoré.

PHP autorise aussi des balises dites "courtes" (<? et ?>) que nous vous conseillons vivement de ne pas utiliser car elles ne sont seulement disponibles que lors de l'activation de la directive de configuration short_open_tag du php.ini, ou si PHP a été configuré avec l'option --enable-short-tags .

Si un fichier est purement du code PHP, il est préférable de ne pas placer la balise de fermeture à la fin du fichier. Ceci permet d'éviter d'oublier un espace ou une nouvelle ligne après la balise de fermeture de PHP qui causerait des effets non voulus car PHP commencera à afficher la sortie, ce qui n'est souvent pas ce qui est désiré.

<?php
echo "Bonjour le monde !";

// ... encore du code

echo "Dernière instruction";

// le script se termine ici, sans la balise de fermeture PHP



Échappement depuis du HTML

Tout ce qui se trouve en dehors d'une paire de balises ouvrantes/fermantes est ignoré par l'analyseur PHP, ce qui permet d'avoir des fichiers PHP mixant les contenus. Ceci permet à PHP d'être contenu dans des documents HTML, pour créer par exemple des templates.

<p>Ceci sera ignoré par PHP et affiché au navigateur.</p>
<?php echo 'Alors que ceci sera analysé par PHP.'?>
<p>Ceci sera aussi ignoré par PHP et affiché au navigateur.</p>
Ceci fonctionne comme prévu parce que lorsque l'interpréteur PHP rencontre la balise fermante ?>, il commence simplement à afficher ce qu'il rencontre (mise à part s'il est immédiatement suivi d'une nouvelle ligne : voir l'instruction de séparation) jusqu'à ce qu'il rencontre une autre balise ouvrante même si PHP se trouve au milieu d'une instruction conditionnelle, au quel cas, l'interpréteur va déterminer la condition à prendre en compte avant de prendre une décision sur ce qui doit être afficher. Voir le prochain exemple.

Utilisation de structures avec des conditions

Exemple #1 Echappement avancé en utilisant des conditions

<?php if ($expression == true): ?>
  Ceci sera affiché si l'expression est vrai.
<?php else: ?>
  Sinon, ceci sera affiché.
<?php endif; ?>
Dans cet exemple, PHP va ignorer les blocs où la condition n'est pas remplie, même si ils sont en dehors des balises ouvrantes/fermantes de PHP. PHP va les ignorer suivant la condition vu que l'interpréteur PHP va passer les blocs contenant ce qui n'est pas remplie par la condition.

Pour afficher de gros blocs de texte, il est plus efficace de sortir du mode d'analyse de PHP plutôt que d'envoyer le texte via la fonction echo ou print.

Il y a quatre paires différentes de balises ouvrantes / fermantes qui peuvent être utilisées dans PHP. Deux de ces balises, <?php ?> et <script language="php"> </script>, sont toujours disponibles. Les deux autres sont les balises courtes et les balises du style ASP, et peuvent être activées ou désactivées depuis le fichier de configuration php.ini. Cependant, malgré le fait que des personnes trouvent les balises courtes et les balises du style ASP pratiques, elles sont moins portables et donc, généralement, non recommandées.

Note:

Notez également que si vous intégrez PHP dans des documents XML ou XHTML, vous devez utiliser les balises <?php ?> pour rester conforme aux standards.

Exemple #2 Balises d'ouvertures et de fermetures PHP

1.  <?php echo 'Si vous voulez réaliser des documents XHTML ou XML, faites comme ceci'?>

2.  <script language="php">
        
echo 'quelques éditeurs (comme FrontPage)
                 n\'aiment pas ce genre d\'instructions'
;
    
</script>

3.  <? echo 'ceci est le plus simple, une instruction SGML'?>
    <?= expression ?> Ceci est la version courte pour "<? echo expression ?>"

4.  <% echo 'Vous pouvez optionnellement utiliser les balises ASP-style'; %>
    <%= $variable; # Ceci est la version courte pour "<% echo . . ." %>

Bien que les balises vues dans les exemples un et deux sont toutes les deux disponibles, l'exemple un est le plus communément utilisé et le plus recommandé des deux.

Les balises courtes (troisième exemple) ne sont disponibles que s'elles ont été activées via la directive short_open_tag du fichier de configuration php.ini, ou si PHP a été configuré avec l'option --enable-short-tags .

Les balises du style ASP (quatrième exemple) sont uniquement disponibles lorsqu'elles sont activées via la directive asp_tags du fichier de configuration php.ini.

Note:

L'utilisation des balises courtes doit être bannie lors de développements d'applications ou de bibliothèques qui sont destinées à être redistribuées, ou déployées sur des serveurs qui ne sont pas sous votre contrôle, car les balises courtes peuvent ne pas être supportées sur le serveur cible. Pour réaliser du code portable, qui peut être redistribué, n'utilisez jamais les balises courtes.

Note:

En PHP 5.2 et antérieures, l'analyseur n'autorisait pas un tag ouvrant <?php comme seul élément d'une page. Ceci est permis à compter de la version 5.3 de PHP lorsqu'il y a un ou plusieurs espaces après la balise ouvrante.

Note:

Depuis PHP 5.4, le tag echo court <?= est toujours reconnu et valide, suivant la configuration de l'option short_open_tag.



Séparation des instructions

Comme en C ou en Perl, PHP requiert que les instructions soient terminées par un point-virgule à la fin de chaque instruction. La balise fermante d'un bloc de code PHP implique automatiquement un point-virgule ; vous n'avez donc pas besoin d'utiliser un point-virgule pour terminer la dernière ligne d'un bloc PHP. La balise fermante d'un bloc inclura immédiatement un caractère de nouvelle ligne si un est présent.

Exemple #1 Séparation des instructions

<?php
    
echo 'Ceci est un test';
?>

<?php echo 'Ceci est un test' ?>

<?php echo 'Oubli de la balise fermante';

Note:

La balise fermante d'un bloc PHP à la fin d'un fichier est optionnelle, et parfois, il est utile de l'omettre lors de l'utilisation de la fonction include ou de la fonction require, car les espaces non désirés n'apparaîtront pas à la fin des fichiers, et ainsi, vous pourrez toujours ajouter des en-têtes à la réponse plus tard. C'est utile également si vous voulez utiliser l'affichage du buffer et que vous ne voulez pas voir d'espaces blancs ajoutés à la fin des parties générées par les fichiers inclus.



Commentaires

PHP supporte les commentaires de type C, C++ et Shell Unix (aussi appelé style Perl). Par exemple :

Exemple #1 Exemple de commentaire

<?php
    
echo 'Ceci est un test'// Ceci est un commentaire sur une seule ligne, style c++
    /* Ceci est un commentaire sur
       plusieurs lignes */
    
echo 'Ceci est un autre test';
    echo 
'Et un test final'# Ceci est un commentaire style shell sur une seule ligne
?>

Les commentaires sur une seule ligne ne commentent que jusqu'à la fin de la ligne du bloc PHP courant. Ceci signifie que le code HTML après // ... ?> ou après # ... ?> SERA affiché : ?> terminera le mode PHP et retournera en mode HTML, et // ou # n'influencera pas cela. Si la directive de configuration asp_tags est activée, ce comportement sera identique avec // %> et # %>. Cependant, la balise </script> ne terminera pas le mode PHP dans un commentaire d'une seule ligne.

Exemple #2 Les commentaires vont jusqu'à la fin de la ligne

<h1>Ceci est un exemple <?php # echo 'simple';?></h1>
<p>La ligne ci-dessus affichera 'Ceci est un exemple'.</p>

Les commentaires style 'C' commentent jusqu'à ce que le premier */ soit rencontré. Vous devriez faire attention aux commentaires style 'C' nichés dans de gros blocs lorsque vous les commentez.

Exemple #3 Les commentaires de type C

<?php
 
/*
    echo 'Ceci est un test'; /* Ce commentaire posera un problème */
 
*/
?>




Les types

Sommaire


Introduction

PHP supporte 8 types basiques.

4 types scalaires :

2 types composés :

Et finalement, 3 types spéciaux :

Ce manuel introduit également quelques pseudo-types pour des raisons de lisibilité :

Et la pseudo-variable $....

Ce manuel peut toutefois contenir des références au type "double". Considérez ce type comme étant un type "float". Les deux noms n'existent que pour des raisons historiques.

Le type d'une variable n'est pas toujours défini par le programmeur ; il peut être défini par PHP au moment de l'exécution, suivant le contexte dans lequel la variable est utilisée.

Note: Pour vérifier le type et la valeur d'une expression, utilisez la fonction var_dump().

Pour afficher une représentation humainement lisible d'un type aux fins de déboguage, utilisez la fonction gettype(). Pour vérifier un certain type, n'utilisez pas la fonction gettype(), mais plutôt les fonctions is_type. Voici quelques exemples :

<?php
$a_bool 
TRUE;   // un booléen
$a_str  "foo";  // une chaîne de caractères
$a_str2 'foo';  // une chaîne de caractères
$an_int 12;     // un entier

echo gettype($a_bool); // affiche :  boolean
echo gettype($a_str);  // affiche :  string

// Si c'est un entier, incrément de 4
if (is_int($an_int)) {
    
$an_int += 4;
}

// Si $a_bool est une chaîne de caractères, on l'affiche
if (is_string($a_bool)) {
    echo 
"String: $a_bool";
}
?>

Pour forcer la conversion d'une variable en un certain type, vous pouvez transtyper (cast) la variable ou utiliser la fonction settype().

Notez qu'une variable peut être évaluée avec différentes valeurs dans certaines situations, suivant son type à un moment donné. Pour plus d'informations, lisez la section sur le transtypage. La table de comparaison des types peut également être très utile, montrant différents exemples.



Booléen

C'est le type le plus simple. Un booléen représente une valeur de vérité. Il peut valoir TRUE ou FALSE.

Syntaxe

Pour spécifier un booléen littéral, utilisez le mot-clé TRUE ou FALSE. Les deux sont insensibles à la casse.

<?php
$foo 
True// assigne la valeur TRUE à $foo
?>

Typiquement, le résultat d'un opérateur qui retourne un booléen, passé ensuite à une structure de contrôle.

<?php
// == est un opérateur qui teste
// l'égalité et retourne un booléen
if ($action == "show_version") {
    echo 
"La version est 1.23";
}

// ceci n'est pas nécessaire...
if ($show_separators == TRUE) {
    echo 
"<hr>\n";
}

// ...à la place, vous pouvez utiliser, avec la même signification :
if ($show_separators) {
    echo 
"<hr>\n";
}
?>

Conversion en booléen

Pour convertir explicitement une valeur en booléen, utilisez (bool) ou (boolean). Cependant, dans la plupart des cas, le transtypage n'est pas nécessaire, sachant qu'une valeur sera automatiquement convertie si un opérateur, une fonction ou une structure de contrôle demandent un argument de type booléen.

Voir aussi le transtypage.

Lors d'une conversion en booléen, les valeurs suivantes sont considérées comme FALSE :

Toutes les autres valeurs sont considérées comme TRUE (y compris toutes les ressources).

Avertissement

-1 est considéré comme TRUE, comme tous les nombres différents de zéro (négatifs ou positifs) !

<?php
var_dump
((bool) "");        // bool(false)
var_dump((bool) 1);         // bool(true)
var_dump((bool) -2);        // bool(true)
var_dump((bool) "foo");     // bool(true)
var_dump((bool) 2.3e5);     // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array());   // bool(false)
var_dump((bool) "false");   // bool(true)
?>


Les entiers

Un entier est un nombre appartenant à la classe ℤ = {..., -2, -1, 0, 1, 2, ...}.

Voir aussi :

Syntaxe

Les entiers peuvent être spécifiés en notation décimale (base 10), hexadécimale (base 16), octale (base 8), ou binaire (base 2) optionnellement précédée d'un signe (- ou +).

Les entiers littéraux binaires sont disponibles depuis PHP 5.4.0.

Pour utiliser la notation octale, précédez le nombre d'un 0 (zéro). Pour utiliser la notation hexadécimale, précédez le nombre d'un 0x. Pour utiliser la notation binaire, précédez le nombre d'un 0b.

Exemple #1 Les entiers littéraux

<?php
$a 
1234// un nombre décimal
$a = -123// un nombre négatif
$a 0123// un nombre octal (équivalent à 83 décimales)
$a 0x1A// un nombre héxadecimal (équivalent à 26 décimales)
?>

Formellement, la structure d'un entier littéral est :

decimal     : [1-9][0-9]*
            | 0

hexadecimal : 0[xX][0-9a-fA-F]+

octal       : 0[0-7]+

integer     : [+-]?decimal
            | [+-]?hexadecimal
            | [+-]?octal
            | [+-]?binary

La taille d'un entier est dépendant de la plate-forme, cependant, une valeur maximale d'environ 2 milliards est habituelle (cela correspond à 32 bits signés). Les plateformes 64-bit ont habituellement une valeur maximale d'environ 9E18. PHP ne supporte pas les entiers non-signés. La taille d'un entier peut être déterminée en utilisant la constante PHP_INT_SIZE, et la valeur maximale, en utilisant la constante PHP_INT_MAX depuis PHP 4.4.0 et PHP 5.0.5.

Avertissement

Si un nombre invalide est fourni dans un entier octal (i.e. 8 ou 9), le reste du nombre est ignoré.

Exemple #2 Bizarrerie avec les valeurs octales

<?php
var_dump
(01090); // 010 octal = 8 décimales
?>

Débordement d'entier

Si PHP rencontre un nombre supérieur au maximal d'un entier, il sera interprété comme un nombre décimal. De la même façon, une opération qui résulte en un nombre supérieur au nombre maximal d'un entier, retournera un nombre décimal.

Exemple #3 Dépassement d'entier sur un système 32-bit

<?php
$large_number 
2147483647;
var_dump($large_number);                     // int(2147483647)

$large_number 2147483648;
var_dump($large_number);                     // float(2147483648)

$million 1000000;
$large_number =  50000 $million;
var_dump($large_number);                     // float(50000000000)
?>

Exemple #4 Dépassement d'entier sur un système 64-bit

<?php
$large_number 
9223372036854775807;
var_dump($large_number);                     // int(9223372036854775807)

$large_number 9223372036854775808;
var_dump($large_number);                     // float(9.2233720368548E+18)

$million 1000000;
$large_number =  50000000000000 $million;
var_dump($large_number);                     // float(5.0E+19)
?>

Il n'y a pas d'opérateur de division entière en PHP. 1/2 contient en fait, float(0.5). La valeur peut être convertie en un entier en l'arrondissant, en utilisant la fonction round().

<?php
var_dump
(25/7);         // float(3.5714285714286) 
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7));  // float(4) 
?>

Conversion en entier

Pour convertir explicitement une valeur en un entier, utilisez soit le mot-clé (int), soit (integer). Cependant, dans la plupart des cas, ce mot-clé n'est pas nécessaire vu qu'une valeur sera automatiquement convertie si un opérateur, une fonction ou une structure de contrôle demande un entier en guise d'argument. Une valeur peut également être convertie en un entier en utilisant la fonction intval().

Voir aussi : le transtypage.

Depuis un booléen

FALSE correspond à 0 (zéro), et TRUE correspond à 1 (un).

Depuis un nombre à virgule flottante

Lorsque l'on convertit un nombre décimal en un entier, le nombre sera arrondi vers zéro.

Si le nombre à virgule flottante est au delà des limites des entiers (habituellement, +/- 2.15e+9 = 2^31 sur les plate-formes 32-bit et +/- 9.22e+18 = 2^63 sur les plate-formes 64-bit), le résultat sera indéfini, sachant que le nombre à virgule flottante n'a pas une précision suffisante pour donner un résultat entier exact. Aucune alerte n'est émise lorsque ce comportement survient !

Avertissement

Ne convertissez jamais une fraction inconnue en un entier, ceci peut engendrer un résultat inattendu.

<?php
echo (int) ( (0.1+0.7) * 10 ); // Affiche 7 !
?>

Voir aussi la section sur les alertes concernant la précision des nombres à virgule flottante.

Depuis des chaînes de caractères

Voir la section sur la conversion des chaînes en nombres

Depuis d'autres types

Attention

Le comportement de la conversion en un entier est indéfini depuis les autres types. Ne rapporter aucun comportement observé, sachant qu'ils peuvent changer sans avertissement.



Nombres décimaux

Les nombres décimaux, (aussi connus comme nombres à virgule flottante, "floats", "doubles", ou "real numbers") peuvent être spécifiés en utilisant les syntaxes suivantes :

<?php
$a 
1.234;
$b 1.2e3;
$c 7E-10;
?>

Formellement :

LNUM          [0-9]+
DNUM          ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
EXPONENT_DNUM [+-]?(({LNUM} | {DNUM}) [eE][+-]? {LNUM})

La taille d'un nombre décimal est dépendant de la plate-forme, cependant, un nombre maximal de ~1.8e308 avec une précision sur 14 chiffres est une valeur commune (format 64 bits IEEE).

Avertissement

Précision des nombres décimaux

Les nombres décimaux ont une précision limitée. Même s'ils dépendent du système, PHP utilise le format de précision des décimaux IEEE 754, qui donnera une erreur maximale relative de l'ordre de 1.11e-16 (dûe aux arrondis). Les opérations arithmétiques non-élémentaires peuvent donner des erreurs plus importantes et bien sûr les erreurs doivent être prises en compte lorsque plusieurs opérations sont liées.

Aussi, les nombres rationnels exactement représentables sous forme de nombre à virgule flottante en base 10, comme 0.1 ou 0.7, n'ont pas de représentation exacte comme nombres à virgule flottante en base 2, utilisée en interne, et ce qu'elle que soit la taille de la mantisse. De ce fait, ils ne peuvent être convertis sans une petite perte de précision. Ceci peut mener à des résultats confus: par exemple, floor((0.1+0.7)*10) retournera normalement 7 au lieu de 8 attendu, car la représentation interne sera quelque chose comme 7.9999999999999991118....

Ainsi, ne faites jamais confiance aux derniers chiffres d'un nombre décimal, mais aussi, ne comparez pas l'égalité de 2 nombres décimaux directement. Si vous avez besoin d'une haute précision, les fonctions mathématiques de précision et les fonctions gmp sont disponibles.

Conversion en un nombre décimal

Pour plus d'informations sur la conversion de chaînes en nombres décimaux, voir la section sur la conversion de chaînes en nombres décimaux. Pour les valeurs d'autres types, la conversion est effectuée en convertissant tout d'abord la valeur en un entier, puis, en nombre décimal. Voir la section sur la conversion en entier pour plus d'informations. Une notice est émise si un objet est converti en nombre décimal.

Comparing floats

Comme dit dans la note ci-dessus, le test d'égalité des valeurs de nombres décimaux est problématique, en raison de la façon dont ils sont représentés en interne. Cependant, il existe des façons de réaliser cette comparaison.

Pour tester l'égalité de valeurs de nombres décimaux, une borne supérieure de l'erreur relative à l'arrondi est utilisée. Cette valeur est connue comme étant l'epsilon de la machine, ou le unit roundoff, et est la différence la plus petite acceptable dans les calculs.

$a et $b sont égaux sur 5 nombres après la virgule.

<?php
$a 
1.23456789;
$b 1.23456780;
$epsilon 0.00001;

if(
abs($a-$b) < $epsilon) {
    echo 
"true";
}
?>

NaN

Quelques opérations numériques peuvent donner comme résultat une valeur représentée par la constante NAN. Ce résultat représente une valeur indéfinie ou non représentable lors de calculs avec des nombres à virgule flottante. Toute comparaison, même stricte de cette valeur avec une autre valeur, y compris cette constante elle-même, donnera une valeur de FALSE.

En raison du fait que NAN représente tout nombre de valeur différente, NAN ne doit pas être comparé à d'autres valeurs, y compris cette constante elle-même, et à la place, elle doit être vérifiée en utilisant la fonction is_nan().



Les chaînes de caractères

Une chaîne de caractères est une série de caractères et un caractère est la même chose qu'un octet. De ce fait, PHP ne supporte que les jeux de caractères comportant exactement 256 caractères différents. Ainsi, PHP n'a pas de support natif pour l'Unicode. Reportez-vous aux chapitres sur les types de chaînes de caractères pour plus de détails.

Note: Une chaîne de caractères peut être d'une taille jusqu'à 2Go.

Syntaxe

Une chaîne de caractères littérale peut être spécifiée de 4 façons différentes :

Entourée de simples guillemets

La façon la plus simple de spécifier une chaîne de caractères est de l'entourer de guillemets simples (le caractère ').

Pour spécifier un guillemet simple littéral, vous devrez l'échapper d'un antislash (\). Pour spécifier un antislash littéral échappez-le deux fois (\\). Notez que si vous tentez d'échapper n'importe quel autre caractère, l'antislash s'affichera, ce qui signifie que les séquences auquelles vous êtes éventuellement habitués (\r, \n) s'afficheront telles quelles.

Note: Contrairement aux syntaxes double guillemets et heredoc, les variables et les séquences échappées des caractères spéciaux ne seront pas traitées lorsqu'elles seront dans une chaîne de caractères entourée de simples guillemets.

<?php
echo 'ceci est une chaîne simple';

echo 
'Vous pouvez également ajouter des nouvelles lignes
dans vos chaînes
de cette façon'
;

// Affiche : Arnold dit : "I'll be back"
echo 'Arnold dit : "I\'ll be back"';

// Affiche : Voulez-vous supprimer C:\*.*?
echo 'Voulez-vous supprimer C:\\*.*?';

// Affiche : Voulez-vous supprimer C:\*.*?
echo 'Voulez-vous supprimer C:\*.*?';

// Affiche : Ceci n'affichera pas \n de nouvelle ligne
echo 'Ceci n\'affichera pas \n de nouvelle ligne';

// Affiche : Les variables ne seront pas $traitees $ici
echo 'Les variables ne seront pas $traitees $ici';
?>

Entourée de guillemets doubles

Si la chaîne de caractères est entourée de guillemets doubles ("), PHP interprétera plus de séquences échappées pour les caractères spéciaux :

Caractères échappés
Séquence Signification
\n Fin de ligne (LF ou 0x0A (10) en ASCII)
\r Retour à la ligne (CR ou 0x0D (13) en ASCII)
\t Tabulation horizontale (HT or 0x09 (9) en ASCII)
\v Tabulation verticale (VT ou 0x0B (11) en ASCII) (depuis PHP 5.2.5)
\e échappement (ESC or 0x1B (27) en ASCII) (depuis PHP 5.4.0)
\f Saut de page (FF ou 0x0C (12) en ASCII) (depuis PHP 5.2.5)
\\ Antislash
\$ Signe dollar
\" Guillemet double
\[0-7]{1,3} La séquence de caractères correspondant à une expression régulière est un caractère, en notation octal
\x[0-9A-Fa-f]{1,2} La séquence de caractères correspondant à une expression régulière est un caractère, en notation hexadécimale

De la même façon que pour les chaînes entourées de simples guillemets, l'échappement de tout autre caractère affichera l'antislash. Avant PHP 5.1.1, l'antislash de \{$var} n'était pas affiché.

La fonctionnalité la plus intéressante des chaînes entourées de guillemets doubles est que les noms de variables sont traités. Voir la documentation sur l'analyse des chaînes de caractères pour plus de détails.

Syntaxe Heredoc

Une 3ème façon de délimiter une chaîne de caractères est la syntaxe Heredoc : <<<. Après cet opérateur, un identifiant est fourni, puis, une nouvelle ligne. La chaîne elle-même suit, puis, le même identifiant pour fermer la notation.

L'identifiant doit commencer la première colonne de la ligne. De plus, l'identifiant doit suivre les mêmes règles que n'importe quel libellé PHP : il ne doit contenir que des caractères alphanumériques et des soulignés, et doit commencer par un caractère non numérique ou un souligné ("underscore").

Avertissement

Il est très important de noter que la ligne contenant l'identifiant ne doit contenir aucun autre caractère, mis à part, éventuellement, un point-virgule (;). Cela signifie que l'identifiant ne doit pas être indenté, et il ne doit y avoir aucun espace ou tabulation avant ou après le point-virgule. Il est également important de garder à l'esprit que le premier caractère avant l'identifiant de fermeture doit être une nouvelle ligne sur les systèmes Unix, incluant Mac OSX (caractère \n). Le délimiteur de fermeture (pouvant être suivi d'un point-virgule) doit aussi être suivi d'une nouvelle ligne.

Si cette règle n'est pas respectée et que l'identifiant de fermeture n'est pas "propre", il ne sera pas considéré comme identifiant de fermeture, et PHP continuera à en chercher un. Si un identifiant de fermeture "propre" n'est pas trouvé avant la fin du fichier courant, une erreur d'analyse sera émise à la dernière ligne.

Heredoc ne peut être utilisé pour initialiser les proriétés d'une classe. Depuis PHP 5.3, cette limitation ne s'applique qu'aux Heredoc qui contiennent des variables.

Exemple #1 Exemple invalide

<?php
class foo {
    public 
$bar = <<<EOT
bar
    EOT;
}
?>

Heredoc se comporte exactement comme une chaîne entourée de doubles guillemets, sans avoir de double guillemet. Cela signifie que les guillemets dans une syntaxe Heredoc n'ont pas besoin d'être échappés, mais les codes d'échappement listés ci-dessus peuvent toujours être utilisés. Les variables seront traitées mais les mêmes attentions doivent être prises lorsque vous utilisez des variables complexes dans une syntaxe Heredoc.

Exemple #2 Exemple de chaînes Heredoc

<?php
$str 
= <<<EOD
Exemple de chaîne
sur plusieurs lignes
en utilisant 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 'MyName';

echo <<<EOT
Mon nom est "$name". J'affiche quelques $foo->foo.
Maintenant, j'affiche quelques 
{$foo->bar[1]}.
Et ceci devrait afficher un 'A': \x41
EOT;
?>

L'exemple ci-dessus va afficher :

Mon nom est "MyName". J'affiche quelques Foo.
Maintenant, j'affiche quelques Bar2.
Et ceci devrait afficher un 'A' majuscule : A

Il est aussi possible d'utiliser la syntaxe Heredoc pour passer des arguments à une fonction :

Exemple #3 Exemple d'utilisation de Heredoc pour passer des arguments

<?php
var_dump
(array(<<<EOD
foobar!
EOD
));

Depuis PHP 5.3.0, il est possible d'initialiser les variables statiques et les propriétés ou constantes de classes avec la syntaxe Heredoc :

Exemple #4 Utilisation de Heredoc pour initialiser des valeurs statiques

<?php
// Variables statiques
function foo()
{
    static 
$bar = <<<LABEL
Nothing in here...
LABEL;
}

// Constantes et propriétés de classe
class foo
{
    const 
BAR = <<<FOOBAR
Constant example
FOOBAR;

    public 
$baz = <<<FOOBAR
Property example
FOOBAR;
}
?>

Depuis PHP 5.3.0, les guillemets doubles peuvent être utilisés dans les déclarations Heredoc :

Exemple #5 Utilisation des guillemets doubles avec Heredoc

<?php
echo <<<"FOOBAR"
Hello World!
FOOBAR;
>

Nowdoc

Nowdoc est aux chaînes entourées de guillemets simples ce qu'Heredoc est aux chaînes entourées de guillemets doubles. Nowdoc est spécifié de manière similaire à Heredoc, mais aucune analyse n'est effectuée dans une syntaxe Nowdoc. La construction est idéale pour embarquer du code PHP ou d'autres larges blocs de texte, sans avoir besoin d'échapper quoi que ce soit. Cette syntaxe partage les mêmes fonctionnalités que le constructeur SGML <![CDATA[ ]]>, en ce qu'elle déclare un bloc de texte qui ne doit pas être analysé.

Nowdoc est identifié avec la même séquence <<< utilisée par Heredoc, mais l'identifiant qui suit est entouré de guillemets simples, e.g. <<<'EOT'. Toutes les règles concernant les identifiants Heredoc sont également appliquées aux identifiants Nowdoc, et tout spécialement, celles concernant l'apparence de l'identifiant.

Exemple #6 Exemple de chaînes Nowdoc

<?php
$str 
= <<<'EOD'
Exemple de chaîne
sur plusieurs lignes
en utilisant la syntaxe Nowdoc.
EOD;

/* Exemple complexe, avec des variables. */
class foo
{
    public 
$foo;
    public 
$bar;

    function 
foo()
    {
        
$this->foo 'Foo';
        
$this->bar = array('Bar1''Bar2''Bar3');
    }
}

$foo = new foo();
$name 'MyName';

echo <<<'EOT'
Mom nom est "$name". J'affiche quelques $foo->foo.
Maintenant, j'affiche quelques {$foo->bar[1]}.
Ceci ne devrait pas afficher un 'A': \x41
EOT;
?>

L'exemple ci-dessus va afficher :

Mom nom est "$name". J'affiche quelques $foo->foo.
Maintenant, j'affiche quelques {$foo->bar[1]}.
Ceci ne devrait pas afficher un 'A': \x41

Note:

Tout comme Heredoc, NowDoc peut être utilisé dans n'importe quel contexte de données statiques. L'exemple typique est l'initialisation de proriétés ou de constantes de classe :

Exemple #7 Exemple avec des données statiques

<?php
class foo {
    public 
$bar = <<<'EOT'
bar
EOT;
}
?>

Note:

Le support Nowdoc a été ajouté en PHP 5.3.0.

Analyse des variables

Lorsqu'une chaîne de caractères est spécifiée entre guillemets doubles ou en Heredoc, les variables sont analysées.

Il y a 2 types de syntaxe : une simple et une complexe. La syntaxe simple est la plus commune et la plus pratique. Elle fournit une façon d'embarquer une variable, un tableau ou un objet dans une chaîne avec un minimum d'effort.

La syntaxe complexe se reconnaît en l'utilisation d'accolades autour de l'expression.

Syntaxe simple

Si un signe dollar ($) est rencontré, l'analyse prendra autant de caractères que possible pour former un nom de variable valide. Si vous entourez un nom de variable par des accolades explicitement, alors le nom de la variable n'aura aucune ambiguïté.

<?php
$juice 
"pomme";

echo 
"Il a bu du jus de $juice.".PHP_EOL;
// Invalide. "s" est un caractère valide de nom de variable, mais la variable est $juice.
echo "Il a bu du jus constitué de $juices.";
?>

L'exemple ci-dessus va afficher :

Il a bu du jus de pomme.
Il a bu du jus de.

De la même façon, l'index d'un tableau ou la propriété d'un objet peut être analysé. Avec les indices d'un tableau, les crochets (]) forment la fin de l'index. Les mêmes règles sont appliquées aux propriétés d'objet comme pour les simples variables.

Exemple #8 Exemple de la syntaxe simple

<?php
$juices 
= array("pomme""poire""koolaid1" => "raisin");

echo 
"Il a bu du jus de $juices[0].".PHP_EOL;
echo 
"Il a bu du jus de $juices[1].".PHP_EOL;
echo 
"Il a bu du jus à base de $juice[0]s.".PHP_EOL// Ne fonctionne pas
echo "Il a bu du jus de $juices[koolaid1].".PHP_EOL;

class 
people {
    public 
$john "John Smith";
    public 
$jane "Jane Smith";
    public 
$robert "Robert Paulsen";
    
    public 
$smith "Smith";
}

$people = new people();

echo 
"$people->john a bu du jus de $juices[0].".PHP_EOL;
echo 
"$people->john a dit bonjour à $people->jane.".PHP_EOL;
echo 
"$people->john's wife greeted $people->robert.".PHP_EOL;
echo 
"$people->robert a dit bonjour aux $people->smiths."// Ne fonctionne pas
?>

L'exemple ci-dessus va afficher :

Il a bu du jus de pomme.
Il a bu du jus de poire.
Il a bu du jus à base de s.
Il a bu du jus de raisin.
John Smith a bu du jus de pomme.
John Smith a dit bonjour à Jane Smith.
John Smith's wife greeted Robert Paulsen.
Robert Paulsen a dit bonjour aux .

Pour tout ce qui est plus complexe, vous devriez utiliser la syntaxe complexe.

Syntaxe complexe

Cette syntaxe est appelée complexe, non pas par qu'elle est complexe, mais parce qu'elle permet l'utilisation d'expressions complexes.

Toute variable scalaire, tableau ou attribut d'objet représenté en temps que chaîne de caractères peut être utilisée avec cette syntaxe. Écrivez simplement l'expression de la même façon qu'elle devrait l'être à l'extérieur de la chaîne et ensuite, entourez-là des caractères { et }. Sachant que le caractère { ne peut pas être échappé, cette syntaxe ne sera reconnue que lorsque le caractère $ suit immédiatement le caractère {. Utilisez {\$ pour afficher littéralement {$. Quelques exemples pour être clair :

<?php
// Montre toutes les erreurs
error_reporting(E_ALL);

$great 'fantastic';

// Ne fonctionne pas, affiche : This is { fantastic}
echo "This is { $great}";

// Fonctionne, affiche : This is fantastic
echo "This is {$great}";
echo 
"This is ${great}";

// Fonctionne
echo "This square is {$square->width}00 centimeters broad."

// Fonctionne, les clés entourées de quotes ne fonctionnent qu'avec la syntaxe à accolades
echo "This works: {$arr['key']}";

// Fonctionne
echo "This works: {$arr[4][3]}";

// Ceci est faux pour la même raison pour laquelle $foo[bar] est faux à l'extérieur d'une chaîne.
// En d'autres termes, ceci fonctionnera, mais uniquement parceque PHP cherchera d'abord
// une constante nommée foo ; une erreur de niveau E_NOTICE (constante indéfinie) sera émise.
echo "This is wrong: {$arr[foo][3]}"

// Fonctionne. Lors de l'utilisation de tableaux multidimensionnels, utilisez toujours
// les accolades autour du tableau lorsqu'il se trouve dans la chaîne
echo "This works: {$arr['foo'][3]}";

// Fonctionne.
echo "This works: " $arr['foo'][3];

echo 
"This works too: {$obj->values[3]->name}";

echo 
"This is the value of the var named $name{${$name}}";

echo 
"This is the value of the var named by the return value of getName(): {${getName()}}";

echo 
"This is the value of the var named by the return value of \$object->getName(): {${$object->getName()}}";

// Ne fonctionne pas, affiche: This is the return value of getName(): {getName()}
echo "This is the return value of getName(): {getName()}";
?>

Il est également possible d'accéder aux propriétés de classes en utilisant les variables contenues dans des chaînes, en utilisant cette syntaxe.

<?php
class foo {
    var 
$bar 'I am bar.';
}

$foo = new foo();
$bar 'bar';
$baz = array('foo''bar''baz''quux');
echo 
"{$foo->$bar}\n";
echo 
"{$foo->$baz[1]}\n";
?>

L'exemple ci-dessus va afficher :

I am bar.
I am bar.

Note:

Les appels aux fonctions, méthodes, variables statiques de classes, ainsi qu'aux constantes de classes à l'intérieur de {$} fonctionnent, cependant la valeur accédée sera interprétée comme le nom d'une variable dans le contexte duquel la chaîne est définie. L'utilisation de simples accolades ({}) ne fonctionnera pas pour accéder à la valeur retournée par les fonctions, méthodes ou les valeurs des constantes et des variables statiques de classes.

<?php
// Affichage de toutes les erreurs.
error_reporting(E_ALL);

class 
beers {
    const 
softdrink 'rootbeer';
    public static 
$ale 'ipa';
}

$rootbeer 'A & W';
$ipa 'Alexander Keith\'s';

// Ceci fonctionne ; Affiche : I'd like an A & W
echo "I'd like an {${beers::softdrink}}\n";

// Ceci fonctionne également ; Affiche : I'd like an Alexander Keith's
echo "I'd like an {${beers::$ale}}\n";
?>

Accès et modification d'une chaîne, par caractère

On peut accéder et modifier les caractères d'une chaîne de caractères en spécifiant sa position (à partir de 0) en utilisant la même syntaxe que pour les tableaux, comme pour la variable $str[42]. Il convient de voir une chaîne de caractères comme un tableau dans ce cas. Les fonctions substr() et substr_replace() peuvent être utilisées quand vous voulez extraire ou remplacer plus d'un caractère.

Note: On peut également accéder à une chaîne en utilisant des accolades, comme ceci : $str{42}.

Avertissement

Écrire à une position hors de l'intervalle de l'existant fait que la chaîne est complétée par des espaces jusqu'à cette position. Les positions sont toujours converties en valeur entière. Les positions invalides produisent une alerte E_NOTICE. Les positions négatives produisent une alerte E_NOTICE mais retournent une chaîne vide en lecture. Seul le premier caractère d'une chaîne assignée est utilisé. Assigner une chaîne vide assigne le caractère NULL.

Exemple #9 Quelques exemples de chaînes

<?php
// Récupération du premier caractère d'une chaîne
$str 'This is a test.';
$first $str[0];

// Récupération du troisième caractère d'une chaîne
$third $str[2];

// Récupération du dernier caractère d'une chaîne
$str 'This is still a test.';
$last $str[strlen($str)-1]; 

// Modification du dernier caractère d'une chaîne
$str 'Look at the sea';
$str[strlen($str)-1] = 'e';

?>

Note:

L'accès aux autres types de variables (c'est à dire pas les tableaux ni les objets implémentant les bonnes interfaces) en utilisant [] ou {} retournera silencieusement NULL.

Fonctions et opérateurs utiles

Une chaîne de caractères peut être concaténée en utilisant l'opérateur '.' (point). Notez que l'opérateur '+' (addition) ne fonctionnera pas. Reportez-vous aux opérateurs de chaîne pour plus d'informations.

Il y a beaucoup de fonctions utiles pour la manipulation de chaîne de caractères.

Reportez-vous à la section sur les fonctions des chaînes de caractères pour plus de précisions et à la section sur les expressions rationnelles ou sur les expressions rationnelles compatibles Perl pour des recherches et des remplacements avancés.

Il y a également des fonctions pour les URL, et des fonctions pour chiffrer/déchiffrer les chaînes de caractères (mcrypt et mhash).

Et pour finir, reportez-vous aux fonctions "type de caractères".

Conversion en chaîne de caractères

Une valeur peut être convertie en une chaîne de caractères, en utilisant le mot-clé (string) ou la fonction strval(). La conversion d'une chaîne de caractères est automatiquement effectuée dans le contexte d'une expression où une chaîne de caractères est nécessaire. Ceci survient lors de l'utilisation des fonctions echo ou print ou lorsqu'une variable est comparée à une chaîne. Les sections sur les types et sur le transtypage expliquent ce qui suit de manière plus détaillée. Reportez-vous également à la fonction settype().

La valeur booléenne TRUE est convertie en la chaîne "1". La valeur booléenne FALSE est convertie en "" (une chaîne vide). Ceci permet les conversions vers et depuis une chaîne et un booléen.

Un entier ou un nombre décimal est converti en une chaîne de caractères représentant le nombre de façon textuel (incluant la partie exponentielle pour les nombres à virgule flottante). Les nombres à virgule flottante peuvent être convertis en utilisant la notation exponentielle (4.1E+6).

Note:

Le point décimal est défini dans la locale du script (catégorie LC_NUMERIC). Reportez-vous à la fonction setlocale().

Les tableaux sont toujours convertis en la chaîne "Array" ; ainsi, echoet print ne peuvent être utilisés pour afficher le contenu d'un tableau. Pour afficher un seul élément, utilisez une syntaxe comme echo $arr['foo']. Voir ci-dessous pour des astuces permettant d'afficher le contenu complet.

Les objets en PHP <5.2 sont convertis en la chaîne "Object id#1"1 un est un chiffre pouvant varier. Pour afficher les valeurs des propriétés de l'objet (à des fins de déboguage, par exemple), lisez le paragraphe ci-dessous. Pour récupérer le nom de la classe de l'objet, utilisez la fonction get_class(). Notez qu'à partir de PHP 5, la méthode __toString est utilisée lorsqu'elle peut s'appliquer.

Les ressources sont toujours converties en la chaîne "Resource id #1", où 1 est le nombre unique assigné à la ressource par PHP au moment de l'exécution. Ne vous fiez pas à cette structure, il est possible qu'elle change. Pour récupérer le type de la ressource, utilisez la fonction get_resource_type().

NULL est toujours converti en une chaîne vide.

Au vu de tout cela, la conversion d'un tableau, d'un objet ou d'une ressource en une chaîne de caractères ne fournit aucune information utile sur la valeur contenue dans ce type. Reportez-vous aux fonctions print_r() et var_dump() pour plus d'informations sur le contenu de ces types.

La plupart des valeurs en PHP peuvent également être converties en chaîne de caractères afin de les stocker. Cette méthode est appelée "linéarisation", et est effectuée par la fonction serialize(). Si le moteur PHP a été compilé avec le support WDDX, les valeurs PHP peuvent également être linéarisées en XML.

Conversion de chaînes en nombres

Lorsqu'une chaîne de caractères est évaluée dans un contexte numérique, la valeur et le type résultants sont déterminés comme suit.

Si la chaîne de caractères ne contient aucun '.', 'e', ou 'E' et que la valeur numérique est dans l'intervalle de représentation des entiers (et notamment plus petite que PHP_INT_MAX), alors la chaîne de caractères sera transformée en entier. Dans les autres cas, elle sera interprétée comme un nombre décimal.

La valeur est fournie par la portion initiale de la chaîne de caractères. Si la chaîne de caractères commence par un caractère numérique valide, ce sera la valeur utilisée. Sinon, la valeur sera de 0 (zéro). Une valeur numérique valide est un signe optionnel, suivi par un ou plusieurs nombres (contenant, optionnellement, un point décimal), suivi par, éventuellement, un exponentiel. L'exponentiel est un 'e' ou 'E' suivi par un ou plusieurs nombres.

<?php
$foo 
"10.5";                // $foo est un nombre à virgule flottante (11.5)
$foo "-1.3e3";              // $foo est un nombre à virgule flottante (-1299)
$foo "bob-1.3e3";           // $foo est un entier (1)
$foo "bob3";                // $foo est un entier (1)
$foo "10 Small Pigs";       // $foo est un entier (11)
$foo "10.2 Little Piggies"// $foo est un nombre à virgule flottante (14.2)
$foo "10.0 pigs " 1;          // $foo est un nombre à virgule flottante (11)
$foo "10.0 pigs " 1.0;        // $foo est un nombre à virgule flottante (11)
?>

Pour plus d'informations sur ces conversions, reportez-vous au manuel Unix de la fonction strtod(3).

Pour tester un exemple de cette section, copiez/collez l'exemple et insérez la ligne suivante pour voir ce qu'il se passe :

<?php
echo "Le type de \$foo==$foo; est " gettype ($foo) . "<br />\n";
?>

Ne vous attendez pas à récupérer le code d'un caractère en le convertissant en entier, comme cela est possible en C. Utilisez la fonction ord() et la fonction chr() pour convertir les caractères en codes ASCII.

Détails sur le type "chaîne de caractères"

Le type string en PHP est implémenté sous la forme d'un tableau d'octets ainsi que d'un entier indiquant la longueur du buffer. Il n'a aucune information sur la traduction octet/caractère, laissant cette tâche au programmeur. Il n'y a aucune limitation sur les valeurs pouvant être présentes dans une chaîne ; en particulier, les octets dont la valeur est 0 (“NUL bytes”) sont autorisés à n'importe quel endroit de la chaîne (cependant, quelques fonctions de ce manuel indiquées comme n'étant pas “sécurisée au niveau binaire”, peuvent ignorer tous les octets après un octet nul.)

De part la nature même du type "chaîne de caractères", cela explique le fait qu'il n'existe pas de type “byte” en PHP - la chaîne de caractères prend ce rôle. Les fonctions qui ne retournent pas de données textuelles - par exemple, des données arbitraires lues depuis un socket réseau - continueront de retourner des chaînes de caractères.

Ceci étant dit, PHP ne dicte aucun encodage spécifique pour les chaînes de caractères ; aussi, on pourrait se demander comment les chaînes littérales sont codés. Par exemple, est-ce que la chaîne "á" équivaut à la chaîne "\xE1" (ISO-8859-1), "\xC3\xA1" (UTF-8, C form), "\x61\xCC\x81" (UTF-8, D form) ou toutes autres représentations ? La réponse est que la chaîne sera encodée suivant l'encodage courant du script. Aussi, si le script est écrit en ISO-8859-1, la chaîne sera encodée en ISO-8859-1 et ainsi de suite. Cependant, ceci n'est pas vrai si Zend Multibyte est actif ; dans ce cas, le script peut être écrit dans n'importe quel encodage (explicitement déclaré ou bien détecté) puis, sera convertis en un encodage interne, qui sera utilisé pour les chaînes littérales. Notez qu'il existe des contraintes sur l'encodage du script (ou sur l'encodage interne, si Zend Multibyte est activé) - cela signifie que l'encodage utilisé doit être un sous-ensemble compatible d'ASCII, comme UTF-8 ou ISO-8859-1. Notez, cependant, que les encodages dépendant de l'état, où les mêmes valeurs de l'octet peuvent être utilisées dans le statut du décalage initial et non-initial, peuvent devenir problématiques.

Bien évidemment, les fonctions qui opèrent sur du texte peuvent devoir faire des hypothèses sur la façon dont est encodé la chaîne de caractères. Malheureusement, ces hypothèses ne sont pas les mêmes suivants les fonctions PHP :

  • Quelques fonctions supposent que la chaîne est encodée en utilisant un encodage multi-octets, mais n'ont pas besoin d'interpréter ces octets sous la forme de caractères. C'est actuellement le cas pour les fonctions substr(), strpos(), strlen() et strcmp(). Une autre façon de voir ces fonctions est qu'elles opèrent sur les buffers mémoires, i.e. elles fonctionnent avec les octets et leurs positions.
  • D'autres fonctions demandent à ce que soit passé l'encodage de la chaîne, assumant un encodage par défaut si ce n'est pas le cas. C'est le cas des fonctions htmlentities() ainsi que la majorité des fonctions de l'extension mbstring.
  • D'autres utilisent la locale courante (voir la fonction setlocale()), mais opèrent octets par octets. C'est le cas des fonctions strcasecmp(), strtoupper() ucfirst(). Cela signifie qu'elles ne peuvent être utilisées qu'avec les encodages sur un seul octet, et si l'encodage correspond à la locale. Actuellement, strtoupper("á") peut retourner "Á" si la locale est correctement positionnée, et á si l'encodage est sur un seul octet. Si la chaîne est encodée en UTF-8, le résultat correct ne sera pas retourné, et la chaîne résultante peut (ou pas) être corrompue, suivant la locale courante.
  • Et enfin, elles peuvent juste émettre l'hypothèse que la chaîne utilise un encodage spécifique, comme UTF-8. C'est le cas des fonctions de l'extension intl ainsi que celles de l'extension PCRE (dans le dernier cas, uniquement lorsque le modificateur u est utilisé). Bien que ceci soit du en raison d'un but spécifique, la fonction utf8_decode() assume un encodage UTF-8 et la fonction utf8_encode(), un encodage ISO-8859-1.

Pour conclure, le fait d'écrire un programme correct en utilisant Unicode dépend de l'utilisation ou non de fonctions qui ne fonctionnent pas en Unicode, et qui corrompront les données ; il conviendra donc d'utiliser des fonctions qui fonctionnent correctement, comme celles des extensions intl et mbstring. Cependant, l'utilisation de fonctions qui peuvent gérer des encodages Unicode n'est que le commencement. Quelques soient les fonctions fournies par le langage, il est essentiel de connaître les spécifications de l'Unicode. Par exemple, un programme qui assume qu'il n'y a que des caractères en majuscule et en minuscule fait une mauvaise hypothèse.



Les tableaux

Un tableau en PHP est en fait une carte ordonnée. Une carte est un type qui associe des valeurs en clés. Ce type est optimisé pour différentes utilisations ; il peut être considéré comme un tableau, une liste, une table de hashage, un dictionnaire, une collection, une pile, une file d'attente et probablement plus. On peut avoir, comme valeur d'un tableau, d'autres tableaux, multidimensionnels ou non.

La structure de ces données dépasse l'objet de ce manuel, mais vous trouverez au moins un exemple pour chacun des cas évoqués. Pour plus d'informations, reportez-vous aux différentes explications sur le sujet que l'on trouve sur le web.

Syntaxe

Syntaxe d'un tableau

Un tableau peut être créé en utilisant la structure de langage array(). Il prend un nombre illimité de paramètres, chacun séparé par une virgule, sous la forme d'une paire key => value.

array(
    key  => value,
    key2 => value2,
    key3 => value3,
    ...
)

La virgule après le dernier élément d'un tableau est optionnelle et peut ne pas être ajoutée. C'est généralement ce qui est fait pour les tableaux sur une seule ligne, i.e. array(1, 2) est préféré à array(1, 2, ). Pour les tableaux sur plusieurs lignes, la virgule finale est généralement utilisée, car elle permet d'ajouter plus facilement de nouveaux éléments à la fin.

Depuis PHP 5.4, vous pouvez également utiliser la syntaxe courte, qui remplace array() par [].

Exemple #1 Un tableau simple

<?php
$array 
= array(
    
"foo" => "bar",
    
"bar" => "foo",
);

// depuis PHP 5.4
$array = [
    
"foo" => "bar",
    
"bar" => "foo",
];
?>

La clé key peut être soit un integer, soit une chaîne de caractères. La valeur value peut être de n'importe quel type.

De plus, les modifications de type pour la clé key peuvent survenir :

  • Les chaînes de caractères contenant un entier valide seront modifiées en un type entier. I.e. la clé "8" sera actuellement stockée comme l'entier 8. D'un autre côté, "08" se sera pas modifié, sachant que ce n'est pas un entier décimal valide.
  • Les nombres à virgule flottante seront aussi modifiés en entier, ce qui signifie que la partie après la virgule sera tronquée. I.e. la clé 8.7 sera stockée sous l'entier 8.
  • Les booléens seront modifiés en entier également, i.e. la clé true sera stockée sous l'entier 1 et la clé false sous l'entier 0.
  • La valeur Null sera modifiée en une chaîne vide, i.e. la clé null sera stockée sous la chaîne de caractère "".
  • Les tableaux et les objets ne peuvent pas être utilisés comme clé. Si vous le tentez, l'alerte suivante sera émise : Illegal offset type.

En PHP 5.4, l'accès par position d'un caractère a été rendu cohérent. Par contre, les valeurs retournées peuvent être différentes avec les anciennes versions. Depuis PHP 5.4, la position d'un caractère doit être un entier ou un entier sous forme de chaîne, sinon, une alerte sera émise.

Exemple #2 Exemple d'accès à un caractère par sa position

<?php
$str 
'abc';

var_dump($str['1']);
var_dump(isset($str['1']));

var_dump($str['1.0']);
var_dump(isset($str['1.0']));

var_dump($str['x']);
var_dump(isset($str['x']));

var_dump($str['1x']);
var_dump(isset($str['1x']));
?>

Résultat de l'exemple ci-dessus en PHP 5.3 :

string(1) "b"
bool(true)
string(1) "b"
bool(true)
string(1) "a"
bool(true)
string(1) "b"
bool(true)

Résultat de l'exemple ci-dessus en PHP 5.4 :

string(1) "b"
bool(true)

Warning: Illegal string offset '1.0' in /tmp/t.php on line 7
string(1) "b"
bool(false)

Warning: Illegal string offset 'x' in /tmp/t.php on line 9
string(1) "a"
bool(false)
string(1) "b"
bool(false)

Si plusieurs éléments dans la déclaration d'un tableau utilise la même clé, seule la dernière sera utilisée, écrasant ainsi toutes les précédentes.

Exemple #3 Exemple sur la modification de type et l'écrasement

<?php
$array 
= array(
    
1    => "a",
    
"1"  => "b",
    
1.5  => "c",
    
true => "d",
);
var_dump($array);
?>

L'exemple ci-dessus va afficher :

array(1) {
  [1]=>
  string(1) "d"
}

Vu que toutes les clés de l'exemple ci-dessus sont modifiées en l'entier 1, la valeur sera écrasée sur chaque nouvel élément, et seul le dernier dont la valeur assignée est "d" sera conservé.

Les tableaux PHP peuvent contenir des clés de type integer et string en même temps, vu que PHP ne distingue pas les tableaux indexés et les tableaux associatifs.

Exemple #4 Exemple avec des clés de type integer et string

<?php
$array 
= array(
    
"foo" => "bar",
    
"bar" => "foo",
    
100   => -100,
    -
100  => 100,
);
var_dump($array);
?>

L'exemple ci-dessus va afficher :

array(4) {
  ["foo"]=>
  string(3) "bar"
  ["bar"]=>
  string(3) "foo"
  [100]=>
  int(-100)
  [-100]=>
  int(100)
}

La clé key est optionnelle. Si elle n'est pas spécifiée, PHP utilisera un incrément de la dernière clé entière utilisée.

Exemple #5 Tableaux indexés sans clé

<?php
$array 
= array("foo""bar""hallo""world");
var_dump($array);
?>

L'exemple ci-dessus va afficher :

array(4) {
  [0]=>
  string(3) "foo"
  [1]=>
  string(3) "bar"
  [2]=>
  string(5) "hallo"
  [3]=>
  string(5) "world"
}

Il est possible de spécifier la clé seulement pour quelques éléments et ne pas la fournir pour d'autres :

Exemple #6 Exemple avec des clés seulement pour quelques éléments

<?php
$array 
= array(
         
"a",
         
"b",
    
=> "c",
         
"d",
);
var_dump($array);
?>

L'exemple ci-dessus va afficher :

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [6]=>
  string(1) "c"
  [7]=>
  string(1) "d"
}

Comme vous pouvez le voir, la dernière valeur "d" a été assignée à la clé 7. Ceci est du au fait que le dernier entier le plus grand utilisé auparavant était 6.

Accès aux éléments d'un tableau en utilisant la syntaxe à base de crochets

Les éléments d'un tableau peuvent être accédés en utilisant la syntaxe array[key].

Exemple #7 Accès aux éléments d'un tableau

<?php
$array 
= array(
    
"foo" => "bar",
    
42    => 24,
    
"multi" => array(
         
"dimensional" => array(
             
"array" => "foo"
         
)
    )
);

var_dump($array["foo"]);
var_dump($array[42]);
var_dump($array["multi"]["dimensional"]["array"]);
?>

L'exemple ci-dessus va afficher :

string(3) "bar"
int(24)
string(3) "foo"

Depuis PHP 5.4, il est possible de faire référence à un tableau résultant d'une fonction ou d'une méthode directement. Avant, cela n'était possible qu'en utilisant une variable temporaire.

Exemple #8 Faire référence à un tableau à la sortie d'une fonction ou d'une méthode

<?php
function getArray() {
    return array(
123);
}

// Depuis PHP 5.4
$secondElement getArray()[1];

// Avant PHP 5.4
$tmp getArray();
$secondElement $tmp[1];

// ou
list(, $secondElement) = getArray();
?>

Note:

Une tentative d'accès à une clé d'un tableau qui n'a pas été définie revient à tenter d'accès à une variable non définie : une alerte de niveau E_NOTICE sera émise, et le résultat vaudra NULL.

Création/modification avec des crochets

Un tableau existant peut être modifié en y assignant explicitement des valeurs.

L'assignation d'une valeur dans un tableau est effectué en spécifiant la clé, entre crochets. La clé peut également ne pas être renseignée, sous la forme : [].

$arr[clé] = valeur;
$arr[] = valeur;
// clé peut être un entier ou une chaîne de caractères
// valeur peut être n'importe quel type

Si $arr n'existe pas lors de l'assignation, il sera créé ; c'est ainsi une façon détournée de créer un tableau. Cette pratique est cependant découragée car si $arr contient déjà quelques valeurs (i.e. string depuis la variable demandée) alors cette valeur restera en place et [] peut attendre un opérateur d'accès sur une chaîne. C'est toujours un meilleur choix que d'initialiser une variable par assignement direct.

Pour modifier une valeur en particulier, il convient d'assigner une valeur en spécifiant sa clé. Pour effacer une paire clé/valeur, il convient d'appeler la fonction unset() sur la clé désirée.

<?php
$arr 
= array(=> 112 => 2);

$arr[] = 56;    // Identique à $arr[13] = 56;
                // à cet endroit du script

$arr["x"] = 42// Ceci ajoute un nouvel élément au
                // tableau avec la clé "x"

unset($arr[5]); // Ceci efface l'élément du tableau

unset($arr);    // Ceci efface complètement le tableau
?>

Note:

Comme dit plus haut, si aucune clé n'est spécifiée, l'indice maximal existant est repris, et la nouvelle clé sera ce nombre, plus 1 (mais au moins 0). Si aucun indice entier n'existe, la clé sera 0 (zéro).

Notez que la clé entière maximale pour cette opération n'a pas besoin d'exister dans le tableau au moment de la manipulation. Elle doit seulement avoir existé dans le tableau à un moment ou un autre depuis la dernière fois où le tableau a été ré-indexé. Voici un exemple qui illustre ce principe :

<?php
// Création d'un tableau simple.
$array = array(12345);
print_r($array);

// Maintennant, on efface tous les éléments, mais on concerne le tableau :
foreach ($array as $i => $value) {
    unset(
$array[$i]);
}
print_r($array);

// Ajout d'un élément (notez que la nouvelle clé est 5, et non 0).
$array[] = 6;
print_r($array);

// Ré-indexation :
$array array_values($array);
$array[] = 7;
print_r($array);
?>

L'exemple ci-dessus va afficher :

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)
Array
(
)
Array
(
    [5] => 6
)
Array
(
    [0] => 6
    [1] => 7
)

Fonctions utiles

Il y a beaucoup de fonctions utiles pour travailler avec les tableaux. Nous vous invitons à lire la section de ce manuel sur les fonctions en rapport avec les tableaux.

Note:

La fonction unset() permet d'effacer les clés d'un tableau. Soyez attentif sur le fait que le tableau ne sera pas ré-indexé. Si vous voulez réaliser un effacement complet et une ré-indexation de votre tableau, vous devez utiliser la fonction array_values().

<?php
$a 
= array(=> 'one'=> 'two'=> 'three');
unset(
$a[2]);
/* produira un tableau comme ceci
   $a = array(1 => 'one', 3 => 'three');
   et NON un tableau comme ceci
   $a = array(1 => 'one', 2 =>'three');
*/

$b array_values($a);
// Maintenant, $b vaut array(0 => 'one', 1 =>'three')
?>

La structure de contrôle foreach existe tout spécialement pour les tableaux. Elle fournit une manière pratique de parcourir un tableau.

Ce qu'il est possible de faire ou non avec un tableau

Pourquoi $foo[bar] est incorrect ?

Utiliser toujours des guillemets autour d'un index littéral. Par exemple, $foo['bar'] est correct, alors que $foo[bar] ne l'est pas. Mais pourquoi ? il est courant de rencontrer ce genre de syntaxe dans d'ancien script :

<?php
$foo
[bar] = 'enemy';
echo 
$foo[bar];
// etc
?>

C'est incorrect, mais ça fonctionne. La raison est que ce code a une constante indéfinie (bar) plutôt qu'une chaîne ('bar' - noter les guillemets). PHP peut définir plus loin une constante portant le même nom. Cela fonctionne car PHP convertit automatiquement une chaîne nue (une chaîne sans guillemets qui ne correspond à aucun symbole connu) en une chaîne qui la contient. Actuellement, s'il n'y a aucune constante nommée bar, alors PHP substituera 'bar' dans la chaîne et l'utilisera.

Note: Ceci ne signifie pas qu'il faut toujours mettre la clé entre guillemets. N'utilisez pas de guillemets avec les clés qui sont des constantes ou des variables, car cela empêcherait PHP de les interpréter.

<?php
error_reporting
(E_ALL);
ini_set('display_errors'true);
ini_set('html_errors'false);
// Tableau simple :
$array = array(12);
$count count($array);
for (
$i 0$i $count$i++) {
    echo 
"\nVérification de $i : \n";
    echo 
"Mauvais : " $array['$i'] . "\n";
    echo 
"Bon : " $array[$i] . "\n";
    echo 
"Mauvais : {$array['$i']}\n";
    echo 
"Bon : {$array[$i]}\n";
}
?>

L'exemple ci-dessus va afficher :

Vérification de 0 :
Notice: Undefined index:  $i in /path/to/script.html on line 9
Mauvais :
Bon : 1
Notice: Undefined index:  $i in /path/to/script.html on line 11
Mauvais :
Bon : 1

Vérification de 1 :
Notice: Undefined index:  $i in /path/to/script.html on line 9
Mauvais :
Bon : 2
Notice: Undefined index:  $i in /path/to/script.html on line 11
Mauvais :
Bon : 2

Plus d'exemples pour expliquer ce comportement :

<?php
// Affichons toutes les erreurs
error_reporting(E_ALL);

$arr = array('fruit' => 'apple''veggie' => 'carrot');

// Correct
print $arr['fruit'];  // apple
print $arr['veggie']; // carrot

// Incorrect.  Ceci fonctionne mais PHP émettera une erreur de type E_NOTICE car
// on utilise la constante nommée fruit qui est indéfinie
// 
// Notice: Use of undefined constant fruit - assumed 'fruit' in...
print $arr[fruit];    // apple

// Ceci définit une constante pour expliquer ce qu'il ne va pas. La valeur 'veggie'
// est assignée à la constante nommée fruit.
define('fruit''veggie');

// Noter la différence maintenant
print $arr['fruit'];  // apple
print $arr[fruit];    // carrot

// Ce qui squit est correct, car c'est dans une chaîne. Les constantes ne sont pas recherchées
// dans les chaînes, et donc, aucune alerte E_NOTICE ne sera émise
print "Hello $arr[fruit]";      // Hello apple

// Avec une exception : les parenthèses autour d'un tableau dans une chaîne permettent
// aux constantes d'être interprétées
print "Hello {$arr[fruit]}";    // Hello carrot
print "Hello {$arr['fruit']}";  // Hello apple

// Ceci ne fonctionnera pas, et en résultera une erreur d'analyse, comme ceci :
// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'
// Ceci arrive lors de l'utilisation d'une supergloables dans les chaînes
print "Hello $arr['fruit']";
print 
"Hello $_GET['foo']";

// La concaténation est une autre solution
print "Hello " $arr['fruit']; // Hello apple
?>

Lorsque error_reporting est défini afin de montrer les erreurs de type E_NOTICE (en le définissant à E_ALL, par exemple), une telle pratique devient immédiatement visible. Par défaut, error_reporting n'est pas défini pour afficher toutes les alertes.

Comme vu dans la section "syntaxe", ce qui se trouve entre crochets ('[' et ']') doit être une expression. Ceci signifie que le code ci-dessous fonctionne :

<?php
echo $arr[somefunc($bar)];
?>

C'est un exemple d'utilisation d'une fonction retournant une valeur qui sera la clé du tableau. PHP comprend également les constantes :

<?php
$error_descriptions
[E_ERROR]   = "A fatal error has occured";
$error_descriptions[E_WARNING] = "PHP issued a warning";
$error_descriptions[E_NOTICE]  = "This is just an informal notice";
?>

Noter que E_ERROR est également un identifiant valide, tout comme bar dans le premier exemple. Mais le dernier exemple est finalement le même que celui-ci :

<?php
$error_descriptions
[1] = "A fatal error has occured";
$error_descriptions[2] = "PHP issued a warning";
$error_descriptions[8] = "This is just an informal notice";
?>

car E_ERROR vaut 1, etc.

Alors, pourquoi est-ce une mauvaise pratique ?

Dans le futur, les développeurs PHP peuvent vouloir ajouter une autre constante ou un autre mot clé, ou bien une constante dans une autre partie du code qui peut interférer. Par exemple, il est toujours incorrect d'utiliser le mot empty et default, sachant que ce sont des mots réservés.

Note: Pour être plus clair, dans une chaîne entourée de guillemets doubles, il est valide de ne pas entourer les indexes d'un tableau avec des guillemets, et donc, "$foo[bar]" est valide. Voir les exemples ci-dessous pour plus détails mais aussi la section sur l'analyse des variables dans les chaînes.

Conversion en un tableau

Pour tous les types : entier, nombre décimal, chaîne de caractères, booléen et ressource, le fait de convertir une valeur en un tableau résulte en un tableau contenant un seul élément dont l'indexe vaut zéro et la valeur, une valeur scalaire convertie. En d'autres termes, (array)$scalarValue est exactement la même chose que array($scalarValue).

Si un objet est converti en un tableau, le résultat sera un tableau dont les éléments sont les propriétés de l'objet. Les clés sont les noms des membres, avec une légère exception : les variables ayant un nom sous forme d'entier sont inaccessible; les variables privées auront le nom de la classe ajouté au nom de la variable ; les variables protégées auront un '*' ajouté au nom de la variable. Ce comportement peut amener à des résultats inattendus :

<?php

class {
    private 
$A// Ceci devient '\0A\0A'
}

class 
extends {
    private 
$A// Ceci devient '\0B\0A'
    
public $AA// Ceci devient 'AA'
}

var_dump((array) new B());
?>

Ici, on pourrait penser qu'il y a 2 clés nommées 'AA', alors qu'une est actuellement nommée '\0A\0A'.

La conversion de NULL en un tableau résultat en un tableau vide.

Comparaison

Il est possible de comparer plusieurs tableaux avec la fonction array_diff() ainsi qu'avec les opérateurs de tableaux.

Exemples

Le type tableau en PHP est vraiment versatile. Voici quelques exemples :

<?php
// This
$a = array( 'color' => 'red',
            
'taste' => 'sweet',
            
'shape' => 'round',
            
'name'  => 'apple',
             
4        // la clé sera 0
          
);

// est strictement équivalent à
$a = array();
$a['color'] = 'red';
$a['taste'] = 'sweet';
$a['shape'] = 'round';
$a['name']  = 'apple';
$a[]        = 4;        // la clé sera 0

$b[] = 'a';
$b[] = 'b';
$b[] = 'c';

// Après exécution du code ci-dessus, $a sera le tableau
// array('color' => 'red', 'taste' => 'sweet', 'shape' => 'round', 
// 'name' => 'apple', 0 => 4), et $b sera le tableau
// array(0 => 'a', 1 => 'b', 2 => 'c'), ou simplement array('a', 'b', 'c').
?>

Exemple #9 Utilisation de array()

<?php
// Tableau comme carte de propriétés
$map = array( 'version'    => 4,
              
'OS'         => 'Linux',
              
'lang'       => 'english',
              
'short_tags' => true
            
);

// clés numériques strictes
$array = array( 7,
                
8,
                
0,
                
156,
                -
10
              
);
// est identique à array(0 => 7, 1 => 8, ...)

$switching = array(         10// clé = 0
                    
5    =>  6,
                    
3    =>  7
                    
'a'  =>  4,
                            
11// clé = 6 (l'indice entier maximal est 5)
                    
'8'  =>  2// clé = 8 (intier !)
                    
'02' => 77// clé = '02'
                    
0    => 12  // la valeur 10 sera écrasée par la valeur 12
                  
);

// empty array
$empty = array();
?>

Exemple #10 Collection

<?php
$colors 
= array('rouge''bleu''verte''jaune');

foreach (
$colors as $color) {
    echo 
"Aimez-vous la couleur $color ?\n";
}

?>

L'exemple ci-dessus va afficher :

Aimez-vous la couleur rouge ?
Aimez-vous la couleur bleu ?
Aimez-vous la couleur verte ?
Aimez-vous la couleur jaune ?

La modification directe de valeurs d'un tableau est possible depuis PHP 5 en le passant par référence. Avant cette version, nous devions utiliser l'astuce suivante :

Exemple #11 Modification d'un élément dans la boucle

<?php
// PHP 5
foreach ($colors as &$color) {
    
$color strtoupper($color);
}
unset(
$color); /* On s'assure que les écritures suivantes
sur $color ne modifie pas le dernier élément du tableau */

// Astuce pour les anciennes versions
foreach ($colors as $key => $color) {
    
$colors[$key] = strtoupper($color);
}

print_r($colors);
?>

L'exemple ci-dessus va afficher :

Array
(
    [0] => ROUGE
    [1] => BLEU
    [2] => VERTE
    [3] => JAUNE
)

Cet exemple crée un tableau, dont l'indexation commence à 1.

Exemple #12 Indexation commençant à 1

<?php
$firstquarter  
= array(=> 'Janvier''Février''Mars');
print_r($firstquarter);
?>

L'exemple ci-dessus va afficher :

Array 
(
    [1] => 'Janvier'
    [2] => 'Février'
    [3] => 'Mars'
)

Exemple #13 Remplissage d'un tableau

<?php
// Remplit un tableau avec tous les éléments d'un dossier
$handle opendir('.');
while (
false !== ($file readdir($handle))) {
    
$files[] = $file;
}
closedir($handle); 
?>

Les tableaux sont ordonnés. L'ordre peut être modifié en utilisant plusieurs fonctions. Voir la section sur les fonctions sur les tableaux pour plus d'informations. La fonction count() peut être utilisée pour compter le nombre d'éléments d'un tableau.

Exemple #14 Trie d'un tableau

<?php
sort
($files);
print_r($files);
?>

Sachant que la valeur d'une tableau peut être n'importe quoi, elle peut aussi être un autre tableau. Ceci permet la création de tableaux récursifs et de tableaux multidimensionnels.

Exemple #15 Tableaux récursifs et multidimensionnels

<?php
$fruits 
= array ( "fruits"  => array ( "a" => "orange",
                                       
"b" => "banana",
                                       
"c" => "apple"
                                     
),
                  
"numbers" => array ( 1,
                                       
2,
                                       
3,
                                       
4,
                                       
5,
                                       
6
                                     
),
                  
"holes"   => array (      "first",
                                       
=> "second",
                                            
"third"
                                     
)
                );

// Quelques exemples pour retrouver les valeurs dans le tableau ci-dessus 
echo $fruits["holes"][5];    // affiche "second"
echo $fruits["fruits"]["a"]; // affiche "orange"
unset($fruits["holes"][0]);  // efface "first"

// Création d'un tableau multidimensionnel
$juices["apple"]["green"] = "good"
?>

L'assignation d'un tableau induit toujours la copie des valeurs. Utilisez l'opérateur de référence pour copier un tableau par référence.

<?php
$arr1 
= array(23);
$arr2 $arr1;
$arr2[] = 4// $arr2 est modifié,
             // $arr1 vaut toujours array(2, 3)

$arr3 = &$arr1;
$arr3[] = 4// maintenant, $arr1 et $arr3 sont identiques
?>


Les objets

Initialisation des objets

Pour créer un nouvel objet, utilisez le mot clé new afin d'instancier une classe :

<?php
class foo
{
    function 
do_foo()
    {
        echo 
"Doing foo.";
    }
}

$bar = new foo;
$bar->do_foo();
?>

Pour une discussion complète, voir le chapitre sur les classes et les objets.

Conversion en un objet

Si un objet est converti en un objet, il ne sera pas modifié. Si une valeur de n'importe quel type est convertie en un objet, une nouvelle instance de la classe interne stdClass sera créée. Si la valeur est NULL, la nouvelle instance sera vide. La conversion d'un tableau en objet fera que les clés deviendront les proriétés, et les valeurs des clés, deviennent les valeurs des proriétés. Pour n'importe quel autre type, un membre appelé scalar contiendra la valeur.

<?php
$obj 
= (object) 'ciao';
echo 
$obj->scalar;  // Affiche : 'ciao'
?>


Les ressources

Une ressource est une variable spéciale, contenant une référence vers une ressource externe. Les ressources sont créées et utilisées par des fonctions spéciales. Voir l'appendice pour une liste de toutes ces fonctions ainsi que les types de ressource correspondants.

Voir aussi la fonction get_resource_type().

Conversion en ressource

Sachant qu'une ressource représente un fichier ouvert, une connexion à une base de données, une image, etc..., la conversion en une ressource n'a pas de sens.

Libération des ressources

Sachant qu'une ressource qui n'a plus aucune référence est détectée automatiquement et est libérée par le collecteur, il est rarement nécessaire de libérer la mémoire manuellement.

Note: Les connexions persistantes aux bases de données sont des exceptions à cette règle. Elles ne sont pas détruites par le collecteur. Voir la section sur les connexions persistantes pour plus d'informations.



NULL

La valeur spéciale NULL représente une variable sans valeur. NULL est la seule valeur possible du type NULL.

Une variable est considérée comme null si :

  • elle s'est vue assigner la constante NULL.

  • elle n'a pas encore reçu de valeur.

  • elle a été effacée avec la fonction unset().

Syntaxe

Il y a une seule valeur de type null, et c'est la constante insensible à la casse NULL.

<?php
$var 
NULL;
?>

Voir aussi les fonctions is_null() et unset().

Transtyper vers NULL

Transtyper une variable vers null en utilisant la syntaxe (unset) $var n'effacera pas la variable, ni écrasera sa valeur. Ca ne fera que retourner la valeur NULL.



Fonctions de rappel

Les fonctions de rappel sont identifiés via le type callable depuis PHP 5.4. Cette documentation utilise le type callback qui revient exactement au même.

Quelques fonctions comme call_user_func() ou usort() acceptent des fonctions de rappel définies par l'utilisateur comme paramètre. Les fonctions de rappel ne peuvent pas être que de simples fonctions, mais aussi des méthodes object, incluant des méthodes statiques de classe.

Passage d'une fonction de rappel

Une fonction PHP est passée par son nom, sous la forme d'une chaîne de caractères. Toute fonction interne ou définie par l'utilisateur peut être utilisée, sauf les constructions de language comme : array(), echo, empty(), eval(), exit(), isset(), list(), print ou unset().

Une méthode d'un objet instancié est passé comme un tableau contenant un objet à l'index 0 et le nom de la méthode à l'index 1.

Les méthodes statiques de classe peuvent aussi être passées sans instancier l'objet en passant le nom de la classe au lieu d'un objet à l'index 0. Depuis PHP 5.2.3, il est également possible de passer 'NomDeLaClasse::NomDeLaMethode'.

Sauf depuis une fonction définie par l'utilisateur, la fonction create_function() peut également être utilisée pour créer une fonction de rappel anonyme. Depuis PHP 5.3.0, il est également possible de passe une closure comme paramètre de la fonction de rappel.

Exemple #1 Exemple de fonctions de rappel

<?php 

// Un exemple de fonction de rappel
function my_callback_function() {
    echo 
'hello world!';
}

// Un exemple de méthode de rappel
class MyClass {
    static function 
myCallbackMethod() {
        echo 
'Hello World!';
    }
}

// Type 1 : Fonction de rappel simple
call_user_func('my_callback_function'); 

// Type 2 : Appel d'une méthode statique de classe
call_user_func(array('MyClass''myCallbackMethod')); 

// Type 3 : Appel d'une méthode objet
$obj = new MyClass();
call_user_func(array($obj'myCallbackMethod'));

// Type 4 : Appel d'une méthode statique de classe (depuis PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');

// Type 5 : Appel à une méthode statique de classe relative (depuis PHP 5.3.0)
class {
    public static function 
who() {
        echo 
"A\n";
    }
}

class 
extends {
    public static function 
who() {
        echo 
"B\n";
    }
}

call_user_func(array('B''parent::who')); // A
?>

Exemple #2 Exemple d'une fonction de rappel utilisant une closure

<?php
// notre closure
$double = function($a) {
    return 
$a 2;
};

// Ceci est notre intervalle de nombres
$numbers range(15);

// Utilisation de la closure comme fonction de rappel ici
// pour doubler la taille de chaque élément de notre intervalle
$new_numbers array_map($double$numbers);

print 
implode(' '$new_numbers);
?>

L'exemple ci-dessus va afficher :

2 4 6 8 10

Note: En PHP 4, il était nécessaire d'utiliser une référence pour créer une fonction de rappel, qui pointe vers l'objet actuel, et non une copie de l'objet. Pour plus de détails, reportez-vous à l'explication sur les références.

Note:

Notez que les fonctions de rappel enregistrées avec des fonctions comme call_user_func() et call_user_func_array() ne seront pas appelées si une exception n'est pas interceptée alors qu'elle a été lancée dans une précédente fonction de rappel.



Variables et pseudo-types utilisés dans cette documentation

mixed

mixed indique qu'un paramètre peut accepter plusieurs (mais pas nécessairement tous) types.

gettype() par exemple, accepte tous les types PHP, alors que str_replace() accepte les chaînes et les tableaux.

number

number indique qu'un paramètre peut être soit un nombre entier, soit un nombre décimal (nombre décimal).

callback

Les pseudo-types callback étaient utilisés dans cette documentation avant que le type callable ne soit introduit en PHP 5.4. Leur signification est exactement la même.

void

void comme type retourné signifie que la valeur retournée est inutile. void dans une liste de paramètre signifie que la fonction n'accepte aucun paramètre.

...

$... dans le prototype d'une fonction signifie "et bien plus...". Ce nom de variable est utilisé lorsqu'une fonction peut prendre un nombre indéfini d'arguments.



Manipulation des types

PHP n'impose pas de définir explicitement le type d'une variable lors de sa déclaration ; le type d'une variable est déterminé par son contexte d'utilisation. Si une valeur de type string est assignée à la variable $var, $var devient de type string. Si une valeur de type integer est ensuite assignée à cette variable $var, alors, son type devient integer.

Un exemple de conversion de type automatique avec PHP est l'ajout de l'opérateur '+'. Si une des opérandes est de type float, alors toutes les opérandes seront évaluées comme de types float, et le résultat sera de type float. Sinon, les opérandes seront interprétées comme integers, et le résultat sera également de type integer. Noter que cela ne modifie pas le type des opérandes ; la seule modification est la façon dont les opérandes sont évaluées et le type de l'expression elle-même.

<?php
$foo 
"0";                     // $foo est une chaîne de caractères (ASCII 48)
$foo += 2;                      // $foo est maintenant un entier (2)
$foo $foo 1.3;              // $foo est maintenant un nombre à virgule flottante (3.3)
$foo "10 Little Piggies"// $foo est un entier (15)
$foo "10 Small Pigs";     // $foo est un entier (15)
?>

Si les 2 derniers exemples vous semblent compliqués, reportez-vous à la section sur les conversions de chaînes en nombres.

Pour forcer une variable à être évaluée en un certain type, reportez-vous à la section sur le transtypage. Pour changer le type d'une variable, reportez-vous à la fonction settype().

Pour tester les exemples de cette section, utilisez la fonction var_dump().

Note:

Le comportement d'une conversion automatique en tableau est actuellement non-défini.

De plus, vu que PHP supporte l'indexation des chaînes de caractères via des positions en utilisant la même syntaxe que pour les tableaux, l'exemple suivant est correct pour toutes les versions de PHP :

<?php
$a    
'car'// $a est une chaîne de caractères
$a[0] = 'b';   // $a est toujours une chaîne de caractères
echo $a;       // bar
?>

Reportez-vous à la section sur l'accès aux chaînes par ces caractères pour plus d'informations.

Modification de types

La modification de types en PHP fonctionne de la même façon qu'en C : le nom du type désiré est écrit entre parenthèses avant la variable à traiter.

<?php
$foo 
10;               // $foo est un entier
$bar = (boolean) $foo;   // $bar est un booléen
?>

Les préfixes autorisés sont :

  • (int), (integer) : modification en integer
  • (bool), (boolean) : modification en boolean
  • (float), (double), (real) : modification en float
  • (string) : modification en string
  • (array) : modification en array
  • (object) : modification en object
  • (unset) : modification en NULL (PHP 5)

La modification en binaire et le préfixe b ont été ajoutés en PHP 5.2.1

Notez que les tabulations et les espaces sont autorisés dans les parenthèses. Les exemples suivants sont fonctionnellement équivalents :

<?php
$foo 
= (int) $bar;
$foo = ( int ) $bar;
?>

Modification d'une chaîne littérale et de variables en chaînes binaires :

<?php
$binary 
= (binary) $string;
$binary b"binary string";
?>

Note:

Au lieu de modifier une variable en chaîne, il est également possible d'entourer la variable de doubles guillemets.

<?php
$foo 
10;            // $foo est un entier
$str "$foo";        // $str est une chaîne
$fst = (string) $foo// $fst est également une chaîne

// Ceci affichera "ils sont identiques"
if ($fst === $str) {
    echo 
"ils sont identiques";
}
?>

Le comportement d'une modification de type n'est pas toujours identique suivant les types. Pour plus d'informations, reportez-vous à ces sections :




Les variables

Sommaire


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.

Les noms de variables suivent les mêmes règles de nommage que les autres entités PHP. Un nom de variable valide doit commencer par une lettre ou un souligné (_), suivi de lettres, chiffres ou soulignés. Exprimé sous la forme d'une expression régulière, cela donne : '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'

Note: Dans nos propos, une lettre peut être a-z, A-Z, et les octets de 127 à 255 (0x7f-0xff).

Note: $this est une variable spéciale, qui ne peut pas être assignée.

Astuce

Vous pourriez également avoir besoin de jeter un oeil sur Guide de nommage de l'espace utilisateur.

Pour obtenir des informations sur une variable, voyez les fonctions dédiées aux variables.

Exemple #1 Validité des noms de variables

<?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é
$täyte 'mansikka';    // valide : 'ä' est ASCII (étendu) 228.
?>

Les variables sont toujours assignées par valeur. C'est-à-dire, lorsque vous assignez une expression à une variable, la valeur de l'expression est recopiée dans la variable. Cela signifie, par exemple, qu'après avoir assigné la valeur d'une variable à une autre, modifier l'une des variables n'aura pas d'effet sur l'autre. Pour plus de détails sur ce genre d'assignation, reportez-vous aux expressions.

PHP 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 termes, "devient un alias de", ou encore "pointe sur") la variable originale. Les modifications de la nouvelle variable affecteront l'ancienne et vice versa.

Pour assigner par référence, ajoutez simplement un & (ET commercial) au début de la variable qui est assignée (la variable source). Dans l'exemple suivant, Mon nom est Pierre s'affichera deux fois :

Exemple #2 Assignation de référence

<?php
$foo 
'Pierre';              // Assigne la valeur 'Pierre' à $foo
$bar = &$foo;                 // Référence $foo avec $bar.
$bar "Mon nom est $bar";  // 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.

Exemple #3 Assignation de référence et variables anonymes

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

Il n'est pas nécessaire d'initialiser les variables en PHP, cependant, cela reste une excellente pratique. Les variables non initialisées ont une valeur par défaut selon leur type - FALSE pour les booléens, zéro pour les entiers et les réels, chaîne vide pour les chaînes de caractères (comme utilisée avec echo) ou un tableau vide pour les tableaux.

Exemple #4 Valeurs par défaut des variables non initialisées

<?php
// Une variable non initialisée et non référencée (pas de contexte d'utilisation); retourne NULL
var_dump($unset_var);

// L'utilisation d'un booléen; retourne 'false' (Voir l'opérateur ternaire pour comprendre cette syntaxe)
echo($unset_bool "true\n" "false\n");

// Utilisation d'une chaîne de caractères; retourne 'string(3) "abc"'
$unset_str .= 'abc';
var_dump($unset_str);

// Utilisation d'un entier; retourne 'int(25)'
$unset_int += 25// 0 + 25 => 25
var_dump($unset_int);

// Utilisation d'un entier/double; retourne 'float(1.25)'
$unset_float += 1.25;
var_dump($unset_float);

// Utilisation d'un tableau : retourne array(1) {  [3]=>  string(3) "def" }
$unset_arr[3] = "def"// array() + array(3 => "def") => array(3 => "def")
var_dump($unset_arr);

// Utilisation d'un objet; crée un nouvel objet stdClass (voir http://www.php.net/manual/fr/reserved.classes.php)
// Retourne : object(stdClass)#1 (1) {  ["foo"]=>  string(3) "bar" }
$unset_obj->foo 'bar';
var_dump($unset_obj);
?>

Utiliser la valeur par défaut d'une variable non initialisée est problématique lorsque vous incluez un fichier dans un autre qui utilise le même nom de variable. C'est également un risque niveau sécurité lorsque register_globals est activé. Une erreur de niveau E_NOTICE sera émise lorsque vous travaillerez avec des variables non initialisées, cependant, aucune erreur ne sera lancée lorsque vous tenterez d'insérer un élément dans un tableau non initialisé. La structure de langage isset() peut être utilisée pour détecter si une variable a déjà été initialisée.



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 et de la configuration du serveur ou encore d'autres facteurs. Certaines de ces variables ne seront pas accessibles lorsque PHP fonctionne en ligne de commande. Pour une liste de ces variables, lisez la section sur les variables réservées prédéfinies.

Avertissement

Depuis la version PHP 4.2.0, la valeur par défaut de la directive PHP register_globals est off. Ceci est une évolution majeure de PHP. Avoir la directive register_globals à off affecte les variables pré-définies du contexte global. Par exemple, pour lire DOCUMENT_ROOT vous devez utiliser $_SERVER['DOCUMENT_ROOT'] au lieu de $DOCUMENT_ROOT ou bien, il faut lire $_GET['id'] dans l'URL http://www.example.com/test.php?id=3 au lieu de $id ou encore $_ENV['HOME'] au lieu de $HOME.

Pour des informations liées à cette évolution, lisez la documentation de la directive register_globals , le chapitre sur la sécurité, à propos de l'Utilisation des variables superglobales, ainsi que les annonces de PHP » 4.1.0 et » 4.2.0.

L'utilisation des variables pré-définies de PHP, comme les tableaux superglobaux, est recommandée.

Depuis la version 4.1.0, PHP fournit un jeu de tableaux pré-définis, contenant les variables du serveur (si possible), les variables d'environnement et celle d'entrées. Ces nouveaux tableaux sont un peu particuliers, car ils sont automatiquement globaux : ils sont automatiquement disponibles dans tous les environnements d'exécution. Pour cette raison, ils sont dits 'superglobaux' (il n'y a pas de mécanisme PHP pour créer de telles variables. Les superglobales sont listées ci-dessous. Cependant, pour connaître le détails de leur contenu et une présentation approfondie sur les variables pré-définies PHP et leur nature, reportez-vous à la section variables pré-définies. De plus, vous noterez que les anciennes variables pré-définies ($HTTP_*_VARS) existent toujours. Depuis PHP 5.0.0, les tableaux prédéfinis PHP peuvent être désactivés avec l'option de configuration register_long_arrays.

Note: Variables variables

Les superglobales ne peuvent pas être utilisées comme variables dynamiques dans les fonctions ou les méthodes des classes.

Note:

Même si les superglobales et HTTP_*_VARS peuvent exister en même temps, elles ne sont pas identiques, donc, le changement d'une ne changera pas l'autre.

Si certaines variables de variables_order ne sont pas définies, leur tableau pré-défini PHP correspondant est laissé vide.



Portée des variables

La portée d'une variable dépend du contexte dans lequel la variable est définie. Pour la majorité des variables, la portée concerne la totalité d'un script PHP. Mais, lorsque vous définissez une fonction, la portée d'une variable définie dans cette fonction est locale à la fonction. Par exemple :

Exemple #1 Les variables sont locales à la fonction

<?php
$a 
1;
include 
'b.inc';
?>

Ici, la variable $a sera accessible dans le script inclus b.inc. Cependant, dans les fonctions définies par l'utilisateur, une nouvelle définition de cette variable sera donnée, limitée à la fonction. Toute variable utilisée dans une fonction est, par définition, locale. Par exemple :

<?php
$a 
1/* portée globale */

function test()

    echo 
$a/* portée locale */
}

test();
?>

Le script n'affichera rien à l'écran car l'instruction echo utilise la variable locale $a, et celle-ci n'a pas été assignée préalablement dans la fonction. Vous pouvez noter que ce concept diffère un petit peu du langage C dans lequel une variable globale est automatiquement accessible dans les fonctions, à moins d'être redéfinie localement dans la fonction. Cela peut poser des problèmes si vous redéfinissez des variables globales localement. En PHP, une variable globale doit être déclarée à l'intérieur de chaque fonction afin de pouvoir être utilisée dans cette fonction.

Le mot clé global

Commençons par un exemple avec global :

Exemple #2 Exemple avec global

<?php
$a 
1;
$b 2;
function 
somme() {
    global 
$a$b;
    
$b $a $b;
}
somme();
echo 
$b;

Le script ci-dessus va afficher la valeur 3. En déclarant globales les variables $a et $b locales de la fonction somme(), toutes les références à ces variables concerneront les variables globales. Il n'y a aucune limite au nombre de variables globales qui peuvent être manipulées par une fonction.

Une deuxième méthode pour accéder aux variables globales est d'utiliser le tableau associatif pré-défini $GLOBALS. Le précédent exemple peut être réécrit de la manière suivante :

Exemple #3 Les variables globales et $GLOBALS

<?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 clé et les valeurs des éléments du tableau comme valeur des variables. Notez que $GLOBALS existe dans tous les contextes, car $GLOBALS est un superglobal. Voici un exemple des super globaux :

Exemple #4 Les variables super globales

<?php
function test_global() {

    
// La plupart des variables pré-définies ne sont pas des "superglobales" et
    // requièrent le mot-clé 'global' pour être disponibles dans une fonction.
    
global $HTTP_POST_VARS;

    echo 
$HTTP_POST_VARS['name'];

    
// Les superglobales sont accessibles dans tous les contextes
    // et ne requièrent pas 'global'.  Les superglobales sont disponibles
    // depuis PHP 4.1.0 et HTTP_POST_VARS est de plus en plus
    // obsolète.
    
echo $_POST['name'];
}
?>

Note:

L'utilisation du mot clé global à l'extérieur d'une fonction n'est pas une erreur. Il peut être utilisé si le fichier est inclus depuis l'intérieur d'une fonction.

Utilisation des variables static

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 :

Exemple #5 Les variables statiques

<?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 $a 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 :

Exemple #6 Les variables statiques (2)

<?php
function test()
{
    static 
$a 0;
    echo 
$a;
    
$a++;
}
?>

Maintenant, la variable $a est initialisée uniquement lors du première appel à la fonction et, à chaque fois que la fonction test() est appelée, elle affichera une valeur de $a incrémentée de 1.

Les variables statiques sont essentielles lorsque vous faites des appels récursifs à une fonction. Une fonction récursive est une fonction qui s'appelle elle-même. Il faut faire attention lorsque vous écrivez une fonction récursive car il est facile de faire une boucle infinie. Vous devez vérifier que vous avez bien une condition qui permet de terminer votre récursivité. La fonction suivante compte récursivement jusqu'à 10, en utilisant la variable $count pour savoir quand il faut s'arrêter :

Exemple #7 Les variables statiques et la récursivité

<?php
function test()
{
    static 
$count 0;

    
$count++;
    echo 
$count;
    if (
$count 10) {
        
test();
    }
    
$count--;
}
?>

Note:

Les variables statiques doivent être déclarées comme dans l'exemple ci-dessus. Tenter d'assigner des valeurs à ces variables qui sont le résultat d'expressions causera une erreur d'analyse.

Exemple #8 Déclaration de variables statiques

<?php
function foo(){
    static 
$int 0;          // correct
    
static $int 1+2;        // faux  (car c'est une expression)
    
static $int sqrt(121);  // faux  (car c'est aussi une expression)

    
$int++;
    echo 
$int;
}
?>

Note:

Les déclarations statiques sont résolues au moment de la compilation.

Note:

L'utilisation du mot clé global à l'extérieur d'une fonction n'est pas une erreur. Il peut être utilisé si le fichier est inclus depuis l'intérieur d'une fonction.

Les références avec les variables global et static

Le Zend Engine 1, sur qui repose PHP 4, implémente les options static et global pour les variables, en terme de référence. Par exemple, une vraie variable globale est importée dans un contexte de fonction avec global. Cette commande crée en fait une référence sur la variable globale. Cela peut vous mener à des comportements inattendus, par exemple :

<?php
function test_global_ref() {
    global 
$obj;
    
$obj = &new stdclass;
}

function 
test_global_noref() {
    global 
$obj;
    
$obj = new stdclass;
}

test_global_ref();
var_dump($obj);
test_global_noref();
var_dump($obj);
?>

L'exemple ci-dessus va afficher :


NULL
object(stdClass)(0) {
}

Un comportement similaire s'applique à la commande static. Les références ne sont pas stockées dynamiquement :

<?php
function &get_instance_ref() {
    static 
$obj;

    echo 
'Objet statique : ';
    
var_dump($obj);
    if (!isset(
$obj)) {
        
// Assigne une référence à une variable statique
        
$obj = &new stdclass;
    }
    
$obj->property++;
    return 
$obj;
}

function &
get_instance_noref() {
    static 
$obj;

    echo 
'Objet statique : ';
    
var_dump($obj);
    if (!isset(
$obj)) {
        
// Assigne une objet à une variable statique
        
$obj = new stdclass;
    }
    
$obj->property++;
    return 
$obj;
}

$obj1 get_instance_ref();
$still_obj1 get_instance_ref();
echo 
"\n";
$obj2 get_instance_noref();
$still_obj2 get_instance_noref();
?>

L'exemple ci-dessus va afficher :


Objet statique : NULL
Objet statique : NULL

Objet statique : NULL
Objet statique : object(stdClass)(1) {
["property"]=>
int(1)
}

Ces exemples illustrent les problèmes rencontrés lors de l'assignation de référence à des variables statiques, qui sont oubliées lorsque vous appelez &get_instance_ref() une seconde fois.



Les variables dynamiques

Il est pratique d'avoir parfois des noms de variables qui sont variables. C'est-à-dire un nom de variable qui est affecté et utilisé dynamiquement. Une variable classique est affectée avec l'instruction suivante :

<?php
$a 
'bonjour';
?>

Une variable dynamique prend la valeur d'une variable et l'utilise comme nom d'une autre variable. Dans l'exemple ci-dessous, bonjour peut être utilisé comme le nom d'une variable en utilisant le "$$" précédent la variable. C'est-à-dire :

<?php
$$a 'monde';
?>

À 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 à résoudre un problème ambigu. Si vous écrivez $$a[1], l'analyseur a besoin de savoir si vous parler de la variable qui a pour nom $a[1] ou bien si vous voulez l'index [1] de la variable $$a. La syntaxe pour résoudre cette ambiguïté est la suivante : ${$a[1]} pour le premier cas et ${$a}[1] pour le deuxième.

On peut également accéder aux propriétés d'une classe en utilisant les noms des variables. Le nom de la variable sera résolu en utilisant le scope depuis lequel l'appel s'effectue. Par exemple, si vous avez une expression de la forme $foo->$bar, alors le scope local sera examiné pour $bar et sa valeur sera utilisée comme nom pour la propriété de $foo. Ce comportement reste valide si $bar est un tableau.

Exemple #1 Exemple de propriété variable

<?php
class foo {
    var 
$bar 'I am bar.';
}

$foo = new foo();
$bar 'bar';
$baz = array('foo''bar''baz''quux');
echo 
$foo->$bar "\n";
echo 
$foo->$baz[1] . "\n";
?>

L'exemple ci-dessus va afficher :


I am bar.
I am bar.

Avertissement

Notez que les variables dynamiques ne peuvent pas être utilisées avec les tableaux Superglobaux dans une fonction ou une classe. La variable $this est aussi une variable spéciale qui ne peut être référencée dynamiquement.



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 #1 Exemple avec un formulaire simple

<form action="foo.php" method="post">
    Nom  :  <input type="text" name="username" /><br />
    Email: <input type="text" name="email" /><br />
    <input type="submit" name="submit" value="Envoie!" />
</form>

Suivant votre configuration particulière et vos préférences, vous avez plusieurs méthodes pour accéder aux variables du formulaires. Voici quelques exemples :

Exemple #2 Accéder simplement à des variables de formulaires POST

<?php
// Disponibles depuis PHP 4.1.0

   
echo $_POST['username'];
   echo 
$_REQUEST['username'];

   
import_request_variables('p''p_');
   echo 
$p_username;

// Depuis PHP 5.0.0, ce type de variable peut être désactivé
// avec la directive de configuration register_long_arrays.

   
echo $HTTP_POST_VARS['username'];

// Disponibles si la directive register_globals = on.  Depuis
// PHP 4.2.0 la valeur par défaut de cette directive est register_globals = off.
// Utiliser ou présumer cette méthode est découragé.

   
echo $username;
?>

Utiliser un formulaire de type GET est similaire, hormis le fait que vous deviez utiliser les variables pré-définies de GET à la place. GET s'applique aussi à la QUERY_STRING (les informations disponibles après le '?' dans une URL). De ce fait, par exemple, http://www.example.com/test.php?id=3 contient les données de GET, qui sont accessibles via $_GET['id']. Voyez aussi $_REQUEST et import_request_variables().

Note:

Les tableaux superglobaux, comme $_POST et $_GET sont disponibles depuis PHP 4.1.0.

Note:

Les points et les espaces dans les noms de variables sont convertis en underscores. Par exemple, <input name="a.b" /> deviendra $_REQUEST["a_b"].

Comme nous l'avons déjà dis, avant PHP 4.2.0, la valeur par défaut de register_globals était on. La communauté PHP n'encourage personne à utiliser cette directive et privilégie la valeur off et un code accordé.

Note:

La directive de configuration magic_quotes_gpc affecte les valeurs de GET, POST et cookies. Si elle est activée, une valeur comme celle de (C'est "PHP!") sera magiquement transformée en (C\'est \"PHP!\"). La protection des caractères est nécessaire pour l'insertion dans les bases de données. Voyez aussi les fonctions addslashes(), stripslashes() et magic_quotes_sybase.

PHP comprend aussi les tableaux dans le contexte des formulaires. (voir aussi la FAQ). Vous pouvez, par exemple, grouper des variables ensemble ou bien utiliser cette fonctionnalité pour lire des valeurs multiples d'un menu déroulant. Par exemple, voici un formulaire qui se poste lui-même des données, et les affiche :

Exemple #3 Variables de formulaires complexes

<?php
if ($_POST) {
    echo 
'<pre>';
    echo 
htmlspecialchars(print_r($_POSTtrue));
    echo 
'</pre>';
}
?>
<form action="" method="post">
    Name:  <input type="text" name="personal[name]" /><br />
    Email: <input type="text" name="personal[email]" /><br />
    Beer: <br />
    <select multiple name="beer[]">
        <option value="warthog">Warthog</option>
        <option value="guinness">Guinness</option>
        <option value="stuttgarter">Stuttgarter Schwabenbräu</option>
    </select><br />
    <input type="submit" value="Validez moi !" />
</form>

Nom de variables IMAGE de type SUBMIT

Lors de la soumission d'un formulaire, il est possible d'utiliser une image au lieu d'un bouton standard, comme ceci :

<input type="image" src="image.gif" name="sub" />

Lorsque l'utilisateur clique sur cette image, le formulaire associé est envoyé au serveur, avec deux données supplémentaires, sub_x et sub_y. Elles contiennent les coordonnées du clic de l'utilisateur dans l'image. Vous noterez que ces variables sont envoyées par le navigateur avec un point dans leur nom, mais PHP convertit ces points en soulignés.

Cookies HTTP

PHP supporte les cookies HTTP de manière totalement transparente, comme défini dans la » RFC 6265. Les cookies sont un mécanisme permettant de stocker des données sur la machine cliente à des fins d'identification de l'utilisateur. Vous pouvez établir un cookie grâce à la fonction setcookie(). Les cookies font partie intégrante des en-têtes HTTP et donc la fonction setcookie() doit être appelée avant que le moindre affichage ne soit envoyé au navigateur. C'est la même restriction que pour la fonction header(). Les données contenus dans les cookies sont alors disponibles dans les tableaux de cookies appropriés, comme $_COOKIE, $HTTP_COOKIE_VARS mais aussi $_REQUEST. Lisez la page de la documentation sur la fonction setcookie() pour plus de détails ainsi que des exemples.

Si vous souhaitez assigner plusieurs valeurs à un seul cookie, il devait l'assigner sous forme de tableau. Par exemple :

<?php
setcookie
("MyCookie[foo]"'Test 1'time()+3600);
setcookie("MyCookie[bar]"'Test 2'time()+3600);
?>

Cela va créer deux cookies distincts bien que MyCookie est maintenant un simple tableau dans votre script. Si vous voulez définir seulement un cookie avec plusieurs valeurs, utilisez la fonction serialize() ou explode() sur la première valeur.

Il est à noter qu'un cookie remplace le cookie précédent par un cookie de même nom tant que le chemin ou le domaine sont identiques. Donc, pour une application de panier, vous devez implémenter un compteur et l'incrémenter au fur et à mesure. C'est-à-dire :

Exemple #4 Exemple avec setcookie()

<?php
if (isset($_COOKIE['compte'])) {
    
$compte $_COOKIE['compte'] + 1;
} else {
    
$compte 1;
}
setcookie('Panier'$comptetime()+3600);
setcookie("Panier[$compte]"$itemtime()+3600);
?>

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 suivie encore par la chaîne sans guillemets (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.

Détermination du type des variables

Parce que PHP détermine le type des variables et les convertit (généralement) comme il faut, ce n'est pas toujours le type de variable que vous souhaitez. PHP inclut des fonctions permettant de déterminer le type d'une variable : gettype(), is_array(), is_float(), is_int(), is_object() et is_string(). Lisez également le chapitre sur les types.




Les constantes

Sommaire

Une constante est un identifiant (un nom) qui représente une valeur simple. Comme son nom le suggère, cette valeur ne peut jamais être modifiée durant l'exécution du script (sauf les constantes magiques). Par défaut, le nom d'une constante est sensible à la casse. Par convention, les constantes sont toujours en majuscules.

Les noms de constantes suivent les mêmes règles que n'importe quel nom en PHP. Un nom de constante valide commence par une lettre ou un souligné, suivi d'un nombre quelconque de lettres, chiffres ou soulignés. Sous forme d'expression régulière, cela peut s'exprimer comme ceci : [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

Astuce

Vous pourriez également avoir besoin de jeter un oeil sur Guide de nommage de l'espace utilisateur.

Exemple #1 Noms valides et invalides pour les constantes

<?php
// Noms valides
define("FOO",     "something");
define("FOO2",    "something else");
define("FOO_BAR""something more");

// Noms invalides
define("2FOO",    "something");

// Ce nom est valide, mais évitez-le:
// PHP peut un jour fournir une constante magique nommée
// ainsi, ce qui va corrompre vos scripts.
define("__FOO__""something");

?>

Note: Dans cette documentation, une lettre peut être un des caractères suivants : de a à z, de A à Z et tous les caractères ASCII de 127 à 255 (0x7f-0xff).

Tout comme les superglobals, les constantes sont accessibles de manière globale. Vous pouvez les définir n'importe où, et y accéder depuis n'importe quelle fonction. Pour plus d'informations sur le contexte, lisez la section du manuel sur la portée des variables.


Syntaxe

Vous pouvez définir une constante en utilisant la fonction define() ou en utilisant le mot-clé const en dehors d'une définition de classe à partir de PHP 5.3.0. Une fois qu'une constante est définie, elle ne peut jamais être modifiée, ou détruite.

Seuls les types de données scalaires peuvent être placés dans une constante : c'est à dire les types booléen, entier, double et chaîne de caractères (soit bool, entier, double et string.) Il est possible de définir des constantes en tant que resource, mais cet usage est déconseillé, car il peut mener à des résultats inattendus.

Vous pouvez accéder à la valeur d'une constante en spécifiant simplement son nom. Contrairement aux variables, vous ne devez PAS préfixer le nom de la constante avec $. Vous pouvez aussi utiliser la fonction constant(), pour lire dynamiquement la valeur d'une constante, dont vous obtenez le nom dynamiquement (retour de fonction, par exemple). Utilisez la fonction get_defined_constants() pour connaître la liste de toutes les constantes définies.

Note: Les constantes et les variables globales utilisent deux espaces de noms différents. Ce qui implique que TRUE et $TRUE sont généralement différents (en tous cas, ils peuvent avoir des valeurs différentes).

Si vous utilisez une constante non définie, PHP considère que vous souhaitez uniquement le nom de la constante elle-même, comme si vous l'appeliez comme étant une chaîne de caractères (CONSTANT vs "CONSTANT"). Une alerte de type E_NOTICE sera émise lorsque ce cas se produit. Lisez également l'entrée du manuel qui explique pourquoi $foo[bar] est faux (tant que vous ne définissez pas bar comme étant une constante). Si vous voulez simplement vérifier qu'une constante est définie, utilisez la fonction defined().

Il y a des différences entre les constantes et les variables :

  • Les constantes ne commencent pas par le signe ($).
  • Les constantes ne peuvent être définies qu'en utilisant la fonction define(), pas par simple assignement.
  • Les constantes sont définies et accessibles à tout endroit du code, globalement.
  • Les constantes ne peuvent pas être redéfinies ou indéfinies une fois qu'elles ont été définies.
  • Les constantes ne peuvent contenir que des scalaires.

Exemple #1 Définir une constante

<?php
  define
("CONSTANTE""Bonjour le monde.");
  echo 
CONSTANTE// affiche "Bonjour le monde."
  
echo Constante// affiche "Constante" et une notice.
?>

Exemple #2 Définir des constantes en utilisant le mot-clé const

<?php
// Fonctionne depuis PHP 5.3.0.
const CONSTANT 'Hello World';

echo 
CONSTANT;
?>

Note:

Contrairement aux constantes définies en utilisant l'instruction define(), les constantes définies en utilisant le mot-clé const doivent être déclarées au plus haut niveau du contexte, car elles seront définies au moment de la compilation. Cela signifie qu'elles ne peuvent être déclarées à l'intérieur de fonctions, boucles ou instructions if.

Voir aussi les constantes de classe.



Constantes magiques

PHP fournit un grand nombre de constantes magiques. Certaines constantes sont définies par différentes extensions, et ne seront présentes que si ces extensions sont compilées avec PHP, ou bien si l'extension a été chargée dynamiquement.

Il y a huit constantes magiques qui changent suivant l'emplacement où elles sont utilisées. Par exemple, la valeur de __LINE__ dépend de la ligne où vous l'utilisez dans votre script. Ces constantes spéciales sont insensibles à la casse.

Quelques constantes PHP magiques
Nom Description
__LINE__ La ligne courante dans le fichier.
__FILE__ Le chemin complet et le nom du fichier courant. Si utilisé pour une inclusion, le nom du fichier inclus est retourné. __FILE__ contient toujours le chemin absolu pour les liens symboliques.
__DIR__ Le dossier du fichier. Si utilisé dans une inclusion, le dossier du fichier inclus sera retourné. C'est l'équivalent de dirname(__FILE__). Ce nom de dossier ne contiendra pas de slash final, sauf si c'est le dossier racine. (Ajouté en PHP 5.3.0.)
__FUNCTION__ Le nom de la fonction. Cette constante retourne le nom de la fonction comme il a été déclaré (sensible à la casse).
__CLASS__ Le nom de la classe courante. Cette constante retourne le nom de la classe comme il a été déclaré (sensible à la casse). Le nom de la classe contient l'espace de nom dans lequel cette classe a été déclarée (i.e. Foo\Bar). Notez que depuis PHP 5.4, __CLASS__ fonctionne aussi en Traits. Lorsqu'une méthode Trait est utilisée, __CLASS__ est le nom de la classe que Trait utilise en interne.
__TRAIT__ Le nom Trait (Ajouté en PHP 5.4.0). Depuis PHP 5.4, cette constante retourne le Trait comme il a été déclaré (sensible à la casse). Le nom Trait inclut l'espace de nom dans lequel il a été déclaré (e.g. Foo\Bar).
__METHOD__ Le nom de la méthode courante. Le nom de la méthode est retourné comme il a été déclaré (sensible à la casse).
__NAMESPACE__ Le nom de l'espace de noms courant (sensible à la casse). Cette constante est définie au moment de la compilation (Ajouté en PHP 5.3.0).

Voir aussi get_class(), get_object_vars(), file_exists() et function_exists().




Les expressions

Les expressions sont la partie la plus importante de 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 expression avec pour valeur 5 (dans ce cas, '5' est un entier 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 une valeur de 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;
}
?>

En supposant que vous êtes familiers 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 sûr, les valeurs en PHP n'ont pas à être des valeurs numériques, comme c'est souvent le cas. PHP supporte quatre types de variables scalaires : les valeurs entières (entier), les nombres à virgule flottante (float), les chaînes de caractères (chaîne de caractères) et les booléens (boolean). (une variable scalaire est une variable que vous ne pouvez pas scinder en morceaux, au contraire des tableaux par exemple). PHP supporte aussi deux types composés : les tableaux et les objets. Chacun de ces types de variables peut être affecté ou renvoyé par une fonction.

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 qu'il y a deux valeurs qui entrent en jeu ici, la valeur numérique constante '5' et la valeur de la variable $a qui est mise à 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'assignation elle-même. L'assignation elle-même est assignée à une valeur, dans ce cas-là 5. En pratique, cela signifie que '$a = 5' est une expression qui a pour valeur 5. Donc, écrire '$b = ($a = 5)' revient à écrire '$a = 5; $b = 5;' (un point virgule marque la fin d'une instruction). Comme les assignations sont analysées de droite à gauche, vous pouvez aussi bien écrire '$b = $a = 5'.

Un autre bon exemple du langage orienté expression est la pre-incrémentation et la post-incrémentation, (ainsi que la décrémentation). Les utilisateurs de PHP 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. 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 (pre-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'ils incrémentent la variable). La différence vient de la valeur de l'opérateur d'incrémentation. L'opérateur de pre-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 pre-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/assignation. Vous savez que si vous voulez incrémenter la variable $a d'une unité, vous devez simplement écrire '$a++' ou '++$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 de la variable $a. 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écisément : "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'assignation 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 peut utiliser ce type d'assignation, 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 vue dans d'autres langages, l'opérateur conditionnel ternaire :

<?php
$first 
$second $third
?>

Si la valeur de la première sous-expression est vraie (TRUE) (différente de 0), alors la deuxième sous-expression est évaluée et constitue le résultat de l'expression conditionnelle. Sinon, c'est la troisiè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 pre-incrémentation, la 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;     /* Pre-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 faites des tests sur une variable, dans une boucle conditionnelle par exemple, cela ne vous intéresse pas de savoir quelle est la valeur exacte de l'expression. Mais vous voulez seulement savoir si le résultat signifie TRUE ou FALSE Les constantes TRUE et FALSE (insensible à la casse) sont les deux valeurs possibles pour un booléen. Lorsque nécessaire, une expression est automatiquement convertie en booléen. Lisez la section sur le transtypage pour plus de détails.

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.



Les opérateurs

Sommaire

Un opérateur est quelque chose qui prend une ou plusieurs valeurs (ou expressions, dans le jargon de la programmation) et qui retourne une autre valeur (donc la construction elle-même devient une expression).

Les opérateurs peuvent être regroupés en fonction du nombre de valeurs qu'ils acceptent. L'opérateur unaire n'opère que sur une seule valeur, par exemple ! (l'opérateur de négation) ou ++ (l'opérateur d'incrémentation). Le second type, les opérateurs binaires (comme le très célèbre opérateur mathématique + ou -) contient la plupart des opérateurs supportés par PHP. Enfin, l'opérateur ternaire, ? :, qui accepte trois valeurs (on peut aussi l'appeler l'opérateur conditionnel).

Une liste complète des opérateurs se trouve dans la section précédence des opérateurs. Cette section explique aussi la précédence des opérateurs et l'associativité, c'est à dire les priorités d'exécution des 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 ("*") a une priorité supérieure par rapport à l'addition ("+"). Des parenthèses peuvent être utilisées pour forcer la priorité, si nécessaire. Par exemple : (1 + 5) * 3 donnera 18.

Lorsque les opérateurs ont une précédence équivalente, c'est leur associativité qui détermine s'ils sont évalués de droite à gauche ou inversement. Voyez les exemples ci-après.

Le tableau qui suit liste les opérateurs par ordre de précédence, avec la précédence la plus élevée en haut. Les opérateurs sur la même ligne ont une précédence équivalente (donc l'associativité décide de l'ordre de leur évaluation).

Précédence des opérateurs
Associativité Opérateurs Information additionnelle
non-associative clone new clone et new
gauche [ array()
non-associatif ++ -- incrémentation/décrémentation
droite ~ - (int) (float) (string) (array) (object) (bool) @ types
non-associatif instanceof types
droite ! logique
gauche * / % arithmétique
gauche + - . arithmétique et chaîne de caractères
gauche << >> bitwise
non-associatif < <= > >= <> comparaison
non-associatif == != === !== comparaison
gauche & bitwise et références
gauche ^ bitwise
gauche | bitwise
gauche && logique
gauche || logique
gauche ? : ternaire
droite = += -= *= /= .= %= &= |= ^= <<= >>= => assignation
gauche and logique
gauche xor logique
gauche or logique
gauche , plusieurs utilisations

Pour les opérateurs à précédence égale, l'associativité de gauche signifie que l'expression est évaluée de gauche à droite, l'associativité de droite, l'inverse.

Exemple #1 Associativité

<?php
$a 
5// (3 * 3) % 5 = 4
$a true true 2// (true ? 0 : true) ? 1 : 2 = 2

$a 1;
$b 2;
$a $b += 3// $a = ($b += 3) -> $a = 5, $b = 5

// Le fait de mélanger ++ et + produit un comportement indéfini
$a 1;
echo ++
$a $a++; // peut afficher 4 ou 5
?>
Utiliser des parenthèses, même lorsque cela n'est pas requis, permet d'augmenter la lisibilité du code.

Note:

Bien que = soit prioritaire sur la plupart des opérateurs, PHP va tout de même exécuter des expressions comme : if (!$a = foo()). Dans cette situation, le résultat de foo() sera placé dans la variable $a.



Les opérateurs arithmétiques

Vous rappelez-vous des opérations élémentaires apprises à l'école ? Les opérateurs arithmétiques fonctionnent comme elles.

Opérations élémentaires
Exemple Nom Résultat
-$a Négation Opposé de $a.
$a + $b Addition Somme de $a et $b.
$a - $b Soustraction Différence de $a et $b.
$a * $b Multiplication Produit de $a et $b.
$a / $b Division Quotient de $a et $b.
$a % $b Modulo Reste de $a divisé par $b.

L'opérateur de division ("/") retourne une valeur à virgule flottante sauf si les 2 opérandes sont des entiers (ou une chaîne de caractères qui a été convertie en entiers) et cette valeur est toujours divisible, auquel cas une valeur entière sera retournée.

Les opérandes du modulo sont converties en entiers (en supprimant la partie décimale) avant exécution.

Le résultat de l'opération modulo % a le même signe que le premier opérande, ansi le résultat de $a % $b aura le signe de $a. Par exemple:

<?php

echo (3)."\n";           // affiche 2
echo (% -3)."\n";          // affiche 2
echo (-3)."\n";          // affiche -2
echo (-% -3)."\n";         // affiche -2

?>

Voir aussi le manuel sur les fonctions mathématiques.



Les opérateurs d'assignation

L'opérateur d'assignation le plus simple est le signe "=". Le premier réflexe est de penser que ce signe veut dire "égal à". Ce n'est pas le cas. Il signifie que l'opérande de gauche se voit affecter la valeur de l'expression qui est à droite du signe égal.

La valeur d'une expression d'assignation est la valeur assignée. Par exemple, la valeur de l'expression '$a = 3' est la valeur 3. Cela permet d'utiliser des astuces telles que :

<?php
$a 
= ($b 4) + 5;
// $a est maintenant égal à 9, et $b vaut 4.
?>

Pour les arrays, assigner une valeur à une clé donnée est effectué au moyen de l'opérateur "=>". La précédence de cet opérateur est la même que celle des opérateurs d'assignation.

En plus du simple opérateur d'assignation, il existe des "opérateurs combinés" pour tous les opérateurs arithmétiques, l'union de tableaux et pour les opérateurs sur les chaînes de caractères. Cela permet d'utiliser la valeur d'une variable dans une expression et d'affecter le résultat de cette expression à cette variable. Par exemple :

<?php
$a 
3;
$a += 5// affecte la valeur 8 à la variable $a correspond à l'instruction '$a = $a + 5';
$b "Bonjour ";
$b .= " tout le monde!";  // affecte la valeur "Bonjour tout le monde!" à
                                    //  la variable $b
                                    //  identique à $b = $b." tout le monde!";

?>

On peut noter que l'assignation copie le contenu de la variable originale dans la nouvelle variable (assignation par valeur), ce qui fait que les changements de valeur d'une variable ne modifieront pas la valeur de l'autre. Cela peut se révéler important lors de la copie d'un grand tableau durant une boucle.

Une exception au comportement d'assignation par valeur en PHP est le type object, ceux-ci sont assignés par référence dans PHP 5. La copie d'objet doit être explicitement demandée grâce au mot-clé clone.

Assignation par référence

L'assignation par référence est aussi supportée, au moyen de la syntaxe "$var = &$othervar;". L'assignation par référence signifie que les deux variables pointent vers le même conteneur de donnée, rien n'est copié nul part.

Exemple #1 Assignation par référence

<?php
$a 
3;
$b = &$a// $b est une référence à $a

print "$a\n"// affiche 3
print "$b\n"// affiche 3

$a 4// change $a

print "$a\n"// affiche 4
print "$b\n"// affiche 4 aussi, car $b est une référence à $a, qui a été
              // changée
?>

Depuis PHP 5, l'opérateur new retourne une référence automatiquement, donc assigner le résultat de new par référence retournera une erreur E_DEPRECATED depuis PHP 5.3, et une erreur de niveau E_STRICT avant PHP 5.3.

Par exemple, ce code génère un message d'erreur:

<?php
class {}

/* La ligne suivante génère une erreur dont le message est:
 * Deprecated: Assigning the return value of new by reference is deprecated in...
 */
$o = &new C;
?>

Plus d'informations sur le références et leurs utilisations possibles peuvent être trouvées dans la section du manuel Les références expliquées.



Opérateurs sur les bits

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

Les opérateurs sur les bits
Exemple Nom Résultat
$a & $b And (Et) Les bits positionnés à 1 dans $a ET dans $b sont positionnés à 1.
$a | $b Or (Ou) Les bits positionnés à 1 dans $a OU $b sont positionnés à 1.
$a ^ $b Xor (ou exclusif) Les bits positionnés à 1 dans $a OU dans $b mais pas dans les deux sont positionnés à 1.
~ $a Not (Non) Les bits qui sont positionnés à 1 dans $a sont positionnés à 0, et vice-versa.
$a << $b Décalage à gauche Décale les bits de $a, $b fois sur la gauche (chaque décalage équivaut à une multiplication par 2).
$a >> $b Décalage à droite Décalage les bits de $a, $b fois par la droite (chaque décalage équivaut à une division par 2).

Le décalage de bits en PHP est arithmétique. Les bits qui sont décalés hors de l'entier sont perdus. Les décalages à gauche font apparaître des zéros à droite, tandis que le bit de signe est décalé à gauche, ce qui signifie que le signe de l'entier n'est pas préservé. Les décalages à droite décalent aussi le bit de signe sur la droite, ce qui signifie que le signe est préservé.

Utilisez des parenthèses pour vous assurer que la précédence voulue est bien appliquée. Par exemple, $a & $b == true applique d'abord l'égalité, et ensuite le ET logique, alors que ($a & $b) == true applique d'abord le ET logique, puis l'égalité.

Prenez garde aux transtypages. Si les deux paramètres, de chaque coté de l'opérateur, sont des chaînes, l'opérateur de bit va opérer sur les valeurs ASCII des chaînes.

      Le rapport d'erreur de PHP utilise des champs de bits,
      qui sont une illustration de l'extinction des bits.
      Pour afficher les erreurs, sauf les notices, les
      instructions du php.ini sont : 
      E_ALL & ~E_NOTICE
     

      Cela se comprend en comparant avec E_ALL :
      00000000000000000111011111111111
      Puis en éteignant la valeur de E_NOTICE...
      00000000000000000000000000001000
      ... et en l'inversant via ~:
      11111111111111111111111111110111
      Finalement, on utilise le ET logique (&) pour lire les bits activés
      dans les deux valeurs : 
      00000000000000000111011111110111
     

      Un autre moyen d'arriver à ce résultat est d'utiliser 
      le OU exclusif (^), qui cherche
      les bits qui ne sont activés que dans l'une ou l'autre des
      valeurs, exclusivement : 
      E_ALL ^ E_NOTICE
     

      error_reporting peut aussi être utilisé pour 
      illustrer l'activation de bits. Pour afficher
      uniquement les erreurs et les erreurs recouvrables,
      on utilise :
      E_ERROR | E_RECOVERABLE_ERROR
     

      Cette approche combine E_ERROR
      00000000000000000000000000000001
      et E_RECOVERABLE_ERROR
      00000000000000000001000000000000
      Avec l'opérateur OR (|) pour s'assurer que
      les bits sont activés dans l'une ou l'autre valeur : 
      00000000000000000001000000000001
     

Exemple #1 Opérations sur les bits et les entiers

<?php
/*
 * Ignorez cette partie,
 * c'est juste du formatage pour clarifier les résultats
 */

$format '(%1$2d = %1$04b) = (%2$2d = %2$04b)'
        
' %3$s (%4$2d = %4$04b)' "\n";

echo <<<EOH
 ---------     ---------  -- ---------
 resultat       valeur        test
 ---------     ---------  -- ---------
EOH;


/*
 * Voici les exemples
 */

$values = array(01248);
$test 4;

echo 
"\n Bitwise AND \n";
foreach (
$values as $value) {
    
$result $value $test;
    
printf($format$result$value'&'$test);
}

echo 
"\n Bitwise Inclusive OR \n";
foreach (
$values as $value) {
    
$result $value $test;
    
printf($format$result$value'|'$test);
}

echo 
"\n Bitwise Exclusive OR (XOR) \n";
foreach (
$values as $value) {
    
$result $value $test;
    
printf($format$result$value'^'$test);
}
?>

L'exemple ci-dessus va afficher :

---------     ---------  -- ---------
 resultat       valeur        test
 ---------     ---------  -- ---------
 Bitwise AND 
( 0 = 0000) = ( 0 = 0000) & ( 5 = 0101)
( 1 = 0001) = ( 1 = 0001) & ( 5 = 0101)
( 0 = 0000) = ( 2 = 0010) & ( 5 = 0101)
( 4 = 0100) = ( 4 = 0100) & ( 5 = 0101)
( 0 = 0000) = ( 8 = 1000) & ( 5 = 0101)

 Bitwise Inclusive OR 
( 5 = 0101) = ( 0 = 0000) | ( 5 = 0101)
( 5 = 0101) = ( 1 = 0001) | ( 5 = 0101)
( 7 = 0111) = ( 2 = 0010) | ( 5 = 0101)
( 5 = 0101) = ( 4 = 0100) | ( 5 = 0101)
(13 = 1101) = ( 8 = 1000) | ( 5 = 0101)

 Bitwise Exclusive OR (XOR) 
( 5 = 0101) = ( 0 = 0000) ^ ( 5 = 0101)
( 4 = 0100) = ( 1 = 0001) ^ ( 5 = 0101)
( 7 = 0111) = ( 2 = 0010) ^ ( 5 = 0101)
( 1 = 0001) = ( 4 = 0100) ^ ( 5 = 0101)
(13 = 1101) = ( 8 = 1000) ^ ( 5 = 0101)

Exemple #2 Opération sur les bits et les chaînes

<?php
echo 12 9// Affiche '5'

echo "12" "9"// Affiche le caractère d'effacement (ascii 8)
                 // ('1' (ascii 49)) ^ ('9' (ascii 57)) = #8

echo "hallo" "hello"// Affiche les valeurs ASCII #0 #4 #0 #0 #0
                        // 'a' ^ 'e' = #4

echo "3"// Affiche 1
              // 2 ^ ((int)"3") == 1

echo "2" 3// Affiche 1
              // ((int)"2") ^ 3 == 1
?>

Exemple #3 Décalage de bits sur les entiers

<?php
/*
 * Voici quelques exemples
 */

echo "\n--- Décalages à droite sur des entiers positifs ---\n";

$val 4;
$places 1;
$res $val >> $places;
p($res$val'>>'$places'copie du bit de signe maintenant à gauche');

$val 4;
$places 2;
$res $val >> $places;
p($res$val'>>'$places);

$val 4;
$places 3;
$res $val >> $places;
p($res$val'>>'$places'des bits sont sortis par la droite');

$val 4;
$places 4;
$res $val >> $places;
p($res$val'>>'$places'même résultat que ci-dessus : pas de décalage au dela de 0');


echo 
"\n--- Décalages à droite sur des entiers négatifs ---\n";

$val = -4;
$places 1;
$res $val >> $places;
p($res$val'>>'$places'copie du bit de signe maintenant à gauche');

$val = -4;
$places 2;
$res $val >> $places;
p($res$val'>>'$places'des bits sont sortis par la droite');

$val = -4;
$places 3;
$res $val >> $places;
p($res$val'>>'$places'même résultat que ci-dessus : pas de décalage au dela de -1');


echo 
"\n--- Décalages à gauche sur des entiers positifs ---\n";

$val 4;
$places 1;
$res $val << $places;
p($res$val'<<'$places'complément de zéros à droite');

$val 4;
$places = (PHP_INT_SIZE 8) - 4;
$res $val << $places;
p($res$val'<<'$places);

$val 4;
$places = (PHP_INT_SIZE 8) - 3;
$res $val << $places;
p($res$val'<<'$places'le bit de signe est sorti');

$val 4;
$places = (PHP_INT_SIZE 8) - 2;
$res $val << $places;
p($res$val'<<'$places'des bits sont sortis à gauche');


echo 
"\n--- Décalages à gauche sur des entiers négatifs ---\n";

$val = -4;
$places 1;
$res $val << $places;
p($res$val'<<'$places'complément de zéros à droite');

$val = -4;
$places = (PHP_INT_SIZE 8) - 3;
$res $val << $places;
p($res$val'<<'$places);

$val = -4;
$places = (PHP_INT_SIZE 8) - 2;
$res $val << $places;
p($res$val'<<'$places'des bits sont sortis à gauche, y compris le bit de signe');


/*
 * Ignorez cette section
 * Elle contient du code pour le formatage de cet exemple
 */

function p($res$val$op$places$note '') {
    
$format '%0' . (PHP_INT_SIZE 8) . "b\n";

    
printf("Expression : %d = %d %s %d\n"$res$val$op$places);

    echo 
" Décimal :\n";
    
printf("  val=%d\n"$val);
    
printf("  res=%d\n"$res);

    echo 
" Binaire :\n";
    
printf('  val=' $format$val);
    
printf('  res=' $format$res);

    if (
$note) {
        echo 
" Note : $note\n";
    }

    echo 
"\n";
}
?>

Résultat de l'exemple ci-dessus sur une machine 32 bits :


--- Décalages à droite sur des entiers positifs ---
Expression : 2 = 4 >> 1
 Décimal :
  val=4
  res=2
 Binaire :
  val=00000000000000000000000000000100
  res=00000000000000000000000000000010
 Note : copie du bit de signe maintenant à gauche

Expression : 1 = 4 >> 2
 Décimal :
  val=4
  res=1
 Binaire :
  val=00000000000000000000000000000100
  res=00000000000000000000000000000001

Expression : 0 = 4 >> 3
 Décimal :
  val=4
  res=0
 Binaire :
  val=00000000000000000000000000000100
  res=00000000000000000000000000000000
 Note : des bits sont sortis par la droite

Expression : 0 = 4 >> 4
 Décimal :
  val=4
  res=0
 Binaire :
  val=00000000000000000000000000000100
  res=00000000000000000000000000000000
 Note : même résultat que ci-dessus : pas de décalage au dela de 0


--- Décalages à droite sur des entiers négatifs ---
Expression : -2 = -4 >> 1
 Décimal :
  val=-4
  res=-2
 Binaire :
  val=11111111111111111111111111111100
  res=11111111111111111111111111111110
 Note : copie du bit de signe à gauche

Expression : -1 = -4 >> 2
 Décimal :
  val=-4
  res=-1
 Binaire :
  val=11111111111111111111111111111100
  res=11111111111111111111111111111111
 Note : des bits sont sortis par la droite

Expression : -1 = -4 >> 3
 Décimal :
  val=-4
  res=-1
 Binaire :
  val=11111111111111111111111111111100
  res=11111111111111111111111111111111
 Note : même résultat que ci-dessus : pas de décalage au dela de -1


--- Décalages à gauche sur des entiers positifs ---
Expression : 8 = 4 << 1
 Décimal :
  val=4
  res=8
 Binaire :
  val=00000000000000000000000000000100
  res=00000000000000000000000000001000
 Note : complément de zéros à droite

Expression : 1073741824 = 4 << 28
 Décimal :
  val=4
  res=1073741824
 Binaire :
  val=00000000000000000000000000000100
  res=01000000000000000000000000000000

Expression : -2147483648 = 4 << 29
 Décimal :
  val=4
  res=-2147483648
 Binaire :
  val=00000000000000000000000000000100
  res=10000000000000000000000000000000
 Note : le bit de signe est sorti

Expression : 0 = 4 << 30
 Décimal :
  val=4
  res=0
 Binaire :
  val=00000000000000000000000000000100
  res=00000000000000000000000000000000
 Note : des bits sont sortis à gauche


--- Décalages à gauche sur des entiers négatifs ---
Expression : -8 = -4 << 1
 Décimal :
  val=-4
  res=-8
 Binaire :
  val=11111111111111111111111111111100
  res=11111111111111111111111111111000
 Note : complément de zéros à droite

Expression : -2147483648 = -4 << 29
 Décimal :
  val=-4
  res=-2147483648
 Binaire :
  val=11111111111111111111111111111100
  res=10000000000000000000000000000000

Expression : 0 = -4 << 30
 Décimal :
  val=-4
  res=0
 Binaire :
  val=11111111111111111111111111111100
  res=00000000000000000000000000000000
 Note : des bits sont sortis à gauche, y compris le bit de signe

Résultat de l'exemple ci-dessus sur une machine 64 bits :


--- Décalages à droite sur des entiers positifs ---
Expression : 2 = 4 >> 1
 Décimal :
  val=4
  res=2
 Binaire :
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=0000000000000000000000000000000000000000000000000000000000000010
 Note : copie du bit de signe maintenant à gauche

Expression : 1 = 4 >> 2
 Décimal :
  val=4
  res=1
 Binaire :
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=0000000000000000000000000000000000000000000000000000000000000001

Expression : 0 = 4 >> 3
 Décimal :
  val=4
  res=0
 Binaire :
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=0000000000000000000000000000000000000000000000000000000000000000
 Note : des bits sont sortis par la droite

Expression : 0 = 4 >> 4
 Décimal :
  val=4
  res=0
 Binaire :
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=0000000000000000000000000000000000000000000000000000000000000000
 Note : même résultat que ci-dessus : pas de décalage au dela de 0


--- Décalages à droite sur des entiers négatifs ---
Expression : -2 = -4 >> 1
 Décimal :
  val=-4
  res=-2
 Binaire :
  val=1111111111111111111111111111111111111111111111111111111111111100
  res=1111111111111111111111111111111111111111111111111111111111111110
 Note : copie du bit de signe maintenant à gauche

Expression : -1 = -4 >> 2
 Décimal :
  val=-4
  res=-1
 Binaire :
  val=1111111111111111111111111111111111111111111111111111111111111100
  res=1111111111111111111111111111111111111111111111111111111111111111
 Note : des bits sont sortis par la droite

Expression : -1 = -4 >> 3
 Décimal :
  val=-4
  res=-1
 Binaire :
  val=1111111111111111111111111111111111111111111111111111111111111100
  res=1111111111111111111111111111111111111111111111111111111111111111
 Note : même résultat que ci-dessus : pas de décalage au dela de -1


--- Décalage à gauche sur les entiers négatifs ---
Expression : 8 = 4 << 1
 Décimal :
  val=4
  res=8
 Binaire :
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=0000000000000000000000000000000000000000000000000000000000001000
 Note : complément de zéros à droite

Expression : 4611686018427387904 = 4 << 60
 Décimal :
  val=4
  res=4611686018427387904
 Binaire :
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=0100000000000000000000000000000000000000000000000000000000000000

Expression : -9223372036854775808 = 4 << 61
 Décimal :
  val=4
  res=-9223372036854775808
 Binaire :
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=1000000000000000000000000000000000000000000000000000000000000000
 Note : le bit de signe est sorti

Expression : 0 = 4 << 62
 Décimal :
  val=4
  res=0
 Binaire :
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=0000000000000000000000000000000000000000000000000000000000000000
 Note : des bits sont sortis à gauche


--- Décalage à gauche sur les entiers négatifs ---
Expression : -8 = -4 << 1
 Décimal :
  val=-4
  res=-8
 Binaire :
  val=1111111111111111111111111111111111111111111111111111111111111100
  res=1111111111111111111111111111111111111111111111111111111111111000
 Note : complément de zéros à droite

Expression : -9223372036854775808 = -4 << 61
 Décimal :
  val=-4
  res=-9223372036854775808
 Binaire :
  val=1111111111111111111111111111111111111111111111111111111111111100
  res=1000000000000000000000000000000000000000000000000000000000000000

Expression : 0 = -4 << 62
 Décimal :
  val=-4
  res=0
 Binaire :
  val=1111111111111111111111111111111111111111111111111111111111111100
  res=0000000000000000000000000000000000000000000000000000000000000000
 Note : des bits sont sortis à gauche, y compris le bit de signe

Avertissement

N'effectuez pas de décalage à droite de plus de 32 bits sur les systèmes 32 bits. N'effectuez pas de décalage à gauche dans le cas où le résultat est un nombre plus long que 32 bits. Utilisez les fonctions de l'extension gmp pour les manipulations sur les bits, lorsque les entiers dépassent PHP_INT_MAX.

Voyez aussi pack(), unpack(), gmp_and(), gmp_or(), gmp_xor(), gmp_testbit(), gmp_clrbit()



Opérateurs de comparaison

Les opérateurs de comparaison, comme leur nom l'indique, vous permettent de comparer deux valeurs. Vous devriez également être intéressés par les tables de comparaisons de types, car ils montrent des exemples de beaucoup de types de comparaisons.

Opérateurs de comparaison
Exemple Nom Résultat
$a == $b Egal TRUE si $a est égal à $b après le transtypage.
$a === $b Identique TRUE si $a est égal à $b et qu'ils sont de même type.
$a != $b Différent TRUE si $a est différent de $b après le transtypage.
$a <> $b Différent TRUE si $a est différent de $b après le transtypage.
$a !== $b Différent TRUE si $a est différent de $b ou bien qu'ils ne sont pas du même type.
$a < $b Plus petit que TRUE si $a est strictement plus petit que $b.
$a > $b Plus grand TRUE si $a est strictement plus grand que $b.
$a <= $b Inférieur ou égal TRUE si $a est plus petit ou égal à $b.
$a >= $b Supérieur ou égal TRUE si $a est plus grand ou égal à $b.

Si vous comparez un nombre avec une chaîne ou bien que la comparaison implique des chaînes numériques, alors chaque chaîne sera convertie en un nombre et la comparaison sera effectuée numériquement. Ces règles s'appliquent également à l'instruction switch. La comparaison de type n'a pas de place lorsque la comparaison est === ou !== vu que ceci engendre aussi bien une comparaison de type que de valeur.

<?php
var_dump
(== "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true

switch ("a") {
case 
0:
    echo 
"0";
    break;
case 
"a"// jamais évalué parce que "a" est déjà trouvé avec 0
    
echo "a";
    break;
}
?>

Pour les différents types, la comparaison est faite en suivant la table suivante (dans l'ordre).

Comparaison avec plusieurs types
Type de l'opérande 1 Type de l'opérande 2 Résultat
null ou chaîne de caractères string Convertit NULL en "", comparaison numérique ou lexicale
booléen ou null N'importe quoi Convertit en booléen, FALSE < TRUE
objet objet Les classes internes peuvent définir leur propre méthode de comparaison; différentes classes ne sont pas comparables; entre objets de même classe, PHP a son propre comportement
chaîne de caractères, ressource ou nombre chaîne de caractères, ressource ou nombre Transforme les chaînes de caractères et les ressources en nombres
tableaux tableaux Le tableau avec le moins de membres est plus petit, si la clé de l'opérande 1 n'est pas trouvée dans l'opérande 2, alors les tableaux ne sont pas comparables, sinon la comparaison se fait valeur par valeur (voir l'exemple suivant)
tableau N'importe quoi Le tableau est toujours plus grand
objet N'importe quoi L'objet est toujours plus grand

Exemple #1 Transcription des comparaisons standards des tableaux

<?php
// Les tableaux sont comparés comme ceci avec les opérateurs standards de comparaison
function standard_array_compare($op1$op2)
{
   if (
count($op1) < count($op2)) {
      return -
1// $op1 < $op2
   
} elseif (count($op1) > count($op2)) {
      return 
1// $op1 > $op2
   
}
   foreach (
$op1 as $key => $val) {
      if (!
array_key_exists($key$op2)) {
         return 
null// incomparable
      
} elseif ($val $op2[$key]) {
         return -
1;
      } elseif (
$val $op2[$key]) {
         return 
1;
      }
   }
   return 
0// $op1 == $op2
}
?>

Voir aussi strcasecmp(), strcmp() les opérateurs de tableaux, et le chapitre sur les types.

Avertissement

Comparaison de nombre à virgule flottante

A cause de la façon dont les nombres à virgule flottante sont représentés en interne, vous ne devriez pas tester l'égalité entre deux nombres de type float.

Voyez la documentation de float pour plus d'informations.

L'opérateur ternaire

Un autre opérateur conditionnel est l'opérateur ternaire (":?").

Exemple #2 Assignation d'une valeur par défaut

<?php
// Exemple d'utilisation pour l'opérateur ternaire
$action = (empty($_POST['action'])) ? 'default' $_POST['action'];

// La ligne ci-dessus est identique à la condition suivante :
if (empty($_POST['action'])) {
   
$action 'default';
} else {
   
$action $_POST['action'];
}

?>
L'expression (expr1) ? (expr2) : (expr3) est évaluée à expr2 si expr1 est évaluée à TRUE, et expr3 si expr1 est évaluée à FALSE.

Depuis PHP 5.3, il est possible d'omettre la partie centrale de l'opérateur ternaire. L'expression expr1 ?: expr3 retourne expr1 si expr1 vaut TRUE, et expr3 sinon.

Note: Notez que l'opérateur ternaire est une instruction, et il n'est pas évalué en tant que variable, mais en tant que résultat de l'instruction. Il est important de savoir si vous voulez retourner une variable par référence. L'instruction return $var == 42 ? $a : $b; dans une fonction retournée par référence ne fonctionnera donc pas et une alerte est émise.

Note:

Il est recommandé de ne pas "empiler" les expressions ternaires. Le comportement de PHP lors de l'utilisation de plus d'un opérateur ternaire dans une seule instruction n'est pas évident :

Exemple #3 Comportement de PHP

<?php
// A première vue, ce qui suit devrait retourner 'true'
echo (true?'true':false?'t':'f');

// cependant, l'expression ci-dessus retournera 't'
// car l'expression ternaire est évaluée de gauche à droite

// l'expression suivante est une version plus évidente du même code
echo ((true 'true' false) ? 't' 'f');

// ici, vous pouvez voir que la première expression est évaluée à 'true',
// ce qui fait qu'elle est évaluée à (bool)true, ce qui retourne la branche
// 'vraie' de la seconde expression ternaire.
?>



Opérateur de contrôle d'erreur

PHP supporte un opérateur de contrôle d'erreur : c'est @. Lorsque cet opérateur est ajouté en préfixe d'une expression PHP, les messages d'erreur qui peuvent être générés par cette expression seront ignorés.

Si vous avez défini un gestionnaire d'erreurs personnalisé avec la fonction set_error_handler(), alors il sera toujours appelé, mais ce gestionnaire d'erreurs peut (et doit) appeler la fonction error_reporting() qui devra retourner 0 lorsque l'appel qui a émis l'erreur était précédé d'un @.

Si l'option track_errors est activée, les messages d'erreurs générés par une expression seront sauvés dans la variable globale $php_errormsg. Cette variable sera écrasée à chaque erreur. Il faut alors la surveiller souvent pour pouvoir l'utiliser.

<?php
/* Erreur intentionnelle (le fichier n'existe pas): */
$mon_fichier = @file ('non_persistent_file') or
    die (
"Impossible d'ouvrir le fichier : L'erreur est : '$php_errormsg'");

// Cela fonctionne avec n'importe quelle expression, pas seulement les fonctions
  
$value = @$cache[$key];
// la ligne ci-dessus n'affichera pas d'alerte si la clé $key du tableau n'existe pas

?>

Note: L'opérateur @ ne fonctionne qu'avec les expressions. La règle générale de fonctionnement est la suivante : si vous pouvez prendre la valeur de quelque chose, vous pouvez le préfixer avec @. Par exemple, vous pouvez ajouter @ aux variables, fonctions, à include, aux constantes, etc. Vous ne pourrez pas le faire avec des éléments de langage tels que les classes, if et foreach, etc.

Voir aussi error_reporting() et la section sur la gestion d'erreurs.

Avertissement

En fait, l'opérateur "@" va aussi désactiver les rapports d'erreurs critiques, qui stoppent l'exécution du script. Entre autres, si vous utilisez "@" pour supprimer les erreurs de certaines fonctions, et que cette fonction n'existe pas, ou qu'elle a été mal orthographiée, vous n'aurez aucune indication.



Opérateur d'exécution

PHP supporte un opérateur d'exécution : guillemets obliques ("``"). Notez bien qu'il ne s'agit pas de guillemets simples. PHP essaie 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). Utilisez les guillemets obliques revient à utiliser la fonction shell_exec().

Exemple #1 Opérateur d'exécution

<?php
$output 
= `ls -al`;
echo 
"<pre>$output</pre>";
?>

Note:

Cet opérateur est désactivé lorsque le safe mode est activé ou bien que la fonction shell_exec() est désactivée.

Note:

Contrairement à d'autres langages, les guillemets obliques ne peuvent pas être utilisés dans une chaîne entourée de guillemets doubles.

Voir aussi le manuel à la section sur les fonctions d'exécution système, popen(), proc_open() et l'utilisation de PHP en ligne de commande.



Opérateurs d'incrémentation et décrémentation

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

Note: Les opérateurs d'incrémentation/décrémentation n'affectent pas les valeurs booléennes. La décrémentation des valeurs NULL n'a également aucun effet, mais leur incrémentation donnera comme résultat 1.

Opérateurs d'incrémentation et décrémentation
Exemple Nom Résultat
++$a Pre-incrémente Incrémente $a de 1, puis retourne $a.
$a++ Post-incrémente Retourne $a, puis incrémente $a de 1.
--$a Pré-décrémente Décrémente $a de 1, puis retourne $a.
$a-- Post-décrémente Retourne $a, puis décrémente $a de 1.

Voici un exemple 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>Pre-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>Pre-décrémentation</h3>';
$a 5;
echo 
"Devrait valoir  4: " . --$a "<br />\n";
echo 
"Devrait valoir  4: " $a "<br />\n";
?>

PHP suit les conventions de Perl pour la gestion des opérateurs arithmétiques sur les variables de caractères et non pas celle du C. Par exemple, en PHP et en Perl, $a = 'Z'; $a++; transforme $a en 'AA', alors qu'en C, a = 'Z'; a++; transforme a en '[' (la valeur ASCII de 'Z' est 90, la valeur ASCII de '[' est 91). Notez que les variables de caractères peuvent être incrémentées mais pas décrémentées, mais aussi que seuls les caractères ASCII pleins (a-z et A-Z) sont supportés. L'incrémentation/décrémentation d'autres variables de caractères n'a aucun effet, la chaîne originale n'est pas modifiée.

Exemple #1 Opérations arithmétiques sur un caractère

<?php
$i 
'W';
for(
$n=0$n<6$n++) {
  echo ++
$i "\n";
}
?>

L'exemple ci-dessus va afficher :

X
Y
Z
AA
AB
AC

L'incrémentation ou la décrémentation d'un booléen n'a aucun effet.



Les opérateurs logiques

Les opérateurs logiques
Exemple Nom Résultat
$a and $b And (Et) TRUE si $a ET $b valent TRUE.
$a or $b Or (Ou) TRUE si $a OU $b valent TRUE.
$a xor $b XOR TRUE si $a OU $b est TRUE, mais pas les deux en même temps.
! $a Not (Non) TRUE si $a n'est pas TRUE.
$a && $b And (Et) TRUE si $a ET $b sont TRUE.
$a || $b Or (Ou) TRUE si $a OU $b est TRUE.

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.

Exemple #1 Illustration des opérateurs logiques

<?php

// --------------------
// foo() ne sera jamais appelée car ces opérateurs s'annulent

$a = (false && foo());
$b = (true  || foo());
$c = (false and foo());
$d = (true  or  foo());

// --------------------
// "||" a un précédence supérieure à "or"

// Le résultat de l'expression (false || true) est assigné à $e
// Agit comme : ($e = (false || true))
$e false || true;

// La constante false est assignée à $f, puis, true est ignoré
// Agit comme : (($f = false) or true)
$f false or true;

var_dump($e$f);

// --------------------
// "&&" a un précédence supérieure à "and"

// Le résultat de l'expression (true && false) est assigné à $g
// Agit comme : ($g = (true && false))
$g true && false;

// La constante true est assignée à $h, puis, false est ignoré
// Agit comme : (($h = true) and false)
$h true and false;

var_dump($g$h);
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

bool(true)
bool(false)
bool(false)
bool(true)


Opérateurs de chaînes

Il y a deux opérateurs de chaînes de caractères string. Le premier est l'opérateur de concaténation ('.'), qui retourne la concaténation de ses deux arguments. Le second est l'opérateur d'assignation concaténant (.=). Reportez-vous à opérateurs d'assignation pour plus de détails.

Exemple #1 Opérateur de concaténation

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

$a "Bonjour ";
$a $a "Monde !"// $a contient "Bonjour Monde !"
?>

Voir aussi les sections du manuel sur les types de chaînes de caractères et les chaînes de caractères.



Opérateurs de tableaux

Opérateurs de tableaux
Exemple Nom Résultat
$a + $b Union Union de $a et $b.
$a == $b Egalité TRUE si $a et $b contiennent les mêmes paires clés/valeurs.
$a === $b Identique TRUE si $a et $b contiennent les mêmes paires clés/valeurs dans le même ordre et du même type.
$a != $b Inégalité TRUE si $a n'est pas égal à $b.
$a <> $b Inégalité TRUE si $a n'est pas égal à $b.
$a !== $b Non-identique TRUE si $a n'est pas identique à $b.

L'opérateur + retourne le tableau de droite auquel sont ajoutés les éléments du tableau de gauche. Pour les clés présentes dans les 2 tableaux, les éléments du tableau de gauche seront utilisés alors que les éléments correspondants dans le tableau de droite seront ignorés.

<?php
$a 
= array("a" => "pomme""b" => "banane");
$b = array("a" =>"poire""b" => "fraise""c" => "cerise");

$c $a $b// Union de $a et $b
echo "Union de \$a et \$b : \n";
var_dump($c);

$c $b $a// Union de $b et $a
echo "Union de \$b et \$a : \n";
var_dump($c);
?>
À l'exécution, le script affichera :
Union de $a et $b :
array(3) {
  ["a"]=>
  string(5) "pomme"
  ["b"]=>
  string(6) "banane"
  ["c"]=>
  string(6) "cerise"
}
Union de $b et $a :
array(3) {
  ["a"]=>
  string(5) "poire"
  ["b"]=>
  string(6) "fraise"
  ["c"]=>
  string(6) "cerise"
}

Les éléments d'un tableau sont égaux en terme de comparaison s'ils ont la même clé et la même valeur.

Exemple #1 Comparer des tableaux

<?php
$a 
= array("pomme""banane");
$b = array(=> "banane""0" => "pomme");

var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false)
?>

Voyez aussi le manuel aux sections Tableaux et fonctions de tableaux.



Opérateurs de types

instanceof est utilisé pour déterminer si une variable PHP est un objet instancié d'une certaine classe :

Exemple #1 Utilisation de instanceof avec des classes

<?php
class MaClasse
{
}
class 
PasMaClasse
{
}
$a = new MaClasse;

var_dump($a instanceof MaClasse);
var_dump($a instanceof PasMaClasse);
?>

L'exemple ci-dessus va afficher :

bool(true)
bool(false)

instanceof peut également être utilisé pour déterminer si une variable est un objet instancié d'une classe qui hérite d'une classe parente :

Exemple #2 Utilisation de instanceof avec des classes héritées

<?php
class ParentClass
{
}
class 
MyClass extends ParentClass
{
}
$a = new MyClass;

var_dump($a instanceof MyClass);
var_dump($a instanceof ParentClass);
?>

L'exemple ci-dessus va afficher :

bool(true)
bool(true)

Pour vérifier si un objet n'est pas une instance d'une classe, l'opérateur logique not peut être utilisé.

Exemple #3 Utilisation de instanceof pour vérifier que l'objet n'est pas une instance de la classe

<?php
class MyClass
{
}
$a = new MyClass;
var_dump(!($a instanceof stdClass));
?>

L'exemple ci-dessus va afficher :

bool(true)

Et finalement, instanceof peut être utilisé pour déterminer si une variable est un objet instancié d'une classe qui implémente une interface :

Exemple #4 Utilisation de instanceof pour une interface

<?php
interface MyInterface
{
}
class 
MyClass implements MyInterface
{
}
$a = new MyClass;

var_dump($a instanceof MyClass);
var_dump($a instanceof MyInterface);
?>

L'exemple ci-dessus va afficher :

bool(true)
bool(true)

Bien que instanceof soit habituellement utilisé avec un nom de classe littéral, il peut également être utilisé avec un autre objet ou une chaîne représentant une variable :

Exemple #5 Utilisation de instanceof avec d'autres variables

<?php
interface MyInterface
{
}
class 
MyClass implements MyInterface
{
}
$a = new MyClass;
$b = new MyClass;
$c 'MyClass';
$d 'NotMyClass';
var_dump($a instanceof $b); // $b est un objet de la classe MyClass
var_dump($a instanceof $c); // $c est une chaîne 'MyClass'
var_dump($a instanceof $d); // $d est une chaîne 'NotMyClass'
?>

L'exemple ci-dessus va afficher :

bool(true)
bool(true)
bool(false)

Il y a quelques pièges à éviter. Avant PHP version 5.1.0, instanceof appellera __autoload() si le nom de la classe n'existe pas. De plus, si la classe n'a pas été chargée, une erreur fatale sera émise. Ceci peut fonctionner en utilisant une référence de classe dynamique, ou une chaîne représentant une variable contenant le nom de la classe :

Exemple #6 Pas de recherche sur le nom de la classe et une erreur fatale avec instanceof en PHP 5.0

<?php
$d 
'NotMyClass';
var_dump($a instanceof $d); // no fatal error here
?>

L'exemple ci-dessus va afficher :

bool(false)

L'opérateur instanceof a été introduit en PHP 5. Avant cette version, is_a() était utilisée mais is_a() est depuis devenue obsolète, en faveur de instanceof. Notez que depuis PHP 5.3.0, is_a() n'est de nouveau plus obsolète.

Voir aussi get_class() et is_a().




Les structures de contrôle

Sommaire


Introduction

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'instructions sont décrits dans ce chapitre.



if

(PHP 4, PHP 5)

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 :

if (expression)
  commandes

Comme nous l'avons vu dans le paragraphe consacré aux expressions, expression est convertie en sa valeur booléenne. Si l'expression vaut TRUE, PHP exécutera l'instruction et si elle vaut FALSE, l'instruction sera ignorée. Plus de détails sur les valeurs qui valent FALSE sont disponibles dans la section Conversion en booléen.

L'exemple suivant affiche la phrase a est plus grand que b si $a est plus grand que $b :

<?php
if ($a $b)
  echo 
"a est plus grand que b";
?>

Souvent, vous voulez que plusieurs instructions soient exécutées après un branchement conditionnel. Bien évidemment, il n'est pas obligatoire de répéter l'instruction conditionnelle if autant de fois que vous avez d'instructions à exécuter. À la place, vous pouvez rassembler toutes les instructions dans un bloc. L'exemple suivant affiche a est plus grand que b, si $a est plus grand que $b, puis assigne la valeur de $a à la variable $b :

<?php
if ($a $b) {
  echo 
"a est plus grand que b";
  
$b $a;
}
?>

Vous pouvez imbriquer indéfiniment des instructions if dans d'autres instructions if, ce qui permet une grande flexibilité dans l'exécution d'une partie de code suivant un grand nombre de conditions.



else

(PHP 4, PHP 5)

Souvent, vous voulez exécuter une instruction si une condition est remplie, et une autre instruction si cette condition n'est pas remplie. C'est à cela que sert else. else fonctionne après un if et exécute les instructions correspondantes au cas où l'expression du if est FALSE. Dans l'exemple suivant, ce bout de code affiche a est plus grand que b si la variable $a est plus grande que la variable $b, et a est plus petit que b sinon :

<?php
if ($a $b) {
  echo 
"a est plus grand que b";
} else {
  echo 
"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 suivie par l'expression elseif - uniquement si elles sont évaluées à FALSE (voir elseif).



elseif/else if

(PHP 4, PHP 5)

elseif, comme son nom l'indique, est une combinaison de if et de else. Comme l'expression else, il permet d'exécuter une instruction après 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 conditionnelle 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) {
    echo 
"a est plus grand que b";
} elseif (
$a == $b) {
    echo 
"a est égal à b";
} else {
    echo 
"a est plus petit que b";
}
?>

Vous pouvez avoir plusieurs elseif qui se suivent les uns après 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. La sémantique des deux expressions est légèrement différente, mais au bout du compte, le résultat sera exactement le même.

L'expression elseif est exécutée seulement si le if précédent et tout autre elseif précédent sont évalués comme FALSE, et que votre elseif est évalué à TRUE.

Note: A noter que elseif et else if sont traités de la même façon seulement quand des accolades sont utilisées, comme dans l'exemple ci-dessus. Quand vous utilisez ":" pour définir votre condition if/elseif, vous ne devez pas séparer else if en deux mots, sans quoi PHP soulèvera une erreur d'interprétation.

<?php

/* Mauvaise méthode : */
if($a $b):
    echo 
$a." est plus grand que ".$b;
else if(
$a == $b): // ne compilera pas
    
echo "La ligne ci-dessus provoque une erreur d'interprétation";
endif;


/* Bonne méthode : */
if($a $b):
    echo 
$a." est plus grand que ".$b;
elseif(
$a == $b): // Les deux mots sont collés
    
echo $a." égal ".$b;
else:
    echo 
$a." est plus grand ou égal à ".$b;
endif;

?>



Syntaxe alternative

(PHP 4, PHP 5)

PHP propose une autre manière de rassembler des instructions à l'intérieur d'un bloc, pour les fonctions de contrôle if, while, for, foreach et switch. Dans chaque cas, le principe est de remplacer l'accolade d'ouverture par deux points (:) et l'accolade de fermeture par, respectivement, endif;, endwhile;, endfor;, endforeach;, ou endswitch;.

<?php if ($a == 5): ?>
A égal 5
<?php endif; ?>

Dans l'exemple ci-dessus, le bloc HTML "A égal 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 elseif et un else utilisant cette autre syntaxe :

<?php
if ($a == 5):
    echo 
"a égale 5";
    echo 
"...";
elseif (
$a == 6):
    echo 
"a égale 6";
    echo 
"!!!";
else:
    echo 
"a ne vaut ni 5 ni 6";
endif;
?>

Note:

Vous ne pouvez pas utiliser différentes syntaxes dans le même bloc de contrôle.

Voir aussi while, for, et if pour d'autres exemples.



while

(PHP 4, PHP 5)

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 :

while (expression)
    commandes

La signification d'une boucle while est très simple. 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 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 :

while (expression):
    commandes
    ...
endwhile;

Les exemples suivants sont identiques et affichent tous les nombres de 1 jusqu'à 10 :

<?php
/* exemple 1 */

$i 1;
while (
$i <= 10) {
    echo 
$i++;  /* La valeur affiche est $i avant l'incrémentation
                   (post-incrémentation)  */
}

/* exemple 2 */

$i 1;
while (
$i <= 10):
    echo 
$i;
    
$i++;
endwhile;
?>



do-while

(PHP 4, PHP 5)

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 (la condition est vérifiée dès le début de chaque itération, et si elle s'avère FALSE dès le début, la boucle sera immédiatement arrêtée).

Il n'y a qu'une syntaxe possible pour les boucles do-while :

<?php
$i 
0;
do {
    echo 
$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 encapsulant dans un do-while(0) la fonction break. Le code suivant montre une utilisation possible :

<?php
do {
    if (
$i 5) {
        echo 
"i n'est pas suffisamment grand";
        break;
    }
    
$i *= $factor;
    if (
$i $minimum_limit) {
        break;
    }
   echo 
"i est bon";

    
/* ...traitement de 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é. Depuis PHP 5.3.0, il est possible d'utiliser l'opérateur goto à l'intérieur de cette fonctionnalité.



for

(PHP 4, PHP 5)

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 :

for (expr1; expr2; expr3)
    commandes

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.

À la fin de chaque itération, l'expression expr3 est évaluée (exécutée).

Les expressions peuvent éventuellement être laissées vides ou peuvent contenir plusieurs expressions séparées par des virgules. Dans expr2, toutes les expressions séparées par une virgule sont évaluées mais le résultat est obtenu depuis la dernière partie. 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 jusqu'à 10 :

<?php
/* exemple 1 */

for ($i 1$i <= 10$i++) {
    echo 
$i;
}

/* exemple 2 */

for ($i 1; ; $i++) {
    if (
$i 10) {
        break;
    }
    echo 
$i;
}

/* exemple 3 */

$i 1;
for (; ; ) {
    if (
$i 10) {
        break;
    }
    echo 
$i;
    
$i++;
}

/* exemple 4 */

for ($i 1$j 0$i <= 10$j += $i, print $i$i++);
?>

Bien évidemment, le premier exemple est le plus simple de tous (ou peut être le quatrième), mais vous pouvez aussi penser qu'utiliser une expression vide dans une boucle for peut être utile parfois.

PHP supporte aussi la syntaxe alternative suivante pour les boucles for :

for (expr1; expr2; expr3):
    commandes
    ...
endfor;

Beaucoup de personnes ont l'habitude d'itérer grâce à des tableaux, comme dans l'exemple ci dessous.

<?php
/*
 * Ceci est un tableau avec des données que nous voulons modifier
 * au long de la boucle
*/
$people = Array(
        Array(
'name' => 'Kalle''salt' => 856412),
        Array(
'name' => 'Pierre''salt' => 215863)
        );

for(
$i 0$i sizeof($people); ++$i)
{
    
$people[$i]['salt'] = rand(000000999999);
}
?>

Le problème se situe dans le deuxième argument de l'expression for. Ce code peut être lent parce qu'il doit calculer la taille du tableau à chaque itération. Etant donné que la taille ne change jamais, il peut facilement être optimisé en utilisant une variable intermédiaire pour stocker la taille et en l'utilisant dans la boucle à la place de sizeof. L'exemple ci-dessous illustre ce cas :

<?php
$people 
= Array(
        Array(
'name' => 'Kalle''salt' => 856412),
        Array(
'name' => 'Pierre''salt' => 215863)
        );

for(
$i 0$size sizeof($people); $i $size; ++$i)
{
    
$people[$i]['salt'] = rand(000000999999);
}
?>



foreach

(PHP 4, PHP 5)

La structure de langage foreach fournit une façon simple de parcourir des tableaux. foreach ne fonctionne que pour les tableaux et les objets, et émettra une erreur si vous tentez de l'utiliser sur une variable de type différent ou une variable non initialisée. Il existe deux syntaxes :

foreach (array_expression as $value)
    commandes
foreach (array_expression as $key => $value)
    commandes

La première forme passe en revue le tableau array_expression. À chaque itération, la valeur de l'élément courant est assignée à $value et le pointeur interne de tableau est avancé d'un élément (ce qui fait qu'à la prochaine itération, on accédera à l'élément suivant).

La seconde forme assignera en plus la clé de l'élément courant à la variable $key à chaque itération.

Il est possible de personnaliser l'itération sur des objets.

Note:

Lorsque foreach démarre, le pointeur interne du tableau est automatiquement ramené au premier élément du tableau. Cela signifie que vous n'aurez pas à faire appel à reset() avant foreach.

Vu que foreach utilise le pointeur interne du tableau à chaque itération, il conviendra d'en tenir compte lors d'une utilisation future du tableau dans votre code.

Vous pouvez modifier facilement les éléments d'un tableau en précédent $value d'un &. Ceci assignera une référence au lieu de copier la valeur.

<?php
$arr 
= array(1234);
foreach (
$arr as $value) {
    
$value $value 2;
}
// $arr vaut maintenant array(2, 4, 6, 8)
unset($value); // Détruit la référence sur le dernier élément
?>

Le référencement de $value est seulement possible si le tableau parcouru peut être référencé (i.e. si c'est une variable). Le code suivant ne fonctionnera pas :

<?php
foreach (array(1234) as $value) {
    
$value $value 2;
}
?>

Avertissement

La référence de $value et le dernier élément du tableau sont conservés après l'exécution de la boucle foreach. Il est recommandé de les détruire en utilisant la fonction unset().

Note:

foreach n'accepte pas l'opérateur de suppression des erreurs @.

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

<?php
$arr 
= array("un""deux""trois");
reset($arr);
while (list(, 
$value) = each($arr)) {
    echo 
"Valeur : $value<br />\n";
}

foreach (
$arr as $value) {
    echo 
"Valeur : $value<br />\n";
}
?>

Les exemples suivants sont aussi fonctionnellement identiques :

<?php
$arr 
= array("un""deux""trois");
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 foreach 1 : la valeur seulement */

$a = array(12317);

foreach (
$a as $v) {
    echo 
"Valeur courante de \$a: $v.\n";
}

/* exemple foreach 2 : la valeur et sa clé d'index */

$a = array(12317);

$i 0/* uniquement pour l'illustration */

foreach ($a as $v) {
    echo 
"\$a[$i] => $v.\n";
    
$i++;
}

/* exemple foreach 3 : la clé et la valeur */

$a = array(
    
"un" => 1,
    
"deux" => 2,
    
"trois" => 3,
    
"dix-sept" => 17
);

foreach (
$a as $k => $v) {
    echo 
"\$a[$k] => $v.\n";
}

/* exemple foreach 4 : tableaux multidimensionnels */
$a = array();
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";

foreach (
$a as $v1) {
    foreach (
$v1 as $v2) {
        echo 
"$v2\n";
    }
}

/* exemple foreach 5 : tableaux dynamiques */

foreach (array(12345) as $v) {
    echo 
"$v\n";
}
?>



break

(PHP 4, PHP 5)

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

break accepte un argument numérique optionnel qui vous indiquera combien de structures emboîtées doivent être interrompues.

<?php
$arr 
= array('un''deux''trois''quatre''stop''cinq');
while (list(, 
$val) = each($arr)) {
    if (
$val == 'stop') {
        break;    
/* Vous pourriez aussi utiliser 'break 1;' ici. */
    
}
    echo 
"$val<br />\n";
}

/* Utilisation de l'argument optionnel. */

$i 0;
while (++
$i) {
    switch (
$i) {
    case 
5:
        echo 
"At 5<br />\n";
        break 
1;  /* Termine uniquement le switch. */
    
case 10:
        echo 
"At 10; quitting<br />\n";
        break 
2;  /* Termine le switch et la boucle while. */
    
default:
        break;
    }
}
?>

Historique pour break
Version Description
5.4.0 Supprime la possibilité de passer des variables (i.e., $num = 2; break $num;) comme argument numérique.



continue

(PHP 4, PHP 5)

L'instruction continue est utilisée dans une boucle afin d'éluder les instructions de l'itération courante et de continuer l'exécution à la condition de l'évaluation et donc, de commencer la prochaine itération.

Note: Notez qu'en PHP, la structure switch est considérée comme une boucle par continue.

continue accepte un argument numérique optionnel qui vous indiquera combien de structures emboîtées doivent être éludées.

Note:

continue 0; et continue 1; sont identiques à continue;.

<?php
while (list($key$value) = each($arr)) {
    if (!(
$key 2)) { // évite les membres impairs
        
continue;
    }
    
do_something_odd($value);
}

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

Oublier le point virgule après continue peut porter à confusion. Voici un exemple de ce que vous ne devez pas faire :

<?php
for ($i 0$i 5; ++$i) {
    if (
$i == 2)
        continue
    print 
"$i\n";
}
?>

On peut s'attendre à ce que le résultat soit :

0
1
3
4

mais ce script affichera :

2

car le commande complète continue print "$i\n"; est évaluée comme une seule expression, et ainsi, la fonction print est appelée uniquement lorsque $i == 2 est vrai. (La valeur retournée de print est passée à continue comme argument numérique.)

Historique pour continue
Version Description
5.4.0 Supprime la possibilité de passer des variables (i.e., $num = 2; continue $num;) comme argument numérique.



switch

(PHP 4, PHP 5)

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.

Note: Notez que contrairement à d'autres langages, la structure continue s'applique aux structures switch et se comporte de la même manière que break. Si vous avez un switch dans une boucle, et que vous souhaitez continuer jusqu'à la prochaine itération de la boucle extérieure, vous devez utiliser continue 2.

Note:

Notez que switch/case provoque une comparaison large.

Les deux exemples suivants sont deux manières différentes d'écrire la même chose, l'une en utilisant une séries de if, et l'autre en utilisant l'instruction switch :

Exemple #1 Instruction switch

<?php
if ($i == 0) {
    echo 
"i égal 0";
} elseif (
$i == 1) {
    echo 
"i égal 1";
} elseif (
$i == 2) {
    echo 
"i égal 2";
}

switch (
$i) {
    case 
0:
        echo 
"i égal 0";
        break;
    case 
1:
        echo 
"i égal 1";
        break;
    case 
2:
        echo 
"i égal 2";
        break;
}
?>

Exemple #2 Instruction switch utilisant une chaîne de caractères

<?php
switch ($i) {
    case 
"apple":
        echo 
"i est une tarte";
        break;
    case 
"bar":
        echo 
"i est une barre";
        break;
    case 
"cake":
        echo 
"i est un gateau";
        break;
}
?>

Il est important de comprendre que l'instruction switch exécute chacune des clauses dans l'ordre. L'instruction switch est exécutée ligne par ligne. Au début, aucun code n'est exécuté. Seulement lorsqu'un case est vérifié, PHP exécute alors les instructions correspondantes. PHP continue d'exécuter les instructions jusqu'à la fin du bloc d'instructions du switch, ou bien dès qu'il trouve l'instruction break. Si vous ne pouvez pas utiliser l'instruction break à la fin de l'instruction case, PHP continuera à exécuter toutes les instructions qui suivent. Par exemple :

<?php
switch ($i) {
    case 
0:
        echo 
"i égal 0";
    case 
1:
        echo 
"i égal 1";
    case 
2:
        echo 
"i égal 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 à 2, vous obtiendrez le résultat escompté, c'est-à-dire, l'affichage de "i égal 2". Donc, l'important est de ne pas oublier l'instruction break (même s'il est possible que vous l'omettiez dans certaines circonstances).

Dans une commande switch, une condition n'est évaluée qu'une fois, et le résultat est comparé à chaque case. Dans une structure elseif, les conditions sont évaluées à chaque comparaison. Si votre condition est plus compliquée qu'une simple comparaison, ou bien fait partie d'une boucle, switch sera plus rapide.

La liste de commandes d'un case peut être vide, auquel cas PHP utilisera la liste de commandes du cas suivant.

<?php
switch ($i) {
case 
0:
case 
1:
case 
2:
    echo 
"i est plus petit que 3 mais n'est pas négatif";
    break;
case 
3:
    echo 
"i égal 3";
}
?>

Un cas spécial est default. Ce cas est utilisé lorsque tous les autres cas ont échoué. Par exemple :

<?php
switch ($i) {
    case 
0:
        echo 
"i égal 0";
        break;
    case 
1:
        echo 
"i égal 1";
        break;
    case 
2:
        echo 
"i égal 2";
        break;
    default:
       echo 
"i n'est ni égal à 2, ni à 1, ni à 0.";
}
?>

Une autre chose à mentionner est que la valeur du case peut être toute expression de type scalaire, c'est-à-dire nombre entier, nombre à virgule flottante et chaîne de caractères. Les tableaux sont sans intérêt dans ce contexte-là.

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

<?php
switch ($i):
    case 
0:
        echo 
"i égal 0";
        break;
    case 
1:
        echo 
"i égal 1";
        break;
    case 
2:
        echo 
"i égal 2";
        break;
    default:
        echo 
"i n'est ni égal à 2, ni à 1, ni à 0";
endswitch;
?>

Il est possible d'utiliser un point-virgule plutôt que deux points après un case, comme ceci :

<?php
switch($beer)
{
    case 
'leffe';
    case 
'grimbergen';
    case 
'guinness';
        echo 
'Bon choix';
    break;
    default;
        echo 
'Merci de faire un choix...';
    break;
}
?>



declare

(PHP 4, PHP 5)

L'élément de langage declare sert à ajouter des directives d'exécutions dans un bloc de code. La syntaxe de declare est similaire à la syntaxe des autres fonctions de contrôle :

declare (directive)
    commandes

L'expression directive permet de contrôler l'intervention du bloc declare. Actuellement, seulement deux directives sont reconnues : la directive ticks (voir plus bas pour plus de détails sur les ticks) et la directive d'encodage encoding (Voir plus bas pour plus de détails sur la directive encoding).

Note: La directive encoding a été ajoutée en PHP 5.3.0.

L'expression commandes du bloc de declare sera exécutée. Comment elle sera exécutée, et quels effets cela aura, dépend de la directive utilisée dans le bloc directive.

La structure declare peut aussi être utilisée dans le contexte global. Elle affecte alors tout le code qui la suit (même si le fichier avec declare a été inclus après, ça n'affecte pas le fichier parent).

<?php
// Ces déclarations sont identiques.

// Vous pouvez utiliser ceci
declare(ticks=1) {
    
// script entier ici
}

// ou ceci
declare(ticks=1);
// script entier ici
?>

Ticks

Un tick est un événement qui intervient toutes les N commandes bas niveau tickables, exécutées par l'analyseur dans le bloc de declare. La valeur de N est spécifiée par la syntaxe ticks=N dans le bloc de directive declare.

Toutes les commandes ne sont pas tickables. Typiquement, les expressions de condition et les expressions d'arguments ne sont pas tickables.

Un événement qui intervient à chaque tick est spécifié avec la fonction register_tick_function(). Reportez-vous à l'exemple ci-dessous pour plus de détails. Notez que plus d'un événement peut intervenir par tick.

Exemple #1 Exemple d'utilisation des ticks

<?php

declare(ticks=1);

// A function called on each tick event
function tick_handler()
{
    echo 
"tick_handler() called\n";
}

register_tick_function('tick_handler');

$a 1;

if (
$a 0) {
    
$a += 2;
    print(
$a);
}

?>

Exemple #2 Exemple d'utilisation des ticks

<?php

function tick_handler()
{
  echo 
"tick_handler() called\n";
}

$a 1;
tick_handler();

if (
$a 0) {
    
$a += 2;
    
tick_handler();
    print(
$a);
    
tick_handler();
}
tick_handler();

?>

Voir aussi register_tick_function() et unregister_tick_function().

L'encodage

L'encodage d'un script peut être spécifié par script en utilisant la directive encoding.

Exemple #3 Déclaration d'un encodage pour un script

<?php
declare(encoding='ISO-8859-1');
// le code
?>

Attention

Combinée avec les espaces de nommage, la seule syntaxe valable pour declare est declare(encoding='...');... est la valeur de l'encodage. declare(encoding='...') {} soulèvera une erreur d'interprétation dans le cas des espaces de nommage.

La valeur d'encodage est ignorée en PHP 5.3 à moins que PHP soit compilé avec --enable-zend-multibyte.

Notez que PHP ne vous renseignera sur l'activation ou non de --enable-zend-multibyte qu'au moyen de phpinfo().

Voir aussi zend.script_encoding.



return

(PHP 4, PHP 5)

Si appelée depuis une fonction, la commande return termine immédiatement la fonction, et retourne l'argument qui lui est passé. return interrompt aussi l'exécution de commande eval() ou de scripts.

Si appelée depuis l'environnement global, l'exécution du script est interrompue. Si le script courant était inclus avec la structure include ou require, alors le contrôle est rendu au script appelant. De plus, si le fichier du script courant a été inclus via l'instruction include, alors la valeur retournée sera utilisée comme résultat de l'instruction include. Si return est appelée depuis le script principal, alors l'exécution du script s'arrête. Si le script courant est auto_prepend_file ou auto_append_file dans le fichier php.ini, alors l'exécution du script s'arrête.

Pour plus d'informations, voyez retourner des valeurs.

Note: Notez que puisque return est une structure de langage, et non une fonction, les parenthèses entourant les arguments ne sont pas nécessaires. Il est classique de les oublier et vous devriez le faire car PHP travaillera moins dans ce cas.

Note: Si aucun paramètre n'est fourni, alors les parenthèses peuvent être omises et NULL sera retourné. L'appel à la fonction return avec des parenthèses mais sans argument résultera en une alerte d'analyse.

Note: Vous ne devriez jamais utiliser les parenthèses autour de la variable retournée lorsque vous la retournez pas référence, car cela ne fonctionnera pas. Vous ne pouvez retourner que les variables par référence, et non le résultat du traitement. Si vous utilisez return ($a);, alors vous ne retournez pas une variable mais le résultat de l'expression ($a) (qui est, bien sûr, la valeur de $a).



require

(PHP 4, PHP 5)

require est identique à include mise à part le fait que lorsqu'une erreur survient, il produit également une erreur fatale de niveau E_COMPILE_ERROR. En d'autres termes, il stoppera le script alors que include n'émettra qu'une alerte de niveau E_WARNING, ce qui permet au script de continuer.

Voir la documentation de l'instruction include pour en connaître son fonctionnement.



include

(PHP 4, PHP 5)

L'instruction de langage include inclut et exécute le fichier spécifié en argument.

Cette documentation s'applique aussi à l'instruction de langage require.

Les fichiers sont inclus suivant le chemin du fichier fourni ; si aucun n'est fourni, l'include_path sera vérifié. Si le fichier n'est pas trouvé dans l' include_path, include vérifiera dans le dossier du script appelant et dans le dossier de travail courant avant d'échouer. L'instruction include enverra une erreur de type warning si elle ne peut trouver le fichier; ce comportement est différent de require, qui enverra une erreur de niveau fatal.

Si un chemin est défini, absolu ou relatif (commençant par une lettre de lecteur suivie de \ pour Windows, ou / pour Unix/Linux), l'include_path sera ignoré. Par exemple, si un nom de fichier commence par ../, PHP cherchera dans le dossier parent pour y trouver le fichier spécifié.

Pour plus d'informations sur la façon dont PHP gère les fichiers inclus ainsi que le chemin d'inclusion, reportez-vous à la documentation relative à l'include_path.

Lorsqu'un fichier est inclus, le code le composant hérite de la portée des variables de la ligne où l'inclusion apparaît. Toutes les variables disponibles à cette ligne dans le fichier appelant seront disponibles dans le fichier appelé, à partir de ce point. Cependant, toutes les fonctions et classes définies dans le fichier inclus ont une portée globale.

Exemple #1 Exemple avec include

vars.php
<?php

$couleur 
'verte';
$fruit 'pomme';

?>

test.php
<?php

echo "Une $fruit $couleur"// Une

include 'vars.php';

echo 
"Une $fruit $couleur"// Une pomme verte

?>

Si l'inclusion intervient à l'intérieur d'une fonction, le code inclus sera alors considéré comme faisant partie de la fonction. Cela modifie donc le contexte de variables accessibles. Une exception à cette règle : les constantes magiques sont analysées par l'analyseur avant que l'inclusion n'intervienne.

Exemple #2 Inclusion de fichiers dans une fonction

<?php

function foo()
{
    global 
$couleur;

    include 
'vars.php';

    echo 
"Une $fruit $couleur";
}

/* vars.php est dans le contexte de foo()     *
 * donc $fruit n'est pas disponible hors de   *
 * cette fonction. $couleur l'est, car c'est  *
 * une variable globale                       */

foo();                      // Une pomme verte
echo "Une $fruit $couleur"// Une  verte

?>

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.

Si les Gestionnaires d'URL sont activés dans PHP (ce qui est le cas par défaut), vous pouvez localiser le fichier avec une URL (via HTTP ou bien avec un gestionnaire adapté : voir Liste des protocoles et des gestionnaires supportés pour une liste des protocoles), au lieu d'un simple chemin local. Si le serveur distant interprète le fichier comme du code PHP, des variables peuvent être transmises au serveur distant via l'URL et la méthode GET. Ce n'est pas, à strictement parler, la même chose que d'hériter du contexte de variable. Le fichier inclus est en fait un script exécuté à distance, et son résultat est inclus dans le code courant.

Avertissement

Les versions Windows de PHP antérieures à la version 4.3.0 ne supportent pas l'accès aux fichiers distants avec cette fonction, même si allow_url_fopen est activé.

Exemple #3 Utiliser l'instruction include via HTTP

<?php

/* Cet exemple suppose que www.example.com est configuré pour traiter
 * les fichiers .php et non pas les fichiers .txt. De plus,
 * 'Work' signifie ici que les variables
 * $foo et $bar sont disponibles dans le fichier inclus
 */

// Ne fonctionne pas : file.txt n'a pas été traité par www.example.com comme du PHP
include 'http://www.example.com/file.txt?foo=1&bar=2';

// Ne fonctionne pas : le script cherche un fichier nommé
// 'file.php?foo=1&bar=2' sur le système local
include 'file.php?foo=1&bar=2';

// Réussi
include 'http://www.example.com/file.php?foo=1&bar=2';

$foo 1;
$bar 2;
include 
'file.txt';  // Ok.
include 'file.php';  // Ok.

?>

Avertissement

Alerte de sécurité

Un fichier distant peut être traité sur le serveur distant (dépendamment de l'extension du fichier et si le serveur distant exécute PHP ou non) mais il doit toujours produire un script PHP valide parce qu'il sera traité sur le serveur local. Si le fichier du serveur distant doit être traité sur place et affiché seulement, readfile() est une fonction beaucoup plus appropriée. Autrement, vous devriez bien faire attention à sécuriser le script distant afin qu'il produise un code valide et désiré.

Voir aussi travailler avec les fichiers distants, fopen() et file() pour des informations relatives.

Gestion du retour : il est possible d'exécuter une commande return dans un fichier inclus pour en terminer le traitement et retourner au fichier appelant. De plus, il est possible de retourner des valeurs des fichiers inclus. Vous pouvez prendre et traiter la valeur retournée par la fonction, comme toute autre fonction. Ce n'est cependant pas possible lors de l'inclusion de fichier distant à moins que le fichier distant ait des balises valides de début et de fin de script PHP (comme avec les fichiers locaux). Vous pouvez déclarer les variables nécessaires dans ces tags et elles seront introduites à l'endroit où le fichier a été inclus.

Comme include est une structure de langage particulière, les parenthèses ne sont pas nécessaires autour de l'argument. Faites attention lorsque vous comparez la valeur retournée.

Exemple #4 Comparaison de la valeur de retour d'une inclusion

<?php
// Ne fonctionne pas, évalué comme include(('vars.php') == 'OK'), i.e. include('')
if (include('vars.php') == 'OK') {
    echo 
'OK';
}

// Fonctionne
if ((include 'vars.php') == 'OK') {
    echo 
'OK';
}
?>

Exemple #5 include et return

return.php
<?php

$var 
'PHP';

return 
$var;

?>

noreturn.php
<?php

$var 
'PHP';

?>

testreturns.php
<?php

$foo 
= include 'return.php';

echo 
$foo// affiche 'PHP'

$bar = include 'noreturn.php';

echo 
$bar// affiche 1

?>

$bar a la valeur de 1 car l'inclusion était réussie. Notez la différence entre les deux exemples ci-dessus. Le premier utilise la commande return dans le fichier inclus, alors que le second ne le fait pas. Si le fichier ne peut être inclus, FALSE est retourné et une erreur de niveau E_WARNING est envoyée.

S'il y a des fonctions définies dans le fichier inclus, elles peuvent être utilisées dans le fichier principal si elles sont avant le return ou après. Si le fichier est inclus deux fois, PHP 5 enverra une erreur fatale car les fonctions seront déjà déclarées, alors que PHP 4 ne dira rien sur les fonctions définies après return. Il est recommandé d'utiliser include_once au lieu de vérifier si le fichier a déjà été inclus et donc de retourner conditionnellement l'inclusion du fichier.

Une autre façon d'inclure un fichier PHP dans une variable est de capturer la sortie en utilisant les fonctions de contrôle de sortie avec include. Par exemple :

Exemple #6 Utilisation de la sortie du buffer pour inclure un fichier PHP dans une chaîne

<?php
$string 
get_include_contents('somefile.php');

function 
get_include_contents($filename) {
    if (
is_file($filename)) {
        
ob_start();
        include 
$filename;
        return 
ob_get_clean();
    }
    return 
false;
}

?>

Pour automatiquement inclure des fichiers dans vos scripts, voyez également les options de configuration auto_prepend_file et auto_append_file du php.ini.

Note: Comme ceci est une structure du langage, et non pas une fonction, il n'est pas possible de l'appeler avec les fonctions variables.

Voir aussi require, require_once, include_once, get_included_files(), readfile(), virtual(), et include_path.



require_once

(PHP 4, PHP 5)

L'instruction require_once est identique à require mise à part que PHP vérifie si le fichier a déjà été inclus et si c'est le cas, ne l'inclut pas une deuxième fois.

Voir la documention de include_once pour plus d'informations concernant le comportement de _once, et ce qui le différencie des instructions sans _once.



include_once

(PHP 4, PHP 5)

La structure include_once inclut et évalue le fichier spécifié durant l'exécution du script. Le comportement est similaire à include, mais la différence est que si le code a déjà été inclus, il ne le sera pas une seconde fois.

La structure include_once est utilisée de préférence lorsque le fichier va être inclus ou évalué plusieurs fois dans un script, ou bien lorsque vous voulez être sûr qu'il ne sera inclus qu'une seule fois, pour éviter des redéfinitions de fonctions ou de classes.

Voyez la structure include pour plus de détails sur son fonctionnement.

Note:

En PHP 4, la fonctionnalité _once diffère avec les systèmes insensibles à la casse (comme Windows).

Exemple #1 include_once avec un OS insensible à la casse en PHP 4

<?php
include_once "a.php"// ceci inclut le fichier a.php
include_once "A.php"// ceci inclut encore le fichier a.php! (uniquement en PHP 4)
?>

Ce comportement a changé en PHP 5 : le chemin est normalisé d'abord, donc, le fichier C:\PROGRA~1\A.php est reconnu comme étant identique au fichier C:\Program Files\a.php et le fichier ne sera inclus qu'une seule fois.



goto

(PHP 5 >= 5.3.0)

L'opérateur goto peut être utilisé pour continuer l'exécution du script à un autre point du programme. La cible est spécifiée par un label, suivi de deux-point, et l'instruction goto est ensuite suivie de ce label. goto n'est pas totalement sans limitations. L'étiquette cible doit être dans le même contexte et fichier, ce qui signifie qu'il n'est pas possible de changer de méthode ou de fonction, ni de se rendre dans une autre fonction. Vous pouvez sortir d'une fonction, et l'utilisation courante est alors de se servir de goto comme un break.

Exemple #1 Exemple avec goto

<?php
goto a;
echo 
'Foo';
 
a:
echo 
'Bar';
?>

L'exemple ci-dessus va afficher :

Bar

Exemple #2 Exemple de boucle avec goto

<?php
for($i=0,$j=50$i<100$i++) {
  while(
$j--) {
    if(
$j==17) goto end
  }  
}
echo 
"i = $i";
end:
echo 
'j hit 17';
?>

L'exemple ci-dessus va afficher :

j hit 17

Exemple #3 Ce goto ne fonctionne pas

<?php
goto loop;
for(
$i=0,$j=50$i<100$i++) {
  while(
$j--) {
    
loop:
  }
}
echo 
"$i = $i";
?>

L'exemple ci-dessus va afficher :

Fatal error: 'goto' into loop or switch statement is disallowed in
script on line 2

Note:

L'opérateur goto est disponible depuis PHP 5.3.

Quelle est la chose la plus bizarre lors de l'utilisation de goto ?
Image gracieuseté de » xkcd




Les fonctions

Sommaire


Les fonctions définies par l'utilisateur

Une fonction peut être définie en utilisant la syntaxe suivante :

Exemple #1 Pseudo code pour illustrer l'usage d'une fonction

<?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 des définitions de classe.

Les noms de fonctions suivent les mêmes règles que les autres labels en PHP. Un nom de fonction valide commence par une lettre ou un souligné, suivi par un nombre quelconque de lettres, de nombres ou de soulignés. Ces règles peuvent être représentées par l'expression rationnelle suivante : [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.

Astuce

Vous pourriez également avoir besoin de jeter un oeil sur Guide de nommage de l'espace utilisateur.

Les fonctions n'ont pas besoin d'être définies avant d'être utilisées, SAUF lorsqu'une fonction est définie conditionnellement, comme montré dans les deux exemples suivants.

Lorsqu'une fonction est définie de manière conditionnelle, comme dans les exemples ci-dessous, leur définition doit précéder leur utilisation.

Exemple #2 Fonctions conditionnelles

<?php

$makefoo 
true;

/* Impossible d'appeler foo() ici,
   car cette fonction n'existe pas.
   Mais nous pouvons utiliser bar() */

bar();

if (
$makefoo) {
  function 
foo()
  {
    echo 
"Je n'existe pas tant que le programme n'est pas passé ici.\n";
  }
}

/* Maitenant, nous pouvons appeler foo()
   car $makefoo est maintenant vrai */

if ($makefoofoo();

function 
bar()
{
  echo 
"J'existe dès de début du programme.\n";
}

?>

Exemple #3 Fonctions dans une autre fonction

<?php
function foo() 
{
  function 
bar() 
  {
    echo 
"Je n'existe pas tant que foo() n'est pas appelé.\n";
  }
}

/* Impossible d'appeler bar() ici
   car il n'existe pas. */

foo();

/* Maintenant, nous pouvons appeler bar(),
   car l'utilisation de foo() l'a rendue
   accessible. */

bar();

?>

Toutes les fonctions et classes en PHP ont une portée globale - elles peuvent être appelées à l'extérieur d'une fonction si elles ont été définies à l'intérieur et vice-versa.

PHP ne supporte pas le surchargement de fonction, ni la destruction ou la redéfinition de fonctions déjà déclarées.

Note: Les noms de fonctions sont insensibles à la casse, et il est généralement admis que les fonctions doivent être appelées avec le nom utilisé dans leur déclaration, y compris la casse.

Les listes variables d'arguments de fonction et les valeurs par défaut d'arguments sont supportés : voir les fonctions de références que sont func_num_args(), func_get_arg(), et func_get_args() pour plus d'informations.

Il est possible d'appeler des fonctions récursives en PHP. Cependant, les appels de méthodes/fonctions récursives avec 100-200 degrés de récursivité peuvent remplir la pile et ainsi, terminer le script courant.

Exemple #4 Fonctions récursives

<?php
function recursion($a)
{
    if (
$a 20) {
        echo 
"$a\n";
        
recursion($a 1);
    }
}

recursion(3);
?>



Les arguments de fonction

Des informations peuvent être passées à une fonction en utilisant une liste d'arguments, dont chaque expression est séparée par une virgule. Les arguments seront évalués depuis la gauche vers la droite.

PHP supporte le passage d'arguments par valeur (comportement par défaut), le passage par référence, et des valeurs d'arguments par défaut. Une liste variable d'arguments est également supportée, voir la documentation sur les fonctions func_num_args(), func_get_arg(), et func_get_args() pour plus d'informations.

Exemple #1 Nombre variable d'argument sous forme de tableau

<?php
function takes_array($input)
{
    echo 
"$input[0] + $input[1] = "$input[0]+$input[1];
}

takes_array(array(2,3));
?>

Passage d'arguments par référence

Par défaut, les arguments sont passés à la fonction par valeur (Ainsi changer la valeur d'un argument dans la fonction ne change pas sa valeur à l'extérieur de la fonction). Si vous voulez que vos fonctions puissent changer la valeur des arguments, vous devez passer ces arguments par référence.

Si vous voulez qu'un argument soit toujours passé par référence, vous pouvez ajouter un '&' devant l'argument dans la déclaration de la fonction :

Exemple #2 Passage d'arguments par référence

<?php
function add_some_extra(&$string)
{
    
$string .= ', et un peu plus.';
}
$str 'Ceci est une chaîne';
add_some_extra($str);
echo 
$str;  
?>

Valeur par défaut des arguments

Vous pouvez définir comme en C++ des valeurs par défaut pour les arguments de type scalaire :

Exemple #3 Valeur par défaut des arguments de fonctions

<?php
function servir_cafe ($type "cappuccino")
{
    return 
"Servir un $type.\n";
}
echo 
servir_cafe();
echo 
servir_cafe(null);
echo 
servir_cafe("espresso");
?>

L'exemple ci-dessus va afficher :

Servir un cappuccino.
Servir un.
Servir un espresso.

PHP vous autorise à utiliser des tableau ainsi que le type spécial NULL comme valeur par défaut, par exemple :

Exemple #4 Utilisation de type non scalaire comme valeur par défaut

<?php
function servir_cafe($types = array("cappuccino"), $coffeeMaker NULL)
{
    
$device is_null($coffeeMaker) ? "les mains" $coffeeMaker;
    return 
"Préparation d'une tasse de ".join(", "$types)." avec $device.\n";
}
echo 
servir_cafe();
echo 
servir_cafe(array("cappuccino""lavazza"), "une cafetière");
?>

La valeur par défaut d'un argument doit obligatoirement être une constante, et ne peut être ni une variable, ni un membre de classe, ni un appel de fonction.

Il est à noter que si vous utilisez des arguments avec valeur par défaut avec d'autres sans valeur par défaut, les premiers doivent être placés à la suite de tous les paramètres sans valeur par défaut. Sinon, cela ne fonctionnera pas. Considérons le code suivant :

Exemple #5 Les arguments à valeur par défaut doivent être en premiers : erreur

<?php
function faireunyaourt ($type "acidophilus"$flavour)
{
    return 
"Préparer un bol de $type $flavour.\n";
}
 
echo 
faireunyaourt("framboise");   // ne fonctionne pas comme voulu
?>

L'exemple ci-dessus va afficher :

Warning: Missing argument 2 in call to makeyogurt() in 
/usr/local/etc/httpd/htdocs/phptest/functest.html on line 41
Préparer un bol de framboise .

Maintenant comparons l'exemple précédent avec l'exemple suivant :

Exemple #6 Les arguments à valeur par défaut doivent être en premiers : valide

<?php
function faireunyaourt ($flavour$type "acidophilus")
{
    return 
"Préparer un bol de $type $flavour.\n";
}
 
echo 
faireunyaourt ("framboise");   // fonctionne comme voulu
?>

L'exemple ci-dessus va afficher :

Préparer un bol de acidophilus framboise.

Note: Les valeurs par défaut peuvent être passées par référence.

Nombre d'arguments variable

PHP 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'arguments doit toujours être fournie explicitement avec la définition de la fonction, et se comportera normalement.



Les valeurs de retour

Les valeurs sont renvoyées en utilisant une instruction de retour optionnelle. Tous les types de variables peuvent être renvoyés, tableaux et objets compris. Cela fait que la fonction finit son exécution immédiatement et passe le contrôle à la ligne appelante. Voir return pour plus d'informations.

Note:

Si return est omis, la valeur NULL sera retournée.

Exemple #1 Utilisation de return

<?php
function carre ($num)
{
    return 
$num $num;
}
echo 
carre (4);
?>

Une fonction ne peut pas renvoyer plusieurs valeurs en même temps, mais vous pouvez obtenir le même résultat en renvoyant un tableau.

Exemple #2 Retourner un tableau d'une fonction

<?php
function petit_nombre()
{
    return array (
012);
}
list (
$zero$un$deux) = petit_nombre();
var_dump($zero$un$deux);
?>

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

Exemple #3 Retourner une référence d'une fonction

<?php
function &retourne_reference()
{
    return 
$uneref;
}

$newref =& retourne_reference();
?>

Pour plus d'informations sur les références, référez-vous à l'explication sur les références.



Fonctions variables

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 autres, pour faire des fonctions de rappel, des tables de fonctions...

Les fonctions variables ne peuvent pas fonctionner avec les éléments de langage comme les echo, print, unset(), isset(), empty(), include, require etc. Vous devez utiliser votre propre gestion de fonctions pour utiliser un de ces éléments de langages comme fonctions variables.

Exemple #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";
}

// Ceci est une fonction détournée de echo
function echoit($string)
{
    echo 
$string;
}

$func 'foo';
$func();        // Appel foo()

$func 'bar';
$func('test');  // Appel bar()

$func 'echoit';
$func('test');  // Appel echoit()
?>

Vous pouvez aussi appeler une méthode d'un objet en utilisant le système des fonctions variables.

Exemple #2 Exemple de méthode variable

<?php
class Foo
{
    function 
Variable()
    {
        
$name 'Bar';
        
$this->$name(); // Appelle la méthode Bar()
    
}
    
    function 
Bar()
    {
        echo 
"C'est Bar";
    }
}

$foo = new Foo();
$funcname "Variable";
$foo->$funcname();  // Appelle $foo->Variable()

?>

Lors de l'appel à des méthodes statiques, l'appel fonction est meilleur que l'opérateur de propriété statique :

Exemple #3 Exemple de méthode variable avec des propriétés statiques

<?php
class Foo
{
    static 
$variable 'static property';
    static function 
Variable()
    {
        echo 
'Method Variable called';
    }
}

echo 
Foo::$variable// Ceci affiche 'static property'. Il est nécessaire d'avoir une $variable dans le contexte.
$variable "Variable";
Foo::$variable();  // Ceci appelle $foo->Variable(), lisant ainsi la $variable depuis le contexte.

?>

Voir aussi call_user_func(), les variables variables et function_exists().



Fonctions internes

PHP dispose de nombreuses fonctions et structures standards. Il y a aussi des fonctions qui requièrent des extensions spécifiques de PHP, sans lesquelles vous obtiendrez l'erreur fatale undefined function. Par exemple, pour utiliser les fonctions d'images, telles que imagecreatetruecolor(), vous aurez besoin du support de GD dans PHP. Ou bien, pour utiliser mysql_connect(), vous aurez besoin de l'extension MySQL. Il y a des fonctions de base qui sont incluses dans toutes les versions de PHP, telles que les fonctions de chaînes de caractères et les fonctions de variables. Utilisez phpinfo() ou get_loaded_extensions() pour savoir quelles sont les extensions qui sont compilées avec votre PHP. Notez aussi que de nombreuses extensions sont activées par défaut, et que le manuel PHP est compartimenté par extension. Voyez les chapitres de configuration, installation ainsi que les détails particuliers à chaque extension, pour savoir comment les mettre en place.

Lire et comprendre le prototype d'une fonction est décrit dans l'annexe Comment lire la définition d'une fonction (prototype). Il est important de comprendre ce qu'une fonction retourne, ou si une fonction travaille directement sur la valeur des paramètres fournis. Par exemple, str_replace() va retourner une chaîne modifiée, tandis que usort() travaille directement sur la variable passée en paramètre. Chaque page du manuel a des informations spécifiques sur chaque fonction, comme le nombre de paramètres, les évolutions de spécifications, les valeurs retournées en cas de succès ou d'échec, et la disponibilité en fonction des versions. Bien connaître ces différences, parfois subtiles, est crucial pour bien programmer en PHP.

Note: Si les paramètres donnés à une fonction ne sont pas corrects, comme le fait de passer un tableau alors qu'une chaîne de caractères est attendue, la valeur retournée de la fonction est indéfinie. Dans ce cas, la fonction retournera la plupart du temps une valeur NULL mais ce n'est juste qu'une convention et ne peut être considéré comme une certitude.

Voir aussi function_exists(), l'index des fonctions, get_extension_funcs() et dl().



Fonctions anonymes

Les fonctions anonymes, aussi appelées fermetures ou closures permettent la création de fonctions sans préciser leur nom. Elles sont particulièrement utiles comme fonctions de rappel, mais leur utilisation n'est pas limitée à ce seul usage.

Exemple #1 Exemples avec des fonctions anonymes

<?php
echo preg_replace_callback('~-([a-z])~', function ($match) {
    return 
strtoupper($match[1]);
}, 
'bonjour-le-monde');
?>

Les fonctions anonymes peuvent aussi être utilisées comme valeurs de variables. PHP va automatiquement convertir ces expressions en objets Closure. Assigner une fermeture à une variable est la même chose qu'un assignement classique, y compris pour le point-virgule final.

Exemple #2 Assignation de fonction anonyme à une variable

<?php
$greet 
= function($name)
{
    
printf("Bonjour %s\r\n"$name);
};

$greet('World');
$greet('PHP');
?>

Les fonctions anonymes peuvent hériter des variables du contexte de leur parent. Ces variables doivent alors être déclarées dans la signature de la fonction. L'héritage du contexte parent n'est pas la même chose que les variables de l'environnement global. Les variables globales existent dans le contexte global, qui est le même, quelle que que soit la fonction qui s'exécute. Le contexte parent d'une fonction anonyme est la fonction dans laquelle la fonction a été déclarée (pas nécessairement celle qui appelle). Voyez l'exemple ci-dessous :

Exemple #3 Fonctions anonymes et contexte

<?php
// Un panier d'achat simple, qui contient une liste de produits
// choisis et la quantité désirée de chaque produit. Il inclut
// une méthode qui calcule le prix total des éléments dans le panier
// en utilisant une fonction de rappel anonyme.
class Panier
{
    const 
PRICE_BEURRE  1.00;
    const 
PRICE_LAIT    3.00;
    const 
PRICE_OEUF    6.95;

    protected 
$products = array();
    
    public function 
add($product$quantity)
    {
        
$this->products[$product] = $quantity;
    }
    
    public function 
getQuantity($product)
    {
        return isset(
$this->products[$product]) ? $this->products[$product] :
               
FALSE;
    }
    
    public function 
getTotal($tax)
    {
        
$total 0.00;
        
        
$callback =
            function (
$quantity$product) use ($tax, &$total)
            {
                
$pricePerItem constant(__CLASS__ "::PRICE_" .
                    
strtoupper($product));
                
$total += ($pricePerItem $quantity) * ($tax 1.0);
            };
        
        
array_walk($this->products$callback);
        return 
round($total2);
    }
}

$mon_panier = new Panier;

// Ajout d'élément au panier
$mon_panier->add('beurre'1);
$mon_panier->add('lait'3);
$mon_panier->add('oeuf'6);

// Affichage du prix avec 5.5% de TVA
print $mon_panier->getTotal(0.055) . "\n";
?>

Les fonctions anonymes sont implémentées en utilisant la classe Closure.

Historique

Version Description
5.4.0 $this peut désormais être utilisé dans les fonctions anonymes.
5.3.0 Les fonctions anonymes deviennent disponibles.

Notes

Note: Il est possible d'utiliser les fonctions func_num_args(), func_get_arg() et func_get_args() dans une fonction anonyme.




Les classes et les objets

Sommaire


Introduction

Depuis PHP 5, le modèle objet a été réécrit pour permettre de meilleures performances et offrir plus de fonctionnalités. Cette réécriture a été une des modifications majeures par rapport à PHP 4. PHP 5 a donc un modèle objet complet.

Parmi les fonctionnalités offertes par PHP 5, on peut citer la visibilité dans les classes, les classes abstract et les classes final mais aussi les méthodes magiques, les interfaces, le clônage et le typage (typehinting).

PHP gère les objets de la même façon, qu'ils soient des références ou des gestionnaires, ce qui signifie que chaque variable contient une référence vers l'objet plutôt qu'une copie de l'objet complet. Reportez-vous à la documentation Objets et Références pour plus de détails.

Astuce

Vous pourriez également avoir besoin de jeter un oeil sur Guide de nommage de l'espace utilisateur.



Syntaxe de base

classes

Une définition de classe basique commence par le mot-clé class, suivi du nom de la classe. Suit une paire d'accolades contenant la définition des propriétés et des méthodes.

Le nom de la classe peut être quelconque à condition que ce ne soit pas un mot réservé en PHP. Un nom de classe valide commence par une lettre ou un underscore, suivi de nombres ou de lettres ou d'underscores. Si on devait l'exprimer sous forme d'expression régulière, il s'agirait de [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.

Une classe peut contenir ses propres constantes, variables (appelées "propriétés" ou "attributs"), et fonctions (appelées "méthodes").

Exemple #1 Définition typique d'une classe

<?php
class SimpleClass
{
    
// déclaration des propriétés
    
public $var 'a default value';

    
// déclaration des méthodes
    
public function displayVar() {
        echo 
$this->var;
    }
}
?>

Une pseudo-variable $this est disponible lorsqu'une méthode est appelée depuis un contexte objet. $this est une référence à l'objet appelé (habituellement, l'objet auquel la méthode appartient, mais ce peut être un autre objet si la méthode est appelée de manière statique depuis le contexte d'un autre objet).

Exemple #2 Quelques exemples de la pseudo-variable $this

<?php
class A
{
  function 
toto()
  {
    if (isset(
$this)) {
      echo 
'$this est définie (';
      echo 
get_class($this);
      echo 
")\n";
    } else {
      echo 
"\$this n'est pas définie.\n";
    }
  }
}

class 
B
{
  function 
titi()
  {
    
// Note: la ligne suivante émet une erreur si E_STRICT est activé.
    
A::toto();
  }
}

$a = new A();
$a->toto();

// Note: la ligne suivante émet une erreur si E_STRICT est activé.
A::toto();
$b = new B();
$b->titi();

// Note: la ligne suivante émet une erreur si E_STRICT est activé.
B::titi();
?>

L'exemple ci-dessus va afficher :

$this est définie (A)
$this n'est pas définie.
$this est définie (B)
$this n'est pas définie.

Le mot-clé new

Pour créer une instance d'une classe, le mot-clé new doit être utilisé. Un objet sera alors créé à moins qu'il ait un constructeur défini qui lance une exception en cas d'erreur. Les classes doivent être définies avant l'instanciation (dans certains cas, c'est impératif).

Si une chaîne de caractères contenant un nom de classe est utilisée avec new, une nouvelle instance de cette classe sera créée. Si elle est dans un espace de noms, son nom pleinement qualifié doit être utilisé.

Exemple #3 Création d'une instance

<?php
$instance 
= new SimpleClass();

// Ceci peut également être réalisé avec une variable :
$className 'Foo';
$instance = new $className(); // Foo()
?>

Dans le contexte de la classe, il est possible de créer un nouvel objet avec new self et new parent.

Lors de l'assignation d'une instance déjà créée d'une classe à une variable, la nouvelle variable accédera à la même instance de l'objet assigné. Ce comportement est le même que lors du passage d'une instance à une fonction. Une copie d'un objet déjà créé peut être effectuée par clonage.

Exemple #4 Assignation d'un objet

<?php

$instance 
= new SimpleClass();

$assigned   =  $instance;
$reference  =& $instance;

$instance->var '$assigned aura cette valeur';

$instance null// $instance et $reference deviennent null

var_dump($instance);
var_dump($reference);
var_dump($assigned);
?>

L'exemple ci-dessus va afficher :

NULL
NULL
object(SimpleClass)#1 (1) {
   ["var"]=>
     string(30) "$assigned aura cette valeur"
}

PHP 5.3.0 a introduit de nouvelles manières de créer des objets:

Exemple #5 Créer de nouveaux objets

<?php
class Test
{
    static public function 
getNew()
    {
        return new static;
    }
}

class 
Child extends Test
{}

$obj1 = new Test();
$obj2 = new $obj1;
var_dump($obj1 !== $obj2);

$obj3 Test::getNew();
var_dump($obj3 instanceof Test);

$obj4 Child::getNew();
var_dump($obj4 instanceof Child);
?>

L'exemple ci-dessus va afficher :

bool(true)
bool(true)
bool(true)

Le mot-clé extends

Une classe peut hériter des méthodes et des membres d'une autre classe en utilisant le mot-clé extends dans la déclaration. Il n'est pas possible d'étendre de multiples classes : une classe peut uniquement hériter d'une seule classe de base.

Les méthodes et membres hérités peuvent être surchargés en les redéclarant avec le même nom que dans la classe parente. Cependant, si la classe parente a défini la méthode comme final, alors celle-ci ne sera pas surchargeable. Il est possible d'accéder à une méthode ou un membre parent avec l'opérateur parent::

Lors de la surcharge de méthodes, la signature devrait rester la même sinon PHP génèrera une erreur de niveau E_STRICT. Ceci ne s'applique pas au constructeur, qui accepte la surcharge avec des paramètres différents.

Exemple #6 Héritage d'une classe simple

<?php
class ExtendClass extends SimpleClass
{
  
// Redéfinition de la méthode parente
  
function displayVar()
  {
    echo 
"Classe étendue\n";
    
parent::displayVar();
  }
}

$extended = new ExtendClass();
$extended->displayVar();
?>

L'exemple ci-dessus va afficher :

Classe étendue
une valeur par défaut


Propriétés

Les variables au sein d'une classe sont appelées "propriétés". On peut également les retrouver sous la dénomination "attributs", "membres" ou "champs", mais nous conservervons l'appellation "propriété" pour cette documentation. Elles sont définies en utilisant un des mots-clés public, protected ou private, suivi d'une déclaration classique de variable. Cette déclaration peut être une initialisation, alors elle doit être initialisée à une valeur constante, c'est à dire que cette valeur doit pouvoir être évaluée durant la compilation et ne pas dépendre de l'exécution du code pour pouvoir être évaluée.

Voir Visibilité pour plus d'informations sur la signification public, protected et private.

Note:

Afin de maintenir la rétrocompatibilité avec PHP 4, PHP 5 continue d'accepter l'usage du mot-clé var pour la déclaration de propriétés en remplacement de (ou avec) public, protected et private. Cependant, var n'est plus requis par le modèle objet de PHP 5. Des versions PHP 5.0 à 5.1.3, l'usage de var était considéré comme obsolète et déclenchait un avertissement de niveau E_STRICT, mais depuis PHP 5.1.3 l'usage n'est plus obsolète et ne déclenche plus d'avertissement.

Si vous déclarez une propriété en utilisant var au lieu de public, protected ou private, alors PHP 5 traitera la propriété comme public.

Au sein des méthodes de classes, les propriétés, constantes et méthodes peuvent être appellées en utilisant la forme $this->property (où property est le nom de la propriété), à moins que l'appel se fasse sur une propriété statique dans une méthode de classe statique, auquel cas l'accès se fait en utilisant la forme self::$property. Voir Statique pour plus d'informations.

La pseudo-variable $this est disponible au sein de n'importe quelle méthode lorsque cette méthode est appelée depuis un objet. $this est une référence à l'objet appelant (en général l'objet auquel la méthode appartient, ou un autre objet si la méthode est appelée de façon statique depuis un autre objet).

Exemple #1 Déclarations de propriétés

<?php
class SimpleClass
{
   
// Déclarations invalides de propriété:
   
public $var1 'hello ' 'world';
   public 
$var2 1+2;
   public 
$var3 self::myStaticMethod();
   public 
$var4 $myVar;

   
// Déclarations valides de propriétés;
   
public $var5 myConstant;
   public 
$var6 = array(truefalse);

   
// Autorisé depuis PHP 5.3.0
   
public $var7 = <<<EOD
hello world
EOD;
}
?>

Note:

Il existe des fonctions qui permettent de gérer des classes et des objets. Voir Fonctions Classes/Objets.

Comme la syntaxe heredoc, la syntaxe nowdoc peut être utilisée dans n'importe quel contexte statique, y compris la déclaration de propriétés.

Exemple #2 Exemple d'utilisation de la syntaxe nowdoc pour initialiser une propriété

<?php
class foo {
   
// Depuis PHP 5.3.0
   
public $bar = <<<'EOT'
bar
EOT;
}
?>

Note:

Le support de la syntaxe nowdoc à été ajouté à PHP 5.3.0.



Constantes de classe

Il est possible de définir des valeurs constantes à l'intérieur d'une classe, qui ne seront pas modifiables. Les constantes diffèrent des variables normales du fait qu'on n'utilise pas le symbole $ pour les déclarer ou les utiliser.

La valeur doit être une expression constante, pas (par exemple) une variable, une propriété, le résultat d'une opération mathématique ou un appel de fonction.

Il est aussi possible pour les interfaces d'avoir des constantes. Regardez la documentation des interfaces pour quelques exemples.

Depuis PHP 5.3.0, il est possible de référencer une classe en utilisant une variable. La valeur de la variable ne peut être un mot-clé (e.g. self, parent et static).

Exemple #1 Définition et utilisation d'une constante de classe

<?php
class MyClass
{
  const 
constant 'valeur constante';

  function 
showConstant() {
    echo  
self::constant "\n";
  }
}

echo 
MyClass::constant "\n";

$classname "MyClass";
echo 
$classname::constant "\n"// Depuis PHP 5.3.0

$class = new MyClass();
$class->showConstant();

echo 
$class::constant."\n"// Depuis PHP 5.3.0
?>

Exemple #2 Exemple de données statiques

<?php
class foo {
    
// Depuis PHP 5.3.0
    
const bar = <<<'EOT'
bar
EOT;
}
?>

Tout comme heredocs, nowdocs peut être utilisée dans n'importe quel contexte de données statiques.

Note:

Le support de Nowdoc a été ajouté en PHP 5.3.0.



Auto-chargement de classes

De nombreux développeurs qui créent des applications orientées objet, créent un fichier source par définition de classe. L'inconvénient majeur de cette méthode est d'avoir à écrire une longue liste d'inclusions de fichier de classes au début de chaque script : une inclusion par classe.

En PHP 5, ce n'est plus nécessaire. Vous pouvez définir la fonction __autoload() qui va automatiquement être appelée si une classe n'est pas encore définie au moment de son utilisation. Grâce à elle, vous avez une dernière chance pour inclure une définition de classe, avant que PHP ne lance une erreur.

Astuce

La fonction spl_autoload_register() fournit une alternative plus flexible pour le chargement automatique des classes. Pour cette raison, l'utilisation de la fonction __autoload() n'est plus encouragé et devrait devenir obsolète, voire être supprimée dans le futur.

Note:

Avant PHP 5.3.0, les exceptions lancées depuis la fonction __autoload ne pouvaient pas être interceptées par un bloc catch et provoquaient une erreur fatale. Depuis PHP 5.3.0+, elles peuvent être interceptées danscatch, à une précision près : Si vous lancez une exception personnalisée, alors la classe de cette exception doit être disponible. La fonction __autoload doit pouvoir être utilisée récursivement pour charger automatiquement la classe de l'exception personnalisée.

Note:

L'auto-chargement n'est pas disponible si vous utilisez PHP en mode interactif CLI.

Note:

Si le nom de la classe est utilisé, e.g. dans la fonction call_user_func(), alors il peut contenir des caractères dangereux comme ../. Il est recommandé de ne pas utiliser d'entrées utilisateur dans de telle fonction, ou, au moins, vérifier l'entrée dans la fonction __autoload().

Exemple #1 Exemple avec __autoload()

Cet exemple tente de charger les classes MaClasse1 et MaClasse2, dans les fichiers MaClasse1.php et MaClasse2.php respectivement.

<?php
function __autoload($class_name) {
    include 
$class_name '.php';
}

$obj  = new MaClasse1();
$obj2 = new MaClasse2();
?>

Exemple #2 Autre exemple d'auto-chargement

Cet exemple tente de charger l'interface ITest.

<?php

function __autoload($name) {
    
var_dump($name);
}

class 
Foo implements ITest {
}

/*
string(5) "ITest"

Fatal error: Interface 'ITest' not found in ...
*/
?>

Exemple #3 Auto-chargement avec gestion des exceptions en PHP 5.3.0+

Cet exemple lance une exception et montre comment la traiter avec les blocs try/catch.

<?php
function __autoload($name) {
    echo 
"Tentative de chargement de $name.\n";
    throw new 
Exception("Impossible de charger $name.");
}

try {
    
$obj = new NonLoadableClass();
} catch (
Exception $e) {
    echo 
$e->getMessage(), "\n";
}
?>

L'exemple ci-dessus va afficher :

Tentative de chargement de NonLoadableClass.
Impossible de charger NonLoadableClass.

Exemple #4 Auto-chargement avec gestion des exceptions en PHP 5.3.0+. Pas d'exception personnalisée

Cet exemple lance une exception pour une classe non-chargeable, en utilisant une exception personnalisée.

<?php
function __autoload($name) {
    echo 
"Tentative de chargement de $name.\n";
    throw new 
MissingException("Impossible de charger $name.");
}

try {
    
$obj = new NonLoadableClass();
} catch (
Exception $e) {
    echo 
$e->getMessage(), "\n";
}
?>

L'exemple ci-dessus va afficher :

Tentative de chargement de NonLoadableClass.
Tentative de chargement de MissingException.

Fatal error: Class 'MissingException' not found in testMissingException.php on line 4



Constructeurs et destructeurs

Constructeurs

void __construct ([ mixed $args [, $... ]] )

PHP permet aux développeurs de déclarer des constructeurs pour les classes. Les classes qui possèdent une méthode constructeur appellent cette méthode à chaque création d'une nouvelle instance de l'objet, ce qui est intéressant pour toutes les initialisations dont l'objet a besoin avant d'être utilisé.

Note: Les constructeurs parents ne sont pas appelés implicitement si la classe enfant définit un constructeur. Si vous voulez utiliser un constructeur parent, il sera nécessaire de faire appel à parent::__construct().

Exemple #1 Exemple d'utilisation des nouveaux constructeurs unifiés

<?php
class BaseClass {
    function 
__construct() {
        print 
"In BaseClass constructor\n";
    }
}

class 
SubClass extends BaseClass {
    function 
__construct() {
        
parent::__construct();
        print 
"In SubClass constructor\n";
    }
}

$obj = new BaseClass();
$obj = new SubClass();
?>

Pour des raisons de compatibilité ascendante, si PHP ne peut pas trouver une fonction __construct() pour une classe donnée, il cherchera une fonction constructeur représentée, comme dans l'ancien style (PHP < 5), par le nom de la classe. Effectivement, cela signifie que le seul cas où il pourrait y avoir un problème de compatibilité est celui où votre classe contiendrait une méthode nommée __construct() et que vous en ayez un autre usage.

A la différence des autres méthodes, PHP ne génèrera pas d'erreur de niveau E_STRICT lorsque __construct() est surchargé avec des paramètres différents du __construct() parent.

Depuis PHP 5.3.3, les méthodes ayant le même nom que la classe dans laquelle elle se trouve ne sont plus traitées comme des constructeur, si la classe considérée se situe dans un espace de noms. Ceci n'affecte pas les classes sans espace de noms.

Exemple #2 Constructeurs dans les classes dans des espaces de noms

<?php
namespace Foo;
class 
Bar {
    public function 
Bar() {
        
// Traitée comme un constructeur dans PHP 5.3.0-5.3.2
        // Traitée comme une méthode normale depuis PHP 5.3.3
    
}
}
?>

Destructor

void __destruct ( void )

PHP 5 introduit un concept de destructeur similaire aux autres langages orientés objet, comme le C++. La méthode destructeur est appelée dès qu'il n'y a plus d'autres références sur des objets, ou dans n'importe quel ordre de la séquence d'arrêt.

Exemple #3 Exemple avec un Destructeur

<?php
class MyDestructableClass {
    function 
__construct() {
        print 
"In constructor\n";
        
$this->name "MyDestructableClass";
    }

    function 
__destruct() {
        print 
"Destruction de " $this->name "\n";
    }
}

$obj = new MyDestructableClass();
?>

Tout comme le constructeur, le destructeur parent n'est pas appelé implicitement par le moteur. Pour exécuter le destructeur parent, vous devez appeler explicitement la fonction parent::__destruct dans le corps du destructeur.

Le destructeur sera appelé même si l'exécution du script est stoppé en utilisant la fonction exit(). Appeler la fonction exit() dans un destructeur permettra de ne pas exécuter les autres routines d'arrêt.

Note:

Les destructeurs appelées durant l'arrêt du script ont déjà envoyés les en-têtes HTTP. Le dossier de travail dans la phase du script d'arrêt peut être différent avec d'autres APIs (e.g. Apache).

Note:

Tenter de lancer une exception depuis un destructeur (appelé à la fin du script) émet une erreur fatale.



Visibilité

La visibilité d'une propriété ou d'une méthode peut être définie en préfixant la déclaration avec un mot-clé : public, protected ou private. Les éléments déclarés publics peuvent être utilisés par n'importe quelle partie du programme. L'accès aux éléments protégés est limité aux classes et parents hérités (et à la classe qui a défini l'élément). L'accès aux éléments privés est uniquement réservé à la classe qui les a définis.

Visibilité des propriétés

Les propriétés des classes doivent être définies comme publiques, protégées ou privées. Si la propriété est déclarée avec le mot var, elle sera alors définie de façon publique.

Exemple #1 Déclaration des propriétés

<?php
/**
 * Définition de MyClass
 */
class MyClass
{
    public 
$public 'Public';
    protected 
$protected 'Protected';
    private 
$private 'Private';

    function 
printHello()
    {
        echo 
$this->public;
        echo 
$this->protected;
        echo 
$this->private;
    }
}

$obj = new MyClass();
echo 
$obj->public// Fonctionne
echo $obj->protected// Erreur fatale
echo $obj->private// Erreur fatale
$obj->printHello(); // Affiche Public, Protected et Private


/**
 * Définition de MyClass2
 */
class MyClass2 extends MyClass
{
    
// On peut redéclarer les éléments publics ou protégés, mais pas ceux privés
    
protected $protected 'Protected2';

    function 
printHello()
    {
      echo 
$this->public;
      echo 
$this->protected;
      echo 
$this->private;
   }
}

$obj2 = new MyClass2();
echo 
$obj2->public// Fonctionne
echo $obj2->private// Indéfini
echo $obj2->protected// Erreur fatale
$obj2->printHello(); // Affiche Public, Protected2 et Indéfini

?>

Note: La méthode de déclaration de variable en PHP 4 avec le mot-clé var est toujours supportée pour des raisons de compatibilité (en tant que synonyme du mot-clé public). Avant PHP 5.1.3, son utilisation génère une erreur de niveau E_STRICT.

Visibilité des méthodes

Les méthodes des classes peuvent être définies en tant que publiques, privées ou protégées. Les méthodes sans déclaration seront automatiquement définies comme étant publiques.

Exemple #2 Déclaration d'une méthode

<?php
/**
 * Définition de MyClass
 */
class MyClass
{
    
// Déclare un constructeur public
    
public function __construct() { }

    
// Déclaration d'une méthode publique
    
public function MyPublic() { }

    
// Déclaration d'une méthode protégée
    
protected function MyProtected() { }

    
// Déclaration d'une méthode privée
    
private function MyPrivate() { }

    
// Celle-ci sera publique
    
function Foo()
    {
        
$this->MyPublic();
        
$this->MyProtected();
        
$this->MyPrivate();
    }
}

$myclass = new MyClass;
$myclass->MyPublic(); // Fonctionne
$myclass->MyProtected(); // Erreur fatale
$myclass->MyPrivate(); // Erreur fatale
$myclass->Foo(); // Public, Protected et Private fonctionnent


/**
 * Définition de MyClass2
 */
class MyClass2 extends MyClass
{
    
// Celle-ci sera publique
    
function Foo2()
    {
        
$this->MyPublic();
        
$this->MyProtected();
        
$this->MyPrivate(); // Erreur fatale
    
}
}

$myclass2 = new MyClass2;
$myclass2->MyPublic(); // Fonctionne
$myclass2->Foo2(); // Public et Protected fonctionnent, non pas Private

class Bar
{
    public function 
test() {
        
$this->testPrivate();
        
$this->testPublic();
    }

    public function 
testPublic() {
        echo 
"Bar::testPublic\n";
    }

    private function 
testPrivate() {
        echo 
"Bar::testPrivate\n";
    }
}

class 
Foo extends Bar
{
    public function 
testPublic() {
        echo 
"Foo::testPublic\n";
    }

    private function 
testPrivate() {
        echo 
"Foo::testPrivate\n";
    }
}

$myFoo = new foo();
$myFoo->test(); // Bar::testPrivate
                // Foo::testPublic
?>

Visibilité depuis d'autres objets

Les objets de mêmes types ont un accès aux membres privés et protégés même s'ils ne sont pas dans la même instance. Ceci est dû au fait que les détails spécifiques de l'implémentation sont déjà connus en interne par ces objets.

Exemple #3 Accès aux membres privés d'un type d'objet identique

<?php
class Test
{
    private 
$foo;

    public function 
__construct($foo)
    {
        
$this->foo $foo;
    }

    private function 
bar()
    {
        echo 
'Accès à la méthode privée.';
    }

    public function 
baz(Test $other)
    {
        
// Nous pouvons modifier la propriété privée :
        
$other->foo 'Bonjour';
        
var_dump($other->foo);

        
// Nous pouvons également appeler la méthode privée :
        
$other->bar();
    }
}

$test = new Test('test');

$test->baz(new Test('other'));
?>

L'exemple ci-dessus va afficher :

string(5) "Bonjour"
Accès à la méthode privée.


Héritage

L'héritage fait partie des principes de la programmation orientée objet, et PHP l'implémente dans son modèle objet. L'héritage affecte les relations entre les classes et les objets.

Par exemple, lorsque vous étendez une classe, la classe fille hérite de toutes les méthodes publiques et protégées de la classe parente. Tant qu'une classe n'écrase pas ces méthodes, elles conservent leurs fonctionnalités d'origine.

L'héritage est donc très utile pour définir et abstraire certaines fonctionnalités communes à plusieurs classes, plusieurs objets, tout en permettant l'ajout de fonctionnalités propres dans les classes enfants sans réimplémenter en leur sein les fonctionnalités communes.

Note:

A moins que l'autoload ne soit utilisé, les classes doivent être connues avant d'être utilisées. Les classes mères doivent être définies avant l'écriture d'un héritage. Cette règle générale s'applique dans le cas d'héritage ou d'implémentation d'interfaces.

Exemple #1 Exemple d'héritage

<?php

class foo
{
    public function 
printItem($string)
    {
        echo 
'Foo: ' $string PHP_EOL;
    }
    
    public function 
printPHP()
    {
        echo 
'PHP est super' PHP_EOL;
    }
}

class 
bar extends foo
{
    public function 
printItem($string)
    {
        echo 
'Bar: ' $string PHP_EOL;
    }
}

$foo = new foo();
$bar = new bar();
$foo->printItem('baz'); // Affiche: 'Foo: baz'
$foo->printPHP();       // Affiche: 'PHP est super' 
$bar->printItem('baz'); // Affiche: 'Bar: baz'
$bar->printPHP();       // Affiche: 'PHP est super'

?>


L'opérateur de résolution de portée (::)

L'opérateur de résolution de portée (aussi appelé Paamayim Nekudotayim) ou, en termes plus simples, le symbole "double deux-points" (::), fournit un moyen d'accéder aux membres statics ou constants.

Lorsque vous référencez ces éléments en dehors de la définition de la classe, utilisez le nom de la classe.

Depuis PHP 5.3.0, il est possible de référencer une classe en utilisant une variable. La valeur de la variable ne peut être un mot-clé (e.g. self, parent et static).

Paamayim Nekudotayim peut sembler un choix étrange pour un double deux-points. Cependant, au moment de l'écriture du Zend Engine 0.5 (fourni avec PHP 3), c'est le nom choisi par le groupe Zend. En fait, cela signifie un double deux-points... en hébreu !

Exemple #1 :: en dehors de la définition de la classe

<?php
class MyClass {
    const 
CONST_VALUE 'Une valeur constante';
}

$classname 'MyClass';
echo 
$classname::CONST_VALUE// Depuis PHP 5.3.0

echo MyClass::CONST_VALUE;
?>

Trois mots-clé spéciaux, self, parent, et static sont utilisés pour accéder aux proriétés ou aux méthodes depuis la définition de la classe.

Exemple #2 :: depuis la définition de la classe

<?php
class OtherClass extends MyClass
{
    public static 
$my_static 'variable statique';

    public static function 
doubleColon() {
        echo 
parent::CONST_VALUE "\n";
        echo 
self::$my_static "\n";
    }
}

$classname 'OtherClass';
echo 
$classname::doubleColon(); // Depuis PHP 5.3.0

OtherClass::doubleColon();
?>

Lorsqu'une classe étendue redéfinit une méthode de la classe parente, PHP n'appellera pas la méthode d'origine. Il appartient à la méthode dérivée d'appeler la méthode d'origine en cas de besoin. Cela est également valable pour les définitions des constructeurs et destructeurs, les surcharges et les méthodes magiques.

Exemple #3 Appel d'une méthode parente

<?php
class MyClass
{
    protected function 
myFunc() {
        echo 
"MyClass::myFunc()\n";
  }
}

class 
OtherClass extends MyClass
{
    
// Dépassement de la définition parent
    
public function myFunc() {

      
// Mais appel de la fonction parent
      
parent::myFunc();
      echo 
"OtherClass::myFunc()\n";
  }
}

$class = new OtherClass();
$class->myFunc();
?>

Voir aussi quelques exemples d'appels statiques.



Statique

Le fait de déclarer des propriétés ou des méthodes comme statics vous permet d'y accéder sans avoir besoin d'instancier la classe. On ne peut accéder à une propriété déclarée comme statique avec l'objet instancié d'une classe (bien qu'une méthode statique le puisse).

Si aucune déclaration de visibilité n'est spécifiée, alors la propriété ou la méthode sera automatiquement spécifiée comme public.

Comme les méthodes statiques peuvent être appelées sans objet, la pseudo-variable $this n'est pas disponible dans la méthode déclarée en tant que statique.

On ne peut pas accéder à des propriétés statiques à travers l'objet en utilisant l'opérateur ->.

L'appel statique de méthodes non-statiques génère une erreur de niveau E_STRICT.

Comme n'importe quelle autre variable PHP statique, les propriétés statiques ne peuvent être initialisées qu'en utilisant un littéral ou une constante; les expressions ne sont pas permises. Ainsi, vous pouvez initialiser une propriété statique avec un entier ou un tableau, mais ni avec une autre variable, ni avec une valeur de retour, ni avec un objet.

Depuis PHP 5.3.0, il est possible de référencer la classe en utilisant une variable. La valeur de la variable ne peut être un mot-clé (e.g. self, parent et static).

Exemple #1 Exemple avec une propriété statique

<?php
class Foo
{
    public static 
$my_static 'foo';

    public function 
staticValue() {
        return 
self::$my_static;
    }
}

class 
Bar extends Foo
{

    public function 
fooStatic() {
        return 
parent::$my_static;
    }
}


print 
Foo::$my_static "\n";

$foo = new Foo();
print 
$foo->staticValue() . "\n";
print 
$foo->my_static "\n";      // propriété my_static non définie

print $foo::$my_static "\n";
$classname 'Foo';
print 
$classname::$my_static "\n"// Depuis PHP 5.3.0

print Bar::$my_static "\n";
$bar = new Bar();
print 
$bar->fooStatic() . "\n";
?>

Exemple #2 Exemple avec une méthode statique

<?php
class Foo
{
    public static function 
aStaticMethod() {
        
// ...
    
}
}

Foo::aStaticMethod();
$classname 'Foo';
$classname::aStaticMethod(); // Depuis PHP 5.3.0
?>


Abstraction de classes

PHP 5 propose les classes et les méthodes abstraites. Les classes définies comme abstraites ne doivent pas être instanciées, et toutes les classes contenant au moins une méthode abstraite doivent aussi être abstraites. Les méthodes définies comme abstraites déclarent simplement la signature de la méthode - elles ne peuvent définir leur implémentation.

Lors de l'héritage d'une classe abstraite, toutes les méthodes marquées comme abstraites dans la déclaration de la classe parente doivent être définies par l'enfant ; de plus, ces méthodes doivent être définies avec la même visibilité, ou une visibilité moins restreinte. Par exemple, si la méthode abstraite est définie comme protégée, l'implémentation de la fonction doit être définie comme protégée ou publique, mais non privée. Par ailleurs, les signatures de ces méthodes doivent correspondre, i.e. leurs types et le nombre d'arguments requis doivent être les mêmes. Ceci s'applique aussi aux constructeurs depuis PHP 5.4.0. Avant la version 5.4.0., les signatures des constructeurs pouvaient être différentes.

Exemple #1 Exemple de classe abstraite

<?php
abstract class AbstractClass 
{
    
// Force la classe étendue à définir cette méthode
    
abstract protected function getValue();
    abstract protected function 
prefixValue($prefix);

    
// méthode commune
    
public function printOut() {
        print 
$this->getValue() . "\n";
   }
}

class 
ConcreteClass1 extends AbstractClass 
{
     protected function 
getValue() {
       return 
"ConcreteClass1";
     }

     public function 
prefixValue($prefix) {
       return 
"{$prefix}ConcreteClass1";
    }
}

class 
ConcreteClass2 extends AbstractClass 
{
     public function 
getValue() {
       return 
"ConcreteClass2";
     }

     public function 
prefixValue($prefix) {
       return 
"{$prefix}ConcreteClass2";
    }
}

$class1 = new ConcreteClass1;
$class1->printOut();
echo 
$class1->prefixValue('FOO_') ."\n";

$class2 = new ConcreteClass2;
$class2->printOut();
echo 
$class2->prefixValue('FOO_') ."\n";
?>

L'exemple ci-dessus va afficher :

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2

L'ancien code qui n'a pas de classes définies par l'utilisateur ou de fonctions nommées 'abstract' peut continuer de fonctionner dans modification.



Interfaces

Les interfaces objet permettent de créer du code qui spécifie quelles méthodes une classe doit implémenter.

Les interfaces sont définies en utilisant le mot-clé interface, de la même façon qu'une classe standard mais sans aucun contenu de méthode.

Toutes les méthodes déclarées dans une interface doivent être publiques.

implements

Pour implémenter une interface, l'opérateur implements est utilisé. Toutes les méthodes de l'interface doivent être implémentées dans une classe ; si ce n'est pas le cas, une erreur fatale sera émise. Les classes peuvent implémenter plus d'une interface en séparant chaque interface par une virgule.

Note:

Une classe ne peut implémenter deux interfaces qui partagent des noms de fonctions, puisque cela causerait une ambiguïté.

Note:

Les interfaces peuvent être étendues comme des classes en utilisant l'opérateur extends.

Note:

La classe implémentant l'interface doit utiliser la même signature de méthode que celle définie dans l'interface. Si vous ne le faîtes pas, une erreur fatale sera émise.

Les constantes

Les interfaces peuvent contenir des constantes. Les constantes d'interfaces fonctionnent exactement comme les constantes de classe à l'exception qu'elles ne peuvent pas être écrasées par des classes ou des interfaces qui en héritent.

Exemples

Exemple #1 Exemple d'interface

<?php

// Declaration de l'interface 'iTemplate'
interface iTemplate
{
    public function 
setVariable($name$var);
    public function 
getHtml($template);
}

// Implémentation de l'interface
// Ceci va fonctionner
class Template implements iTemplate
{
    private 
$vars = array();

    public function 
setVariable($name$var)
    {
        
$this->vars[$name] = $var;
    }

    public function 
getHtml($template)
    {
        foreach(
$this->vars as $name => $value) {
            
$template str_replace('{' $name '}'$value$template);
        }

        return 
$template;
    }
}

// Ceci ne fonctionnera pas
// Fatal error: Class BadTemplate contains 1 abstract methods
// and must therefore be declared abstract (iTemplate::getHtml)
class BadTemplate implements iTemplate
{
    private 
$vars = array();

    public function 
setVariable($name$var)
    {
        
$this->vars[$name] = $var;
    }
}
?>

Exemple #2 Les interfaces extensibles

<?php
interface a
{
    public function 
foo();
}

interface 
extends a
{
    public function 
baz(Baz $baz);
}

// Ceci fonctionnera
class implements b
{
    public function 
foo()
    {
    }

    public function 
baz(Baz $baz)
    {
    }
}

// Ceci ne fonctionnera pas et soulèvera une erreur fatale
class implements b
{
    public function 
foo()
    {
    }

    public function 
baz(Foo $foo)
    {
    }
}
?>

Exemple #3 L'héritage de plusieurs interfaces

<?php
interface a
{
    public function 
foo();
}

interface 
b
{
    public function 
bar();
}

interface 
extends ab
{
    public function 
baz();
}

class 
implements c
{
    public function 
foo()
    {
    }

    public function 
bar()
    {
    }

    public function 
baz()
    {
    }
}
?>

Exemple #4 Les interfaces avec des constantes

<?php
interface a
{
    const 
'Constante de l\'interface';
}

// Affiche: Constante de l'interface
echo a::b;


// Ceci ne fonctionnera pas de toutes façons vu qu'il n'est pas autorisé
// d'écraser des constantes.
class implements a
{
    const 
'Constante de classe';
}
?>

Une interface, avec le typage, fournit une bonne façon de vous assurer qu'un objet particulier contient des méthodes particulières. Reportez-vous à l'opérateur instanceof et au typage.



Traits

Depuis PHP 5.4.0, PHP supporte une manière de réutiliser le code appelée Traits.

Les traits sont un mécanisme de réutilisation de code dans un langage à héritage simple tel que PHP. Un trait tente de réduire certaines limites de l'héritage simple en autorisant le développeur à réutiliser un certain nombre de méthodes dans des classes indépendantes. La sémantique entre les classes et les traits réduit la complexité et évite les problèmes typiques de l'héritage multiple et des Mixins.

Un trait est semblable à une classe, mais il ne sert qu'à grouper des fonctionnalités d'une manière intéressante. C'est un ajout à l'héritage traditionnel qui autorise la composition horizontale de comportements, c'est à dire l'utilisation de méthodes de classe sans besoin d'héritage.

Exemple #1 Exemple d'utilisation de Trait

<?php
trait ezcReflectionReturnInfo 
{
    function 
getReturnType() { /*1*/ }
    function 
getReturnDescription() { /*2*/ }
}

class 
ezcReflectionMethod extends ReflectionMethod {
    use 
ezcReflectionReturnInfo;
    
/* ... */
}

class 
ezcReflectionFunction extends ReflectionFunction {
    use 
ezcReflectionReturnInfo;
    
/* ... */
}
?>

Précédence

Une méthode héritée de classe est écrasée par une méthode issue d'un Trait. L'ordre de précédence fait en sorte que les méthodes de la classe courante surchargent les méthodes issues d'un Trait, elles-mêmes surchargeant les méthodes héritées.

Exemple #2 Exemple avec l'ordre de précédence

La méthode héritée depuis la classe de base est écrasée par celle provenant du Trait. Ce n'est pas le cas des méthodes réelles, écrites dans la classe de base.

<?php
class Base {
    public function 
sayHello() {
        echo 
'Hello ';
    }
}

trait SayWorld {
    public function 
sayHello() {
        
parent::sayHello();
        echo 
'World!';
    }
}

class 
MyHelloWorld extends Base {
    use 
SayWorld;
}

$o = new MyHelloWorld();
$o->sayHello();
?>

L'exemple ci-dessus va afficher :

Hello World!

Exemple #3 Autre exemple de la précédence

<?php
trait HelloWorld 
{
    public function 
sayHello() {
        echo 
'Hello World!';
    }
}

class 
TheWorldIsNotEnough {
    use 
HelloWorld;
    public function 
sayHello() {
        echo 
'Hello Universe!';
    }
}

$o = new TheWorldIsNotEnough();
$o->sayHello();
?>

L'exemple ci-dessus va afficher :

Hello Universe!

Multiples Traits

Une classe peut utiliser de multiples Traits en les déclarant avec le mot-clé use, séparés par des virgules.

Exemple #4 Utilisation de plusieurs Traits

<?php
trait Hello 
{
    public function 
sayHello() {
        echo 
'Hello ';
    }
}

trait World {
    public function 
sayWorld() {
        echo 
'World';
    }
}

class 
MyHelloWorld {
    use 
HelloWorld;
    public function 
sayExclamationMark() {
        echo 
'!';
    }
}

$o = new MyHelloWorld();
$o->sayHello();
$o->sayWorld();
$o->sayExclamationMark();
?>

L'exemple ci-dessus va afficher :

Hello World!

Résolution des conflits

Si deux Traits insèrent une méthode avec le même nom, une erreur fatale est levée si le conflit n'est pas explicitement résolu.

Pour résoudre un conflit de nommage dans les Traits, on peut utiliser l'opérateur insteadof pour explicitement définir la précédence entre les Traits. Aussi, on peut utiliser l'opérateur as pour créer un alias du nom conflictuel.

Vu que ce principe ne permet d'exclure que les méthodes, l'opérateur as peut être utilisé pour autoriser l'inclusion d'une des méthodes conflictuelles sous un autre nom.

Exemple #5 Résolution des conflits

Dans cet exemple, la classe Talker utile les traits A et B. Comme A et B ont des méthodes conflictuelles, elle renseigne l'utilisation de la variante de smallTalk depuis le trait B, et la variante de bigTalk depuis le trait A.

La classe Aliased_Talker utilise l'opérateur as pour être capable d'utiliser l'implementation bigTalk de B sous un alias talk.

<?php
trait A 
{
    public function 
smallTalk() {
        echo 
'a';
    }
    public function 
bigTalk() {
        echo 
'A';
    }
}

trait B {
    public function 
smallTalk() {
        echo 
'b';
    }
    public function 
bigTalk() {
        echo 
'B';
    }
}

class 
Talker {
    use 
A{
        
B::smallTalk insteadof A;
        
A::bigTalk insteadof B;
    }
}

class 
Aliased_Talker {
    use 
A{
        
B::smallTalk insteadof A;
        
A::bigTalk insteadof B;
        
B::bigTalk as talk;
    }
}
?>

Changer la visibilité des méthodes

En utilisant la syntaxe as, vous pouvez aussi ajuster la visibilité de la méthode dans la classe qui l'utilise.

Exemple #6 Changer la visibilité des méthodes

<?php
trait HelloWorld 
{
    public function 
sayHello() {
        echo 
'Hello World!';
    }
}

// Modification de la visibilité de la méthode sayHello
class MyClass1 {
    use 
HelloWorld sayHello as protected; }
}

// Utilisation d'un alias lors de la modification de la visibilité
// La visibilité de la méthode sayHello n'est pas modifiée
class MyClass2 {
    use 
HelloWorld sayHello as private myPrivateHello; }
}
?>

Traits Composés depuis d'autres Traits

Tout comme les classes peuvent utiliser des traits, d'autres traits le peuvent aussi. Un trait peut donc utiliser d'autres traits et hériter de tout ou d'une partie de ceux-ci.

Exemple #7 Traits Composés depuis d'autres Traits

<?php
trait Hello 
{
    public function 
sayHello() {
        echo 
'Hello ';
    }
}

trait World {
    public function 
sayWorld() {
        echo 
'World!';
    }
}

trait HelloWorld {
    use 
HelloWorld;
}

class 
MyHelloWorld {
    use 
HelloWorld;
}

$o = new MyHelloWorld();
$o->sayHello();
$o->sayWorld();
?>

L'exemple ci-dessus va afficher :

Hello World!

Méthodes abstraites dans les Traits

Les traits supportent l'utilisation de méthodes abstraites afin d'imposer des contraintes aux classes sous-jacentes.

Exemple #8 Obligations requises par les méthodes abstraites

<?php
trait Hello 
{
    public function 
sayHelloWorld() {
        echo 
'Hello'.$this->getWorld();
    }
    abstract public function 
getWorld();
}

class 
MyHelloWorld {
    private 
$world;
    use 
Hello;
    public function 
getWorld() {
        return 
$this->world;
    }
    public function 
setWorld($val) {
        
$this->world $val;
    }
}
?>

Attributs statiques dans les Traits

Des variables statiques peuvent être utilisées dans les méthodes d'un trait, mais ne peuvent être définies dans le trait. Les traits peuvent par contre déclarer des méthodes statiques pour la classe sous-jacente.

Exemple #9 Variables statiques

<?php
trait Counter 
{
    public function 
inc() {
        static 
$c 0;
        
$c $c 1;
        echo 
"$c\n";
    }
}

class 
C1 {
    use 
Counter;
}

class 
C2 {
    use 
Counter;
}

$o = new C1(); $o->inc(); // echo 1
$p = new C2(); $p->inc(); // echo 1
?>

Exemple #10 Méthodes statiques

<?php
trait StaticExample 
{
    public static function 
doSomething() {
        return 
'Doing something';
    }
}

class 
Example {
    use 
StaticExample;
}

Example::doSomething();
?>

Propriétés

Les traits peuvent aussi définir des propriétés.

Exemple #11 Définir des propriétes

<?php
trait PropertiesTrait 
{
    public 
$x 1;
}

class 
PropertiesExample {
    use 
PropertiesTrait;
}

$example = new PropertiesExample;
$example->x;
?>

Si un trait définit une propriété, alors la classe ne peut définir la propriété du même nom, une erreur serait levée. Une erreur de type E_STRICT si la définition dans la classe est compatible (même visibilité et valeur initiale), une erreur fatale dans les autres cas.

Exemple #12 Résolution des conflits

<?php
trait PropertiesTrait 
{
    public 
$same true;
    public 
$different false;
}

class 
PropertiesExample {
    use 
PropertiesTrait;
    public 
$same true// Strict Standards
    
public $different true// Fatal error
}
?>


Surcharge magique

La surcharge magique en PHP permet de créer dynamiquement des propriétés et des méthodes. Ces entités dynamiques sont traitées via les méthodes magiques établies dans une classe pour divers types d'actions.

Les méthodes magiques de surcharge sont appelées lors de l'interaction avec les propriétés et les méthodes qui n'ont pas été déclarées ou ne sont pas visibles dans le contexte courant. Le reste de cette section utilise les termes de "propriétés inaccessibles" et de "méthodes inaccessibles" pour se référer à cette combinaison de déclaration et de visibilité.

Toutes les méthodes magiques de surcharge doivent être définies comme public.

Note:

Aucun des arguments de ces méthodes magiques ne peut être passé par référence.

Note:

L'interprétation PHP de la "surcharge" est différente de la plupart des langages orientés objet. La surcharge, habituellement, fournit la possibilité d'avoir plusieurs méthodes portant le même nom mais avec une quantité et des types différents d'arguments.

Historique

Version Description
5.3.0 Ajout de __callStatic(). Ajout d'un avertissement pour forcer la visibilité public et la déclaration non static.
5.1.0 Ajout de __isset() et de __unset().

Surcharge des propriétés

public void __set ( string $name , mixed $value )
public mixed __get ( string $name )
public bool __isset ( string $name )
public void __unset ( string $name )

__set() est sollicitée lors de l'écriture de données vers des propriétés inaccessibles.

__get() est sollicitée pour lire des données depuis des propriétés inaccessibles.

__isset() est sollicitée lorsque isset() ou la fonction empty() sont appelées avec des propriétés inaccessibles.

__unset() est sollicitée lorsque unset() est appelée avec des propriétés inaccessibles.

L'argument $name est le nom du propriété qui interagit. L'argument $value de la méthode __set() spécifie la valeur de la propriété $name qui doit être définie.

La surcharge des propriétés ne fonctionne que dans les contextes objets. Ces méthodes magiques ne seront pas lancées dans un contexte statique. Par conséquent, ces méthodes ne devraient pas être déclarées comme statiques. Depuis PHP 5.3.0, une alerte est levée si une des méthodes magiques est déclarée statique.

Note:

La valeur retournée par __set() est ignorée en raison de la façon dont le processus PHP assigne les opérateurs. De la même façon, __get() n'est jamais appelée lors d'un enchaînement d'assignements, comme ceci :

 $a = $obj->b = 8; 

Note:

Il n'est pas possible d'utiliser les attributs surchargés dans d'autres structures de langages que isset(). Ceci signifie que si empty() est appelée avec un attribut surchargé, la méthode de surcharge n'est pas invoquée.

Pour contourner cette limitation, l'attribut surchargé doit être copié dans une variable locale du contexte courant puis passée à empty().

Exemple #1 Exemple de surcharge de propriétés avec les méthodes __get(), __set(), __isset() et __unset()

<?php
class PropertyTest
{
    
/**  Variable pour les données surchargées.  */
    
private $data = array();

    
/**  La surcharge n'est pas utilisée sur les propriétés déclarées.  */
    
public $declared 1;

    
/**  La surcharge n'est lancée que lorsque l'on accède à la classe depuis l'extérieur.  */
    
private $hidden 2;

    public function 
__set($name$value)
    {
        echo 
"Définition de '$name' à la valeur '$value'\n";
        
$this->data[$name] = $value;
    }

    public function 
__get($name)
    {
        echo 
"Récupération de '$name'\n";
        if (
array_key_exists($name$this->data)) {
            return 
$this->data[$name];
        }

        
$trace debug_backtrace();
        
trigger_error(
            
'Propriété non-définie via __get(): ' $name .
            
' dans ' $trace[0]['file'] .
            
' à la ligne ' $trace[0]['line'],
            
E_USER_NOTICE);
        return 
null;
    }

    
/**  Depuis PHP 5.1.0  */
    
public function __isset($name)
    {
        echo 
"Est-ce que '$name' est défini ?\n";
        return isset(
$this->data[$name]);
    }

    
/**  Depuis PHP 5.1.0  */
    
public function __unset($name)
    {
        echo 
"Effacement de '$name'\n";
        unset(
$this->data[$name]);
    }

    
/**  Ce n'est pas une méthode magique, nécessaire ici que pour l'exemple.  */
    
public function getHidden()
    {
        return 
$this->hidden;
    }
}


echo 
"<pre>\n";

$obj = new PropertyTest;

$obj->1;
echo 
$obj->"\n\n";

var_dump(isset($obj->a));
unset(
$obj->a);
var_dump(isset($obj->a));
echo 
"\n";

echo 
$obj->declared "\n\n";

echo 
"Manipulons maintenant la propriété privée nommée 'hidden':\n";
echo 
"'hidden' est visible depuis la classe, donc __get() n'est pas utilisée...\n";
echo 
$obj->getHidden() . "\n";
echo 
"'hidden' n'est pas visible en dehors de la classe, donc __get() est utlisée...\n";
echo 
$obj->hidden "\n";
?>

L'exemple ci-dessus va afficher :

Définition de 'a' à '1'
Récupération de 'a'
1

Est-ce que 'a' est défini ?
bool(true)
Effacement de 'a'
Est-ce que 'a' est défini ?
bool(false)

1

Manipulons maintenant la propriété privée nommée 'hidden':
'hidden' est visible depuis la classe, donc __get() n'est pas utilisée...
2
'hidden' n'est pas visible en dehors de la classe, donc __get() est utlisée...
Récupération de 'hidden'


Notice:  Propriété non-définie via __get(): hidden dans <file> à la ligne 64 dans <file> à la ligne 28

Surcharge de méthodes

public mixed __call ( string $name , array $arguments )
public static mixed __callStatic ( string $name , array $arguments )

__call() est lancée lorsque l'on invoque des méthodes inaccessibles dans le contexte de l'objet.

__callStatic() est lancée lorsque l'on invoque des méthodes inaccessibles dans un contexte statique.

L'argument $name est le nom de la méthode appelée. L'argument $arguments est un tableau contenant les paramètres passés à la méthode $name.

Exemple #2 Surcharge de méthodes avec __call() et __callStatic()

<?php
class MethodTest
{
    public function 
__call($name$arguments)
    {
        
// Note : la valeur de $name est sensible à la casse.
        
echo "Appel de la méthode '$name' "
             
implode(', '$arguments). "\n";
    }

    
/**  Depuis PHP 5.3.0  */
    
public static function __callStatic($name$arguments)
    {
        
// Note : la valeur de $name est sensible à la casse.
        
echo "Appel de la méthode statique '$name' "
             
implode(', '$arguments). "\n";
    }
}

$obj = new MethodTest;
$obj->runTest('dans un contexte objet');

MethodTest::runTest('dans un contexte static');  // Depuis PHP 5.3.0
?>

L'exemple ci-dessus va afficher :

Appel de la méthode 'runTest' dans un contexte objet
Appel de la méthode statique 'runTest' dans un contexte static


Parcours d'objets

PHP fournit une façon de définir les objets de manière à ce qu'on puisse parcourir une liste de membres avec une structure foreach. Par défaut, toutes les propriétés visibles seront utilisées pour le parcours.

Exemple #1 Parcours d'objet simple

<?php
class MyClass 
{
  public 
$var1 'valeur 1';
  public 
$var2 'valeur 2';
  public 
$var3 'valeur 3';

  protected 
$protected 'variable protégée';
  private   
$private   'variable privée';

  function 
iterateVisible() {
     echo 
"MyClass::iterateVisible:\n";
     foreach(
$this as $key => $value) {
         print 
"$key => $value\n";
     }
  }
}

$class = new MyClass();

foreach(
$class as $key => $value) {
    print 
"$key => $value\n";
}
echo 
"\n";


$class->iterateVisible();

L'exemple ci-dessus va afficher :

var1 => valeur 1
var2 => valeur 2
var3 => valeur 3

MyClass::iterateVisible:
var1 => valeur 1
var2 => valeur 2
var3 => valeur 3
protected => variable protégée
private => variable privée

Comme le montre la sortie, l'itération foreach traverse toutes les propriétés visible qui doivent être accessibles.

Pour aller plus loin, l'interface Iterator peut être implémentée. Elle permet à l'objet d'indiquer la façon dont il doit être traversé, et quelles valeurs seront disponibles à chaque itération

Exemple #2 Itération d'un objet implémentant un itérateur

<?php
class MyIterator implements Iterator
{
    private 
$var = array();

    public function 
__construct($array)
    {
        if (
is_array($array)) {
            
$this->var $array;
        }
    }

    public function 
rewind()
    {
        echo 
"rembobinage\n";
        
reset($this->var);
    }

    public function 
current()
    {
        
$var current($this->var);
        echo 
"actuel : $var\n";
        return 
$var;
    }

    public function 
key()
    {
        
$var key($this->var);
        echo 
"clé : $var\n";
        return 
$var;
    }

    public function 
next()
    {
        
$var next($this->var);
        echo 
"suivant : $var\n";
        return 
$var;
    }

    public function 
valid()
    {
        
$key key($this->var);
        
$var = ($key !== NULL && $key !== FALSE);
        echo 
"valide : $var\n";
        return 
$var;
    }

}

$values = array(1,2,3);
$it = new MyIterator($values);

foreach (
$it as $a => $b) {
    print 
"$a$b\n";
}
?>

L'exemple ci-dessus va afficher :

rembobinage
valide : 1
actuel : 1
clé : 0
0: 1
suivant : 2
valide : 1
actuel : 2
clé : 1
1: 2
suivant : 3
valide : 1
actuel : 3
clé : 2
2: 3
suivant :
valide :

L'interface IteratorAggregate peut être utilisé comme une alternative pour l'implémentation de toutes les méthodes Iterator. IteratorAggregate ne nécessite que l'implémentation d'une méthode, IteratorAggregate::getIterator(), qui doit retourner une instance d'une classe implémentant Iterator.

Exemple #3 Itération d'un objet implémentant IteratorAggregate

<?php
class MyCollection implements IteratorAggregate 
{
  private 
$items = array();
  private 
$count 0;

  
// Définition requise de l'interface IteratorAggregate
  
public function getIterator() {
    return new 
MyIterator($this->items);
  }

  public function 
add($value) {
    
$this->items[$this->count++] = $value;
  }
}

$coll = new MyCollection();
$coll->add('valeur 1');
$coll->add('valeur 2');
$coll->add('valeur 3');

foreach (
$coll as $key => $val) {
    echo 
"clé/valeur : [$key -> $val]\n\n";
}
?>

L'exemple ci-dessus va afficher :

rembobinage
actuel : valeur 1
valide : 1
actuel : valeur 1
clé : 0
clé/valeur : [0 -> valeur 1]

suivant : valeur 2
actuel : valeur 2
valide : 1
actuel : valeur 2
clé : 1
clé/valeur : [1 -> valeur 2]

suivant : valeur 3
actuel : valeur 3
valide : 1
actuel : valeur 3
clé : 2
clé/valeur : [2 -> valeur 3]

suivant :
actuel :
valide :

Note:

Pour plus d'exemples sur le parcours d'objets, lisez la section sur l'extension SPL.



Patterns

Les patterns sont un moyen de décrire les meilleures pratiques et les bonnes conceptions. Ils proposent une solution flexible aux problèmes habituels de programmation.

Usine

Le pattern d'usine (factory) permet l'instanciation d'objets durant l'exécution. Il est appelé "pattern d'usine" puisqu'il est responsable de la "fabrication" d'un objet. Une méthode d'usine reçoit le nom de la classe pour l'instancier en tant qu'argument.

Exemple #1 Méthode de paramètre d'usine

<?php
class Exemple
{
    
// La méthode d'usine
    
public static function factory($type)
    {
        if (include_once 
'Drivers/' $type '.php') {
            
$classname 'Driver_' $type;
            return new 
$classname;
        } else {
            throw new 
Exception('Driver non trouvé');
        }
    }
}
?>

Définir cette méthode dans une classe permet de charger un pilote à la volée. Si la classe Example était une classe d'abstraction de base de données, le chargement des pilotes MySQL et SQLite pourrait être effectué comme ceci :

<?php
// Chargement du driver MySQL
$mysql Exemple::factory('MySQL');

// Chargement du driver SQLite
$sqlite Example::factory('SQLite');
?>

Singleton

Le pattern singleton permet de s'assurer qu'il n'existe qu'une seule instance d'un objet, et propose un point d'accès global à cet objet. Il s'agit d'un pattern du "Gang of Four".

Le pattern singleton est souvent implémenté pour des classes de bases de données, des journaliseurs, des objets de requête, de réponse ou encore des contrôleurs frontaux.

Exemple #2 Exemple de Singleton

<?php
class Example
{
    private static 
$instance;
    private 
$count 0;

    private function 
__construct() 
    {
    }

    public static function 
singleton() 
    {
        if (!isset(
self::$instance)) {
            echo 
"création de l'instance";
            
$className __CLASS__;
            
self::$instance = new $className;
        }
        return 
self::$instance;
    }

    public function 
increment()
    {
        return 
$this->count++;
    }

    public function 
__wakeup()
    {
        
trigger_error('Désérialiser est interdit.'E_USER_ERROR);
    }

    public function 
__clone()
    {
        
trigger_error('Le clônage n\'est pas autorisé.'E_USER_ERROR);
    }
}
?>

Illustration du comportement du Singleton

<?php
$singleton 
Example::singleton(); // Affiche "création de l'instance."
echo $singleton->increment(); // 0
echo $singleton->increment(); // 1

$singleton Example::singleton(); // Réutilise l'instance existante
echo $singleton->increment(); // 2
echo $singleton->increment(); // 3

// Tout cela lève des Fatal Error
$singleton2 = new Example;
$singleton3 = clone $singleton;
$singleton4 unserialize(serialize($singleton));
?>
Avertissement

Le pattern Singleton est l'un des plus controversés. Les critiques indiquent que le singleton crée un contexte global dans l'application et couple fortement le singleton à d'autres classes. Ceci mène vers des dépendances cachées et des effets de bord désagréables, le code devient ainsi plus difficile à maintenir et à tester.

Les critiques pointent aussi l'inutilité d'un singleton dans un environnement isolé comme PHP où les objets ne sont pas persistents entre les requêtes. Il est plus simple et propre de créer son graphe d'objets en utilisant des monteurs ou des fabriques, en début de requête.

Les singletons violent aussi plusieurs principes "SOLID" et la loi de Demeter. Les singletons ne peuvent être sérialisés. Il ne peuvent être surchargés (avant PHP 5.3) et ne seront pas nettoyés par le collecteur car une instance est toujours présente en mémoire, dans le singleton lui-même.



Méthodes magiques

Les méthodes __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state() et __clone() sont magiques en PHP. Vous ne pouvez pas utiliser ces noms de méthode dans vos classes, sauf si vous voulez implémenter le comportement associé à ces méthodes magiques.

Attention

PHP réserve tous les noms de fonctions commençant par un double souligné __ pour les méthodes magiques. Il est recommandé de ne pas utiliser de noms de fonctions commençant par __ sauf si vous voulez des fonctionnalités magiques documentées.

__sleep() et __wakeup()

public array __sleep ( void )
void __wakeup ( void )

La fonction serialize() vérifie si votre classe a une méthode avec le nom magique __sleep(). Si c'est le cas, cette méthode sera exécutée avant toute linéarisation. Elle peut nettoyer l'objet et elle est supposée retourner un tableau avec les noms de toutes les variables de l'objet qui doivent être linéarisées. Si la méthode ne retourne rien, alors NULL est linéarisé et une alerte de type E_NOTICE est émise.

Note:

Il n'est pas possible pour __sleep() de retourner les noms des propriétés privées des classes parentes. Le faire résulte en une erreur de niveau E_NOTICE. À la place, vous devriez utiliser l'interface Serializable.

Le but avoué de __sleep() est de valider des données en attente ou d'effectuer les opérations de nettoyage. De plus, cette fonction est utile si vous avez de très gros objets qui n'ont pas besoin d'être sauvegardés en totalité.

Réciproquement, la fonction unserialize() vérifie la présence d'une méthode dont le nom est le nom magique __wakeup(). Si elle est présente, cette fonction peut reconstruire toute ressource que l'objet possède.

Le but avoué de __wakeup() est de rétablir toute connexion de base de données qui aurait été perdue durant la linéarisation et d'effectuer des tâches de réinitialisation.

Exemple #1 Utilisation de sleep() et wakeup()

<?php
class Connection
{
    protected 
$link;
    private 
$server$username$password$db;

    public function 
__construct($server$username$password$db)
    {
        
$this->server $server;
        
$this->username $username;
        
$this->password $password;
        
$this->db $db;
        
$this->connect();
    }

    private function 
connect()
    {
        
$this->link mysql_connect($this->server$this->username$this->password);
        
mysql_select_db($this->db$this->link);
    }

    public function 
__sleep()
    {
        return array(
'server''username''password''db');
    }

    public function 
__wakeup()
    {
        
$this->connect();
    }
}
?>

__toString()

public string __toString ( void )

La méthode __toString() détermine comment l'objet doit réagir lorsqu'il est traité comme une chaîne de caractères. Par exemple, ce que echo $obj; affichera. Cette méthode doit retourner une chaine sinon une erreur E_RECOVERABLE_ERROR sera levée.

Exemple #2 Exemple simple

<?php
// Déclaration d'une classe simple
class ClasseTest
{
    public 
$foo;

    public function 
__construct($foo)
    {
        
$this->foo $foo;
    }

    public function 
__toString()
    {
        return 
$this->foo;
    }
}

$class = new ClasseTest('Bonjour');
echo 
$class;
?>

L'exemple ci-dessus va afficher :

Bonjour

Il est important de noter qu'avant PHP 5.2.0, la méthode __toString() n'était appelée que si elle était directement combinée avec echo ou print. Depuis PHP 5.2.0, elle est appelée dans tous les contextes de chaîne de caractères (e.g. dans printf() avec le modificateur %s) mais pas dans les autres types de contextes (e.g. avec le modificateur %d). Depuis PHP 5.2.0, convertir un objet sans la méthode __toString() en chaîne de caractères émettra une E_RECOVERABLE_ERROR.

__invoke()

mixed __invoke ([ $... ] )

La méthode __invoke() est appelée lorsque le script tente d'appeler un objet comme une fonction.

Note:

Cette fonctionnalité est disponible depuis PHP 5.3.0.

Exemple #3 Exemple avec __invoke()

<?php
class CallableClass
{
    public function 
__invoke($x)
    {
        
var_dump($x);
    }
}
$obj = new CallableClass;
$obj(5);
var_dump(is_callable($obj));
?>

L'exemple ci-dessus va afficher :

int(5)
bool(true)

__set_state()

static object __set_state ( array $properties )

Cette méthode statique est appelée pour les classes exportées par la fonction var_export() depuis PHP 5.1.0.

Le seul paramètre de cette méthode est un tableau contenant les propriétés exportées sous la forme array('propriété' => valeur, ...).

Exemple #4 Utilisation de __set_state() (depuis PHP 5.1.0)

<?php

class A
{
    public 
$var1;
    public 
$var2;

    public static function 
__set_state($an_array// Depuis PHP 5.1.0
    
{
        
$obj = new A;
        
$obj->var1 $an_array['var1'];
        
$obj->var2 $an_array['var2'];
        return 
$obj;
    }
}

$a = new A;
$a->var1 5;
$a->var2 'foo';

eval(
'$b = ' var_export($atrue) . ';'); // $b = A::__set_state(array(
                                            //    'var1' => 5,
                                            //    'var2' => 'foo',
                                            // ));
var_dump($b);

?>

L'exemple ci-dessus va afficher :

object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}


Mot-clé "final"

PHP dispose du mot-clé "final", qui empêche les classes filles de surcharger une méthode, lorsque la définition de cette dernière est préfixée par le mot-clé "final". Si la classe elle-même est définie comme finale, elle ne pourra plus être étendue.

Exemple #1 Exemple de méthode finale

<?php
class BaseClass {
   public function 
test() {
       echo 
"BaseClass::test() appelé\n";
   }
   
   final public function 
moreTesting() {
       echo 
"BaseClass::moreTesting() appelé\n";
   }
}

class 
ChildClass extends BaseClass {
   public function 
moreTesting() {
       echo 
"ChildClass::moreTesting() appelé\n";
   }
}
// Résultat : Fatal error: Cannot override final method BaseClass::moreTesting()
?>

Exemple #2 Exemple de classe finale

<?php
final class BaseClass {
   public function 
test() {
       echo 
"BaseClass::test() appelé\n";
   }

   
// Ici, peut importe si vous spécifiez la fonction en finale ou pas
   
final public function moreTesting() {
       echo 
"BaseClass::moreTesting() appelé\n";
   }
}

class 
ChildClass extends BaseClass {
}
// Résultat : Fatal error: Class ChildClass may not inherit from final class (BaseClass)
?>

Note: Les propriétés ne peuvent être déclarées finales, seules les méthodes ou les classes peuvent l'être.



Clônage d'objets

Le fait de créer une copie d'un objet possédant exactement les mêmes propriétés n'est pas toujours le comportement que l'on souhaite. Un bon exemple pour illustrer le besoin d'un constructeur de copie : si vous avez un objet qui représente une fenêtre GTK et que l'objet contient la ressource représentant cette fenêtre GTK, lorsque vous créez une copie vous pouvez vouloir créer une nouvelle fenêtre avec les mêmes propriétés mais que le nouvel objet contienne une ressource représentant la nouvelle fenêtre.

Une copie d'objet est créée en utilisant le mot-clé clone (qui fait appel à la méthode __clone() de l'objet, si elle a été définie). La méthode __clone() d'un objet ne peut être appelée directement.

<?php

$copie_d_objet = clone $objet;

?>

Lorsqu'un objet est cloné, PHP effectue une copie superficielle de toutes les propriétés de l'objet. Toutes les propriétés qui sont des références à d'autres variables demeureront des références.

void __clone ( void )

Une fois le clonage effectué, si une méthode __clone() est définie, la méthode __clone() du nouvel objet sera appelée pour permettre à chaque propriété qui doit l'être d'être modifiée.

Exemple #1 Exemple de duplication d'objets

<?php
class SubObject 
{
  static 
$instances 0;
  public 
$instance;

  public function 
__construct() {
    
$this->instance = ++self::$instances;
  }

  public function 
__clone() {
    
$this->instance = ++self::$instances;
  }
}

class 
MyCloneable 
{
  public 
$objet1;
  public 
$objet2;

  function 
__clone() 
  {    
    
// Force la copie de this->object, sinon
    // il pointera vers le même objet.
    
$this->object1 = clone $this->object1;
  }
}

$obj = new MyCloneable();

$obj->object1 = new SubObject();
$obj->object2 = new SubObject();

$obj2 = clone $obj;


print(
"Objet original :\n");
print_r($obj);

print(
"Objet cloné :\n");
print_r($obj2);

?>

L'exemple ci-dessus va afficher :

Object original :
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => 1
        )

    [object2] => SubObject Object
        (
            [instance] => 2
        )

)
Object cloné :
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => 3
        )

    [object2] => SubObject Object
        (
            [instance] => 2
        )

)


Comparaison d'objets

En PHP, la comparaison d'objets est proche du comportement des langages orientés objet (bien que PHP n'en soit pas un).

Lors de l'utilisation de l'opérateur de comparaison ==, les objets sont comparés de manière simple, à savoir : deux objets sont égaux s'ils ont les mêmes attributs et valeurs, et qu'ils sont des instances de la même classe.

D'un autre coté, lors de l'utilisation de l'opérateur d'identité (===), les objets sont identiques uniquement s'ils font référence à la même instance de la même classe.

Un exemple va illustrer ces règles.

Exemple #1 Exemple de comparaison d'objets en PHP

<?php
function bool2str($bool)
{
    if (
$bool === false) {
            return 
'FALSE';
    } else {
            return 
'TRUE';
    }
}

function 
compareObjects(&$o1, &$o2)
{
    echo 
'o1 == o2 : '.bool2str($o1 == $o2)."\n";
    echo 
'o1 != o2 : '.bool2str($o1 != $o2)."\n";
    echo 
'o1 === o2 : '.bool2str($o1 === $o2)."\n";
    echo 
'o1 !== o2 : '.bool2str($o1 !== $o2)."\n";
}

class 
Flag
{
    public 
$flag;

    function 
Flag($flag true) {
            
$this->flag $flag;
    }
}

class 
OtherFlag
{
    public 
$flag;

    function 
OtherFlag($flag true) {
            
$this->flag $flag;
    }
}

$o = new Flag();
$p = new Flag();
$q $o;
$r = new OtherFlag();

echo 
"Deux instances de la même classe\n";
compareObjects($o$p);

echo 
"\nDeux références sur le même objet\n";
compareObjects($o$q);

echo 
"\nInstances de classes différentes\n";
compareObjects($o$r);
?>

L'exemple ci-dessus va afficher :

Deux instances de la même classe
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : FALSE
o1 !== o2 : TRUE

Deux références sur le même objet
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSE

Instances de classes différentes
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE

Note:

Les extensions peuvent définir leurs propres règles pour leurs comparaisons d'objet.



Typage objet

PHP 5 introduit le typage objet implicite (littéralement, Type Hinting). Les fonctions peuvent maintenant imposer aux paramètres d'être des objets (en spécifiant le nom de la classe dans le prototype de la fonction), des interfaces, des tableaux (depuis PHP 5.1) ou de type callable. Cependant, si NULL est utilisé en tant que valeur par défaut du paramètre, il sera autorisé comme argument pour tous les futurs appels.

Si une classe ou une interface est spécifié comme type, alors tous ces enfants ou ces implémentations sont aussi autorisés.

La spécification d'un type ne peut être utilisée avec les types scalaires comme int ou string. Traits n'est pas non plus autorisé.

Exemple #1 Exemples de typage d'objets

<?php
// Un exemple de classe
class MaClasse
{
    
/**
     * Fonction de test
     *
     * Le premier paramètre doit être un objet de type AutreClasse
     */
    
public function test(AutreClasse $autreclasse) {
        echo 
$autreclasse->var;
    }


    
/**
    * Une autre fonction de test
    *
    * Le premier paramètre doit être un tableau
    */
    
public function test_array(array $input_array) {
        
print_r($input_array);
    }
    
    
/**
     * Le premier paramètre doit être un itérateur
     */
    
public function test_interface(Traversable $iterator) {
        echo 
get_class($iterator);
    }
    
    
/**
     * Le premier paramètre doit être une fonction de rappel (callable)
     */
    
public function test_callable(callable $callback$data) {
        
call_user_func($callback$data);
    }
}

// Un autre exemple de classe
class AutreClasse {
    public 
$var 'Bonjour le monde!';
}
?>

Si le paramètre ne satisfait pas les conditions imposées, une erreur fatale (qui peut être attrapée) est émise.

<?php
// Une instance de chaque classe
$maclasse = new MaClasse;
$autreclasse = new AutreClasse;

// Erreur fatale : Argument 1 doit être un objet de la classe AutreClasse
$maclasse->test('salut');

// Erreur fatale : Argument 1 doit être une instance de AutreClasse
$foo = new stdClass;
$maclasse->test($foo);

// Erreur fatale : Argument 1 ne doit pas être null
$maclasse->test(null);

// Fonctionne : Affiche 'Bonjour le monde!'
$maclasse->test($autreclasse);

// Erreur fatale : Argument 1 doit être un tableau
$maclasse->test_array('a string');

// Fonctionne : Affiche le tableau
$maclasse->test_array(array('a''b''c'));

// Fonctionne : Affiche ArrayObject
$maclasse->test_interface(new ArrayObject(array()));

// Fonctionne : Affiche int(1)
$maclasse->test_callable('var_dump'1);
?>

Le typage fonctionne aussi avec les fonctions :

<?php
// Un exemple de classe
class MaClasse {
    public 
$var 'Bonjour le monde!';
}

/**
 * Fonction de test
 *
 * Le premier paramètre doit être un objet de type MaClasse
 */
function maFonction(MaClasse $foo) {
    echo 
$foo->var;
}

// Fonctionne
$maclasse = new MaClasse;
maFonction($maclasse);
?>

Le typage objet autorise les valeurs NULL :

<?php

/* On accepte la valeur NULL */
function test(stdClass $obj NULL) {

}

test(NULL);
test(new stdClass);

?>


Late Static Bindings (Résolution statique à la volée)

Depuis PHP 5.3.0, PHP implémente une fonctionnalité appelée late static binding, en français la résolution statique à la volée, qui est utilisée pour choisir la classe appelée dans le cadre de l'héritage de méthodes statiques.

Plus précisément, les résolutions statiques à la volée fonctionnent en enregistrant le nom de le classe dans le dernier "appel non transmis". Dans le cas des appels de méthodes statiques, il s'agit de la classe explicitement nommée à gauche de l'opérateur ::; dans le cas de méthodes non statiques, il s'agit de la classe de l'objet. Un "appel transmis" est déclenché par self::, parent::, static::, ou, tout en haut de la hierarchie des classes, forward_static_call(). La fonction get_called_class() peut être utilisée pour récupérer une chaine contenant le nom de la classe appelée et static:: introduit son espace.

Cette fonctionnalité a été baptisée "late static bindings", d'un point de vue interne. "Late binding", littéralement compilation tardive, vient du fait que les éléments static:: ne seront pas résolus en utilisant la classe où la méthode a été définie, mais celle qui est active durant l'exécution. L'adjectif statique a été ajouté car ce problème s'applique aux méthodes statiques, mais pas seulement.

Limitations de self::

Les références à la classe courante, avec self:: ou __CLASS__ sont résolues en utilisant la classe à qui appartiennent les fonctions, où elles ont été définies :

Exemple #1 Utilisation de self::

<?php
class {
    public static function 
qui() {
        echo 
__CLASS__;
    }
    public static function 
test() {
        
self::qui();
    }
}

class 
extends {
    public static function 
qui() {
         echo 
__CLASS__;
    }
}

B::test();
?>

L'exemple ci-dessus va afficher :

A

Utilisation de la résolution statique à la volée

La résolution statique à la volée essaie de dépasser cette limitation en introduisant un mot clé qui fait référence à la classe qui est appelée durant l'exécution. Simplement, ce mot-clé vous permet de faire référence à B depuis test(), dans l'exemple précédent. Il a été décidé de ne pas introduire de nouveau mot clé, mais plutôt d'utiliser le mot static qui était déjà réservé.

Exemple #2 Utilisation simple de static::

<?php
class {
    public static function 
qui() {
        echo 
__CLASS__;
    }
    public static function 
test() {
        static::
qui(); // Ici, résolution à la volée
    
}
}

class 
extends {
    public static function 
qui() {
         echo 
__CLASS__;
    }
}

B::test();
?>

L'exemple ci-dessus va afficher :

B

Note:

Dans les contextes non statiques, la classe appelée sera celle de l'objet. Comme $this-> essayera d'appeler des méthodes privées depuis le même contexte, utiliser static:: pourrait donner des résultats différents. Notez aussi que static:: ne peut faire référence qu'à des attributs/méthodes statiques.

Exemple #3 Utilisation de static:: dans un contexte non statique

<?php
class {
    private function 
foo() {
        echo 
"success!\n";
    }
    public function 
test() {
        
$this->foo();
        static::
foo();
    }
}

class 
extends {
   
/* foo() sera copiée dans B, par conséquent son contexte sera toujours A
    * et l'appel se fera sans problème */
}

class 
extends {
    private function 
foo() {
        
/* La méthode originale est remplacée; le contexte est celui de C */
    
}
}

$b = new B();
$b->test();
$c = new C();
$c->test();   //échoue
?>

L'exemple ci-dessus va afficher :

success!
success!
success!


Fatal error:  Call to private method C::foo() from context 'A' in /tmp/test.php on line 9

Note:

La résolution des statiques à la volée va s'arrêter à un appel statique complètement résolu. D'un autre coté, les appels statiques en utilisant un mot-clé comme parent:: ou self:: va transmettre l'information appelante.

Exemple #4 Appel avec ou sans transmission

<?php
class {
    public static function 
foo() {
        static::
qui();
    }

    public static function 
qui() {
        echo 
__CLASS__."\n";
    }
}

class 
extends {
    public static function 
test() {
        
A::foo();
        
parent::foo();
        
self::foo();
    }

    public static function 
qui() {
        echo 
__CLASS__."\n";
    }
}
class 
extends {
    public static function 
qui() {
        echo 
__CLASS__."\n";
    }
}

C::test();
?>

L'exemple ci-dessus va afficher :

A
C
C



Objets et références

Un des piliers de la POO de PHP 5 est le fait que les "objets sont passés par référence par défaut". Ce n'est pas complètement vrai. Cette section rectifie cette généralisation avec quelques exemples.

Une référence PHP est un alias, qui permet à deux variables différentes de représenter la même valeur. Depuis PHP 5, une variable contenant un objet ne contient plus l'objet lui-même. Il contient un identifiant d'objet, ce qui permet aux accesseurs d'objets de trouver cet objet. Lorsque l'objet est utilisé comme argument, retourné par une fonction ou assigné à une autre variable, les différentes variables ne sont pas des alias : elles contiennent le même identifiant, qui pointe sur la même valeur.

Exemple #1 Références et Objets

<?php
class {
    public 
$foo 1;
}  

$a = new A;
$b $a;     // $a et $b sont des copies du même identifiant
             // ($a) = ($b) = <id>
$b->foo 2;
echo 
$a->foo."\n";


$c = new A;
$d = &$c;    // $c et $d sont des références
             // ($c,$d) = <id>

$d->foo 2;
echo 
$c->foo."\n";


$e = new A;

function 
foo($obj) {
    
// ($obj) = ($e) = <id>
    
$obj->foo 2;
}

foo($e);
echo 
$e->foo."\n";

?>

L'exemple ci-dessus va afficher :

2
2
2


Sérialisation d'objets

Sérialiser des objets - des objets en session

serialize() retourne une chaîne de caractères contenant une représentation linéaire de n'importe quelle valeur qui peut être stockée en PHP. unserialize() utilise cette chaîne de caractères pour recréer l'original de la variable à partir de sa représentation linéaire. Utiliser serialize() pour sauvegarder un objet conservera toutes ses variables. Ses méthodes ne seront pas conservées, seulement le nom de la classe.

Afin de pouvoir désérialiser (unserialize()) un objet, la classe de l'objet doit être définie pour permettre sa reconstruction. En d'autres termes, si vous avez un objet de la classe A et le sérialisez, la représentation linéaire obtenue dépendra de la classe A et contiendra toutes ses variables. Si vous voulez désérialiser la représentation linéaire dans un endroit où la classe A n'est pas définie (dans un autre fichier par exemple), alors vous devrez redéclarer la classe A avant de procéder à la désérialisation de la représentation linéaire. Cela peut-être fait, par exemple, en incluant le fichier de définition de la classe ou en utilisant la fonction spl_autoload_register().

<?php
// class_a.inc.php:
  
  
class {
      public 
$one 1;
    
      public function 
show_one() {
          echo 
$this->one;
      }
  }
  
// page1.php:

  
include("class_a.inc.php");
  
  
$a = new A;
  
$s serialize($a);
  
// enregistre $s quelque part où page2.php peut le retrouver
  
file_put_contents('store'$s);

// page2.php:
  
  // nous avons besoin de la définition de la classe
  // pour qu'unserialize() fonctionne
  
include("class_a.inc.php");

  
$s file_get_contents('store');
  
$a unserialize($s);

  
// appel de show_one() sur l'objet $a, affiche 1
  
$a->show_one();
?>

Si une application utilise le système de sessions et enregistre des objets, ces objets sont sérialisés automatiquement à la fin de chaque page PHP, et sont désérialisés automatiquement à chaque page suivante. Cela signifie qu'une fois mis en session, chaque objet peut apparaître dans n'importe quelle page de l'application où la session est démarrée. Notez cependant que la fonction session_register() est supprimée depuis PHP 5.4.0

Si une application sérialise des objets, il est fortement recommandé, pour son usage futur, que l'application inclut les définitions de classe des objets sérialisés à chaque page. Ne pas faire ainsi aboutirait à un objet désérialisé sans sa définition de classe. PHP donnerait alors à cet objet une classe de type __PHP_Incomplete_Class_Name, qui n'a pas de méthode et produirait un objet inutile.

Dans l'exemple ci-dessus, si $a est enregistré dans la session en exécutant session_register("a"), vous devriez inclure le fichier class_a.inc.php dans toutes vos pages, et non seulement dans page1.php et page2.php



Modifications en POO (Programmation orientée objet)

Les changements du modèle objet de PHP5 sont recensés ici. Plus d'informations et quelques notes peuvent être trouvées dans la documentation sur la POO en PHP5.

Version Description
5.4.0 Modification : Si une classe abstraite définit une signature pour le constructeur, elle sera désormais appliquée.
5.3.3 Changement : Les méthodes ayant le même nom que la classe dans un espace de noms ne sont plus considérées comme constructeur. Ce changement n'affecte pas les classes sans espace de nom.
5.3.0 Changement : Les interfaces définissant des méthodes ayant un prototype avec des arguments obligatoires peuvent être implémentées dans les classes avec un argument facultatif sans erreur.
5.3.0 Changement : Il est maintenant possible de référencer une classe en utilisant une variable (ex: echo $classname::constant;). La valeur de la variable ne peut être un mot-clé (ex: self, parent ou static).
5.3.0 Changement : Une erreur de niveau E_WARNING est levée si les méthodes magiques de surcharge sont déclarées statiques. La visibilité publique est aussi requise.
5.3.0 Changement : Avant 5.3.0, les exceptions lancées dans la fonction __autoload() ne pouvaient être traitées dans un bloc catch et résultaient en une erreur fatale. Maintenant les exceptions levées dans la fonction __autoload peuvent être attrapées dans un bloc catch et traitées. Si une exception personnalisée est lancée, alors sa classe doit être disponible. La fonction __autoload peut par contre être utilisée recursivement pour autocharger la classe d'exception personnalisée.
5.3.0 Ajout de la méthode magique __callStatic.
5.3.0 Ajout : heredoc et nowdoc sont supportées pour définir les constantes de classes et les propriétés. Note: Les valeurs heredoc ne doivent pas contenir de variables.
5.3.0 Ajout du Late Static Bindings (résolution statique tardive).
5.3.0 Ajout de la méthode magique __invoke().
5.2.0 Changement: La méthode magique __toString() n'était appelée que lors des appels à echo ou print. Maintenant, elle l'est dans n'importe quel contexte de chaîne (ex: dans printf() avec %s) mais pas dans les autres contextes (ex: avec le modificateur %d). Depuis PHP 5.2.0, convertir un objet en chaîne sans méthode __toString émet une erreur E_RECOVERABLE_ERROR.
5.1.3 Changement: Dans les versions antérieures de PHP 5, l'utilisation de var était considérée comme obsolète et envoyait une erreur E_STRICT. Ce n'est plus le cas.
5.1.0 Changement: La méthode magique statique __set_state() est maintenant appelée pour les classes exportées via var_export().
5.1.0 Ajout des méthodes magiques __isset() et __unset().




Les espaces de noms

Sommaire


Introduction aux espaces de noms

(PHP 5 >= 5.3.0)

Que sont les espaces de noms ? Dans leur définition la plus large, ils représentent un moyen d'encapsuler des éléments. Cela peut être conçu comme un concept abstrait, à différents endroits. Par exemple, dans un système de fichiers, les dossiers représentent un groupe de fichiers associés, et sert d'espace de noms pour les fichiers qu'il contient. Un exemple concret est que le fichier foo.txt peut exister dans les deux dossiers /home/greg et /home/other, mais que les deux copies de foo.txt ne peuvent pas co-exister dans le même dossier. De plus, pour accéder au fichier foo.txt depuis l'extérieur du dossier /home/greg, il faut préciser le nom du dossier en utilisant un séparateur de dossier, tel que /home/greg/foo.txt. Le même principe applique les espaces de noms au monde de la programmation.

Dans le monde PHP, les espaces de noms sont conçus pour résoudre deux problèmes que les auteurs de bibliothèques et applications rencontrent lors de la réutilisation d'éléments tels que des classes ou des bibliothèques de fonctions :

  1. Collisions de noms entre le code que vous créez, les classes, fonctions ou constantes internes de PHP, ou celle de bibliothèques tierces.
  2. La capacité de faire des alias ou de raccourcir des Noms_Extremement_Long pour aider à la résolution du premier problème, et améliorer la lisibilité du code.

Les espaces de noms PHP fournissent un moyen pour regrouper des classes, interfaces, fonctions ou constantes. Voici un exemple de syntaxe des espaces de noms PHP :

Exemple #1 Exemple de syntaxe des espaces de noms

<?php
namespace mon\nom// Voyez la section "Définition des espaces de noms"

class MaClasse {}
function 
mafonction() {}
const 
MACONSTANTE 1;

$a = new MaClasse;
$c = new \mon\nom\MaClasse// Voyez la section "Espace global"

$a strlen('bonjour'); // Voyez "Utilisation des espaces de noms : retour
       // à l'espace global

$d = namespace\MACONSTANTE// Voyez "L'opérateur namespace et la constante __NAMESPACE__

$d __NAMESPACE__ '\MACONSTANTE';
echo 
constant($d); // Voyez "Espaces de noms et fonctionnalités dynamiques"
?>

Note:

Les espaces de noms PHP et php, mais aussi les noms composés commençant par ces noms (comme PHP\Classes) sont réservés pour l'utilisation interne du langage, et ne doivent pas être utilisés dans le code de l'espace utilisateur.



Définition des espaces de noms

(PHP 5 >= 5.3.0)

Bien que du code PHP valide puisse être contenu dans un espace de noms, seuls quatre types de code peuvent être affectés par les espaces de noms : les classes, les interfaces, les fonctions et les constantes.

Les espaces de noms sont déclarés avec le mot-clé namespace. Un fichier contenant un espace de noms doit déclarer l'espace au début du fichier, avant tout autre code, avec une seule exception : le mot clé declare.

Exemple #1 Déclaration d'un espace de noms

<?php
namespace MonProjet;

const 
CONNEXION_OK 1;
class 
Connexion /* ... */ }
function 
connecte() { /* ... */  }

?>
Le seul élément autorisé avant la déclaration d'espace de noms est la commande declare, pour définir l'encodage du fichier source. De plus, aucun code non-PHP ne peut précéder la déclaration d'espace de noms, y compris des espaces :

Exemple #2 Erreur de déclaration d'un espace de noms

<html>
<?php
namespace MonProjet// erreur fatale : l'espace de noms doit être le premier élément du script
?>

De plus, contrairement à d'autres structures PHP, le même espace de noms peut être défini dans plusieurs fichiers, ce qui permet de scinder le contenu d'un espace de noms sur plusieurs fichiers.



Déclaration d'un sous espace de noms

(PHP 5 >= 5.3.0)

Comme pour les fichiers et les dossiers, les espaces de noms sont aussi capables de spécifier une hiérarchie d'espaces de noms. Ainsi, un nom d'espace de noms peut être défini avec ses sous-niveaux :

Exemple #1 Déclaration d'un espace de noms avec hiérarchie

<?php
namespace MonProjet\Sous\Niveau;

const 
CONNEXION_OK 1;
class 
Connexion /* ... */ }
function 
connecte() { /* ... */  }

?>
Dans l'exemple ci-dessus, la constante MonProjet\Sous\Niveau\CONNEXION_OK, la classe MonProjet\Sous\Niveau\Connexion et la fonction MonProjet\Sous\Niveau\connecte sont créées.



Définition de plusieurs espaces de noms dans le même fichier

(PHP 5 >= 5.3.0)

Plusieurs espaces de noms peuvent aussi être déclarés dans le même fichier. Il y a deux syntaxes autorisées.

Exemple #1 Déclaration de plusieurs espaces de noms, syntaxe à combinaison simple

<?php
namespace MonProjet;

const 
CONNEXION_OK 1;
class 
Connexion /* ... */ }
function 
connecte() { /* ... */  }

namespace 
AutreProjet;

const 
CONNEXION_OK 1;
class 
Connexion /* ... */ }
function 
connecte() { /* ... */  }
?>

Cette syntaxe n'est pas recommandée pour combiner des espaces de noms dans un seul fichier. Au lieu de cela, il est recommandé d'utiliser la syntaxe à accolades.

Exemple #2 Déclaration de plusieurs espaces de noms, syntaxe à accolades

<?php
namespace MonProjet {

const 
CONNEXION_OK 1;
class 
Connexion /* ... */ }
function 
connecte() { /* ... */  }
}

namespace 
AutreProjet {

const 
CONNEXION_OK 1;
class 
Connexion /* ... */ }
function 
connecte() { /* ... */  }
}
?>

Il est fortement recommandé, en tant que pratique de codage, de ne pas mélanger plusieurs espaces de noms dans le même fichier. L'utilisation recommandée est de combiner plusieurs scripts PHP dans le même fichier.

Pour combiner plusieurs codes sans espaces de noms dans du code avec espace de noms, seule la syntaxe à accolades est supportée. Le code global doit être encadré par un espace de noms sans nom, tel que celui-ci :

Exemple #3 Déclaration de plusieurs espaces de noms avec un espace sans nom

<?php
namespace MonProjet {

const 
CONNEXION_OK 1;
class 
Connexion /* ... */ }
function 
connecte() { /* ... */  }
}

namespace { 
// code global
session_start();
$a MonProjet\connecte();
echo 
MonProjet\Connexion::start();
}
?>

Aucun code PHP ne peut exister hors des accolades de l'espace de noms, sauf pour ouvrir une nouvelle instruction declare.

Exemple #4 Déclaration de plusieurs espaces de noms avec un espace sans nom (2)

<?php
declare(encoding='UTF-8');
namespace 
MonProjet {

const 
CONNEXION_OK 1;
class 
Connexion /* ... */ }
function 
connecte() { /* ... */  }
}

namespace { 
// code global
session_start();
$a MonProjet\connecte();
echo 
MonProjet\Connexion::start();
}
?>



Utilisation des espaces de noms : introduction

(PHP 5 >= 5.3.0)

Avant de discuter de l'utilisation des espaces de noms, il est important de comprendre comment PHP devine quel espace de noms votre code utilise. Une analogie simple peut être faite entre les espaces de noms de PHP et un système de fichiers. Il y a trois moyens d'accéder à un fichier dans un système de fichiers :

  1. Un nom relatif de fichier, tel que foo.txt. Cela est résolu en dossiercourant/foo.txt où dossiercourant est le dossier de travail. Si le dossier courant est /home/foo, ce nom se résout en /home/foo/foo.txt.
  2. Un chemin relatif, tel que sous-dossier/foo.txt. Cela se résout en dossiercourant/sous-dossier/foo.txt.
  3. Un chemin absolu, tel que /main/foo.txt. Cela se résout en /main/foo.txt.
Le même principe peut être appliqué aux espaces de noms de PHP. Par exemple, on peut faire référence à une classe de trois manières :
  1. Un nom sans qualificatif, ou une classe sans préfixe, telle que $a = new foo(); ou foo::methodestatique();. Si l'espace de noms courant est espacedenomscourant, ceci se résout en espacedenomscourant\foo. Si l'espace de noms est global, soit encore l'espace de noms sans nom, cela devient foo. Une mise en garde : les noms sans qualificatif pour les fonctions et les constantes vont être pris dans l'espace de noms global, si la fonction n'est pas définie dans l'espace de noms courant. Voyez Utilisation des espaces de noms : retour à l'espace de noms global pour les fonctions et les constantes pour plus de détails.
  2. Un nom qualifié, ou une classe préfixée telle que $a = new sousespacedenoms\foo(); ou sousespacedenoms\foo::methodestatique();. Si l'espace de noms courant est espacedenomscourant, cela devient espacedenomscourant\sousespacedenoms\foo. Si le code est global, c'est à dire l'espace de noms sans nom, cela devient sousespacedenoms\foo.
  3. Un nom absolu, ou un nom préfixé avec un opérateur global tel que $a = new \espacedenomscourant\foo(); ou \espacedenomscourant\foo::methodestatique();. Cela fait toujours référence au nom littéral spécifié dans le code : espacedenomscourant\foo.

Voici un exemple des trois syntaxes, dans du code réel :

file1.php

<?php
namespace Foo\Bar\sousespacedenoms;

const 
FOO 1;
function 
foo() {}
class 
foo
{
    static function 
methodestatique() {}
}
?>

file2.php

<?php
namespace Foo\Bar;
include 
'file1.php';

const 
FOO 2;
function 
foo() {}
class 
foo
{
    static function 
methodestatique() {}
}

/* nom non qualifié */
foo(); // Devient Foo\Bar\foo
foo::methodestatique(); // Devient Foo\Bar\foo, méthode methodestatique
echo FOO// Devient la constante Foo\Bar\FOO

/* nom qualifié */
sousespacedenoms\foo(); // Devient la fonction Foo\Bar\sousespacedenoms\foo
sousespacedenoms\foo::methodestatique(); // devient la classe Foo\Bar\sousespacedenoms\foo,
                                  // méthode methodestatique
echo sousespacedenoms\FOO// Devient la constante Foo\Bar\sousespacedenoms\FOO
                                  
/* nom absolu */
\Foo\Bar\foo(); // Devient la fonction Foo\Bar\foo
\Foo\Bar\foo::methodestatique(); // Devient la classe Foo\Bar\foo, méthode methodestatique
echo \Foo\Bar\FOO// Devient la constante Foo\Bar\FOO
?>

Notez que pour accéder à n'importe quelle classe, fonction ou constante globale, un nom absolu peut être utilisé, tel que \strlen() ou \Exception ou \INI_ALL.

Exemple #1 Accès aux classes, fonctions et constantes globales depuis un espace de noms

<?php
namespace Foo;

function 
strlen() {}
const 
INI_ALL 3;
class 
Exception {}

$a = \strlen('hi'); // appel la fonction globale strlen
$b = \INI_ALL// accès à une constante INI_ALL
$c = new \Exception('error'); // instantie la classe globale Exception
?>



Espaces de noms et langage dynamique

(PHP 5 >= 5.3.0)

L'implémentation des espaces de noms de PHP est influencée par sa nature dynamique de langage de programmation. Par conséquent, pour convertir du code tel que le code de l'exemple suivant, en un espace de noms :

Exemple #1 Accès dynamique aux éléments

example1.php:

<?php
class classname
{
    function 
__construct()
    {
        echo 
__METHOD__,"\n";
    }
}
function 
funcname()
{
    echo 
__FUNCTION__,"\n";
}
const 
constname "global";

$a 'classname';
$obj = new $a// affiche classname::__construct
$b 'funcname';
$b(); // affiche funcname
echo constant('constname'), "\n"// affiche global
?>
Il faut utiliser un nom absolu (le nom de la classe, avec son préfixe d'espace de noms). Notez qu'il n'y a pas de différence entre un nom absolu et un nom qualifié dans un nom de classe, de fonction ou de constante dynamique, ce qui fait que l'anti-slash initial n'est pas nécessaire.

Exemple #2 Accès dynamique à des espaces de noms

<?php
namespace nomdelespacedenoms;
class 
classname
{
    function 
__construct()
    {
        echo 
__METHOD__,"\n";
    }
}
function 
funcname()
{
    echo 
__FUNCTION__,"\n";
}
const 
constname "namespaced";

include 
'example1.php';

$a 'classname';
$obj = new $a// affiche classname::__construct
$b 'funcname';
$b(); // affiche funcname
echo constant('constname'), "\n"// affiche global

/* Note que si vous utilisez des guillemets doubles, "\\nomdelespacedenoms\\classname" doit être utilisé */
$a '\nomdelespacedenoms\classname';
$obj = new $a// affiche nomdelespacedenoms\classname::__construct
$a 'nomdelespacedenoms\classname';
$obj = new $a// affiche aussi nomdelespacedenoms\classname::__construct
$b 'nomdelespacedenoms\funcname';
$b(); // affiche nomdelespacedenoms\funcname
$b '\nomdelespacedenoms\funcname';
$b(); // affiche aussi nomdelespacedenoms\funcname
echo constant('\nomdelespacedenoms\constname'), "\n"// affiche namespaced
echo constant('nomdelespacedenoms\constname'), "\n"// affiche aussi namespaced
?>

Il est recommandé de lire la note au sujet de la protection des espaces de noms dans les chaînes.



La commande namespace et la constante __NAMESPACE__

(PHP 5 >= 5.3.0)

PHP supporte deux moyens pour accéder de manière abstraite aux éléments dans l'espace de nom courant, à savoir la constante magique __NAMESPACE__ et la commande namespace.

La valeur de __NAMESPACE__ est une chaîne qui contient le nom de l'espace de noms courant. Dans l'espace global, sans nom, elle contient une chaîne vide.

Exemple #1 Exemple avec __NAMESPACE__, dans un code avec espace de noms

<?php
namespace MonProjet;

echo 
'"'__NAMESPACE__'"'// affiche "MonProjet"
?>

Exemple #2 Exemple avec __NAMESPACE__, dans un code avec espace de noms global

<?php

echo '"'__NAMESPACE__'"'// affiche ""
?>
La constante __NAMESPACE__ est utile pour construire dynamiquement des noms, tels que :

Exemple #3 Utilisation de __NAMESPACE__ pour une construction dynamique de noms

<?php
namespace MonProjet;

function 
get($classname)
{
    
$a __NAMESPACE__ '\\' $classname;
    return new 
$a;
}
?>

La commande namespace peut aussi être utilisée pour demander explicitement un élément de l'espace de noms courant, ou d'un sous-espace. C'est l'équivalent pour les espaces de noms de l'opérateur self des classes.

Exemple #4 l'opérateur namespace, dans un espace de noms

<?php
namespace MonProjet;

use 
blah\blah as mine// Voyez "Utilisation des espaces de noms : importation et alias"

blah\mine(); // appelle la fonction MonProjet\blah\mine()
namespace\blah\mine(); // appelle la fonction MonProjet\blah\mine()

namespace\func(); // appelle la fonction MonProjet\func()
namespace\sub\func(); // appelle la fonction MonProjet\sub\func()
namespace\cname::method(); // appelle la méthode statique "method" de la classe MonProjet\cname
$a = new namespace\sub\cname(); // instantie un objet de la classe MonProjet\sub\cname
$b = namespace\CONSTANT// assigne la valeur de la constante MonProjet\CONSTANT à $b
?>

Exemple #5 l'opérateur namespace, dans l'espace de noms global

<?php

namespace\func(); // appelle la fonction func()
namespace\sub\func(); // appelle la fonction sub\func()
namespace\cname::method(); // appelle la méthode statique "method" de la classe cname
$a = new namespace\sub\cname(); // instantie un objet de la classe sub\cname
$b = namespace\CONSTANT// assigne la valeur de la constante CONSTANT à $b
?>



(PHP 5 >= 5.3.0)

Utilisation des espaces de noms : importation et alias

La capacité de faire référence à un nom absolu avec un alias ou en important un espace de noms est stratégique. C'est un avantage similaire aux liens symboliques dans un système de fichiers.

Les espaces de noms PHP supportent trois types d'alias ou d'importation : l'alias de nom de classe, l'alias de nom d'interface, et l'alias d'espace de noms. Notez que l'importation de constantes ou fonctions n'est pas supportée.

En PHP, l'alias est créé avec l'opérateur use. Voici un exemple qui présente les trois types d'importation :

Exemple #1 importation et alias avec l'opérateur use

<?php
namespace foo;
use 
My\Full\Classname as Another;

// Ceci est la même chose que use My\Full\NSname as NSname
use My\Full\NSname;

// importation d'une classe globale
use ArrayObject;

$obj = new namespace\Another// instantie un objet de la classe foo\Another
$obj = new Another// instantie un objet de la classe My\Full\Classname
NSname\subns\func(); // appelle la fonction My\Full\NSname\subns\func
$a = new ArrayObject(array(1)); // instantie un objet de la classe ArrayObject
// Sans l'instruction "use ArrayObject" nous aurions instantié un objet de la classe foo\ArrayObject
?>
Notez que pour les noms avec chemin (les noms absolus contenant des séparateurs d'espaces, tels que Foo\Bar, par comparaison avec les noms globaux, tels que FooBar, qui n'en contiennent pas), l'anti-slash initial n'est pas nécessaire et n'est pas recommandé, car les noms importés doivent être absolus et ne sont pas résolus relativement à l'espace de noms courant.

De plus, PHP supporte des raccourcis pratiques, tels que les commandes use multiples.

Exemple #2 importation et alias multiples avec l'opérateur use

<?php
use My\Full\Classname as AnotherMy\Full\NSname;

$obj = new Another// instantie un objet de la classe My\Full\Classname
NSname\subns\func(); // appelle la fonction My\Full\NSname\subns\func
?>

L'importation est réalisée à la compilation, ce qui fait que cela n'affecte pas les classes, fonctions et constantes dynamiques.

Exemple #3 Importation et noms d'espaces dynamiques

<?php
use My\Full\Classname as AnotherMy\Full\NSname;

$obj = new Another// instantie un objet de la classe My\Full\Classname
$a 'Another';
$obj = new $a;      // instantie un objet de la classe Another
?>

De plus, l'importation n'affecte que les noms sans qualification. Les noms absolus restent absolus, et inchangés par un import.

Exemple #4 Importation et noms d'espaces absolus

<?php
use My\Full\Classname as AnotherMy\Full\NSname;

$obj = new Another// instantie un objet de la classe My\Full\Classname
$obj = new \Another// instantie un objet de la classe Another
$obj = new Another\untruc// instantie un objet de la classe My\Full\Classname\untruc
$obj = new \Another\untruc// instantie un objet de la classe Another\untruc
?>

Règles de contextes pour l'importation

Le mot-clé use doit être déclaré dans le contexte le plus externe d'un fichier (le contexte global) ou alors dans les déclarations d'espace de noms. Ceci car l'importation est effectuée à la compilation et non durant l'éxecution, donc on ne peut empiler les contextes. L'exemple qui suit montre des utilisation incorrectes du mot-clé use:

Exemple #5 Règles d'importation incorrectes

<?php
namespace Languages;

class 
Greenlandic
{
    use 
Languages\Danish;
    ...
}
?>

Note:

Les règles d'importation sont basées sur les fichiers, ce qui signifie que les fichiers inclus n'hériteront PAS des règles d'importation du fichier parent.



Espace de noms global

(PHP 5 >= 5.3.0)

Sans aucune définition d'espace de noms, toutes les classes et les fonctions sont placées dans l'espace de noms global : comme en PHP avant que les espaces de noms aient été introduits. En préfixant un nom avec un anti-slash \, on peut demander l'utilisation de l'espace de noms global, même dans un contexte d'espace de noms spécifique.

Exemple #1 Spécification d'espace de noms global

<?php
namespace A\B\C;

/* Cette fonction est A\B\C\fopen */
function fopen() { 
     
/* ... */
     
$f = \fopen(...); // appel à fopen global
     
return $f;

?>



Utilisation des espaces de noms : retour à l'espace global

(PHP 5 >= 5.3.0)

Dans un espace de noms, lorsque PHP rencontre un nom sans qualification, que ce soit une classe, une fonction ou une constante, il le résout avec différentes priorités. Les noms de classes sont toujours résolus avec l'espace de noms courant. Pour accéder à des classes internes ou à des classes qui ne sont pas dans un espace de noms, il faut les représenter avec leur nom absolu, tel que :

Exemple #1 Accès aux classes globales depuis un espace de noms

<?php
namespace A\B\C;
class 
Exception extends \Exception {}

$a = new Exception('hi'); // $a est un objet de la classe A\B\C\Exception
$b = new \Exception('hi'); // $b est un objet de la classe Exception

$c = new ArrayObject// erreur fatale, classe A\B\C\ArrayObject non trouvée
?>

Pour les fonctions et constantes, PHP va aller les chercher dans l'espace global s'il ne peut les trouver dans l'espace de noms courant.

Exemple #2 Accès aux fonctions et constantes globales dans un espace de noms

<?php
namespace A\B\C;

const 
E_ERROR 45;
function 
strlen($str)
{
    return \
strlen($str) - 1;
}

echo 
E_ERROR"\n"// affiche "45"
echo INI_ALL"\n"// affiche "7" : accès dans l'espace de noms global INI_ALL

echo strlen('hi'), "\n"// affiche "1"
if (is_array('hi')) { // affiche "n'est pas un tableau"
    
echo "est un tableau\n";
} else {
    echo 
"n'est pas un tableau\n";
}
?>



Règles de résolutions de noms

(PHP 5 >= 5.3.0)

Dans le cadre des règles de résolution, il y a plusieurs définitions importantes :

Définitions pour les espaces de noms
nom non qualifié

Ceci est un identifiant ne contenant pas un séparateur d'espace de noms. Par exemple : Foo

nom qualifié

Ceci est un identifiant contenant un séparateur d'espace de noms. Par exemple : Foo\Bar

Nom absolu

Ceci est un identifiant qui commence par un séparateur d'espace de noms. Par exemple : \Foo\Bar. namespace\Foo est aussi un nom absolu.

Les noms sont résolus en suivant les règles suivantes :

  1. Les appels à des espaces de noms absolus pour des fonctions, classes ou constantes sont résolus à la compilation. Par exemple, new \A\B utilise la classe A\B.
  2. Tous les noms qui ne sont pas absolus sont traduits durant la compilation à l'aide des règles d'importation. Par exemple, si le nom A\B\C est importé sous l'alias C, un appel à C\D\e() est traduit en un appel à A\B\C\D\e().
  3. Dans un nom de domaine, tous les noms qualifiés qui ne sont pas traduits à l'aide des règles d'importation sont préfixés avec l'espace de noms courant. Par exemple, si un appel à C\D\e() est effectué dans l'espace de noms A\B, il est traduit en A\B\C\D\e().
  4. Les classes non qualifiées sont traduites durant la compilation en fonction des règles d'importations (le nom complet remplace les noms courts). Par exemple, si l'espace de noms A\B\C est importé sous le nom C, new C() est remplacé par new A\B\C().
  5. Dans un espace de noms, tel que A\B, les appels à des fonctions sans qualification sont résolus à la compilation. Voici comment un appel à foo() est résolu :
    1. Il recherche une fonction dans l'espace de noms courant : A\B\foo().
    2. Il essaie de trouver et appeler la fonction globale foo().
  6. Dans un espace de noms, e.g. A\B, un appel à une classe qualifiée ou non qualifiée (pas absolue) est résolu à l'exécution. Voici comment un appel à new C() ou à new D\E() est résolu. Pour new C() :
    1. Il recherche une classe dans l'espace de noms courant : A\B\C.
    2. Il appelle l'autoload pour A\B\C.
    Pour new D\E():
    1. Il recherche une classe dans l'espace de noms courant : A\B\D\E.
    2. Il appelle l'autoload pour A\B\D\E.
    Pour référencer une classe globale dans l'espace de noms global, son nom absolu new \C() doit être utilisé.

Exemple #1 Exemples de résolutions d'espaces de noms

<?php
namespace A;
use 
B\DC\as F;

// appels de fonctions

foo();      // tente d'appeler la fonction "foo" dans l'espace de noms "A"
            // puis appelle la fonction globale "foo"

\foo();     // appelle la fonction "foo" définie dans l'espace de noms global

my\foo();   // appelle la fonction "foo" définie dans l'espace de noms "A\my"

F();        // tente d'appeler la fonction "F" définie dans l'espace "A"
            // puis tente d'appeler la fonction globale "F"

// référence de classes references

new B();    // crée un objet de la classe "B" définie dans l'espace de noms  "A"
            // si non trouvé, il essaie l'autoload sur la classe "A\B"

new D();    // crée un objet de la classe "D" définie dans l'espace de noms  "B"
            // si non trouvé, il essaie l'autoload sur la classe "B\D"

new F();    // crée un objet de la classe "E" définie dans l'espace de noms  "C"
            // si non trouvé, il essaie l'autoload sur la classe "C\E"

new \B();   // crée un objet de la classe "B" définie dans l'espace de noms global
            // si non trouvé, il essaie l'autoload sur la classe "B"

new \D();   // crée un objet de la classe "D" définie dans l'espace de noms global
            // si non trouvé, il essaie l'autoload sur la classe "D"

new \F();   // crée un objet de la classe "F" définie dans l'espace de noms global
            // si non trouvé, il essaie l'autoload sur la classe "F"

// méthodes statiques et fonctions d'espace de noms d'un autre espace

B\foo();    // appelle la fonction "foo" de l'espace de noms "A\B"

B::foo();   // appelle la méthode "foo" de la classe "B" définie dans l'espace de noms  "A"
            // si la classe "A\B" n'est pas trouvée, il essaie l'autoload sur la classe "A\B"

D::foo();   // appelle la méthode "foo" de la classe "D" définie dans l'espace de noms  "B"
            // si la classe "B\D" n'est pas trouvée, il essaie l'autoload sur la classe "B\D"

\B\foo();   // appelle la fonction "foo" de l'espace de noms "B"

\B::foo();  // appelle la méthode "foo" de la classe "B" située dans l'espace de noms global
            // si la classe "B" n'est pas trouvée, il essaie l'autoload sur la classe "B"

// méthodes statiques et fonctions d'espace de noms de l'espace courant

A\B::foo();   // appelle la méthode "foo" de la classe "B" de l'espace de noms "A\A"
              // si la classe "A\A\B" n'est pas trouvée, il essaie l'autoload sur la classe "A\A\B"

\A\B::foo();  // appelle la méthode "foo" de la classe "B" de l'espace de noms "A"
              // si la classe "A\B" n'est pas trouvée, il essaie l'autoload sur la classe "A\B"
?>


Foire aux questions : ce que vous devez savoir des espaces de noms

(PHP 5 >= 5.3.0)

Cette FAQ est décomposée en deux sections : les questions courantes, et les points particuliers de l'implémentation, qui peuvent être utiles à la compréhension globale.

D'abord, les questions courantes.

  1. Si je n'utilise pas d'espaces de noms, est-ce que je dois m'en soucier ?
  2. Comment utiliser une classe globale ou interne depuis un espace de noms ?
  3. Comment utiliser les classes d'espaces de noms, les fonctions ou les constantes dans leur propre espace ?
  4. Comment est-ce qu'un nom comme \mon\nom ou \nom est résolu ?
  5. Comment est-ce qu'un nom tel que mon\nom est résolu ?
  6. Comment un nom de classe sans qualification, tel que nom, est résolu ?
  7. Comment une fonction sans qualification ou une constante de nom nom est résolue ?

Voici les points particuliers de l'implémentation, qui peuvent être utiles à la compréhension globale.

  1. Les noms importés ne doivent pas entrer en conflit avec les classes définies dans le même fichier
  2. Les espaces de noms imbriqués sont interdits
  3. Ni les fonctions, ni les constantes ne peuvent être importées avec la commande use
  4. Les noms d'espaces de noms dynamiques doivent protéger l'anti-slash
  5. Des constantes indéfinies référencées avec un anti-slash produisent une erreur fatale
  6. Impossible de remplacer des constantes spéciales comme NULL, TRUE, FALSE, ZEND_THREAD_SAFE ou ZEND_DEBUG_BUILD

Si je n'utilise pas d'espaces de noms, est-ce que je dois m'en soucier ?

Non, les espaces de noms n'affectent pas le code existant, d'une manière ou d'une autre, ni le code qui sera produit et qui n'utilise pas les espaces de noms. Vous pouvez écrire ceci si vous voulez :

Exemple #1 Accès à une classe globale de l'extérieur d'un espace de noms

<?php
$a 
= new \stdClass;
?>

C'est une fonctionnalité équivalente à :

Exemple #2 Accéder à des classes globales hors d'un espace de noms

<?php
$a 
= new stdClass;
?>

Comment utiliser une classe globale ou interne depuis un espace de noms ?

Exemple #3 Accès aux classes internes depuis un espace de noms

<?php
namespace foo;
$a = new \stdClass;

function 
test(\ArrayObject $typehintexample null) {}

$a = \DirectoryIterator::CURRENT_AS_FILEINFO;

// extension d'une classe interne ou globale
class MyException extends \Exception {}
?>

Comment utiliser les classes d'espaces de noms, les fonctions ou les constantes dans leur propre espace ?

Exemple #4 Accès aux classes, fonctions et constantes internes dans un espace de noms

<?php
namespace foo;

class 
MaClasse {}

// utilisation d'une classe dans l'espace de noms courant, sous forme de type d'argument
function test(MaClasse $typehintexample null) {}

// une autre manière d'utiliser une classe dans l'espace de noms courant
function test(\foo\MaClasse $typehintexample null) {}

// extension d'une classe dans l'espace de noms courant
class Extended extends MaClasse {}

// accès à une fonction globale
$a = \globalfunc();

// accès à une constante globale
$b = \INI_ALL;
?>

Comment est-ce qu'un nom comme \mon\nom ou \nom est résolu ?

Les noms qui commencent par \ sont toujours résolus en ce à quoi ils ressemblent, ce qui fait que \mon\nom est en fait mon\nom, et \Exception est Exception.

Exemple #5 Noms d'espaces absolus

<?php
namespace foo;
$a = new \mon\nom(); // instantie la classe "mon\nom"
echo \strlen('hi'); // appelle la fonction "strlen"
$a = \INI_ALL// $a reçoit la valeur de la constante "INI_ALL"
?>

Comment est-ce qu'un nom tel que mon\nom est résolu ?

Les noms qui contiennent un anti-slash mais ne commencent par par un anti-slash, comme mon\nom peuvent être résolus de deux manières différentes.

S'il y a eu une commande d'importation qui fait un alias de mon, alors l'alias importé est appliqué à la place de mon, et l'espace de noms devient mon\nom.

Sinon, l'espace de noms courant est ajouté avant le chemin de la classe mon\nom.

Exemple #6 Noms qualifiés

<?php
namespace foo;
use 
blah\blah as foo;

$a = new mon\nom(); // instantie la classe "foo\mon\nom"
foo\bar::name(); // appelle la méthode statique "name" dans la classe "blah\blah\bar"
mon\bar(); // appelle la fonction "foo\mon\bar"
$a mon\BAR// affecte à $a la valeur de la constante "foo\mon\BAR"
?>

Comment un nom de classe sans qualification, tel que nom, est résolu ?

Les noms de classes qui ne contiennent pas d'anti-slash comme nom peuvent être résolus de deux manières différentes.

S'il y a une instruction d'importation qui définit un alias pour nom, alors l'alias est appliqué.

Sinon, l'espace de noms courant est utilisé et préfixé à nom.

Exemple #7 Classes sans qualification

<?php
namespace foo;
use 
blah\blah as foo;

$a = new nom(); // instantie la classe "foo\nom"
foo::nom(); // appelle la méthode statique "nom" dans la classe "blah\blah"
?>

Comment une fonction sans qualification ou une constante de nom nom est résolue ?

Les fonctions et constantes qui n'ont pas d'anti-slash dans leur nom comme nom sont résolues de deux manières différentes :

D'abord, l'espace de noms courant est préfixé à nom.

Ensuite, si la constante ou la fonction nom n'existe pas dans l'espace de nom courant, la version globale de la constante ou la fonction nom est utilisée.

Exemple #8 Fonctions et constantes sans espace de noms

<?php
namespace foo;
use 
blah\blah as foo;

const 
FOO 1;

function 
mon() {}
function 
foo() {}
function 
sort(&$a)
{
    
sort($a);
    
$a array_flip($a);
    return 
$a;
}

mon(); // appelle "foo\mon"
$a strlen('hi'); // appelle la fonction globale "strlen" car "foo\strlen" n'existe pas
$arr = array(1,3,2);
$b sort($arr); // appelle la fonction "foo\sort"
$c foo(); // appelle la fonction "foo\foo" : l'importation n'est pas appliquée

$a FOO// assigne à $a la valeur de la constante "foo\FOO" : l'importation n'est pas appliquée
$b INI_ALL// assigne à $b la valeur de la constante "INI_ALL"
?>

Les noms importés ne doivent pas entrer en conflit avec les classes définies dans le même fichier

La combinaison de scripts suivante est valide :

file1.php

<?php
namespace mes\trucs;
class 
MaClasse {}
?>

another.php

<?php
namespace another;
class 
untruc {}
?>

file2.php

<?php
namespace mes\trucs;
include 
'file1.php';
include 
'another.php';

use 
another\untruc as MaClasse;
$a = new MaClasse// instantie la classe "untruc" de l'espace de noms another
?>

Il n'y a pas de conflit de noms, même si la classe MaClasse existe dans l'espace de noms mes\trucs, car la définition de MaClasse est dans un fichier séparé. Cependant, l'exemple suivant produit une erreur fatale à cause d'un conflit de noms, car MaClasse est définie dans le même fichier que l'instruction use.

<?php
namespace mes\trucs;
use 
another\untruc as MaClasse;
class 
MaClasse {} // erreur fatale: MaClasse est en conflit avec la commande d'importation
$a = new MaClasse;
?>

Les espaces de noms imbriqués sont interdits

PHP ne permet pas d'imbriquer des espaces de noms.

<?php
namespace mes\trucs {
    namespace 
nested {
        class 
foo {}
    }
}
?>
Cependant, il est facile de simuler des espaces de noms imbriqués, comme ceci :
<?php
namespace mes\trucs\nested {
    class 
foo {}
}
?>

Ni les fonctions, ni les constantes ne peuvent être importées avec la commande use

Les seuls éléments qui sont affectés par la commande use sont les espaces de noms et les classes. Afin de réduire le nom d'une constante ou d'une fonction, il faut l'importer dans un espace de noms.

<?php
namespace mine;
use 
ultra\long\ns\nom;

$a nom\CONSTANT;
nom\func();
?>

Les noms d'espaces de noms dynamiques doivent protéger l'anti-slash

Il est très important de réaliser que, comme les anti-slash sont utilisés comme caractères de protection dans les chaînes, il faut toujours les doubler pour pouvoir les utiliser dans une chaîne. Sinon, il y a un risque d'utilisation inattendue :

Exemple #9 Dangers de l'utilisation des espaces de noms dans une chaîne

<?php
$a 
= new "dangereux\nom"// \n est une nouvelle ligne dans une chaîne!
$obj = new $a;

$a = new 'pas\vraiment\dangereux'// aucun problème ici
$obj = new $a;
?>
Dans une chaîne à double guillemets, la séquence de protection est beaucoup plus sécuritaire à utiliser, mais il est quand même recommandé de toujours protéger les anti-slashs dans une chaîne qui contient un espace de noms.

Des constantes indéfinies référencées avec un anti-slash produisent une erreur fatale

Toute constante indéfinie qui est sans qualificatif telle que FOO va produite une alerte : PHP supposait que FOO était la valeur de la constante. Toute constante, qualifiée partiellement ou totalement, qui contient un anti-slash, produite une erreur fatale si indéfinie.

Exemple #10 Constantes indéfinies

<?php
namespace bar;
$a FOO// produit une alerte : constante indéfinie "FOO", qui prend la valeur de "FOO";
$a = \FOO// erreur fatale, constante d'espace de noms indéfinie FOO
$a Bar\FOO// erreur fatale, constante d'espace de noms indéfinie bar\Bar\FOO
$a = \Bar\FOO// erreur fatale, constante d'espace de noms indéfinie Bar\FOO
?>

Impossible de remplacer des constantes spéciales comme NULL, TRUE, FALSE, ZEND_THREAD_SAFE ou ZEND_DEBUG_BUILD

Toute tentative dans un espace de noms de remplacer les constantes natives ou spéciales, engendre une erreur fatale.

Exemple #11 Constantes qui ne peuvent être redéfinies

<?php
namespace bar;
const 
NULL 0// erreur fatale;
const true 'stupid'// encore une erreur fatale;
// etc.
?>




Les exceptions

Sommaire

PHP a une gestion des exceptions similaire à ce qu'offrent les autres langages de programmation. Une exception peut être lancée ("throw") et attrapée ("catch") dans PHP. Le code devra être entouré d'un bloc try pour faciliter la saisie d'une exception potentielle. Chaque try doit avoir au moins un bloc catch correspondant. Plusieurs blocs catch peuvent être utilisés pour attraper différentes classes d'exceptions. L'exécution normale (lorsqu'aucune exception n'est lancée dans le bloc try ou lorsqu'un catch correspondant à l'exception lancée n'est pas présent) continue après le dernier bloc catch défini dans la séquence. Les exceptions peuvent être lancées (ou relancées) dans un bloc catch.

Lorsqu'une exception est lancée, le code suivant le traitement ne sera pas exécuté et PHP tentera de trouver le premier bloc catch correspondant. Si une exception n'est pas attrapée, une erreur fatale issue de PHP sera envoyée avec un message spécifiant que l'exception n'a pu être attrapée à moins qu'un gestionnaire d'exceptions ne soit défini avec la fonction set_exception_handler().

L'objet lancé doit être une instance de la classe Exception ou une sous-classe de la classe Exception. Tenter de lancer un objet qui ne correspond pas à cela résultera en une erreur fatale émise par PHP.

Note:

Les fonctions internes de PHP utilisent principalement l' Error reporting, seules les extensions orientées objet utilisent les exceptions. Quoiqu'il en soit, des erreurs peuvent facilement être traduites en exceptions avec ErrorException.

Exemple #1 Lancer une exception

<?php
function inverse($x) {
    if (!
$x) {
        throw new 
Exception('Division par zéro.');
    }
    else return 
1/$x;
}

try {
    echo 
inverse(5) . "\n";
    echo 
inverse(0) . "\n";
} catch (
Exception $e) {
    echo 
'Exception reçue : ',  $e->getMessage(), "\n";
}

// Continue execution
echo 'Bonjour le monde !';
?>

L'exemple ci-dessus va afficher :

0.2
Exception reçue : Division par zéro.
Bonjour le monde !

Exemple #2 Héritage d'une exception

<?php

class MyException extends Exception { }

class 
Test {
    public function 
testing() {
        try {
            try {
                throw new 
MyException('foo!');
            } catch (
MyException $e) {
                
/* on la relance */
                
throw $e;
            }
        } catch (
Exception $e) {
            
var_dump($e->getMessage());
        }
    }
}

$foo = new Test;
$foo->testing();

?>

L'exemple ci-dessus va afficher :

string(4) "foo!"

Exceptions étendues

Une classe d'exception écrite par l'utilisateur peut être définie en étendant la classe Exception interne. Les membres et les propriétés suivants montrent ce qui est accessible dans la classe enfant qui est dérivée de la classe Exception interne.

Exemple #1 La classe Exception interne

<?php
class Exception
{
  protected 
$message 'exception inconnu'// message de l'exception
  
private   $string;                        // __toString cache
  
protected $code 0;                      // code de l'exception défini par l'utilisateur
  
protected $file;                          // nom du fichier source de l'exception
  
protected $line;                          // ligne de la source de l'exception
  
private   $trace;                         // backtrace
  
private   $previous;                      // exception précédente (depuis PHP 5.3)

  
public function __construct($message null$code 0Exception $previous null);

  final private function 
__clone();         // Inhibe le clonage des exceptions.

  
final public function getMessage();              // message de l'exception
  
final public function getCode();                 // code de l'exception
  
final public function getFile();                 // nom du fichier source
  
final public function getLine();                 // ligne du fichier source
  
final public function getTrace();                // un tableau de backtrace()
  
final public function getPrevious();             // exception précédente (depuis PHP 5.3)
  
final public function getTraceAsString();        // chaîne formatée de trace

  /* Remplacable */
  
public function __toString();                    // chaîne formatée pour l'affichage
}
?>

Si une classe étend la classe Exception interne et redéfinit le constructeur, il est vivement recommandé qu'elle appelle aussi parent::__construct() pour s'assurer que toutes les données disponibles ont été proprement assignées. La méthode __toString() peut être réécrite pour fournir un affichage personnalisé lorsque l'objet est présenté comme une chaîne.

Note:

Les exceptions ne peuvent pas être clônées. Si vous tentez de clôner une exception, une erreur fatale (E_ERROR) sera émise.

Exemple #2 Étendre la classe Exception (PHP 5.3.0+)

<?php
/**
* Définition d'une classe d'exception personnalisée
*/
class MyException extends Exception
{
  
// Redéfinissez l'exception ainsi le message n'est pas facultatif
  
public function __construct($message$code 0Exception $previous null) {

    
// traitement personnalisé que vous voulez réaliser ...

    // assurez-vous que tout a été assigné proprement
    
parent::__construct($message$code$previous);
  }

  
// chaîne personnalisée représentant l'objet
  
public function __toString() {
    return 
__CLASS__ ": [{$this->code}]: {$this->message}\n";
  }

  public function 
customFunction() {
    echo 
"Une fonction personnalisée pour ce type d'exception\n";
  }
}

/**
* Création d'une classe pour tester l'exception
*/
class TestException
{
  public 
$var;

  const 
THROW_NONE    0;
  const 
THROW_CUSTOM  1;
  const 
THROW_DEFAULT 2;

  function 
__construct($avalue self::THROW_NONE) {

    switch (
$avalue) {
      case 
self::THROW_CUSTOM:
        
// lance une exception personnalisée
        
throw new MyException('1 est un paramètre invalide'5);
        break;

      case 
self::THROW_DEFAULT:
        
// lance l'exception par défaut.
        
throw new Exception('2 n\'est pas autorisé en tant que paramètre'6);

        break;

      default:
        
// Aucune exception, l'objet sera créé.
        
$this->var $avalue;
        break;
    }
  }
}

// Exemple 1
try {
  
$o = new TestException(TestException::THROW_CUSTOM);
} catch (
MyException $e) {            // Devrait être attrapée
  
echo "Capture mon exception\n"$e;
  
$e->customFunction();
} catch (
Exception $e) {              // Sauté
  
echo "Capture l'exception par défaut\n"$e;
}

// Continue l'exécution
var_dump($o); // Null
echo "\n\n";


//Exemple 2
try {
  
$o = new TestException(TestException::THROW_DEFAULT);
} catch (
MyException $e) {            // Ne correspond pas à ce type
  
echo "Capture mon exception\n"$e;
  
$e->customFunction();
} catch (
Exception $e) {              // Devrait être attrapée
  
echo "Capture l'exception par défaut\n"$e;
}

// Continue l'exécution
var_dump($o); // Null
echo "\n\n";


// Exemple 3
try {
  
$o = new TestException(TestException::THROW_CUSTOM);
} catch (
Exception $e) {              // Devrait être attrapée
  
echo "Capture l'exception par défaut\n"$e;
}

// Continue l'exécution
var_dump($o); // Null
echo "\n\n";


// Exemple 4
try {
  
$o = new TestException();
} catch (
Exception $e) {              // sauté, aucune exception
  
echo "Capture l'exception par défaut\n"$e;
}

// Continue l'exécution
var_dump($o); // TestException
echo "\n\n";
?>

Note:

Dans PHP, avant PHP 5.3.0 les exceptions ne pouvaient être nichées. Le code suivant montre un exemple d'extension de la classe d'Exception avant PHP 5.3.0.

<?php
/**
 * Définition d'une classe d'exception personnalisée
 */
class MyException extends Exception
{
    
// Redéfinition du constructeur pour rendre le message obligatoire
    
public function __construct($message$code 0) {
        
// du code ici
    
        // Appel du parent
        
parent::__construct($message$code);
    }

    
// Représentation de l'objet sous forme de chaine personnalisée
    
public function __toString() {
        return 
__CLASS__ ": [{$this->code}]: {$this->message}\n";
    }

    public function 
customFunction() {
        echo 
"Une méthode personnalisée pour cette exception\n";
    }
}
?>




Les références

Sommaire


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 ; vous ne pouvez pas effectuer des opérations arithmétiques comme sur des pointeurs, ce ne sont pas des adresses mémoires. Voyez Ce que les références ne sont pas pour plus d'informations. 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 répertoire, 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 ?

Il y a 3 utilisations principales des références: assignation par référence, passage par référence, et retourner par référence. Cette section introduit ces opérations, avec des liens vers plus de précision.

Assignation par référence

Dans ce premier cas, les références PHP vous permettent de faire en sorte que 2 variables référencent le même contenu. Ainsi :

<?php
$a 
=& $b;
?>
cela signifie que $a et $b pointent sur le même contenu.

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.

Note:

Si vous assignez, passez ou retournez une variable indéfinie par référence, elle sera créée automatiquement.

Exemple #1 Utilisation des références avec des variables indéfinies

<?php
function foo(&$var) { }

foo($a); // $a est "créée" et assignée à NULL

$b = array();
foo($b['b']);
var_dump(array_key_exists('b'$b)); // bool(true)

$c = new StdClass;
foo($c->d);
var_dump(property_exists($c'd')); // bool(true)
?>

La même syntaxe peut être utilisée avec les fonctions qui retournent des références, et avec l'opérateur new (depuis PHP 4.0.4 et avant PHP 5.0.0) :

<?php
$foo 
=& find_var($bar);
?>
Depuis PHP 5, new retourne une référence automatiquement, donc, l'utilisation de =& dans ce contexte est obsolète et produit un message de niveau E_DEPRECATED à partir de PHP 5.3, et un message E_STRICT dans les versions antérieures. (Techniquement, la difference est qu'en PHP 5, les objets comme les ressources sont des pointeurs vers la donnée réelle. La notion de "référence" ici est donc un peu différente (alias). Pour plus d'informations, voyez Les objects et les références.)

Avertissement

Si vous assignez une référence à une variable déclarée global dans une fonction, la référence ne sera visible qu'au sein de la fonction. Vous pouvez éviter cela en utilisant le tableau $GLOBALS.

Exemple #2 Référencer des variables globales depuis fonction

<?php
$var1 
"Variable Exemple";
$var2 "";

function 
global_references($use_globals)
{
    global 
$var1$var2;
    if (!
$use_globals) {
        
$var2 =& $var1// visible uniquement dans la fonction
    
} else {
        
$GLOBALS["var2"] =& $var1// visible également dans un contexte global
    
}
}

global_references(false);
echo 
"var2 est défini à '$var2'\n"// var2 est défini à ''
global_references(true);
echo 
"var2 est défini à '$var2'\n"// var2 est défini à 'Variable Exemple'
?>
Voyez global $var; comme un raccourci pour $var =& $GLOBALS['var'];. De ce fait assignant d'autres références à $var changeant uniquement la référence locale de la variable.

Note:

Si vous assignez des valeurs par références dans une structure foreach, les références seront également modifiées.

Exemple #3 Références et structure foreach

<?php
$ref 
0;
$row =& $ref;
foreach (array(
123) as $row) {
    
// faites quelque chose
}
echo 
$ref// 3 - le dernier élément du tableau itéré
?>

Même si ce n'est pas strictement une assignation par référence, les expressions créees avec la structure de langage array() peuvent aussi se comporter comme tel en préfixant par & l'élément du tableau. Exemple:

<?php
$a 
1;
$b = array(23);
$arr = array(&$a, &$b[0], &$b[1]);
$arr[0]++; $arr[1]++; $arr[2]++;
/* $a == 2, $b == array(3, 4); */
?>

Notez par contre que les références à l'intérieur des tableaux peuvent s'avérer dangereuses. Utiliser une assignation normale (pas par référence) avec une référence à droite de l'opérateur ne transforme pas la partie gauche de l'expression en référence, mais les références dans les tableaux sont préservées. Ceci s'applique aussi aux appels de fonctions avec un tableau passé par valeur. Exemple:

<?php
/* Assignation de variables scalaires */
$a 1;
$b =& $a;
$c $b;
$c 7//$c n'est pas une référence; pas de changement à $a ou $b

/* Assignation de variables de type tableau */
$arr = array(1);
$a =& $arr[0]; //$a et $arr[0] sont des références vers la même valeur
$arr2 $arr//PAS une assignation par référence!
$arr2[0]++;
/* $a == 2, $arr == array(2) */
/* Les contenus de $arr sont changés même si ce n'était pas une référence! */
?>
In other words, the reference behavior of arrays is defined in an element-by-element basis; the reference behavior of individual elements is dissociated from the reference status of the array container.

Passage par référence

Le deuxième intérêt des références est de pouvoir passer des variables par référence. On réalise ceci en faisant pointer des variables locales vers le contenu des variables de fonction. Exemple :

<?php
function foo(&$var) {
  
$var++;
}
$a=5;
foo($a);
?>
$a vaut 6. Cela provient du fait que dans la fonction foo, la variable $var pointe sur le même contenu que $a. Voir aussi les explications détaillées dans passage par référence.

Retourner par référence

Le troisième intérêt des références est de retourner des valeurs par référence.



Ce que les références ne sont pas

Comme précisé ci-dessus, les références ne sont pas des pointeurs. Cela signifie que le script suivant ne fera pas ce à quoi on peut s'attendre :

<?php
function foo(&$var) {
  
$var =& $GLOBALS["baz"];
}
foo($bar);
?>

Il va se passer que $var dans foo sera lié à $bar, mais il sera aussi relié à $GLOBALS["baz"]. Il n'y a pas moyen de lier $bar à quelque chose d'autre en utilisant le mécanisme de référence, car $bar n'est pas accessible dans la fonction foo (certes, il est représenté par $var et $var possède la même valeur, mais n'est pas relié par la table des symboles). Vous pouvez utiliser les références arrières pour référencer les variables sélectionnées par la fonction.



Passage par référence

Vous pouvez passer des variables par référence, de manière à ce que la fonction modifie ces variables. La syntaxe est la suivante :

<?php
function foo(&$var) {
  
$var++;
}
$a=5;
foo ($a);
// $a vaut 6 maintenant
?>

Note: 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. Dans les versions récentes de PHP, vous devriez recevoir une alerte disant que "Call-time pass-by-reference" est obsolète lorsque vous utilisez un & dans foo(&$a);.

Les objets suivants peuvent être passés par référence :

  • Une variable, i.e. foo($a)
  • Un nouvel objet, i.e. foo(new foobar())
  • Une référence, retournée par une fonction :

    <?php
    function foo(&$var)
    {
        
    $var++;
    }
    function &
    bar()
    {
     
    $a 5;
     return 
    $a;
    }
    foo(bar());
    ?>
    Voir aussi des détails dans retourner des références.

Toutes les autres expressions ne doivent pas être passées par référence, car le résultat sera indéfini. Par exemple, les passages par référence suivants sont invalides :

<?php
function foo(&$var)
{
    
$var++;
}
function 
bar() // Notez l'absence de &
{
   
$a 5;
   return 
$a;
}
foo(bar());    // Produit une erreur fatale depuis PHP 5.0.5

foo($a 5);    // Expression, pas une variable
foo(5);         // Produit une erreur fatale
?>
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. N'utilisez pas le retour par référence pour améliorer les performances, le moteur est suffisamment robuste pour optimiser cela en interne. Retournez uniquement des références lorsque vous avez techniquement une bonne raison de le faire ! Pour retourner des références, utilisez cette syntaxe :

<?php
class foo {
    public 
$value 42;

    public function &
getValue() {
        return 
$this->value;
    }
}

$obj = new foo;
$myValue = &$obj->getValue(); // $myValue est une référence de $obj->value, qui vaut 42.
$obj->value 2;
echo 
$myValue;                // affiche la nouvelle valeur de $obj->value, i.e. 2.
?>
Dans cet exemple, on affecte une valeur à la propriété de l'objet retourné par la fonction getValue, et non à sa copie, comme ce serait le cas si on n'avait pas utilisé la syntaxe de référence.

Note: Contrairement au passage de paramètre, vous devez utiliser & aux deux endroits, à la fois pour indiquer que vous retournez par référence (pas une copie habituelle), et pour indiquer que vous assignez aussi par référence (pas la copie habituelle) pour la variable $myValue.

Note: Si vous tentez de retourner une référence depuis une fonction avec la syntaxe :return ($this->value);, cela ne fonctionnera pas comme vous l'attendez et retournera le résultat de l'expression, mais pas de la variable, par référence. Vous ne pouvez retourner des variables par référence que depuis une fonction - rien d'autre. Depuis PHP 4.4.0 dans la branche PHP 4 et PHP 5.1.0 dans la branche PHP 5, une alerte E_NOTICE est envoyée si le code tente de retourner une expression dynamique ou un résultat de l'opérateur new.

Pour utiliser la référence retournée, vous devez utiliser l'assignement par référence :

<?php
function &collector() {
  static 
$collection = array();
  return 
$collection;
}
$collection = &collector();
$collection[] = 'foo';
?>
Pour passer la référence retournée à une autre fonction attendant une référence, vous pouvez utiliser la syntaxe suivante :
<?php
function &collector() {
  static 
$collection = array();
  return 
$collection;
}
array_push(collector(), 'foo');
?>

Note: Notez que array_push(&collector(), 'foo'); ne fonctionnera pas, et résultera en une erreur fatale.



Détruire une référence

Lorsque vous détruisez une référence, vous ne faites que casser le lien entre le nom de la variable et son contenu. Cela ne signifie pas que le contenu est détruit. Par exemple :

<?php
$a 
1;
$b =& $a;
unset(
$a);
?>
Cet exemple ne détruira pas $b, mais juste $a.

Encore une fois, on peut comparer cette action avec la fonction unlink d'Unix.



Repérer une référence

De nombreuses syntaxes de PHP sont implémentées via le mécanisme de référence, et tout ce qui a été vu concernant les liaisons entre variables s'applique à ces syntaxes. Par exemple, le passage et le retour d'arguments par référence. Quelques autres exemples de syntaxes :

Références globales

Lorsque vous déclarez une variable global $var, vous créez en fait une référence sur une variable globale. Ce qui signifie que

<?php
$var 
=& $GLOBALS["var"];
?>

Et que, si vous détruisez la variable $var, la variable globale ne sera pas détruite.

$this

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




Variables prédéfinies

PHP fournit un très grand nombre de variables prédéfinies accessibles à tous vos scripts. Ces variables représentent à peu près tout, allant des variables externes aux variables d'environnement intégrées à PHP, en passant par les derniers messages d'erreur ou les en-têtes récupérés.

Voir la FAQ intitulée "Comment la directive register_globals affecte-t-elle mes scripts ?"


Les Superglobales

Les SuperglobalesLes Superglobales sont des variables internes qui sont toujours disponibles, quel que soit le contexte

Description

Plusieurs variables prédéfinies en PHP sont "superglobales", ce qui signifie qu'elles sont disponibles quel que soit le contexte du script. Il est inutile de faire global $variable; avant d'y accéder dans les fonctions ou les méthodes.

Les variables superglobales sont :

Historique

Version Description
4.1.0 Les superglobales sont introduites en PHP.

Notes

Note: Disponibilité des variables

Par défaut, toutes les superglobales sont disponibles, et seules les directives de configuration peuvent les rendre indisponibles. Pour plus d'informations, reportez-vous à la documentation sur l'ordre des variables.

Note: Gérer la directive register_globals

Si la directive obsolète register_globals est définie à on, alors les variables simples seront également disponibles dans le contexte global du script. Par exemple, $_POST['foo'] existera également sous la forme $foo.

Pour plus d'informations, voir la FAQ intitulée "Comment la directive register_globals affecte-t-elle mes scripts ?"

Note: Variable variables

Les superglobales ne peuvent pas être utilisées comme variables variables dans une fonction ou une méthode d'une classe.



$GLOBALS

(PHP 4, PHP 5)

$GLOBALSRéférence toutes les variables disponibles dans un contexte global

Description

Un tableau associatif contenant les références sur toutes les variables globales actuellement définies dans le contexte d'exécution global du script. Les noms des variables sont les index du tableau.

Exemples

Exemple #1 Exemple avec $GLOBALS

<?php
function test() {
    
$foo "variable locale";

    echo 
'$foo dans le contexte global : ' $GLOBALS["foo"] . "\n";
    echo 
'$foo dans le contexte courant : ' $foo "\n";
}

$foo "Exemple de contenu";
test();
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

$foo dans le contexte global : Exemple de contenu
$foo dans le contexte courant : variable locale

Notes

Note:

Ceci est une 'superglobale', ou variable globale automatique. Cela signifie simplement que cette variable est disponible dans tous les contextes du script. Il n'est pas nécessaire de faire global $variable; pour y accéder dans les fonctions ou les méthodes.

Note: Disponibilité des variables

Contrairement à toutes les autres superglobales, $GLOBALS a toujours été disponible en PHP.



$_SERVER

$HTTP_SERVER_VARS [Obsolète]

(PHP 4 >= 4.1.0, PHP 5)

$_SERVER -- $HTTP_SERVER_VARS [Obsolète]Variables de serveur et d'exécution

Description

$_SERVER est un tableau contenant des informations comme les en-têtes, dossiers et chemins du script. Les entrées de ce tableau sont créées par le serveur web. Il n'y a aucune garantie que tous les serveurs les rempliront tous ; certains en oublieront quelques-unes et en rajouteront de nouvelles non mentionnées ici. Cependant, un grand nombre de ces variables fait partie des » spécifications CGI/1.1, et vous pouvez donc vous attendre à les retrouver.

$HTTP_SERVER_VARS contient les mêmes informations, mais n'est pas superglobale. (Notez que $HTTP_SERVER_VARS et $_SERVER sont des variables différentes et que PHP les traite en tant que telles.)

Indices

Vous pouvez éventuellement trouver les éléments suivants dans la variable $_SERVER. Notez que certains, n'auront pas de sens si vous utilisez PHP en ligne de commande.

'PHP_SELF'
Le nom du fichier du script en cours d'exécution, par rapport à la racine web. Par exemple, $_SERVER['PHP_SELF'] dans le script situé à l'adresse http://www.monsite.com/test.php/foo.bar sera /test.php/foo.bar. La constante __FILE__ contient le chemin complet ainsi que le nom du fichier (i.e. inclus) courant. Si PHP fonctionne en ligne de commande, cette variable contient le nom du script depuis PHP 4.3.0. Dans les versions antérieures, cette variable n'était pas disponible.
'argv'
Tableau des arguments passés au script. Lorsque le script est appelé en ligne de commande, cela donne accès aux arguments, comme en langage C. Lorsque le script est appelé avec la méthode GET, ce tableau contiendra la chaîne de requête.
'argc'
Contient le nombre de paramètres de la ligne de commande passés au script (si le script fonctionne en ligne de commande).
'GATEWAY_INTERFACE'
Numéro de révision de l'interface CGI du serveur : i.e. 'CGI/1.1'.
'SERVER_ADDR'
L'adresse IP du serveur sous lequel le script courant est en train d'être exécuté.
'SERVER_NAME'
Le nom du serveur hôte qui exécute le script suivant. Si le script est exécuté sur un hôte virtuel, ce sera la valeur définie pour cet hôte virtuel.
'SERVER_SOFTWARE'
Chaîne d'identification du serveur, qui est donnée dans les en-têtes lors de la réponse aux requêtes.
'SERVER_PROTOCOL'
Nom et révision du protocole de communication : i.e. 'HTTP/1.0';
'REQUEST_METHOD'
Méthode de requête utilisée pour accéder à la page; i.e. 'GET', 'HEAD', 'POST', 'PUT'.

Note:

Le script PHP se termine après avoir envoyé les en-têtes (après avoir produit n'importe quelle sortie sans avoir affiché le buffer) si la méthode de la requête était HEAD.

'REQUEST_TIME'
Le temps Unix du début de la requête. Disponible depuis PHP 5.1.0.
'REQUEST_TIME_FLOAT'
Le timestamp du début de la requête, avec une précision à la microseconde. Disponible depuis PHP 5.4.0.
'QUERY_STRING'
La chaîne de requête, si elle existe, qui est utilisée pour accéder à la page.
'DOCUMENT_ROOT'
La racine sous laquelle le script courant est exécuté, comme défini dans la configuration du serveur.
'HTTP_ACCEPT'
Contenu de l'en-tête Accept: de la requête courante, s'il y en a une.
'HTTP_ACCEPT_CHARSET'
Contenu de l'en-tête Accept-Charset: de la requête courante, si elle existe. Par exemple : 'iso-8859-1,*,utf-8'.
'HTTP_ACCEPT_ENCODING'
Contenu de l'en-tête Accept-Encoding: de la requête courante, si elle existe. Par exemple : 'gzip'.
'HTTP_ACCEPT_LANGUAGE'
Contenu de l'en-tête Accept-Language: de la requête courante, si elle existe. Par exemple : 'fr'.
'HTTP_CONNECTION'
Contenu de l'en-tête Connection: de la requête courante, si elle existe. Par exemple : 'Keep-Alive'.
'HTTP_HOST'
Contenu de l'en-tête Host: de la requête courante, si elle existe.
'HTTP_REFERER'
L'adresse de la page (si elle existe) qui a conduit le client à la page courante. Cette valeur est affectée par le client, et tous les clients ne le font pas. Certains navigateurs permettent même de modifier la valeur de HTTP_REFERER, sous forme de fonctionnalité. En bref, ce n'est pas une valeur de confiance.
'HTTP_USER_AGENT'
Contenu de l'en-tête User_Agent: de la requête courante, si elle existe. C'est une chaîne qui décrit le client HTML utilisé pour voir la page courante. Par exemple : Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Entre autres choses, vous pouvez utiliser cette valeur avec get_browser() pour optimiser votre page en fonction des capacités du client.
'HTTPS'
Définissez à une valeur non-vide si le script nécessite d'utiliser le protocole HTTPS.

Note: Noter que lors de l'utilisation de ISAPI avec IIS, la valeur sera off si la demande n'a pas été faite via le protocole HTTPS.

'REMOTE_ADDR'
L'adresse IP du client qui demande la page courante.
'REMOTE_HOST'
Le nom de l'hôte qui lit le script courant. La résolution DNS inverse est basée sur la valeur de REMOTE_ADDR.

Note: Votre serveur web doit être configuré pour créer cette variable. Par exemple, pour Apache, vous devez ajouter la directive HostnameLookups On dans le fichier httpd.conf, pour que cette variable existe. Voyez aussi gethostbyaddr().

'REMOTE_PORT'
Le port utilisé par la machine cliente pour communiquer avec le serveur web.
'REMOTE_USER'
L'utilisateur authentifié.
'REDIRECT_REMOTE_USER'
L'utilisateur authentifié si la requête a été redirigée en interne.
'SCRIPT_FILENAME'

Le chemin absolu vers le fichier contenant le script en cours d'exécution.

Note:

Si un script est exécuté avec le CLI, avec un chemin relatif, comme file.php ou ../file.php, $_SERVER['SCRIPT_FILENAME'] contiendra le chemin relatif spécifié par l'utilisateur.

'SERVER_ADMIN'
La valeur donnée à la directive SERVER_ADMIN (pour Apache), dans le fichier de configuration. Si le script est exécuté par un hôte virtuel, ce sera la valeur définie par l'hôte virtuel.
'SERVER_PORT'
Le port de la machine serveur utilisé pour les communications. Par défaut, c'est "80". En utilisant SSL, par exemple, il sera remplacé par le numéro de port HTTP sécurisé.
'SERVER_SIGNATURE'
Chaîne contenant le numéro de version du serveur et le nom d'hôte virtuel, qui sont ajoutés aux pages générées par le serveur, si cette option est activée.
'PATH_TRANSLATED'
Chemin dans le système de fichiers (pas le document-root) jusqu'au script courant, une fois que le serveur a fait une traduction chemin virtuel -> réel.

Note: Depuis PHP 4.3.2, la variable PATH_TRANSLATED n'est plus seulement définie implicitement sous Apache 2 SAPI contrairement à la situation sous Apache 1 où elle est définie avec la même valeur que la variable serveur SCRIPT_FILENAME lorsqu'elle n'est pas fournie par Apache. Ce changement a été effectué pour être conforme aux spécifications CGI qui fait que la variable PATH_TRANSLATED doit exister seulement si la variable PATH_INFO est définie. Les utilisateurs d'Apache 2 devraient utiliser AcceptPathInfo = On dans leur httpd.conf pour définir PATH_INFO.

'SCRIPT_NAME'
Contient le nom du script courant. Cela sert lorsque les pages doivent s'appeler elles-mêmes. La constante __FILE__ contient le chemin complet ainsi que le nom du fichier (i.e. inclut) courant.
'REQUEST_URI'
L'URI qui a été fourni pour accéder à cette page. Par exemple : '/index.html'.
'PHP_AUTH_DIGEST'
Lorsque vous utilisez l'authentification HTTP Digest, cette variable est définie dans l'en-tête "Authorization" envoyé par le client (que vous devez donc utiliser pour réaliser la validation appropriée).
'PHP_AUTH_USER'
Lorsque vous utilisez l'authentification HTTP, cette variable est définie à l'utilisateur fourni par l'utilisateur.
'PHP_AUTH_PW'
Lorsque vous utilisez l'authentification HTTP, cette variable est définie au mot de passe fourni par l'utilisateur.
'AUTH_TYPE'
Lorsque vous utilisez l'authentification HTTP, cette variable est définie au type d'identification.
'PATH_INFO'
Contient les informations sur le nom du chemin fourni par le client concernant le nom du fichier exécutant le script courant, sans la chaîne relative à la requête si elle existe. Actuellement, si le script courant est exécuté via l'URL http://www.example.com/php/path_info.php/some/stuff?foo=bar, alors la variable $_SERVER['PATH_INFO'] contiendra /some/stuff.
'ORIG_PATH_INFO'
Version orignale de 'PATH_INFO' avant d'être analysée par PHP.

Historique

Version Description
4.1.0 Introduction de $_SERVER, rendant obsolète $HTTP_SERVER_VARS.

Exemples

Exemple #1 Exemple avec $_SERVER

<?php
echo $_SERVER['SERVER_NAME'];
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

www.example.com

Notes

Note:

Ceci est une 'superglobale', ou variable globale automatique. Cela signifie simplement que cette variable est disponible dans tous les contextes du script. Il n'est pas nécessaire de faire global $variable; pour y accéder dans les fonctions ou les méthodes.



$_GET

$HTTP_GET_VARS [Obsolète]

(PHP 4 >= 4.1.0, PHP 5)

$_GET -- $HTTP_GET_VARS [Obsolète]Variables HTTP GET

Description

Un tableau associatif des valeurs passées au script courant via les paramètres d'URL.

$HTTP_GET_VARS contient les mêmes informations, mais n'est pas superglobale. (Notez que $HTTP_GET_VARS et $_GET sont des variables différentes et que PHP les traite comme telles.)

Historique

Version Description
4.1.0 Introduction de $_GET, rendant obsolète $HTTP_GET_VARS.

Exemples

Exemple #1 Exemple avec $_GET

<?php
echo 'Bonjour ' htmlspecialchars($_GET["name"]) . '!';
?>

En assumant que l'utilisateur a entré http://example.com/?name=Yannick

L'exemple ci-dessus va afficher quelque chose de similaire à :

Bonjour Yannick !

Notes

Note:

Ceci est une 'superglobale', ou variable globale automatique. Cela signifie simplement que cette variable est disponible dans tous les contextes du script. Il n'est pas nécessaire de faire global $variable; pour y accéder dans les fonctions ou les méthodes.

Note:

Les variables GET sont passées via urldecode().



$_POST

$HTTP_POST_VARS [Obsolète]

(PHP 4 >= 4.1.0, PHP 5)

$_POST -- $HTTP_POST_VARS [Obsolète]Variables HTTP POST

Description

Un tableau associatif des valeurs passées au script courant via le protocole HTTP et la méthode POST.

$HTTP_POST_VARS contient les mêmes informations, mais n'est pas superglobale. (Notez que $HTTP_POST_VARS et $_POST sont des variables différentes et que PHP les traite comme telles.)

Historique

Version Description
4.1.0 Introduction de $_POST, rendant obsolète $HTTP_POST_VARS.

Exemples

Exemple #1 Exemple avec $_POST

<?php
echo 'Bonjour ' htmlspecialchars($_POST["name"]) . '!';
?>

En assumant que l'utilisateur a POSTé name=Yannick

L'exemple ci-dessus va afficher quelque chose de similaire à :

Bonjour Yannick !

Notes

Note:

Ceci est une 'superglobale', ou variable globale automatique. Cela signifie simplement que cette variable est disponible dans tous les contextes du script. Il n'est pas nécessaire de faire global $variable; pour y accéder dans les fonctions ou les méthodes.



$_FILES

$HTTP_POST_FILES [Obsolète]

(PHP 4 >= 4.1.0, PHP 5)

$_FILES -- $HTTP_POST_FILES [Obsolète]Variable de téléchargement de fichier via HTTP

Description

Un tableau associatif des valeurs téléchargées au script courant via le protocole HTTP et la méthode POST.

$HTTP_POST_FILES contient les mêmes informations, mais n'est pas superglobale. (Notez que $HTTP_POST_FILES et $_FILES sont des variables différentes et que PHP les traite comme telles)

Historique

Version Description
4.1.0 Introduction de $_FILES, rendant obsolète $HTTP_POST_FILES.

Notes

Note:

Ceci est une 'superglobale', ou variable globale automatique. Cela signifie simplement que cette variable est disponible dans tous les contextes du script. Il n'est pas nécessaire de faire global $variable; pour y accéder dans les fonctions ou les méthodes.

Voir aussi



$_REQUEST

(PHP 4 >= 4.1.0, PHP 5)

$_REQUESTVariables de requête HTTP

Description

Un tableau associatif qui contient par défaut le contenu des variables $_GET, $_POST et $_COOKIE.

Historique

Version Description
5.3.0 Introduction de request_order. Cette directive affecte le contenu de la variable $_REQUEST.
4.3.0 Les informations de $_FILES ont été supprimées de la variable $_REQUEST.
4.1.0 Introduction de $_REQUEST.

Notes

Note:

Ceci est une 'superglobale', ou variable globale automatique. Cela signifie simplement que cette variable est disponible dans tous les contextes du script. Il n'est pas nécessaire de faire global $variable; pour y accéder dans les fonctions ou les méthodes.

Note:

En ligne de commande, cette variable n'inclut pas les variables argv et argc : elles sont stockées dans le tableau $_SERVER.

Note:

Les variables contenues dans $_REQUEST sont fournies au script via les mécanismes d'entrée GET, POST, et COOKIE et donc, peuvent être modifiées par l'utilisateur final ; aussi, vous ne pouvez faire confiance à leur contenu. La présence ainsi que l'ordre de ces variables dans ce tableau sont définis suivant la directive de configuration variables_order.

Voir aussi



$_SESSION

$HTTP_SESSION_VARS [obsolète]

(PHP 4 >= 4.1.0, PHP 5)

$_SESSION -- $HTTP_SESSION_VARS [obsolète]Variables de session

Description

Un tableau associatif des valeurs stockées dans les sessions, et accessible au script courant. Voyez l'extension Sessions pour plus de détails sur comment est utilisée cette variable.

$HTTP_SESSION_VARS contient les mêmes informations, mais n'est pas superglobale. (Notez que $HTTP_SESSION_VARS et $_SESSION sont des variables différentes et que PHP les traite comme telles)

Historique

Version Description
4.1.0 Introduction de $_SESSION, rendant obsolète $HTTP_SESSION_VARS.

Notes

Note:

Ceci est une 'superglobale', ou variable globale automatique. Cela signifie simplement que cette variable est disponible dans tous les contextes du script. Il n'est pas nécessaire de faire global $variable; pour y accéder dans les fonctions ou les méthodes.

Voir aussi

  • session_start() - Démarre une nouvelle session ou reprend une session existante



$_ENV

$HTTP_ENV_VARS [Obsolète]

(PHP 4 >= 4.1.0, PHP 5)

$_ENV -- $HTTP_ENV_VARS [Obsolète]Variables d'environnement

Description

Un tableau associatif de variable passé au script courant, via la méthode d'environnement.

Cette variable est importée dans l'espace de nom global de PHP, depuis l'environnement dans lequel l'exécutable PHP fonctionne. De nombreuses valeurs sont fournies par le shell qui exécute PHP, et différents systèmes pouvant disposer de différents shell, même un début de liste serait ici impossible. Reportez-vous à la documentation de votre shell pour connaître une liste de variables pré-définies.

Les autres variables d'environnement incluent les variables CGI, placées ici, indépendamment du fait que PHP fonctionne en tant que CGI ou bien que module du serveur.

$HTTP_ENV_VARS contient les mêmes informations, mais n'est pas superglobale. (Notez que $HTTP_ENV_VARS et $_ENV sont des variables différentes et que PHP les traite comme telles.)

Historique

Version Description
4.1.0 Introduction de $_ENV, rendant obsolète $HTTP_ENV_VARS.

Exemples

Exemple #1 Exemple avec $_ENV

<?php
echo 'Mon nom d\'utilisateur est ' .$_ENV["USER"] . '!';
?>

En assumant que "yannick" exécute ce script

L'exemple ci-dessus va afficher quelque chose de similaire à :

Mon nom d'utilisateur est yannick !

Notes

Note:

Ceci est une 'superglobale', ou variable globale automatique. Cela signifie simplement que cette variable est disponible dans tous les contextes du script. Il n'est pas nécessaire de faire global $variable; pour y accéder dans les fonctions ou les méthodes.

Voir aussi



$_COOKIE

$HTTP_COOKIE_VARS [Obsolète]

(PHP 4 >= 4.1.0, PHP 5)

$_COOKIE -- $HTTP_COOKIE_VARS [Obsolète]Cookies HTTP

Description

Un tableau associatif de variables, passé au script courant, via des cookies HTTP.

$HTTP_COOKIE_VARS contient les mêmes informations, mais n'est pas superglobale. (Notez que $HTTP_COOKIE_VARS et $_COOKIE sont des variables différentes et que PHP les traite comme telles.)

Historique

Version Description
4.1.0 Introduction de $_COOKIE, rendant obsolète $HTTP_COOKIE_VARS.

Exemples

Exemple #1 Exemple avec $_COOKIE

<?php
echo 'Bonjour ' htmlspecialchars($_COOKIE["name"]) . '!';
?>

En supposant que le cookie "name" a été définit précédemment

L'exemple ci-dessus va afficher quelque chose de similaire à :

Bonjour Yannick !

Notes

Note:

Ceci est une 'superglobale', ou variable globale automatique. Cela signifie simplement que cette variable est disponible dans tous les contextes du script. Il n'est pas nécessaire de faire global $variable; pour y accéder dans les fonctions ou les méthodes.



$php_errormsg

(PHP 4, PHP 5)

$php_errormsgLe dernier message d'erreur

Description

$php_errormsg est une variable qui contient le texte de la dernière erreur générée par PHP. Cette variable sera uniquement accessible dans le même contexte d'exécution que celui de la ligne qui a généré l'erreur, et uniquement si la directive de configuration track_errors est activée (elle est désactivée par défaut).

Note: Cette variable n'est disponible que lorsque track_errors a été activé dans le fichier php.ini.

Avertissement

Si un gestionnaire d'erreurs définit par l'utilisateur est actif (set_error_handler()), $php_errormsg ne sera définit que si le gestionnaire d'erreur retourne FALSE.

Exemples

Exemple #1 Exemple avec $php_errormsg

<?php
@strpos();
echo 
$php_errormsg;
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Wrong parameter count for strpos()



$HTTP_RAW_POST_DATA

(PHP 4, PHP 5)

$HTTP_RAW_POST_DATADonnées POST brutes

Description

$HTTP_RAW_POST_DATA contient les données POST brutes. Voir always_populate_raw_post_data.



$http_response_header

(PHP 4 >= 4.0.4, PHP 5)

$http_response_headerEn-têtes de réponse HTTP

Description

Le tableau $http_response_header est similaire à la fonction get_headers(). Lors de l'utilisation du gestionnaire HTTP, $http_response_header sera rempli avec les en-têtes de réponses HTTP. $http_response_header sera crée avec une portée locale.

Exemples

Exemple #1 Exemple avec $http_response_header

<?php
function get_contents() {
  
file_get_contents("http://example.com");
  
var_dump($http_response_header);
}
get_contents();
var_dump($http_response_header);
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

array(9) {
  [0]=>
  string(15) "HTTP/1.1 200 OK"
  [1]=>
  string(35) "Date: Sat, 12 Apr 2008 17:30:38 GMT"
  [2]=>
  string(29) "Server: Apache/2.2.3 (CentOS)"
  [3]=>
  string(44) "Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT"
  [4]=>
  string(27) "ETag: "280100-1b6-80bfd280""
  [5]=>
  string(20) "Accept-Ranges: bytes"
  [6]=>
  string(19) "Content-Length: 438"
  [7]=>
  string(17) "Connection: close"
  [8]=>
  string(38) "Content-Type: text/html; charset=UTF-8"
}
NULL



$argc

(PHP 4, PHP 5)

$argcLe nombre d'arguments passés au script

Description

Contient le nombre d'arguments passés au script courant lorsqu'il est exécuté depuis la ligne de commande.

Note: Le nom du fichier contenant le script est toujours passé en tant qu'argument au script, toutefois, la valeur minimale de $argc est 1.

Note: Cette variable n'est pas disponible lorsque register_argc_argv est désactivé.

Exemples

Exemple #1 Exemple avec $argc

<?php
var_dump
($argc);
?>

Lorsque l'on exécute l'exemple avec la commande : php script.php arg1 arg2 arg3

L'exemple ci-dessus va afficher quelque chose de similaire à :

int(4)



$argv

(PHP 4, PHP 5)

$argvTableau d'arguments passés au script

Description

Contient un tableau de tous les arguments passés au script lorsqu'il est appelé depuis la ligne de commande.

Note: Le premier argument $argv[0] est toujours le nom qui a été utilisé pour exécuter le script.

Note: Cette variable n'est pas disponible lorsque register_argc_argv est désactivé.

Exemples

Exemple #1 Exemple avec $argv

<?php
var_dump
($argv);
?>

Lorsque l'on exécute l'exemple avec la commande : php script.php arg1 arg2 arg3

L'exemple ci-dessus va afficher quelque chose de similaire à :

array(4) {
  [0]=>
  string(10) "script.php"
  [1]=>
  string(4) "arg1"
  [2]=>
  string(4) "arg2"
  [3]=>
  string(4) "arg3"
}

Voir aussi

  • getopt() - Lit des options passées dans la ligne de commande


Sommaire

  • Les Superglobales — Les Superglobales sont des variables internes qui sont toujours disponibles, quel que soit le contexte
  • $GLOBALS — Référence toutes les variables disponibles dans un contexte global
  • $_SERVER — Variables de serveur et d'exécution
  • $_GET — Variables HTTP GET
  • $_POST — Variables HTTP POST
  • $_FILES — Variable de téléchargement de fichier via HTTP
  • $_REQUEST — Variables de requête HTTP
  • $_SESSION — Variables de session
  • $_ENV — Variables d'environnement
  • $_COOKIE — Cookies HTTP
  • $php_errormsg — Le dernier message d'erreur
  • $HTTP_RAW_POST_DATA — Données POST brutes
  • $http_response_header — En-têtes de réponse HTTP
  • $argc — Le nombre d'arguments passés au script
  • $argv — Tableau d'arguments passés au script


Exceptions prédéfinies

Sommaire

Voir aussi les exceptions SPL.


Exception

(PHP 5 >= 5.1.0)

Introduction

Exception est la classe de base pour toutes les exceptions.

Synopsis de la classe

Exception {
/* Propriétés */
protected string $message ;
protected int $code ;
protected string $file ;
protected int $line ;
/* Méthodes */
public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] )
final public string getMessage ( void )
final public Exception getPrevious ( void )
final public mixed getCode ( void )
final public string getFile ( void )
final public int getLine ( void )
final public array getTrace ( void )
final public string getTraceAsString ( void )
public string __toString ( void )
final private void __clone ( void )
}

Propriétés

message

Le message de l'exception

code

Le code de l'exception

file

Le nom du fichier dans lequel l'exception a été créée

line

La ligne où l'exception a été créée


Exception::__construct

(PHP 5 >= 5.1.0)

Exception::__constructConstruit l'exception

Description

public Exception::__construct() ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] )

Construit l'exception.

Liste de paramètres

message

Le message de l'exception à lancer.

code

Le code de l'exception.

previous

L'exception précédente, utilisée pour le chaînage d'exception.

Historique

Version Description
5.3.0 Le paramètre previous a été ajouté.

Notes

Note:

Le message n'est PAS binary safe.



Exception::getMessage

(PHP 5 >= 5.1.0)

Exception::getMessageRécupère le message de l'exception

Description

final public string Exception::getMessage ( void )

Retourne le message de l'exception.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne le message de l'exception, sous la forme d'une chaîne de caractères.

Exemples

Exemple #1 Exemple avec Exception::getMessage()

<?php
try {
    throw new 
Exception("Un message d'erreur");
} catch(
Exception $e) {
    echo 
$e->getMessage();
}
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Un message d'erreur



Exception::getPrevious

(PHP 5 >= 5.3.0)

Exception::getPreviousRetourne l'exception précédente

Description

final public Exception Exception::getPrevious ( void )

Retourne l'exception précédente (le troisième paramètre de la méthode Exception::__construct()).

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne la précédente Exception si disponible, NULL sinon.

Exemples

Exemple #1 Exemple avec Exception::getPrevious()

Une boucle, on affiche et on capture les exceptions.

<?php
class MyCustomException extends Exception {}

function 
doStuff() {
    try {
        throw new 
InvalidArgumentException("Vous avez fais une erreur !"112);
    } catch(
Exception $e) {
        throw new 
MyCustomException("Un problème est survenu"911$e);
    }
}


try {
    
doStuff();
} catch(
Exception $e) {
    do {
        
printf("%s:%d %s (%d) [%s]\n"$e->getFile(), $e->getLine(), $e->getMessage(), $e->getCode(), get_class($e));
    } while(
$e $e->getPrevious());
}
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

/home/bjori/ex.php:8 Un problème est survenu (911) [MyCustomException]
/home/bjori/ex.php:6 Vous avez fais une erreur ! (112) [InvalidArgumentException]



Exception::getCode

(PHP 5 >= 5.1.0)

Exception::getCodeRécupère le code de l'exception

Description

final public mixed Exception::getCode ( void )

Retourne le code de l'exception.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne le code de l'exception, sous la forme d'un entier dans la classe Exception mais aussi sous la forme d'un autre type de données dans les classes héritant de Exception (par exemple, sous la forme d'une chaîne de caractères dans la classe PDOException).

Exemples

Exemple #1 Exemple avec Exception::getCode()

<?php
try {
    throw new 
Exception("Un message d'erreur"30);
} catch(
Exception $e) {
    echo 
"Le code de l'exception est : " $e->getCode();
}
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Le code de l'exception est : 30



Exception::getFile

(PHP 5 >= 5.1.0)

Exception::getFileRécupère le fichier dans lequel l'exception est survenue

Description

final public string Exception::getFile ( void )

Récupère le nom du fichier dans lequel l'exception a été créée.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne le nom du fichier dans lequel l'exception a été créée.

Exemples

Exemple #1 Exemple avec Exception::getFile()

<?php
try {
    throw new 
Exception;
} catch(
Exception $e) {
    echo 
$e->getFile();
}
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

/home/bjori/tmp/ex.php



Exception::getLine

(PHP 5 >= 5.1.0)

Exception::getLineRécupère la ligne dans laquelle l'exception est survenue

Description

final public int Exception::getLine ( void )

Récupère le numéro de la ligne où l'exception a été créée.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne le numéro de la ligne où l'exception a été créée.

Exemples

Exemple #1 Exemple avec Exception::getLine()

<?php
try {
    throw new 
Exception("Un message d'erreur");
} catch(
Exception $e) {
    echo 
"L'exception a été créée depuis la ligne : " $e->getLine();
}
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

L'exception a été créée depuis la ligne : 3



Exception::getTrace

(PHP 5 >= 5.1.0)

Exception::getTraceRécupère la trace de la pile

Description

final public array Exception::getTrace ( void )

Retourne la trace de la pile de l'exception.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne la trace de la pile de l'exception sous la forme d'un tableau.

Exemples

Exemple #1 Exemple avec Exception::getTrace()

<?php
function test() {
 throw new 
Exception;
}

try {
 
test();
} catch(
Exception $e) {
 
var_dump($e->getTrace());
}
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

array(1) {
  [0]=>
  array(4) {
    ["file"]=>
    string(22) "/home/bjori/tmp/ex.php"
    ["line"]=>
    int(7)
    ["function"]=>
    string(4) "test"
    ["args"]=>
    array(0) {
    }
  }
}



Exception::getTraceAsString

(PHP 5 >= 5.1.0)

Exception::getTraceAsStringRécupère la trace de la pile en tant que chaîne

Description

final public string Exception::getTraceAsString ( void )

Retourne la trace de la pile de l'exception, sous la forme d'une chaîne de caractères.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne la trace de la pile de l'exception, sous la forme d'une chaîne de caractères.

Exemples

Exemple #1 Exemple avec Exception::getTraceAsString()

<?php
function test() {
    throw new 
Exception;
}

try {
    
test();
} catch(
Exception $e) {
    echo 
$e->getTraceAsString();
}
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

#0 /home/bjori/tmp/ex.php(7): test()
#1 {main}



Exception::__toString

(PHP 5 >= 5.1.0)

Exception::__toStringReprésente l'exception sous la forme d'une chaîne

Description

public string Exception::__toString ( void )

Retourne une représentation de l'exception sous forme d'une chaîne de caractères.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne la représentation de l'exception, sous la forme d'une chaîne de caractères.

Exemples

Exemple #1 Exemple avec Exception::__toString()

<?php
try {
    throw new 
Exception("Message d'erreur");
} catch(
Exception $e) {
    echo 
$e;
}
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

exception 'Exception' with message 'Message d'erreur' in /home/bjori/tmp/ex.php:3
Stack trace:
#0 {main}



Exception::__clone

(PHP 5 >= 5.1.0)

Exception::__cloneClone l'exception

Description

final private void Exception::__clone ( void )

Tenter de cloner l'exception, qui résulte en une erreur fatale.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Aucune valeur n'est retournée.

Erreurs / Exceptions

Les exceptions ne sont pas clonables.


Sommaire



ErrorException

(PHP 5 >= 5.1.0)

Introduction

Une exception pour les erreurs.

Synopsis de la classe

ErrorException extends Exception {
/* Propriétés */
protected int $severity ;
/* Méthodes */
public __construct ([ string $message = "" [, int $code = 0 [, int $severity = 1 [, string $filename = __FILE__ [, int $lineno = __LINE__ [, Exception $previous = NULL ]]]]]] )
final public int getSeverity ( void )
/* Méthodes héritées */
final public string Exception::getMessage ( void )
final public Exception Exception::getPrevious ( void )
final public mixed Exception::getCode ( void )
final public string Exception::getFile ( void )
final public int Exception::getLine ( void )
final public array Exception::getTrace ( void )
final public string Exception::getTraceAsString ( void )
public string Exception::__toString ( void )
final private void Exception::__clone ( void )
}

Propriétés

severity

La sévérité de l'exception

Exemples

Exemple #1 Utilisation de set_error_handler() pour changer tous les messages d'erreurs en ErrorException

<?php
function exception_error_handler($errno$errstr$errfile$errline ) {
 throw new 
ErrorException($errstr0$errno$errfile$errline);
}
set_error_handler("exception_error_handler");

/* Lance l'exception */
strpos();
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Fatal error: Uncaught exception 'ErrorException' with message 'Wrong parameter count for strpos()' in /home/bjori/tmp/ex.php:8
Stack trace:
#0 [internal function]: exception_error_handler(2, 'Wrong parameter...', '/home/bjori/php...', 8, Array)
#1 /home/bjori/php/cleandocs/test.php(8): strpos()
#2 {main}
  thrown in /home/bjori/tmp/ex.php on line 8


ErrorException::__construct

(PHP 5 >= 5.1.0)

ErrorException::__constructConstruit l'exception

Description

public ErrorException::__construct() ([ string $message = "" [, int $code = 0 [, int $severity = 1 [, string $filename = __FILE__ [, int $lineno = __LINE__ [, Exception $previous = NULL ]]]]]] )

Construit l'exception.

Liste de paramètres

message

Le message de l'exception à lancer.

code

Le code de l'exception.

severity

Le degré de sévérité de l'exception.

filename

Le fichier depuis lequel l'exception est lancée.

lineno

Le numéro de ligne depuis laquelle l'exception est lancée.

previous

La précédente exception utilisée pour le chaînage des exceptions.



ErrorException::getSeverity

(PHP 5 >= 5.1.0)

ErrorException::getSeverityRécupère la sévérité de l'exception

Description

final public int ErrorException::getSeverity ( void )

Retourne la sévérité de l'exception.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne le degré de sévérité de l'exception.

Exemples

Exemple #1 Exemple avec ErrorException::ErrorException()

<?php
try {
    throw new 
ErrorException("Exception message"075);
} catch(
ErrorException $e) {
    echo 
"La sévérité de l'exception est : " $e->getSeverity();
}
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

La sévérité de l'exception est : 75


Sommaire




Interfaces prédéfinies

Sommaire

Voir aussi les interfaces SPL.


L'interface Traversable

(No version information available, might only be in SVN)

Introduction

Interface permettant de détecter si une classe peut être parcourue en utilisant foreach.

L'interface de base est abstraite et ne peut être implémentée seule. Elle doit être implémentée par soit IteratorAggregate, soit Iterator.

Note:

Les classes internes qui implémentent cette interface peuvent être utilisées dans une constructeur foreach et n'ont pas besoin d'implémenter IteratorAggregate ou Iterator.

Note:

Ceci est une interface du moteur interne qui ne peut être implémentée dans des scripts PHP. Vous devez utiliser à la place IteratorAggregate ou Iterator.

Sommaire de l'Interface

Traversable {
}

Cette interface n'a pas de méthode ; son seul but est d'être l'interface de base pour toutes les classes permettant de parcourir des objets.



L'interface Iterator

(PHP 5 >= 5.0.0)

Introduction

Interface pour les itérateurs ou les objets externes qui peuvent être itérés eux-mêmes en interne.

Sommaire de l'Interface

Iterator extends Traversable {
/* Méthodes */
abstract public mixed current ( void )
abstract public scalar key ( void )
abstract public void next ( void )
abstract public void rewind ( void )
abstract public boolean valid ( void )
}

Itérateurs prédéfinis

PHP fournit quelques itérateurs pour certaines tâches. Voir les itérateurs SPL pour une liste complète.

Exemples

Exemple #1 Exemple simple

Cet exemple montre l'ordre d'appel des méthodes lors d'un appel à l'instruction foreach sur un itérateur.

<?php
class myIterator implements Iterator {
    private 
$position 0;
    private 
$array = array(
        
"premierelement",
        
"secondelement",
        
"dernierelement",
    );  

    public function 
__construct() {
        
$this->position 0;
    }

    function 
rewind() {
        
var_dump(__METHOD__);
        
$this->position 0;
    }

    function 
current() {
        
var_dump(__METHOD__);
        return 
$this->array[$this->position];
    }

    function 
key() {
        
var_dump(__METHOD__);
        return 
$this->position;
    }

    function 
next() {
        
var_dump(__METHOD__);
        ++
$this->position;
    }

    function 
valid() {
        
var_dump(__METHOD__);
        return isset(
$this->array[$this->position]);
    }
}

$it = new myIterator;

foreach(
$it as $key => $value) {
    
var_dump($key$value);
    echo 
"\n";
}
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

string(18) "myIterator::rewind"
string(17) "myIterator::valid"
string(19) "myIterator::current"
string(15) "myIterator::key"
int(0)
string(12) "premierelement"

string(16) "myIterator::next"
string(17) "myIterator::valid"
string(19) "myIterator::current"
string(15) "myIterator::key"
int(1)
string(13) "secondelement"

string(16) "myIterator::next"
string(17) "myIterator::valid"
string(19) "myIterator::current"
string(15) "myIterator::key"
int(2)
string(11) "dernierelement"

string(16) "myIterator::next"
string(17) "myIterator::valid"

Iterator::current

(PHP 5 >= 5.0.0)

Iterator::currentRetourne l'élément courant

Description

abstract public mixed Iterator::current ( void )

Retourne l'élément courant.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Peut retourner tout type.



Iterator::key

(PHP 5 >= 5.0.0)

Iterator::keyRetourne la clé de l'élément courant

Description

abstract public scalar Iterator::key ( void )

Retourne la clé de l'élément courant.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne un scalaire en cas de succès, ou NULL si une erreur survient.

Erreurs / Exceptions

Émet une alerte de type E_NOTICE si une erreur survient.



Iterator::next

(PHP 5 >= 5.0.0)

Iterator::nextSe déplace sur l'élément suivant

Description

abstract public void Iterator::next ( void )

Se déplace de la position courant à l'élément suivant.

Note:

Cette méthode est appelée après chaque boucle foreach.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Les valeurs retournées seront ignorées.



Iterator::rewind

(PHP 5 >= 5.0.0)

Iterator::rewindReplace l'itérateur sur le premier élément

Description

abstract public void Iterator::rewind ( void )

Replace l'itérateur sur le premier élément.

Note:

C'est la première méthode appelée lors du départ d'une boucle foreach. Elle ne sera pas exécutée après la boucle foreach.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Toutes les valeurs retournées sont ignorées.



Iterator::valid

(PHP 5 >= 5.0.0)

Iterator::validVérifie si la position courante est valide

Description

abstract public boolean Iterator::valid ( void )

Cette méthode est appelée après Iterator::rewind() et Iterator::next() pour vérifier si la position courante est valide.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

La valeur retournée sera transtypée en booléen, puis, évaluée. Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.


Sommaire



L'interface IteratorAggregate

(PHP 5 >= 5.0.0)

Introduction

Interface pour créer un itérateur externe.

Sommaire de l'Interface

IteratorAggregate extends Traversable {
/* Méthodes */
abstract public Traversable getIterator ( void )
}

Exemple #1 Exemple simple

<?php
class myData implements IteratorAggregate {
    public 
$property1 "Propriété publique numéro un";
    public 
$property2 "Propriété publique numéro deux";
    public 
$property3 "Propriété publique numéro trois";

    public function 
__construct() {
        
$this->property4 "dernière propriété";
    }

    public function 
getIterator() {
        return new 
ArrayIterator($this);
    }
}

$obj = new myData;

foreach(
$obj as $key => $value) {
    
var_dump($key$value);
    echo 
"\n";
}
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

string(9) "property1"
string(19) "Propriété publique numéro un"

string(9) "property2"
string(19) "Propriété publique numéro deux"

string(9) "property3"
string(21) "Propriété publique numéro trois"

string(9) "property4"
string(13) "dernière propriété"


IteratorAggregate::getIterator

(PHP 5 >= 5.0.0)

IteratorAggregate::getIteratorRetourne un itérateur externe

Description

abstract public Traversable IteratorAggregate::getIterator ( void )

Retourne un itérateur externe.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Une instance d'un objet qui implémente un Iterator ou l'interface Traversable.

Erreurs / Exceptions

Émet une Exception en cas d'échec.


Sommaire



L'interface ArrayAccess

(PHP 5 >= 5.0.0)

Introduction

Interface permettant d'accéder aux objets de la même façon que pour les tableaux.

Sommaire de l'Interface

ArrayAccess {
/* Méthodes */
abstract public boolean offsetExists ( mixed $offset )
abstract public mixed offsetGet ( mixed $offset )
abstract public void offsetSet ( mixed $offset , mixed $value )
abstract public void offsetUnset ( mixed $offset )
}

Exemple #1 Exemple simple

<?php
class obj implements arrayaccess {
    private 
$container = array();
    public function 
__construct() {
        
$this->container = array(
            
"un"    => 1,
            
"deux"  => 2,
            
"trois" => 3,
        );
    }
    public function 
offsetSet($offset$value) {
        if (
is_null($offset)) {
            
$this->container[] = $value;
        } else {
            
$this->container[$offset] = $value;
        }
    }
    public function 
offsetExists($offset) {
        return isset(
$this->container[$offset]);
    }
    public function 
offsetUnset($offset) {
        unset(
$this->container[$offset]);
    }
    public function 
offsetGet($offset) {
        return isset(
$this->container[$offset]) ? $this->container[$offset] : null;
    }
}

$obj = new obj;

var_dump(isset($obj["deux"]));
var_dump($obj["deux"]);
unset(
$obj["deux"]);
var_dump(isset($obj["deux"]));
$obj["deux"] = "Une valeur";
var_dump($obj["deux"]);
$obj[] = 'Ajout 1';
$obj[] = 'Ajout 2';
$obj[] = 'Ajout 3';
print_r($obj);
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

bool(true)
int(2)
bool(false)
string(10) "Une valeur"
obj Object
(
    [container:obj:private] => Array
        (
            [un] => 1
            [trois] => 3
            [deux] => Une valeur
            [0] => Ajout 1
            [1] => Ajout 2
            [2] => Ajout 3
        )

)

ArrayAccess::offsetExists

(PHP 5 >= 5.0.0)

ArrayAccess::offsetExistsIndique si une position existe dans un tableau

Description

abstract public boolean ArrayAccess::offsetExists ( mixed $offset )

Indique si une position existe.

Cette méthode est exécutée lorsque la fonction isset() ou empty() est appliquée à un objet qui implémente l'interface ArrayAccess.

Note:

Lors de l'utilisation de empty(), ArrayAccess::offsetGet() est appelé et vérifie si la valeur est vide, uniquement si ArrayAccess::offsetExists() retourne TRUE.

Liste de paramètres

offset

Une position à vérifier.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Note:

La valeur retournée sera transtypée en booléen si une valeur non booléenne est retournée.

Exemples

Exemple #1 Exemple avec ArrayAccess::offsetExists()

<?php
class obj implements arrayaccess {
    public function 
offsetSet($offset$value) {
        
var_dump(__METHOD__);
    }
    public function 
offsetExists($var) {
        
var_dump(__METHOD__);
        if (
$var == "foobar") {
            return 
true;
        }
        return 
false;
    }
    public function 
offsetUnset($var) {
        
var_dump(__METHOD__);
    }
    public function 
offsetGet($var) {
        
var_dump(__METHOD__);
        return 
"value";
    }
}

$obj = new obj;

echo 
"Exécute obj::offsetExists()\n";
var_dump(isset($obj["foobar"]));

echo 
"\nExécute obj::offsetExists() et obj::offsetGet()\n";
var_dump(empty($obj["foobar"]));

echo 
"\nExécute obj::offsetExists(), *et non pas* obj:offsetGet() car il n'y a rien à lire\n";
var_dump(empty($obj["foobaz"]));
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Exécute obj::offsetExists()
string(17) "obj::offsetExists"
bool(true)

Exécute obj::offsetExists() et obj::offsetGet()
string(17) "obj::offsetExists"
string(14) "obj::offsetGet"
bool(false)

Exécute obj::offsetExists(), *et non pas* obj:offsetGet() car il n'y a rien à lire
string(17) "obj::offsetExists"
bool(true)



ArrayAccess::offsetGet

(PHP 5 >= 5.0.0)

ArrayAccess::offsetGetPosition à lire

Description

abstract public mixed ArrayAccess::offsetGet ( mixed $offset )

Retourne la valeur à la position donnée.

Cette méthode est exécutée lorsque l'on vérifie si une position est empty().

Liste de paramètres

offset

La position à lire.

Notes

Note:

Depuis PHP 5.3.4, la vérification du prototype a été supprimée et il devient possible de retourner par référence. Ceci permet les modifications indirectes des dimensions de l'objet ArrayAccess.

Une modification directe remplace complètement la valeur dans la dimension du tableau comme dans $obj[6] = 7. Une modification indirecte, par contre, ne change qu'une partie de la dimension ou intervient lors de l'assignation par référence vers une autres variable, comme dans $obj[6][7] = 7 ou encore $var =& $obj[6] suivi de l'incrémentation avec ++ et la décrémentation avec --.

Les modifications directes appellent ArrayAccess::offsetSet() alors que les modifications indirectes appellent ArrayAccess::offsetGet(). Dans ce cas, l'implémentation de ArrayAccess::offsetGet() doit retourner une référence sinon un message E_NOTICE sera levé.

Valeurs de retour

Peut retourner n'importe quel type de valeur.

Voir aussi



ArrayAccess::offsetSet

(PHP 5 >= 5.0.0)

ArrayAccess::offsetSetPosition à assigner

Description

abstract public void ArrayAccess::offsetSet ( mixed $offset , mixed $value )

Assigne une valeur à une position donnée.

Liste de paramètres

offset

La position à laquelle assigner une valeur.

value

La valeur à assigner.

Valeurs de retour

Aucune valeur n'est retournée.

Notes

Note:

Le paramètre offset sera définit à NULL si une autre valeur n'est pas disponible, comme dans l'exemple suivant :

<?php
$arrayaccess
[] = "première valeur";
$arrayaccess[] = "seconde valeur";
print_r($arrayaccess);
?>

L'exemple ci-dessus va afficher :

Array
(
    [0] => première valeur
    [1] => seconde valeur
)

Note:

Cette fonction n'est pas appelée dans les assignations par référence et lors de changements de dimensions indirects (indirects dans le sens d'un changement d'une sous-dimension ou lors de l'assignation par référence à une autre variable). A la place, ArrayAccess::offsetGet() est appelée. Cette opération ne fonctionnera que si cette méthode retourne une référence, ceci n'étant possible que depuis PHP 5.3.4.



ArrayAccess::offsetUnset

(PHP 5 >= 5.0.0)

ArrayAccess::offsetUnsetPosition à supprimer

Description

abstract public void ArrayAccess::offsetUnset ( mixed $offset )

Supprime une position.

Note:

Cette méthode ne sera pas appelée lors du transtypage en (unset).

Liste de paramètres

offset

La position à supprimer.

Valeurs de retour

Aucune valeur n'est retournée.


Sommaire



L'interface Serializable

(PHP 5 >= 5.1.0)

Introduction

Interface permettant de personnaliser la linéarisation.

Les classes implémentant cette interface ne supportent plus __sleep() et __wakeup(). La méthode de linéarisation est appelée chaque fois qu'une instance doit être linéarisée. Elle n'appelle pas la méthode __destruct() et n'a aucun effet sur le contenu de cette méthode. Lorsque les données sont linéarisées, la classe est connue et la méthode unserialize() appropriée est appelée comme constructeur au lieu d'appeler __construct(). Si vous devez appeler le constructeur standard, vous pouvez le faire dans la méthode.

Sommaire de l'Interface

Serializable {
/* Méthodes */
abstract public string serialize ( void )
abstract public void unserialize ( string $serialized )
}

Exemple #1 Exemple simple

<?php
class obj implements Serializable {
    private 
$data;
    public function 
__construct() {
        
$this->data "Mes données privées";
    }
    public function 
serialize() {
        return 
serialize($this->data);
    }
    public function 
unserialize($data) {
        
$this->data unserialize($data);
    }
    public function 
getData() {
        return 
$this->data;
    }
}

$obj = new obj;
$ser serialize($obj);

var_dump($ser);

$newobj unserialize($ser);

var_dump($newobj->getData());
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

string(38) "C:3:"obj":23:{s:15:"My private data";}"
string(15) "Mes données privées"

Serializable::serialize

(PHP 5 >= 5.1.0)

Serializable::serializeReprésentation linéaire de l'objet

Description

abstract public string Serializable::serialize ( void )

Retourne la représentation en chaîne de caractères de l'objet.

Note:

Cette méthode se comporte comme un destructeur de l'objet. La méthode __destruct() ne sera pas appelée après cette méthode.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne la représentation de l'objet en chaîne de caractères, ou bien NULL

Erreurs / Exceptions

Émet une Exception si un autre type que chaîne de caractères ou NULL est retourné.

Voir aussi



Serializable::unserialize

(PHP 5 >= 5.1.0)

Serializable::unserializeConstruit un objet

Description

abstract public void Serializable::unserialize ( string $serialized )

Appelé lors de la délinéarisation de l'objet.

Note:

Cette méthode se comporte comme un constructeur d'objet. La méthode __construct() ne sera pas appelée après cette méthode.

Liste de paramètres

serialized

La représentation en chaîne de l'objet.

Valeurs de retour

La valeur de retour est ignorée.

Voir aussi


Sommaire



La classe Closure

(No version information available, might only be in SVN)

Introduction

Classe utilisée pour représenter les fonctions anonymes.

Les fonctions anonymes, implémentées depuis PHP 5.3, sont portées par des objets de ce type. Au départ il s'agissait d'un détail d'implémentation, mais maintenant cette classe prend du sens. Depuis PHP 5.4, cette classe possède des méthodes qui permettent de prendre le contrôle sur la fonction après sa création.

En plus des méthodes précisées ici, cette classe possède aussi une méthode __invoke. Ceci pour des raison de logique avec l'implémentation de la méthode magique d'appel.

Synopsis de la classe

Closure {
/* Méthodes */
__construct ( void )
public static Closure bind ( Closure $closure , object $newthis [, mixed $newscope = 'static' ] )
public Closure bindTo ( object $newthis [, mixed $newscope = 'static' ] )
}

Closure::__construct

(No version information available, might only be in SVN)

Closure::__constructConstructeur empêchant l'instanciation

Description

Closure::__construct ( void )

Cette méthode n'existe que pour interdire l'instanciation directe de la classe Closure. Des objets d'une telle classe sont crées au moyen des fonctions anonymes.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Pas de retour. Elle emet par contre une erreur de type E_RECOVERABLE_ERROR.

Voir aussi



Closure::bind

(No version information available, might only be in SVN)

Closure::bind Duplique une fermeture avec un nouvel objet lié et un nouveau contexte de classe.

Description

public static Closure Closure::bind ( Closure $closure , object $newthis [, mixed $newscope = 'static' ] )

Cette méthode est une version statique de Closure::bindTo(). Voyez sa documentation pour plus d'informations.

Liste de paramètres

closure

La fonction anonyme à lier.

newthis

L'objet auquel lier la fonction anonyme ou NULL pour délier

newscope

Le contexte de classe à associer à la fermeture, ou 'static' pour conserver le contexte actuel. Si un objet est utilisé, son type sera utilisé. Ceci détermine les accès protégés et privés de l'objet lié.

Valeurs de retour

Retourne un nouvel objet Closure ou FALSE si une erreur survient

Exemples

Exemple #1 Exemple Closure::bind()

<?php
class {
    private static 
$sfoo 1;
    private 
$ifoo 2;
}
$cl1 = static function() {
    return 
A::$sfoo;
};
$cl2 = function() {
    return 
$this->ifoo;
};

$bcl1 Closure::bind($cl1null'A');
$bcl2 Closure::bind($cl2, new A(), 'A');
echo 
$bcl1(), "\n";
echo 
$bcl2(), "\n";
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

1
2

Voir aussi



Closure::bindTo

(No version information available, might only be in SVN)

Closure::bindTo Duplique la fermeture avec un nouvel objet lié et un nouveau contexte de classe.

Description

public Closure Closure::bindTo ( object $newthis [, mixed $newscope = 'static' ] )

Crée et retourne une nouvelle fonction anonyme avec le même corps et les même variables que l'original, mais avec un objet lié et un contexte de classe différents.

L'objet lié détermine la valeur de $this dans le corps de la fonction et le contexte de classe détermine une classe pour les ensembles privé/protégé auquels la fonction aura accès. Les propriétés qui seront visibles seront les mêmes que si la fonction anonyme était une méthode de la classe passée à newscope.

Les fermetures statiques ne peuvent avoir d'objet lié (la valeur du paramètre newthis doit alors être NULL), mais le contexte de classe peut lui, être changé.

Cette fonction va vérifier qu'une fermeture non statique à qui on passe un contexte d'objet deviendra liée à cet objet (et ne sera donc plus non statique), et vice-versa. Dans ce but, les fermetures non statiques à qui l'on passe un contexte de classe mais NULL comme contexte objet, deviendront statiques et inversement.

Note:

Si vous voulez seulement dupliquer la fonction anonyme, utilisez le clonage à la place.

Liste de paramètres

newthis

L'objet auquel lier la fonction anonyme ou NULL pour une fermeture statique.

newscope

Le contexte de classe à associer à la fermeture, ou 'static' pour conserver le contexte actuel. Si un objet est utilisé, son type sera utilisé. Ceci determine les accès protégés et privés.

Valeurs de retour

Retourne la nouvelle fermeture sous forme d'objet Closure, ou FALSE si une erreur survient

Exemples

Exemple #1 Exemple Closure::bindTo()

<?php

class {
    function 
__construct($val) {
        
$this->val $val;
    }
    function 
getClosure() {
        
//retourne une fermeture liée à cet objet et ce contexte
        
return function() { return $this->val; };
    }
}

$ob1 = new A(1);
$ob2 = new A(2);

$cl $ob1->getClosure();
echo 
$cl(), "\n";
$cl $cl->bindTo($ob2);
echo 
$cl(), "\n";
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

1
2

Voir aussi


Sommaire

  • Closure::__construct — Constructeur empêchant l'instanciation
  • Closure::bind — Duplique une fermeture avec un nouvel objet lié et un nouveau contexte de classe.
  • Closure::bindTo — Duplique la fermeture avec un nouvel objet lié et un nouveau contexte de classe.



Options et paramètres de contexte

PHP offre divers options et paramètres de contexte, qui peuvent être utilisés avec tous les systèmes de fichiers et gestionnaires de flux. Le contexte est créé avec la fonction stream_context_create(). Les options sont définies avec la fonction stream_context_set_option() et les paramètres, avec la fonction stream_context_set_params().


Options de contexte des sockets

Options de contexte des socketsListe des options de contexte des sockets

Description

Les options de contexte des sockets sont disponibles pour tous les gestionnaires fonctionnant via les sockets, comme tcp, http et ftp.

Options

bindto

Utilisé pour spécifier l'adresse IP (soit IPv4 ou IPv6), et/ou le numéro du port que PHP utilisera pour accéder au réseau. La syntaxe est ip:port. Le fait de définir l'IP ou le port à 0 permettra au système de choisir lui-même le port et/ou l'IP.

Note:

Vu que FTP crée 2 sockets de connexion lors d'une opération normale, le numéro du port ne peut être spécifié en utilisant cette option.

backlog

Utilisé pour limiter le nombre de connexions actives dans la liste d'attente du socket.

Note:

Ceci n'est applicable qu'à la fonction stream_socket_server().

Historique

Version Description
5.1.0 Ajout du paramètre bindto.
5.3.3 Ajout du paramètre backlog.

Exemples

Exemple #1 Exemple d'utilisation du paramètre bindto

<?php
// Connexion à Internet en utilisant l'IP '192.168.0.100'
$opts = array(
    
'socket' => array(
        
'bindto' => '192.168.0.100:0',
    ),
);


// Connexion à Internet en utilisant l'IP '192.168.0.100' et le port '7000'
$opts = array(
    
'socket' => array(
        
'bindto' => '192.168.0.100:7000',
    ),
);


// Connexion à Internet en utilisant le port '7000'
$opts = array(
    
'socket' => array(
        
'bindto' => '0:7000',
    ),
);


// Création du contexte...
$context stream_context_create($opts);

// ...et l'utilise pour récupérer les données
echo file_get_contents('http://www.example.com'false$context);

?>



Options de contexte HTTP

Options de contexte HTTPListe des options de contexte HTTP

Description

Options de contexte pour les protocoles http:// et https://.

Options

method chaîne de caractères

GET, POST, ou n'importe quelle autre méthode HTTP supportée par le serveur distant.

Par défaut, vaut GET.

header chaîne de caractères

En-têtes supplémentaires à envoyer lors de la requête. Les valeurs de cette option écraseront les autres valeurs (comme User-agent:, Host:, et Authentication:).

user_agent chaîne de caractères

Valeur à envoyer avec l'en-tête User-Agent:. Cette valeur ne doit être utilisée que si l'agent utilisateur n'est pas spécifié dans l'option de contexte header ci-dessus.

Par défaut, la valeur de l'option de configuration user_agent du fichier php.ini sera utilisée.

content chaîne de caractères

Les données supplémentaires à envoyer après les en-têtes. Typiquement utilisées lors des requêtes POST ou PUT.

proxy chaîne de caractères

URI de l'adresse du proxy. (e.g. tcp://proxy.example.com:5100).

request_fulluri booléen

Lorsque défini à TRUE, l'URI entière sera utilisée lors de la construction de la requête. (i.e. GET http://www.example.com/path/to/file.html HTTP/1.0). Bien que ce format de demande ne soit pas standard, certains serveurs de proxy le demandent.

Par défaut, vaut FALSE.

follow_location integer

Suit les redirections Location: ...

Par défaut, vaut TRUE.

max_redirects integer

Le nombre maximal de redirections à suivre. La valeur 1 ou inférieure signifie qu'aucune redirection ne sera suivie.

Par défaut, vaut 20.

protocol_version nombre décimal

Version du protocole HTTP.

Par défaut, vaut 1.0.

Note:

Dans les versions antérieures à 5.3.0, PHP n'implémente pas le décodage du transfert. Aussi, si la valeur est définie à 1.1, il est de votre responsabilité d'être conforme à 1.1.

timeout nombre décimal

Délai maximal d'attente pour la lecture, sous la forme d'un nombre décimal (e.g. 10.5).

Par défaut, la valeur de l'option de configuration default_socket_timeout du fichier php.ini sera utilisée.

ignore_errors booléen

Récupère le contenu même lors de la réception d'un code d'échec.

Par défaut, vaut FALSE

Historique

Version Description
5.3.4 Ajout du paramètre follow_location.
5.3.0 Le paramètre protocol_version supporte les transferts chunked lorsqu'on lui assigne la valeur 1.1.
5.2.10 Ajout du paramètre ignore_errors.
5.2.10 Le paramètre header peut désormais être un tableau indexé numériquement.
5.2.1 Ajout du paramètre timeout.
5.1.0 Ajout de la possibilité d'utiliser des proxy HTTPS.
5.1.0 Ajout du paramètre max_redirects.
5.1.0 Ajout du paramètre protocol_version.

Exemples

Exemple #1 Récupération d'une page et envoi de données POST

<?php

$postdata 
http_build_query(
    array(
        
'var1' => 'du contenu',
        
'var2' => 'doh'
    
)
);

$opts = array('http' =>
    array(
        
'method'  => 'POST',
        
'header'  => 'Content-type: application/x-www-form-urlencoded',
        
'content' => $postdata
    
)
);

$context stream_context_create($opts);

$result file_get_contents('http://example.com/submit.php'false$context);

?>

Exemple #2 Ignore les redirections mais récupère les en-têtes et le contenu

<?php

$url 
"http://www.example.org/header.php";

$opts = array('http' =>
    array(
        
'method' => 'GET',
        
'max_redirects' => '0',
        
'ignore_errors' => '1'
    
)
);

$context stream_context_create($opts);
$stream fopen($url'r'false$context);

// informations sur les en-têtes et métadonnées du flux
var_dump(stream_get_meta_data($stream));

// données actuelles de $url
var_dump(stream_get_contents($stream));
fclose($stream);
?>

Notes

Note: Options de contexte du flux sous-jacent
Des options de contexte supplémentaires peuvent être supportées par le transport sous-jacent. Pour les flux http://, référez-vous aux options de contexte du transport tcp://. Pour les flux https://, référez-vous aux options de contexte du transport ssl://.

Note: Ligne de statut HTTP
Lorsque ce gestionnaire de flux suit une redirection, wrapper_data, retourné par la fonction stream_get_meta_data() ne doit pas contenir obligatoirement la ligne de statut HTTP qui s'applique à des données de contenu à l'index 0.

array (
  'wrapper_data' =>
  array (
    0 => 'HTTP/1.0 301 Moved Permantenly',
    1 => 'Cache-Control: no-cache',
    2 => 'Connection: close',
    3 => 'Location: http://example.com/foo.jpg',
    4 => 'HTTP/1.1 200 OK',
    ...
La première requête retourne une 301 (redirection permanente), ainsi, le gestionnaire de flux suit automatiquement la redirection pour récupérer une réponse 200 (index = 4).



Options de contexte FTP

Options de contexte FTPListe des options de contexte FTP

Description

Options de contexte pour les protocoles ftp:// et ftps://.

Options

overwrite booléen

Permet l'écrasement des fichiers existants sur le serveur distant. Ne s'applique qu'en mode écriture.

Par défaut, FALSE.

resume_pos entier

Position dans le fichier à partir de laquelle on commence le transfert. Ne s'applique qu'en mode écriture.

Par défaut, vaut 0 (Début du fichier).

proxy chaîne de caractères

URI de l'adresse du proxy FTP. Ne s'applique qu'aux opérations de lecture de fichiers. Par exemple : tcp://squid.example.com:8000.

Historique

Version Description
5.1.0 Ajout du paramètre proxy.
5.0.0 Ajout des paramètres overwrite et resume_pos.

Notes

Note: Options de contexte du flux sous-jacent
Des options de contexte supplémentaires peuvent être supportées par le transport sous-jacent. Pour les flux ftp://, référez-vous aux options de contexte du transport tcp://. Pour les flux ftps://, référez-vous aux options de contexte du transport ssl://.



Options de contexte SSL

Options de contexte SSLListe des options de contexte SSL

Description

Options de contexte pour les protocoles ssl:// et tls://.

Options

verify_peer booléen

Nécessite une vérification du certificat SSL utilisé.

Par défaut, vaut FALSE.

allow_self_signed booléen

Permet les certificats autosignés. Requière le paramètre verify_peer.

Par défaut, vaut FALSE

cafile string

Endroit où se trouve le fichier de l'autorité du certificat sur le système de fichiers local et qui devra être utilisé avec l'option de contexte verify_peer pour identifier le pair distant.

capath string

Si cafile n'est pas spécifié ou si le certificat n'a pas été trouvé, une recherche dans le dossier pointé par capath sera effectuée afin d'y trouver un certificat valide. capath doit être un dossier de certificat valide.

local_cert string

Chemin vers le certificat local, sur le système de fichiers. Ce doit être un fichier encodé PEM qui contient votre certificat et votre clé privée. Il peut, optionnellement, contenir la chaîne de certification de l'émetteur.

passphrase string

La phrase passe avec laquelle votre fichier local_cert a été encodé.

CN_match string

Nom commun attendu. PHP effectuera un nombre limité de recherches sur les jokers. Si le nom commun ne correspond pas à celui-là, la connexion échouera.

verify_depth integer

Échoue si la chaîne de certification est trop profonde.

Par défaut, aucune vérification.

ciphers string

Définit la liste des chiffrements. Le format de la chaîne est décrite sur la page » ciphers(1).

Par défaut, vaut DEFAULT.

capture_peer_cert boolean

Si définit à TRUE, un option de contexte peer_certificate sera créée, contenant le certificat de l'émetteur.

capture_peer_cert_chain boolean

Si définit à TRUE, une option de contexte peer_certificate_chain sera créée, contenant la chaîne de certification.

SNI_enabled boolean

Si vaut TRUE, l'indication sur le nom du serveur sera activée. Le fait d'activer SNI permet d'utiliser plusieurs certificats sur la même adresse IP.

SNI_server_name string

Si définie, alors cette valeur sera utilisée comme nom dans l'indication sur le nom du serveur. Si cette valeur n'est pas définie, alors le nom du serveur sera déduit par rapport au nom de l'hôte utilisé lors de l'ouverture du flux.

Historique

Version Description
5.3.2 Ajout de SNI_enabled et de SNI_server_name.
5.0.0 Ajout des paramètres capture_peer_cert, capture_peer_chain et ciphers.

Notes

Note: Vu que ssl:// est un protocole sous-jacent pour les gestionnaires https:// et ftps://, toutes les options de contexte appliquées à ssl:// seront également appliquées à https:// et ftps://.

Note: Afin que SNI (Server Name Indication) soit disponible, PHP doit être compilé avec OpenSSL 0.9.8j ou supérieur. Utilisez la constante OPENSSL_TLSEXT_SERVER_NAME pour déterminer si SNI est supporté ou non.



Options de contexte CURL

Options de contexte CURLListe des options de contexte CURL

Description

Les options de contexte CURL sont disponibles lorsque l'extension CURL a été compilée en utilisant l'option de configuration --with-curlwrappers .

Options

method chaîne de caractères

GET, POST, ou n'importe quelle méthode HTTP supportée par le serveur distant.

Par défaut, vaut GET.

header chaîne de caractères

En-têtes additionnels à envoyer lors de la requête. Les valeurs de cette option écraseront les autres valeurs (comme User-agent:, Host:, et Authentication:).

user_agent chaîne de caractères

Valeur à envoyer avec l'en-tête User-Agent:.

Par défaut, la valeur de la directive user_agent du fichier php.ini sera utilisée.

content chaîne de caractères

Les données additionnelles à envoyer après les en-têtes. Cette option n'est pas utilisée pour les requêtes GET ou HEAD.

proxy chaîne de caractères

URI spécifiant l'adresse du proxy. (e.g. tcp://proxy.exemple.com:5100).

max_redirects integer

Le nombre maximal de redirections à suivre. La valeur 1 ou inférieure signifie qu'il ne faut suivre aucune redirection.

Par défaut, vaut 20.

curl_verify_ssl_host booléen

Vérifie l'hôte.

Par défaut, vaut FALSE

Note:

Cette option est disponible pour les protocoles http et ftp.

curl_verify_ssl_peer booléen

Demande une vérification du certificat SSL utilisé.

Par défaut, vaut FALSE

Note:

Cette option est disponible pour les protocoles http et ftp.

Exemples

Exemple #1 Récupère une page et envoie des données avec la méthode POST

<?php

$postdata 
http_build_query(
    array(
        
'var1' => 'du contenu',
        
'var2' => 'doh'
    
)
);

$opts = array('http' =>
    array(
        
'method'  => 'POST',
        
'header'  => 'Content-type: application/x-www-form-urlencoded',
        
'content' => $postdata
    
)
);

$context stream_context_create($opts);

$result file_get_contents('http://example.com/submit.php'false$context);

?>



Les options du contexte Phar

Les options du contexte PharListe des options du contexte Phar

Description

Les options de contexte pour le gestionnaire phar://.

Options

compress int

Une des constantes de compression Phar.

metadata mixed

Les méta-données Phar. Voir Phar::setMetadata().

Voir aussi



Paramètres de contexte

Paramètres de contexteListe des paramètres de contexte

Description

Ces paramètres peuvent être définis sur un contexte, en utilisant la fonction stream_context_set_params().

Liste de paramètres

notification callable

Une fonction de rappel (callable), à appeler lorsqu'un événement survient sur le flux.

Voir la fonction stream_notification_callback() pour plus de détails.


Sommaire



Liste des protocoles et des gestionnaires supportés

PHP dispose de nombreux protocoles natifs, pour différents styles d'URL, à utiliser avec des fonctions de fichiers telles que fopen(), copy(), file_exists() et filesize(). En plus de ces gestionnaires, vous pouvez écrire vos propres gestionnaires et les enregistrer avec la fonction stream_wrapper_register().

Note: La syntaxe de l'URL utilisée pour décrire un gestionnaire est exclusivement de la forme scheme://.... Les syntaxes de la forme scheme:/ et scheme: ne sont pas supportées.


file://

file://Système de fichiers

Description

Filesystem est le gestionnaire par défaut de PHP et il représente les fichiers locaux. Lorsqu'un chemin relatif est spécifié (un chemin qui ne commence pas par /, \, \\, ou une lettre de lecteur Windows), le chemin sera calculé relativement à la position courante. Dans de nombreux cas, c'est le dossier de résidence du script, à moins qu'il n'ait été modifié. En utilisant la version CLI, le chemin sera calculé par rapport au dossier d'appel du script.

Avec certaines fonctions comme fopen() et file_get_contents(), include_path peut être analysé pour y trouver les fichiers, si un chemin relatif est fourni.

Options

  • /chemin/vers/fichier.ext
  • chemin/relatif/vers/fichier.ext
  • fichierDansCwd.ext
  • C:/chemin/vers/fichierWindows.ext
  • C:\chemin\vers\fichierWindows.ext
  • \\smbserver\partage\chemin\vers\fichierWindows.ext
  • file:///chemin/vers/fichier.ext

Options

Résumé du gestionnaire
Attribut Supporté
Restreint par allow_url_fopen Non
Autorise la lecture Oui
Autorise l'écriture Yes
Autorise l'ajout Oui
Autorise la lecture et l'écriture simultanément Oui
Support de la fonction stat() Oui
Support de la fonction unlink() Oui
Support de la fonction rename() Oui
Support de la fonction mkdir() Oui
Support de la fonction rmdir() Oui

Historique

Version Description
5.0.0 Ajout de file://.



http://

https://

http:// -- https://Accès aux URLs HTTP(s)

Description

Permet des accès en lecture uniquement, pour des fichiers accessibles sur le réseau avec la méthode GET de HTTP 1.0. Un en-tête Host: est envoyé avec la requête, pour gérer les hôtes virtuels, basés sur des noms. Si vous avez configuré une version de navigateur avec l'option user_agent dans votre fichier php.ini, ou via le contexte de flux, il sera aussi utilisé dans votre requête.

Le flux donne l'accès au corps (body) de la ressource. Les en-têtes sont stockés dans la variable $http_response_header.

Si il vous est important de savoir l'URL de la ressource depuis laquelle votre document provient (après l'exécution de toutes les redirections), vous devrez analyser toutes les en-têtes retournés par le flux.

La directive from sera utilisée pour l'en-tête From: si elle a été définie, et non écrasée par les Options et paramètres de contexte.

Options

  • http://example.com
  • http://example.com/fichier.php?var1=val1&var2=val2
  • http://user:password@example.com
  • https://example.com
  • https://example.com/fichier.php?var1=val1&var2=val2
  • https://user:password@example.com

Options

Résumé du gestionnaire
Attribut Supporté
Restreint par allow_url_fopen Oui
Autorise la lecture Oui
Autorise l'écriture Non
Autorise l'ajout No
Autorise la lecture et l'écriture simultanément N/A
Support de la fonction stat() Non
Support de la fonction unlink() Non
Support de la fonction rename() Non
Support de la fonction mkdir() Non
Support de la fonction rmdir() Non

Historique

Version Description
4.3.7 Détecte les serveurs IIS bogués pour éviter les erreurs "SSL: Fatal Protocol Error".
4.3.0 Ajout de https://.
4.0.5 Ajout du support des redirections.

Exemples

Exemple #1 Détecte la dernière URL après des redirections

<?php
$url 
'http://www.example.com/redirecting_page.php';

$fp fopen($url'r');

$meta_data stream_get_meta_data($fp);
foreach (
$meta_data['wrapper_data'] as $response) {

    
/* Où sommes-nous redirigés ? */
    
if (strtolower(substr($response010)) == 'location: ') {

        
/* mise à jour de $url avec le chemin après redirection */
        
$url substr($response10);
    }

}

?>

Exemple #2 Envoi d'en-têtes personnalisés avec la requête HTTP

Les en-têtes personnalisés peuvent être envoyés en utilisant des options de context. Il est également possible d'utiliser ce contournement : Les en-têtes personnalisés peuvent être envoyés avec une requête HTTP en tirant avantage d'un effet de bord dans la gestion de la configuration INI de user_agent. Définissez user_agent en n'importe quelle chaîne valide (comme la chaîne par défaut, PHP/version) suivi d'un caractère de retour chariot et d'un caractère de nouvelle ligne, suivis des entêtes additionnels.

<?php
ini_set
('user_agent'"PHP\r\nX-MyCustomHeader: Foo");

$fp fopen('http://www.example.com/index.php''r');
?>

La requête suivante sera émise :

GET /index.php HTTP/1.0
Host: www.example.com
User-Agent: PHP
X-MyCustomHeader: Foo

Notes

Note: HTTPS n'est supporté que si l'extension openssl est active.

Les connexions HTTP sont en lecture seule ; l'écriture de données ou la copie de fichier vers une ressource HTTP n'est pas supportée.

L'envoi de requêtes POST et PUT, peut être effectué, par exemple, avec l'aide des contextes HTTP.

Voir aussi



ftp://

ftps://

ftp:// -- ftps://Accès aux URLs FTP(s)

Description

Permet l'accès aux fichiers existants, et la création de fichiers via FTP. Si le serveur ne supporte pas les connexions en mode passif, la connexion échouera.

Vous pouvez ouvrir des fichiers en lecture ou en écriture, mais pas les deux en même temps. Si le fichier distant existe déjà sur le serveur ftp et que vous tentez de l'ouvrir en écriture alors que vous n'avez pas spécifié l'option overwrite dans le contexte, la connexion échouera. Si vous devez réécrire des fichiers existants en utilisant ftp, spécifiez l'option overwrite dans le contexte et ouvrez le fichier en écriture. Alternativement, vous pouvez utiliser l'extension FTP.

Si vous avez définie la directive from dans le fichier php.ini, alors cette valeur sera émise en tant que mot de passe pour les FTP anonymes.

Options

  • ftp://example.com/pub/fichier.txt
  • ftp://user:password@example.com/pub/fichier.txt
  • ftps://example.com/pub/fichier.txt
  • ftps://user:password@example.com/pub/fichier.txt

Options

Résumé du gestionnaire
Attribut PHP 4 PHP 5
Restreint par allow_url_fopen Oui Oui
Autorise la lecture Oui Oui
Autorise l'écriture Oui (nouveau fichier uniquement) Oui (nouveau fichier/fichier existant avec le paramètre overwrite)
Autorise l'ajout Non Oui
Autorise la lecture et l'écriture simultanément Non Non
Support de la fonction stat() Non Depuis PHP 5.0.0 : filesize(), filetype(), file_exists(), is_file(), et is_dir() uniquement. Depuis PHP 5.1.0 : filemtime().
Support de la fonction unlink() Non Oui
Support de la fonction rename() Non Oui
Support de la fonction mkdir() Non Oui
Support de la fonction rmdir() Non Oui

Historique

Version Description
4.3.0 Ajout de ftps://.

Notes

Note:

FTPS n'est supporté que lorsque l'extension openssl est active.

Si le serveur ne supporte pas SSL, alors la connexion passera automatiquement en connexion ftp non chiffrée.

Note: L'ajout
Depuis PHP 5.0.0, les fichiers peuvent être ajoutés avec le gestionnaire d'URL ftp://. Dans les précédentes versions, si vous tentez d'ajouter un fichier avec ce gestionnaire, une erreur sera émise.



php://

php://Accès aux divers flux I/O

Description

PHP fournit un nombre important de flux I/O qui permettent d'accéder aux flux d'entrée et de sortie de Php, à l'entrée standart, à l'entrée et la sortie des descripteurs de fichiers, aux flux représentant les fichiers temporaires en mémoire vive ou sur le disque, ainsi qu'aux filtres qui peuvent manipuler d'autres ressources de fichiers en lecture ou en écriture.

php://stdin, php://stdout et php://stderr

php://stdin, php://stdout et php://stderr permettent des accès directs aux flux d'entrée ou de sortie correspondant du processus PHP. Le flux représente une copie du descripteur de fichier, aussi, si vous ouvrez php://stdin et le fermez plus tard, vous ne fermez que votre copie du descripteur ; le flux actuel, référencé par STDIN n'est pas affecté. Notez que PHP avez un comportement relativement bogué jusqu'à la version PHP 5.2.1. Il est recommandé d'utiliser uniquement les constantes STDIN, STDOUT et STDERR au lieu d'ouvrir manuellement les flux en utilisant ces gestionnaires.

php://stdin est en lecture seule, alors que php://stdout et php://stderr sont en écriture seule.

php://input

php://input est un flux en lecture seule qui permet de lire des données brutes depuis la requête. Dans le cas de requêtes POST, il est préférable d'utiliser le flux php://input au lieu de la variable $HTTP_RAW_POST_DATA vu qu'elle ne dépend d'aucune directive de configuration du php.ini. De plus, dans les cas où $HTTP_RAW_POST_DATA n'est pas peuplé par défaut, il est potentiellement plus intéressant en terme de mémoire d'activer la directive always_populate_raw_post_data. php://input n'est pas disponible avec enctype="multipart/form-data".

Note: Un flux ouvert avec php://input ne peut être lu qu'une seule fois ; le flux ne supporte pas les opérations de rembobinage. Cependant, suivant l'implémentation du SAPI, il peut être possible d'ouvrir un autre flux php://input et recommencer à lire. Ceci n'est possible que si la requête des données a été sauvegardée. Typiquement, c'est le cas pour les requêtes POST, mais pas pour les autres méthodes comme PUT ou PROPFIND.

php://output

php://output est un flux en écriture seule qui permet d'écrire dans le mécanisme de buffer de sortie de la même façon que les fonctions print et echo.

php://fd

php://fd permet un accès direct au descripteur de fichier fourni. Par exemple, php://fd/3 correspond au descripteur de fichier numéro 3.

php://memory et php://temp

php://memory et php://temp sont des flux en lecture/écriture qui permettent de sauvegarder des données temporaires dans un gestionnaire de fichiers. La seule différence entre ces deux flux est que php://memory autorise la sauvegarde des données en mémoire, alors que php://temp utilisera un fichier temporaire une fois que la quantité de données sauvegardées aura dépassé une limite prédéfinie (par défaut, 2 Mo). L'endroit de stockage de ce fichier temporaire est déterminé de la même manière que pour la fonction sys_get_temp_dir().

La limite mémoire de php://temp peut être contrôlée en ajoutant /maxmemory:NN, où NN est la quantité de mémoire maximale à conserver en mémoire avant d'utiliser un fichier temporaire, en octets.

php://filter

php://filter est une sorte de gestionnaire prévu pour permettre l'application de filtres sur un flux au moment de l'ouverture. Ceci est très pratique avec des fonctions sur des fichiers toutes-en-un comme les fonctions readfile(), file() et file_get_contents() où il n'est pas opportun d'appliquer un filtre au flux avant d'avoir lu le contenu.

La cible de php://filter prend les paramètres suivants sous la forme de partie du chemin. Reportez-vous aux exemples spécifiques pour une utilisation correcte de ces paramètres.

php://filter parameters
Nom Description
resource=<flux à filtrer> Ce paramètre est requis. Il spécifie le flux que vous souhaitez filtrer.
read=<liste des filtres à appliquer à la lecture> Ce paramètre est optionnel. Un ou plusieurs noms de filtres peuvent être fournis ici, séparés par un caractère pipe (|).
write=<liste des filtres à appliquer à l'écriture> Ce paramètre est optionnel. Un ou plusieurs noms de filtres peuvent être fournis ici, séparés par un caractère pipe (|).
<liste de filtre à appliquer à la fois lors de la lecture et de l'écriture> Tous les filtres fournis sans être préfixés par read= ou write= seront appliqués à la fois lors de la lecture et lors de l'écriture.

Options

Résumé du gestionnaire (pour php://filter, reportez-vous au résumé du gestionnaire à filtrer)
Attribut Supporté
Restreint par allow_url_fopen Non
Restreint par allow_url_include php://input, php://stdin, php://memory et php://temp uniquement.
Autorise la lecture php://stdin, php://input, php://fd, php://memory et php://temp uniquement.
Autorise l'écriture php://stdout, php://stderr, php://output, php://fd, php://memory et php://temp uniquement.
Autorise l'ajout php://stdout, php://stderr, php://output, php://fd, php://memory et php://temp uniquement. (Équivalent à l'écriture)
Autorise à la fois la lecture et l'écriture php://fd, php://memory et php://temp uniquement.
Support de la fonction stat() php://memory et php://temp uniquement.
Support de la fonction unlink() Non
Support de la fonction rename() Non
Support de la fonction mkdir() Non
Support de la fonction rmdir() Non
Support de la fonction stream_select() php://stdin, php://stdout, php://stderr, php://fd et php://temp uniquement.

Historique

Version Description
5.3.6 php://fd a été ajouté.
5.1.0 php://memory et php://temp ont été ajoutés.
5.0.0 php://filter a été ajouté.

Exemples

Exemple #1 php://temp/maxmemory

Le paramètre optionnel autorise la configuration de la limitation mémoire avant que php://temp commence à utiliser un fichier temporaire.

<?php
// Définit la limite à 5 Mo.
$fiveMBs 1024 1024;
$fp fopen("php://temp/maxmemory:$fiveMBs"'r+');

fputs($fp"hello\n");

// Lit ce que nous venons d'écrire.
rewind($fp);
echo 
stream_get_contents($fp);
?>

Exemple #2 php://filter/resource=<flux à filtrer>

Ce paramètre doit se situer à la fin de votre spécification de php://filter et doit pointer sur le flux que vous souhaitez filtrer.

<?php
/* Ceci est équivalent à
  readfile("http://www.example.com");
  vu qu'aucun filtre n'est spécifié */

readfile("php://filter/resource=http://www.example.com");
?>

Exemple #3 php://filter/read=<liste de filtres à appliquer lors de la lecture>

Ce paramètre prend un ou plusieurs noms de filtres séparés par un caractère pipe |.

<?php
/* Ceci affichera le contenu complet de
  www.example.com en majuscule */
readfile("php://filter/read=string.toupper/resource=http://www.example.com");

/* Ceci fera la même chose que le précédent,
  mais encodera en ROT13 le résultat */
readfile("php://filter/read=string.toupper|string.rot13/resource=http://www.example.com");
?>

Exemple #4 php://filter/write=<liste des filtres à appliquer lors de l'écriture>

Ce paramètre prend un ou plusieurs noms de filtres séparés par un caractère pipe |.

<?php
/* Ceci va filtrer la chaîne "Hello World"
  via le filtre rot13, puis, écrit le résultat
  dans le fichier example.txt du dossier courant */
file_put_contents("php://filter/write=string.rot13/resource=example.txt","Hello World");
?>


zlib://

bzip2://

zip://

zlib:// -- bzip2:// -- zip://Flux compressés

Description

zlib: PHP 4.0.4 - PHP 4.2.3 (systèmes avec fopencookie uniquement)

compress.zlib:// et compress.bzip2:// PHP 4.3.0 et suivant

zlib: fonctionne comme gzopen(), hormis le fait que le flux peut être utilisé directement avec fread() et les autres fonctions de système de fichiers. Cette notation est obsolète depuis PHP 4.3.0, étant données les ambiguïtés dues aux noms de fichiers contenant des deux points ':'. Utilisez plutôt compress.zlib://.

compress.zlib:// et compress.bzip2:// sont respectivement équivalents à gzopen() et bzopen(), et ils opèrent même sur les systèmes qui ne supportent pas fopencookie.

L'extension ZIP enregistre le gestionnaire zip:.

Options

  • zlib:
  • compress.zlib://
  • compress.bzip2://

Options

Résumé des gestionnaires
Attribut Supporté
Limité par allow_url_fopen Non
Autorise la lecture Oui
Autorise l'écriture Oui (sauf zip://)
Autorise l'ajout Oui (sauf zip://)
Autorise la lecture et l'écriture simultanément Non
Support de la fonction stat() Non, utilisez le gestionnaire file:// pour avoir des informations sur les fichiers compressés.
Support de la fonction unlink() Non, utilisez le gestionnaire file:// pour avoir des informations sur les fichiers compressés.
Support de la fonction rename() Non
Support de la fonction mkdir() Non
Support de la fonction rmdir() Non



data://

data://Données (RFC 2397)

Description

Le gestionnaire de flux data: (» RFC 2397) est disponible depuis PHP 5.2.0.

Options

  • data://text/plain;base64,

Options

Résumé du gestionnaire
Attribut Supporté
Restreint par allow_url_fopen Non
Restreint par allow_url_include Oui
Autorise la lecture Oui
Autorise l'écriture Non
Autorise l'ajout Non
Autorise la lecture et l'écriture simultanément Non
Support de la fonction stat() Non
Support de la fonction unlink() Non
Support de la fonction rename() Non
Support de la fonction mkdir() Non
Support de la fonction rmdir() Non

Exemples

Exemple #1 Affichage du contenu de data://

<?php
// Affiche "I love PHP"
echo file_get_contents('data://text/plain;base64,SSBsb3ZlIFBIUAo=');
?>

Exemple #2 Récupération du type de média

<?php
$fp   
fopen('data://text/plain;base64,''r');
$meta stream_get_meta_data($fp);

// Affiche "text/plain"
echo $meta['mediatype'];
?>


glob://

glob://Trouve des noms de fichiers correspondant à un masque donné

Description

Le gestionnaire de flux glob: est disponible depuis PHP 5.3.0.

Options

  • glob://

Options

Résumé du gestionnaire
Attribut Supporté
Restreint par allow_url_fopen No
Restreint par allow_url_include Non
Autorise la lecture Non
Autorise l'écriture Non
Autorise l'ajout Non
Autorise la lecture et l'écriture simultanément Non
Support de la fonction stat() Non
Support de la fonction unlink() Non
Support de la fonction rename() Non
Support de la fonction mkdir() Non
Support de la fonction rmdir() Non

Exemples

Exemple #1 Utilisation simple

<?php
// Boucle sur tous les fichiers *.php du dossier ext/spl/examples/ et
// affiche le nom du fichier ainsi que sa taille
$it = new DirectoryIterator("glob://ext/spl/examples/*.php");
foreach(
$it as $f) {
    
printf("%s: %.1FK\n"$f->getFilename(), $f->getSize()/1024);
}
?>
tree.php: 1.0K
findregex.php: 0.6K
findfile.php: 0.7K
dba_dump.php: 0.9K
nocvsdir.php: 1.1K
phar_from_dir.php: 1.0K
ini_groups.php: 0.9K
directorytree.php: 0.9K
dba_array.php: 1.1K
class_tree.php: 1.8K


phar://

phar://Archive PHP

Description

Le gestionnaire de flux phar:// est disponible depuis PHP 5.3.0. Voyez gestionnaire de flux Phar pour une description détaillée.

Options

  • phar://

Options

Résumé du gestionnaire
Attribut Supporté
Restreint par allow_url_fopen Non
Restreint par allow_url_include Non
Autorise la lecture Oui
Autorise l'écriture Oui
Autorise l'ajout Non
Autorise la lecture et l'écriture simultanément Oui
Support de la fonction stat() Oui
Support de la fonction unlink() Oui
Support de la fonction rename() Oui
Support de la fonction mkdir() Oui
Support de la fonction rmdir() Oui



ssh2://

ssh2://Shell sécurisé 2

Description

ssh2.shell:// ssh2.exec:// ssh2.tunnel:// ssh2.sftp:// ssh2.scp:// PHP 4.3.0 et suivants (PECL)

Note: Ce gestionnaire n'est pas activé par défaut
Pour utiliser le gestionnaire ssh2.*://, vous devez installer l'extension » SSH2 disponible dans » PECL.

En plus d'accepter les traditionnelles identifications via l'URI, le gestionnaire ssh2 réutilisera les connexions ouvertes en passant la ressource de connexion dans la partie hôte de l'URL.

Options

  • ssh2.shell://user:pass@example.com:22/xterm
  • ssh2.exec://user:pass@example.com:22/usr/local/bin/somecmd
  • ssh2.tunnel://user:pass@example.com:22/192.168.0.1:14
  • ssh2.sftp://user:pass@example.com:22/path/to/filename

Options

Résumé du gestionnaire
Attribut ssh2.shell ssh2.exec ssh2.tunnel ssh2.sftp ssh2.scp
Restreint par allow_url_fopen Oui Oui Oui Oui Oui
Autorise la lecture Oui Oui Oui Oui Oui
Autorise l'écriture Oui Oui Oui Oui Non
Autorise l'ajout Non Non Non Oui (lorsque supporté par le serveur) Non
Autorise la lecture et l'écriture simultanément Oui Oui Oui Oui Non
Support de la fonction stat() Non Non Non Oui Non
Support de la fonction unlink() Non Non Non Oui Non
Support de la fonction rename() Non Non Non Oui Non
Support de la fonction mkdir() Non Non Non Oui Non
Support de la fonction rmdir() Non Non Non Oui Non

Options de contexte
Nom Utilisation Défaut
session ressource ssh2 pré-connectée pour être réutilisée  
sftp ressource sftp pré-allouée pour être réutilisée  
methods méthodes échange de clés, hostkey, cipher, compression et MAC à utiliser  
callbacks    
username Nom de l'utilisateur pour la connexion  
password Mot de passe à utiliser lors d'une identification via mot de passe  
pubkey_file Nom du fichier contenant la clé publique à utiliser lors de l'identification  
privkey_file Nom du fichier contenant la clé privée à utiliser lors de l'identification  
env Tableau associatif de variables d'environnements à définir  
term Type d'émulation de terminal à demander lors de l'allocation d'un pty  
term_width Largeur du terminal à demander lors de l'allocation d'un pty  
term_height Hauteur du terminal à demander lors de l'allocation d'un pty  
term_units Unités à utiliser avec term_width et term_height SSH2_TERM_UNIT_CHARS

Exemples

Exemple #1 Ouverture d'un flux depuis une connexion active

<?php
$session 
ssh2_connect('example.com'22);
ssh2_auth_pubkey_file($session'username''/home/username/.ssh/id_rsa.pub',
                                            
'/home/username/.ssh/id_rsa''secret');
$stream fopen("ssh2.tunnel://$session/remote.example.com:1234"'r');
?>


rar://

rar://RAR

Description

Ce gestionnaire prend un chemin encodé URL vers l'archive RAR (relatif ou absolu), puis, optionnellement, un astérisque (*), puis, optionnellement, un signe dièse (#), puis, optionnellement, un nom d'entrée encodé URL, tel que stocké dans l'archive. Le fait de spécifier un nom d'entrée nécessite la présence du signe dièse ; la présence d'un slash final est optionnel.

Ce gestionnaire peut ouvrir à la fois des fichiers ou des dossiers. Lors de l'ouverture de dossiers, l'astérisque force les noms des dossiers à être retournés non encodés. S'il n'est pas spécifié, ils seront retournés sous la forme encodée URL - ceci permet au gestionnaire d'être utilisé correctement avec les fonctionnalités internes comme RecursiveDirectoryIterator en présence de noms de fichiers qui semblent être encodés URL.

Si le signe dièse et le nom de l'entrée ne sont pas inclus, la racine de l'archive sera affiché. Cet affichage est différent des dossiers réguliers dans le sens où le flux résultant ne contiendra pas d'informations comme la date et heure de modification, vu que la racine du dossier n'est pas stocké comme une entrée individuelle dans l'archive. L'utilisation de ce gestionnaire avec RecursiveDirectoryIterator nécessite la présence du signe dièse dans l'URL lors de l'accès à la racine afin de construire correctement les URLs des fils.

Note: Ce gestionnaire n'est pas activé par défaut
Afin d'utiliser le gestionnaire rar://, vous devez installer l'extension » rar disponible depuis » PECL.

rar:// est disponible depuis PECL rar 3.0.0

Options

  • rar://<url encoded archive name>[*][#[<url encoded entry name>]]

Options

Résumé du gestionnaire
Attribut Supporté
Restreint par allow_url_fopen Non
Restreint par allow_url_include Non
Autorise la lecture Oui
Autorise l'écriture Non
Autorise l'ajout Non
Autorise la lecture et l'écriture silmutanément Non
Support de la fonction stat() Oui
Support de la fonction unlink() Non
Support de la fonction rename() Non
Support de la fonction mkdir() Non
Support de la fonction rmdir() Non

Options de contexte
Nom Utilisation Défaut
open_password Le mot de passe utilisé pour crupyer les en-têtes de l'archive, s'il y en a. WinRAR cryptera tous les fichiers avec le même mot de passe. Si celui-ci est fourni, file_password sera ignoré.  
file_password Le mot de passe utilisé pour crypté un fichier, s'il y en a. Si l'en-tête est aussi crypté, cette option sera ignoré et le mot de passe de l'option open_password sera privilégié. La raison pour laquelle il y a 2 options est le fait de pouvoir couvrir la possibilité de supporter les archives avec différents mots de passe pour les en-têtes et les fichiers. Notez que si l'en-tête de l'archive n'est pas crypté, l'option open_password sera ignoré et cette option doit être utilisé.  
volume_callback Une fonction de rappel pour déterminer le chemin des volumes manquants. Reportez-vous à la méthode RarArchive::open() pour plus d'informations.  

Exemples

Exemple #1 Parcours d'une archive RAR

<?php

class MyRecDirIt extends RecursiveDirectoryIterator {
    function 
current() {
        return 
rawurldecode($this->getSubPathName()) .
            (
is_dir(parent::current())?" [DIR]":"");
    }
}

$f "rar://" rawurlencode(dirname(__FILE__)) .
    
DIRECTORY_SEPARATOR 'dirs_and_extra_headers.rar#';

$it = new RecursiveTreeIterator(new MyRecDirIt($f));

foreach (
$it as $s) {
    echo 
$s"\n";
}
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

|-allow_everyone_ni [DIR]
|-file1.txt
|-file2_אּ.txt
|-with_streams.txt
\-אּ [DIR]
  |-אּ\%2Fempty%2E [DIR]
  | \-אּ\%2Fempty%2E\file7.txt
  |-אּ\empty [DIR]
  |-אּ\file3.txt
  |-אּ\file4_אּ.txt
  \-אּ\אּ_2 [DIR]
    |-אּ\אּ_2\file5.txt
    \-אּ\אּ_2\file6_אּ.txt

Exemple #2 Ouverture d'un fichier crypté (en-tête crypté)

<?php
$stream 
fopen("rar://" .
    
rawurlencode(dirname(__FILE__)) . DIRECTORY_SEPARATOR .
    
'encrypted_headers.rar' '#encfile1.txt'"r"false,
    
stream_context_create(
        array(
            
'rar' =>
                array(
                    
'open_password' => 'samplepassword'
                
)
            )
        )
    );
var_dump(stream_get_contents($stream));
/* Les date de création et du dernier accès sont fournies par WinRAR,
 * mais la plupart des autres logiciels ne la fournisse pas */
var_dump(fstat($stream));
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

string(26) "Encrypted file 1 contents."
Array
(
    [0] => 0
    [1] => 0
    [2] => 33206
    [3] => 1
    [4] => 0
    [5] => 0
    [6] => 0
    [7] => 26
    [8] => 0
    [9] => 1259550052
    [10] => 0
    [11] => -1
    [12] => -1
    [dev] => 0
    [ino] => 0
    [mode] => 33206
    [nlink] => 1
    [uid] => 0
    [gid] => 0
    [rdev] => 0
    [size] => 26
    [atime] => 0
    [mtime] => 1259550052
    [ctime] => 0
    [blksize] => -1
    [blocks] => -1
)


ogg://

ogg://Flux Audio

Description

Les fichiers ouverts pour lecture avec le gestionnaire ogg:// sont traités comme de l'audio compressée en utilisant le codec OGG/Vorbis. De la même façon, les fichiers ouverts pour écriture ou pour ajout avec le gestionnaire ogg:// sont écrits comme étant des données audio compressées. La fonction stream_get_meta_data(), lorsqu'elle est utilisée sur un fichier OGG/Vorbis ouvert pour lecture retournera de nombreux détails concernant ce flux, incluant l'en-tête vendor, tous les commentaires comments, le nombre de canaux channels, le taux d'échantillonnage rate ainsi que le taux d'encodage décrit par : bitrate_lower, bitrate_upper, bitrate_nominal et bitrate_window.

ogg:// PHP 4.3.0 et suivant (PECL)

Note: Ce gestionnaire n'est pas activé par défaut
Pour utiliser le gestionnaire ogg://, vous devez installer l'extension » OGG/Vorbis disponible sur » PECL.

Options

  • ogg://soundfile.ogg
  • ogg:///path/to/soundfile.ogg
  • ogg://http://www.example.com/path/to/soundstream.ogg

Options

Résumé du gestionnaire
Attribut Supporté
Restreint par allow_url_fopen Non
Permet la lecture Oui
Permet l'écriture Oui
Permet l'ajout Oui
Permet la lecture et l'écriture simultanément Non
Supporte la fonction stat() Non
Supporte la fonction unlink() Non
Supporte la fonction rename() Non
Supporte la fonction mkdir() Non
Supporte la fonction rmdir() Non

Options de contexte
Nom Utilisation Défaut Mode
pcm_mode L'encodage PCM à appliquer pendant la lecture, parmi un de ceux-là : OGGVORBIS_PCM_U8, OGGVORBIS_PCM_S8, OGGVORBIS_PCM_U16_BE, OGGVORBIS_PCM_S16_BE, OGGVORBIS_PCM_U16_LE et OGGVORBIS_PCM_S16_LE. (8 vs 16 bit, signé ou non, gros ou petit endian) OGGVORBIS_PCM_S16_LE Lecture
rate Taux d'échantillonnage des données entrantes, exprimé en Hz 44100 Écriture/Traitement
bitrate Lorsque donné sous forme d'entier, la vitesse du débit pour encoder (de 16000 à 131072). Lorsque donné sous forme de nombre décimal, la variation de la qualité du débit à utiliser (de -1.0 à 1.0). 128000 Écriture/Ajout
channels Le numéro du canal audio à encoder, typiquement 1 (Mono) ou 2 (Stéréo). Intervalle pouvant aller jusqu'à 16. 2 Écriture/Ajout
comments Un tableau de valeurs sous forme de chaînes de caractères à encoder dans la piste d'en-tête.   Écriture/Ajout

Exemples



expect://

expect://Gestionnaire de flux

Description

Les flux ouverts avec le gestionnaire expect:// permettent d'accéder à stdio, stdout et stderr via PTY.

Note: Ce gestionnaire n'est pas activé par défaut
Pour pouvoir utiliser le gestionnaire expect://, vous devez installer l'extension » Expect disponible depuis » PECL.

expect:// PHP 4.3.0 et supérieur (PECL)

Options

  • expect://command

Options

Résumé du gestionnaire
Attribut Supporté
Restreint par la fonction allow_url_fopen Non
Autorise la lecture Oui
Autorise l'écriture Oui
Autorise l'ajout Oui
Autorise la lecture et l'écriture simultanément Non
Support de la fonction stat() Non
Support de la fonction unlink() Non
Support de la fonction rename() Non
Support de la fonction mkdir() Non
Support de la fonction rmdir() Non

Exemples


Sommaire




Sécurité


Introduction

PHP est un langage puissant et l'interpréteur, qu'il soit inclus dans le serveur web ou bien compilé en version CGI, est capable d'accéder aux fichiers, d'exécuter des commandes et d'ouvrir des connexions réseaux. Toutes ces propriétés rendent fragile la sécurité d'un serveur web. Le langage PHP a été pensé afin d'être un langage beaucoup plus sécurisé pour écrire des CGI que le Perl ou le langage C. De plus, une sélection rigoureuse des options de compilation et d'exécution vous permettra d'obtenir un équilibre parfait entre liberté et sécurité.

Étant 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 PHP dans de nombreuses situations, mais cela signifie aussi qu'il y a certaines combinaisons d'options de compilation et d'exécution qui fragilisent la sécurité du serveur. Ce chapitre explique comment les différentes options de configuration peuvent être combinées, tout en conservant une sécurité maximum.

La flexibilité de configuration de PHP est épaulée par la flexibilité du code. PHP peut être compilé pour constituer une application serveur complète, avec toutes les fonctionnalités d'un shell, ou il peut encore être utilisé comme simple SSI (server side include) avec peu de risque, dans un environnement à sécurité renforcée. La création de cet environnement et sa sécurité est largement à la charge du développeur PHP.

Ce chapitre commence par expliquer les différentes options de configuration et les situations dans lesquelles elles peuvent être utilisées en toute sécurité. Puis, viennent les considérations de niveaux de sécurité, et les conseils généraux.



Considérations générales

Un système complètement sûr est une impossibilité virtuelle. L'approche souvent utilisée par les professionnels de la sécurité est d'équilibrer les risques et l'ergonomie. Si chaque variable fournie par l'utilisateur demandait deux formes de validation biométrique (un scan de la rétine et une empreinte digitale), on obtiendrait un système avec un niveau de sécurité d'un bon niveau. Il faudrait aussi une bonne heure pour remplir un formulaire simple, ce qui encouragerait les utilisateurs à trouver un moyen de contourner cette sécurité.

La meilleure sécurité est suffisamment discrète pour assurer un maximum de sécurité sans ajouter de contraintes insurmontables pour l'utilisateur ou de systèmes complexes de programmation. Souvent, les attaques sur un script sont des exploitations des systèmes de sécurité trop complexes, qui s'érodent au cour du temps.

Un principe qu'il est bon de retenir : Un système est aussi sur que son maillon le plus faible. Si toutes les transactions sont bien notées dans une base, avec confirmation mais que l'utilisateur est identifié uniquement par un cookie, la robustesse de votre système est sévèrement réduite.

Lorsque vous testez votre site, gardez en tête que vous ne pourrez jamais tester toutes les situations, même pour les pages les plus simples. Les valeurs que vous attendez seront toujours complètement différentes des valeurs entrées par un employé négligent, un hacker qui a toute la nuit devant lui ou encore le chat de la maison qui marche sur le clavier. C'est pourquoi il est préférable de regarder le code d'un point de vue logique, pour repérer les points d'entrée des données inattendues, puis de voir comment elles pourront être modifiées, amplifiées ou réduites.

L'Internet est rempli d'individus qui tentent de se faire une renommée en piratant vos programmes, en bloquant votre site, en envoyant des contenus inappropriés, qui rendent vos journées si "spéciales". Peu 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.



Binaires CGI

Sommaire


Faiblesses connues

Utiliser PHP comme un CGI exécutable vient la majorité du temps du fait que l'on ne veut pas l'utiliser comme un module du serveur web, (comme Apache), ou bien que l'on souhaite l'utiliser en combinaison d'un CGI complémentaire, afin de créer un environnement de script sécurisé (en utilisant des techniques de chroot ou setuid). Une telle décision signifie habituellement que vous installez votre exécutable dans le répertoire cgi-bin de votre serveur web. » CERT CA-96.11 recommande effectivement de ne placer aucun interpréteur à l'intérieur du répertoire cgi-bin. Même si le programme 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 fichiers : 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, 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 de l'exécutable PHP, /secret/doc.html est utilisé par convention pour spécifier le nom du fichier qui doit être ouvert et interprété par le programe CGI. Habituellement, des directives de configuration du serveur web (pour le serveur Apache : Action) sont utilisées pour rediriger les requêtes afin d'obtenir un document http://my.host/secret/script.php par l'interpréteur PHP. Dans une telle configuration, le serveur web vérifie d'abord s'il a accès au répertoire /secret, et après cette vérification redirige la requête vers http://my.host/cgi-bin/php/secret/script.php. Malheureusement, si la requête est faite directement sous cette forme, aucune vérification d'accès n'est faite par le serveur web pour le fichier /secret/script.php, mais uniquement pour le fichier /cgi-bin/php. De cette manière, n'importe quel utilisateur qui peut accéder au fichier /cgi-bin/php peut aussi accéder aux documents protégés sur le serveur web. Avec PHP, les options d'exécution cgi.force_redirect, 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 cgi.force_redirect

La directive de configuration cgi.force_redirect évite qu'un appel direct à un script PHP avec une URL comme http://my.host/cgi-bin/php/secretdir/script.php soit possible. Dans ce cas-là, PHP analysera le fichier uniquement s'il y a eu redirection. En PHP antérieur à la version 4.2.0, vous deviez utiliser l'option de compilation --enable-force-cgi-redirect pour faire la même chose.

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-standard REDIRECT_STATUS pour les requêtes redirigées. Dans le cas où votre serveur web ne supporte pas le renseignement de PHP, pour savoir si la requête a été redirigée ou non, vous ne pouvez pas utiliser cette option de compilation. Vous devez alors utiliser une des autres méthodes d'exploitation de la version binaire CGI de PHP, comme exposé ci-dessous.



Cas 3 : Utilisation du "doc_root" ou du "user_dir"

Ajouter un contenu interactif dans votre serveur web, comme des scripts ou des exécutables, est souvent considéré comme une pratique non-sécurisée. Si, par erreur, le script n'est pas exécuté mais affiché comme une page HTML classique, il peut en résulter un vol de propriété intellectuelle ou des problèmes de sécurité à propos des mots de passe notamment. Donc, la majorité des administrateurs préfèrent mettre en place un répertoire spécial pour les scripts qui soit uniquement accessible par le biais du binaire CGI de PHP, et donc, tous les fichiers de ce répertoire seront interprétés et non affichés tels quels.

Aussi, si vous ne pouvez pas utiliser la méthode présentée ci-dessus, il est nécessaire de mettre en place un répertoire "doc_root" différent de votre répertoire "document root" de votre serveur web.

Vous pouvez utiliser la directive doc_root dans le fichier de configuration, ou vous pouvez affecter la variable d'environnement PHP_DOCUMENT_ROOT. Si cette variable d'environnement est affectée, le binaire CGI de PHP construira toujours le nom de fichier à ouvrir avec doc_root et le "path information" de la requête, et donc vous serez sûr qu'aucun script n'est exécuté en dehors du répertoire prédéfini (à l'exception du répertoire désigné par la directive user_dir Voir ci-dessous).

Une autre option possible ici est la directive user_dir. Lorsque la directive n'est pas activée, seuls les fichiers contenus dans le répertoire doc_root peuvent être ouverts. Ouvrir un fichier possédant l'url http://my.host/~user/doc.php ne correspond pas à l'ouverture d'un fichier sous le répertoire racine de l'utilisateur mais à l'ouverture du fichier ~user/doc.php sous le répertoire "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 :

Exemple #1 Ligne d'invocation de PHP

#!/usr/local/bin/php
dans tous les fichiers contenant des balises 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.




Installé en tant que module Apache

Lorsque PHP est compilé en tant que module Apache, ce module hérite des permissions accordées à l'utilisateur faisant tourner Apache (par défaut, l'utilisateur "nobody"). Cela à plusieurs impacts sur la sécurité et les autorisations. Par exemple, si vous utilisez PHP pour accéder à une base de données, à moins que la base n'ait un système de droits d'accès interne, vous devrez rendre la base accessible à l'utilisateur "nobody". Cela signifie qu'un script mal intentionné peut accéder à la base, la modifier sans identification. Il est aussi possible qu'un robot accède à la page d'administration, et détruise toutes les pages. Vous devez aussi protéger vos bases de données avec les autorisations Apache, ou définir votre propre modèle d'accès avec LDAP, .htaccess, etc. et inclure ce code dans tous vos scripts : PHP.

Souvent, lorsqu'on a établi les droits de l'utilisateur PHP (ici, l'utilisateur Apache) pour minimiser les risques, on s'aperçoit que PHP ne peut plus écrire de virus dans les fichiers des utilisateurs. Ou encore, 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 ou d'améliorer les possibilités d'Apache d'une autre façon.

Donner de telles permissions à l'utilisateur Apache est extrêmement dangereux, et peut compromettre tout le système, telle que l'utilisation des sudo ou du chroot. Pour les novices de la sécurité, une telle utilisation est à exclure d'office.

Il existe des solutions plus simples. En utilisant open_basedir vous pouvez contrôler et restreindre l'accès à certains dossiers qui pourront être utilisés par PHP. Vous pouvez aussi créer des aires de restrictionsApache, pour restreindre les activités anonymes liées aux internautes.



Sécurité des fichiers

Sommaire

PHP est soumis aux règles de sécurité intrinsèques de la plupart des systèmes serveurs : il respecte notamment les droits des fichiers et des dossiers. Une attention particulière doit être portée aux fichiers ou dossiers qui sont accessibles à tout le monde, afin de s'assurer qu'ils ne divulguent pas d'informations critiques.

Puisque PHP a été fait pour permettre aux utilisateurs d'accéder aux fichiers, il est possible de créer un script PHP 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 manipulé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 #1 Une erreur de vérification de variable conduit à un gros problème

<?php
// Efface un fichier dans un dossier racine
$username $_POST['user_submitted_name'];
$userfile $_POST['user_submitted_filename'];
$homedir  "/home/$username";

unlink("$homedir/$userfile");

echo 
"Ce fichier a été effacé !";
?>
Étant donné que le nom de l'utilisateur et le nom du fichier sont fournis, des intrus peuvent envoyer un nom d'utilisateur et un nom de fichier autres que les leurs, et effacer des documents dans les comptes des autres utilisateurs. Dans ce cas, vous souhaiterez utiliser une autre forme d'identification. Considérez ce qui pourrait se passer si les utilisateurs passent ../etc/ et passwd comme arguments! Le code serait exécuté tel que :

Exemple #2 Une attaque du système de fichiers!

<?php
// efface un fichier n'importe où sur le disque dur,
// où l'utilisateur PHP a accès. Si PHP a un accès root :
$username $_POST['user_submitted_name']; // "../etc"
$userfile $_POST['user_submitted_filename']; // "passwd"
$homedir  "/home/$username"// "/home/../etc"

unlink("$homedir/$userfile"); // "/home/../etc/passwd"

echo "Ce fichier a été effacé !";
?>
Il y a deux mesures primordiales à prendre pour éviter ces manoeuvres :
  • Limiter les permissions de l'utilisateur web PHP.
  • Vérifier toutes les variables liées aux chemins et aux fichiers qui sont fournis.
Voici un script renforcé :

Exemple #3 Une vérification renforcée

<?php
// Efface un fichier sur le disque où l'utilisateur a le droit d'aller
$username $_SERVER['REMOTE_USER']; // utilisation d'un mécanisme d'identification
$userfile basename($_POST['user_submitted_filename']);
$homedir  "/home/$username";

$filepath "$homedir/$userfile";

if (
file_exists($filepath) && unlink($filepath)) {
   
$logstring "$filepath effacé\n";
} else {
   
$logstring "Échec lors de l'effacement de $filepath\n";
}
$fp fopen("/home/logging/filedelete.log""a");
fwrite($fp$logstring);
fclose($fp);

echo 
htmlentities($logstringENT_QUOTES);
?>
Cependant, même cette technique n'est pas sans faille. Si votre système d'identification permet aux utilisateurs de créer leur propre login, et qu'un utilisateur choisi le login ../etc/, le système est de nouveau exposé. Pour cette raison, vous pouvez essayez d'écrire un script renforcé :

Exemple #4 Vérification renforcée de noms de fichiers

<?php
$username     
$_SERVER['REMOTE_USER']; // utilisation d'un mécanisme d'identification
$userfile     $_POST['user_submitted_filename'];
$homedir      "/home/$username";

$filepath     "$homedir/$userfile";

if (!
ctype_alnum($username) || !preg_match('/^(?:[a-z0-9_-]|\.(?!\.))+$/iD'$userfile)) {
   die(
"Mauvais utilisateur/nom de fichier");
}

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


Issue lors de l'utilisation des octets nuls

Comme PHP utilise des fonctions C pour les opérations sous-jacentes, notamment au niveau du système de fichiers, il peut gérer les octets nuls d'une façon inattendue. Sachant que les octets nuls dénotent la fin d'une chaîne de caractères en C, certaines fonctions vont donc considérer ces chaînes jusqu'à la première occurrence d'un octet nul. L'exemple suivant présente un code vulnérable qui montre ce problème :

Exemple #1 Script vulnérable aux octets nuls

<?php
$file 
$_GET['file']; // "../../etc/passwd\0"
if (file_exists('/home/wwwrun/'.$file.'.php')) {
   
// file_exists retournera true sachant que le fichier /home/wwwrun/../../etc/passwd existe
   
include '/home/wwwrun/'.$file.'.php';
   
// le fichier /etc/passwd sera inclu
}
?>

Ainsi, toute chaîne utilisée dans des opérations sur le système de fichiers doit toujours être validée proprement. Voici une meilleure solution de l'exemple précédent :

Exemple #2 Validation correcte de l'entrée

<?php
$file 
$_GET['file'];

// Whitelisting possible values
switch ($file) {
   case 
'main':
   case 
'foo':
   case 
'bar':
   include 
'/home/wwwrun/include/'.$file.'.php';
   break;
   default:
   include 
'/home/wwwrun/include/main.php';
}
?>



Sécurité des bases de données

Sommaire

De nos jours, les bases de données sont des composants incontournables des serveurs web et des applications en ligne, qui fournissent du contenu dynamique. Des données secrètes ou critiques peuvent être stockées dans les bases de données : il est donc important de les protéger efficacement.

Pour lire ou stocker des informations, vous devez vous connecter au serveur de bases de données, envoyer une requête valide, lire le résultat et refermer la connexion. De nos jours, le langage le plus courant pour ce type de communication est le langage SQL (Structured Query Language). Voyez comment un pirate peut s'introduire dans une requête SQL.

Comme vous pouvez le réaliser, PHP ne peut pas protéger vos bases de données pour vous. La section suivante vous introduira aux notions de base pour protéger vos bases de données, lors de la programmation de vos scripts PHP.

Gardez bien cette règle simple en tête : la défense se fait par couches. Plus vous ajouterez de tests pour protéger votre base, plus faible sera la probabilité de réussite d'un pirate. Ajoutez à cela un bon schéma de base de données, et vous aurez une application réussie.


Schéma de base de données

La première étape est de créer une base de données, à moins que vous ne souhaitiez utiliser une base de données déjà créée. Lorsque la base de données est créée, un utilisateur propriétaire en est responsable. Généralement, seul le propriétaire et le super utilisateur peuvent intervenir avec les tables de cette base, et il faut que ce dernier donne des droits à tous les intervenants qui auront à travailler sur cette base.

Les applications ne doivent jamais se connecter au serveur de bases de données sous le nom du propriétaire ou de l'administrateur, car ces utilisateurs ont des droits très importants, et pourront exécuter n'importe quelle requête, comme la modification de tables, l'effacement de lignes ou même encore, la destruction de la base.

Vous pouvez créer différents utilisateurs de bases de données pour chaque aspect de votre application, avec des droits limités aux seules actions planifiées. Il faut alors éviter que le même utilisateur dispose des droits de plusieurs cas d'utilisation. Cela permet que si des intrus obtiennent l'accès à la base avec l'un de ces jeux de droits, ils ne puissent pas affecter toute l'application.

Il est recommandé de ne pas implémenter toute la logique fonctionnelle dans l'application web (c'est-à-dire dans vos scripts), mais d'en reporter une partie dans la base en utilisant les déclencheurs, vues et règles. Si le système évolue, les nouvelles versions vous feront réécrire toute la logique et donc tous vos scripts. De plus, l'utilisation de déclencheurs permet de gérer de manière transparente des données, et fournit des indications pour déboguer votre application.



Connexions au serveur de base de données

Il est recommandé d'établir des connexions au serveur avec le protocole SSL, pour chiffrer les échanges clients/serveur, afin d'améliorer la sécurité. Vous pouvez aussi utiliser un client SSH pour chiffrer la connexion entre les clients et le serveur de bases de données. Si l'une de ces deux protections est mise en place, il sera difficile de surveiller votre trafic et de comprendre les informations échangées.



Modèle de stockage avec chiffrement

Les protocoles SSL/SSH protègent les données qui circulent entre le serveur et le client : SSL/SSH ne protège pas les données une fois dans la base. SSL est un protocole en ligne.

Une fois que le pirate a obtenu l'accès direct à votre base de données (en contournant le serveur web), les données sensibles, stockées dans votre base sont accessibles directement, à moins que les données de la base ne soient protégées par la base. Chiffrer les données est une bonne solution pour réduire cette menace, mais très peu de bases de données offrent ce type de chiffrement.

Le moyen le plus simple pour contourner ce problème est de créer votre propre logiciel de chiffrement, et de l'utiliser dans vos scripts PHP. PHP peut vous aider dans cette tâche grâce aux nombreuses extensions dont il dispose, comme Mcrypt et Mhash, qui connaissent un large éventail de méthodes de chiffrement. Le script PHP va chiffrer les données qui seront stockées, et les déchiffrer lorsqu'elles seront relues. Voyez la suite pour des exemples d'utilisation de ce chiffrement.

Dans le cas de données vraiment sensibles, si la représentation originale n'est pas nécessaire (pour affichage, ou comparaison), utiliser un hash est une bonne solution. L'exemple classique est le stockage de mots de passe dans les bases de données, après les avoir passés au en hashage de cryptage. Voyez la fonction crypt().

Exemple #1 Utiliser un mot de passe et MD5

<?php
// Stockage du mot de passe hashé
$query  sprintf("INSERT INTO users(name,pwd) VALUES('%s','%s');",
             
pg_escape_string($username), crypt($password'$2a$07$usesomesillystringforsalt$'));
$result pg_query($connection$query);

// interroger le serveur pour comparer le mot de passe soumis
$query sprintf("SELECT 1 FROM users WHERE name='%s' AND pwd='%s';",
             
pg_escape_string($username), crypt($password'$2a$07$usesomesillystringforsalt$'));
$result pg_query($connection$query);

if (
pg_num_rows($result) > 0) {
    echo 
"Bienvenue, $username!";
} else {
    echo 
"Identification échouée pour $username.";
}
?>


Injection SQL

De nombreux développeurs web ne sont pas conscients des possibilités de manipulation des requêtes SQL, et supposent que les requêtes SQL sont des commandes sûres. Cela signifie qu'une requête SQL est capable de contourner les contrôles et vérifications, comme les identifications, et parfois, les requêtes SQL ont accès aux commandes d'administration.

L'injection SQL directe est une technique où un pirate modifie une requête SQL existante pour afficher des données cachées, ou pour écraser des valeurs importantes, ou encore exécuter des commandes dangereuses pour la base. Cela se fait lorsque l'application prend les données envoyées par l'internaute, et l'utilise directement pour construire une requête SQL. Les exemples ci-dessous sont basés sur une histoire vraie, malheureusement.

Avec le manque de vérification des données de l'internaute et la connexion au serveur avec des droits de super utilisateur, le pirate peut créer des utilisateurs, et créer un autre super utilisateur.

Exemple #1 Séparation des résultats en pages, et créer des administrateurs (PostgreSQL et MySQL)

<?php
$offset 
$argv[0]; // Attention, aucune validation!
$query  "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset;";
// avec PostgreSQL
$result pg_query($conn$query);
// avec MySQL
$result mysql_query($query);
?>
Un utilisateur normal clique sur les boutons 'suivant' et 'précédent', qui sont alors placés dans la variable $offset, encodée dans l'URL. Le script s'attend à ce que la variable $offset soit alors un nombre décimal. Cependant, il est possible de modifier l'URL en ajoutant une nouvelle valeur, au format URL, comme ceci :

Exemple #2 Exemple d'injection SQL

<?php
// cas de PostgreSQL
0;
insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd)
    select 'crack', usesysid, 't','t','crack'
    from pg_shadow where usename='postgres';
--

// cas de MySQL
0;
UPDATE user SET Password=PASSWORD('crack') WHERE user='root';
FLUSH PRIVILEGES;
?>
Si cela arrive, le script va créer un nouveau super utilisateur. Notez que la valeur 0; sert à terminer la requête originale et la terminer correctement.

Note:

C'est une technique répandue que de forcer l'analyseur SQL à ignorer le reste de la requête, en utilisant les symboles -- pour mettre en commentaires.

Un moyen disponible pour accéder aux mots de passe est de contourner la recherche de page. Ce que le pirate doit faire, c'est simplement voir si une variable du formulaire est utilisée dans la requête, et si elle est mal gérée. Ces variables peuvent avoir été configurées dans une page précédente pour être utilisées dans les clauses WHERE, ORDER BY, LIMIT et OFFSET des requêtes SELECT. Si votre base de données supporte les commandes UNION, le pirate peut essayer d'ajouter une requête entière pour lister les mots de passe dans n'importe quelle table. Utiliser la technique des mots de passe chiffrés est fortement recommandé.

Exemple #3 Liste d'articles ... et ajout de mot de passe

<?php
$query  
"SELECT id, name, inserted, size FROM products
                  WHERE size = '
$size'
                  ORDER BY 
$order LIMIT $limit$offset;";
$result odbc_exec($conn$query);
?>
La partie statique de la requête, combinée avec une autre requête SELECT, va révéler les mots de passe :

Exemple #4 Révélation des mots de passe

<?php
'
union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable;
--
?>
Si cette requête, exploitant les ' et -- est affectée à une variable utilisée dans $query, une injection SQL va se produire.

Les commandes UPDATE sont aussi sujettes à des attaques de votre base de données. Ces requêtes peuvent aussi introduire toute une nouvelle requête dans votre commande initiale. Mais en plus, le pirate peut jouer sur la commande SET. Dans ce cas, il doit connaître un peu votre base de données. Cela peut se deviner en examinant les noms de variables dans les formulaires, ou simplement, en testant les cas les plus classiques. Il n'y a pas beaucoup de conventions de noms pour stocker des noms d'utilisateurs et des mots de passe.

Exemple #5 Modifier un mot de passe ... et gain de droits!

<?php
$query
"UPDATE usertable SET pwd='$pwd' WHERE uid='$uid';";
?>
Mais un internaute fourbe peut envoyer une valeur telle que ' or uid like '%admin%'; -- dans $uid pour modifier le mot de passe utilisateur, ou simplement, utiliser la variable $pwd avec la valeur "hehehe', admin='yes', trusted=100 " (avec l'espace final) pour obtenir des droits supplémentaires. La requête devient alors :

Exemple #6 Une requête et son injection

<?php
// $uid == ' or uid like'%admin%'; --
$query "UPDATE usertable SET pwd='...' WHERE uid='' or uid like '%admin%'; --";

// $pwd == "hehehe', admin='yes', trusted=100 "
$query "UPDATE usertable SET pwd='hehehe', admin='yes', trusted=100 WHERE ...;"
?>

C'est un exemple terrible d'acquisition de droits d'administrateur sur un serveur de base de données.

Exemple #7 Attaque d'un serveur de bases de données (MSSQL Server)

<?php
$query  
"SELECT * FROM products WHERE id LIKE '%$prod%'";
$result mssql_query($query);
?>
Si le pirate injecte la valeur a%' exec master..xp_cmdshell 'net user test testpass /ADD' -- dans la variable $prod, alors la requête $query devient :

Exemple #8 Attaque d'un serveur de base de données (MSSQL Server) - 2

<?php
$query  
"SELECT * FROM products
                    WHERE id LIKE '%a%'
                    exec master..xp_cmdshell 'net user test testpass /ADD'--"
;
$result mssql_query($query);
?>
MSSQL Server exécute les requêtes SQL en lot, y compris la commande d'ajout d'un nouvel utilisateur à la base de données locale. Si cette application fonctionnait en tant que sa et que le service MSSQLSERVER disposait de niveau de droits suffisant, le pirate dispose désormais d'un compte avec accès au serveur.

Note:

Certains des exemples ci-dessus sont spécifiques à certains serveurs de bases de données. Cela n'empêche pas des attaques similaires d'être possibles sur d'autres produits. Votre base de données sera alors vulnérable d'une autre manière.

Un exemple concernant l'injection SQL
Image de » xkcd

Techniques de contournement

Bien qu'il semble évident qu'un pirate doit posséder quelques connaissances de l'architecture de la base de données afin de conduire avec succès une attaque, il est souvent très simple de les obtenir. Par exemple, si la base de données fait partie d'un paquet open source ou disponible publiquement, ces informations sont complètement ouvertes et disponibles. Ces informations peuvent aussi être divulgués pour des codes sources fermés - y compris si ce code est encodé, occulté, ou compilé - aux travers des messages d'erreurs. D'autres méthodes consistent à deviner l'utilisateur de table commune ainsi que des noms des colonnes. Par exemple, un formulaire d'identification qui utilise la table 'users' avec les colonnes de noms 'id', 'username', et 'password'.

Ces attaques sont généralement basées sur l'exploitation de code qui n'est pas écrit de manière sécuritaire. N'ayez aucune confiance dans les données qui proviennent de l'utilisateur, même si cela provient d'un menu déroulant, d'un champ caché ou d'un cookie. Le premier exemple montre comment une requête peut causer un désastre.

  • Ne nous connectez jamais sur une base de données en tant que super utilisateur ou propriétaire de la base. Utilisez toujours un utilisateur adapté, avec des droits très limités.
  • Vérifiez que les données ont bien le type attendu. PHP dispose d'un éventail de fonction de validation large, depuis les plus simples, de la section Variables et la section Caractères (e.g. is_numeric(), ctype_digit() respectivement) aux fonctions avancées de Expression rationnelle Perl.
  • Si l'application attend une entrée numérique, vérifiez vos données avec la fonction is_numeric(), ou bien modifiez automatiquement le type avec la fonction settype(), ou encore avec sprintf().

    Exemple #9 Une navigation de fiches plus sécuritaire

    <?php
    settype
    ($offset'integer');
    $query "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset;";

    // notez que %d dans la chaîne de format : %s serait inutile
    $query sprintf("SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET %d;",
                     
    $offset);
    ?>

  • Mettez entre guillemets toutes les valeurs non numériques qui sont passées à la base de données avec la fonction spécifique à la base de données d'échappement de caractères (e.g. mysql_real_escape_string(), sqlite_escape_string(), etc.). Si un mécanisme d'échappement spécifique à une base de données n'existe pas, les fonctions addslashes() et str_replace() peuvent être très utiles (en fonction du type de la base de données). Lisez le premier exemple. Comme le montre l'exemple, ajouter des guillemets à la partie statique de la requête n'est pas suffisant, rendant cette requête facile à pirater.
  • N'affichez jamais d'informations spécifiques à la base, et notamment des informations concernant le schéma. Voyez aussi la section Rapport d'erreur et le chapitre Gestion des erreurs.
  • Vous pouvez avoir des procédures stockées et des curseurs prédéfinis qui font que les utilisateurs n'ont pas un accès direct aux tables ou vues, mais cette solution a d'autres impacts.

À côté de ces conseils, il est recommandé d'enregistrer vos requêtes, soit dans vos scripts, soit dans la base elle-même, si elle le supporte. Évidemment, cet enregistrement ne sera pas capable d'empêcher une attaque, mais vous permettra de retrouver la requête qui a fauté. L'historique n'est pas très utile par lui-même, mais au niveau des informations qu'il contient. Plus vous avez de détails, mieux c'est.




Rapport d'erreurs

En termes de sécurité, il y a deux conséquences au rapport d'erreur. D'un coté, cela améliore la sécurité, mais d'un autre, cela la réduit aussi.

Une tactique d'attaque standard consiste à faire faire des erreurs au système, et lire les variables d'environnement et de contexte qui sont retournées. Cela permet au pirate de lire de nombreuses informations sur le serveur, et de détecter des faiblesses du serveur. Par exemple, si un intrus a glané des informations sur votre page, avec une première utilisation de votre site, il peut essayer de remplacer les variables par ses propres valeurs :

Exemple #1 Attaque de site avec une page HTML personnalisée

<form method="post" action="http://www.site.cible.com/?username=badfoo&password=badfoo">
 <input type="hidden" name="username" value="badfoo">
 <input type="hidden" name="password" value="badfoo">
</form>

Les erreurs PHP qui sont normalement retournées peuvent être très pratiques pour un développeur qui essaie de déboguer un script, car elles donnent de précieux renseignements tels que quelle fonction a échoué, quel fichier n'a pas été trouvé, quel script PHP a un bug, 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éboguage, mais sur un site en production, cela expose des variables cachées, des syntaxes non vérifiées ou d'autres informations critiques. Il est particulièrement dangereux d'exécuter du code de sources connues, avec les gestionnaires de débogage. Si l'intrus peut comprendre votre technique habituelle d'utilisation, il peut tenter une attaque frontale sur une page, en envoyant des chaînes de débogage :

Exemple #2 Exploiter des variables classiques de débogage

<form method="post" action="http://www.site.cible.com/?errors=Y&showerrors=1"&debug=1">
 <input type="hidden" name="errors" value="Y">
 <input type="hidden" name="showerrors" value="1">
 <input type="hidden" name="debug" value="1">
</form>

Indépendamment de la gestion des erreurs, la possibilité de tester la gestion des erreurs d'un système conduit à un trou de sécurité, et la diffusion de plus d'informations sur votre système.

Si un pirate affiche une page html, et essaye de la tester (pour rechercher des faiblesses du système), il peut déterminer sur quel système PHP a été compilé.

Une erreur de fonction indique si un système supporte une base de données spécifique, ou bien indique comment la page a été générée. Cela peut orienter l'intrus vers les ports de cette base de données ou bien vers une attaque liée à cette application. En envoyant des données erronées, par exemple, un pirate peut déterminer l'ordre d'identification 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 d'essayer de traiter toutes les erreurs. La deuxième est de désactiver le rapport d'erreur, dès que le script est en production. La troisième est d'utiliser les fonctions de gestion des erreurs. Suivant votre politique de sécurité, vous pouvez utiliser un panachage savant des trois méthodes.

Une méthode pour gagner du temps est d'utiliser la fonction error_reporting(), pour vous aider à sécuriser le code, et détecter les utilisations dangereuses de variables. Vous testez votre code en béta test avec la valeur E_ALL, et vous pouvez rapidement repérer les variables qui ne sont pas protégées. Une fois que le code est prêt à être déployé, vous devez soit désactiver complètement le rapport d'erreur en affectant 0 à la fonction error_reporting(), soit en désactivant l'affichage des erreurs en utilisant l'option de configuration display_errors du php.ini. Si vous choisissez la dernière solution, vous devez également définir le chemin de votre fichier de log en utilisant la directive de configuration error_log, et en activant la directive log_errors.

Exemple #3 Détecter des variables non protégées avec E_ALL

<?php
if ($username) {
  
// Non initialisée, ou vérifée avant utilisation
  
$good_login 1;
}
if (
$good_login == 1) {
  
// Si le test ci-dessus échoue, les valeurs n'ont pas été testées
  
fpassthru ("/données/très/très/sensibles/index.html");
}
?>



Utilisation des variables super-globales

Avertissement

Cette fonctionnalité est devenue OBSOLETE depuis PHP 5.3.0 et a été SUPPRIMEE depuis PHP 5.4.0.

L'une des évolutions les plus controversées de PHP a été le changement de valeur par défaut de la directive PHP register_globals, qui est passée de On à Off en PHP » 4.2.0. Beaucoup d'applications dépendaient de cette directive, et de nombreux programmeurs ne savaient même pas qu'elle existait, et supposait que c'était le fonctionnement normal de PHP. Cette page explique comment on peut écrire du code peu sécuritaire en utilisant cette directive. Gardez bien en tête que cette directive, par elle-même, n'est pas un trou de sécurité, mais qu'elle facilite leur création.

Lorsqu'elle est activée, register_globals va injecter vos scripts avec toutes sortes de variables, comme les variables issues des formulaires HTML. Ceci, couplé au fait que PHP ne requiert pas d'initialisation de variable signifie que la programmation de script peu sûr est possible. Ce fut une décision difficile de la communauté PHP, mais finalement, il a été décidé de désactiver par défaut cette variable. Lorsqu'elle est active, le programmeur ne sait pas exactement d'où provient le contenu de la variable, et ne peut que faire des suppositions. Les variables internes définies dans le script sont mélangées avec les données envoyées par les utilisateurs, et en désactivant register_globals, on empêche cela. Voyons avec un exemple le fonctionnement de register_globals :

Exemple #1 Exemple de mauvaise utilisation de register_globals

<?php
// $authorized = true uniquement si l'utilisateur est identifié
if (authenticated_user()) {
    
$authorized true;
}

// Comme nous n'avons pas initialisé $authorized avec false, cette dernière
// peut être définie via register_globals, comme avec l'URL GET auth.php?authorized=1
// Tout le monde peut facilement être reconnu comme identifié!
if ($authorized) {
    include 
"/donnees/critiques/data.php";
}
?>

Lorsque register_globals est activé, la logique ci-dessus peut être prise en défaut. Lorsque register_globals est désactivée $authorized ne peut plus être assignée via la requête, et le script est maintenant sûr, même s'il reste recommandé de toujours initialiser ses variables. Par exemple, dans notre programme ci-dessus, nous pourrions ajouter $authorized = false. En faisant cela, le script peut fonctionner avec register_globals on ou off, car les utilisateurs seront par défaut non-identifiés.

Un autre exemple implique les sessions. Lorsque register_globals est activé, on peut aussi utiliser $username dans notre exemple, mais, encore une fois, vous devez garder en tête que $username peut aussi provenir d'autres biais, tels que GET (via l'URL).

Exemple #2 Exemple d'abus de sessions avec register_globals on ou off

<?php
// Nous ne savons pas d'où provient $username mais nous savons que
// $_SESSION contient les données de session
if (isset($_SESSION['username'])) {

    echo 
"Bonjour <strong>{$_SESSION['username']}</strong>";

} else {

    echo 
"Bonjour <strong>visiteur</strong><br />";
    echo 
"Voulez-vous vous identifier?";

}
?>

Il est même possible de prendre des mesures préventives, pour être alerté lorsqu'une tentative d'usurpation est faite. Si vous savez à l'avance de quelle variable le nom d'utilisateur doit provenir, vous pouvez vérifier si les données que vous manipulez sont d'une origine contrôlée. Même si cela ne garantit pas que les données ne puissent être falsifiées, cela complique la tache du faussaire. Si vous ne vous préoccupez pas de l'origine des données, vous pouvez utiliser la variable $_REQUEST qui contient un mélange de données GET, POST et COOKIE. Voyez aussi la section du manuel concernant les variables de sources externes à PHP.

Exemple #3 Détection simple de fausses variables

<?php
if (isset($_COOKIE['MAGIC_COOKIE'])) {

    
// MAGIC_COOKIE provient d'un cookie.
    // Assurez-vous de valider les données du cookie!

} elseif (isset($_GET['MAGIC_COOKIE']) || isset($_POST['MAGIC_COOKIE'])) {

   
mail("admin@example.com""Tentative possible d'attaque"$_SERVER['REMOTE_ADDR']);
   echo 
"Alerte sécurité, l'admin a été prévenu.";
   exit;

} else {

   
// MAGIC_COOKIE ne provient pas de REQUEST

}
?>

Bien sur, désactiver l'option register_globals ne signifie pas que votre code est sécuritaire. Pour chaque donnée reçu, vous devez appliquer un maximum de validations. Vérifiez toujours les données de votre visiteur, et initialisez vos variables! Pour vérifier les variables non-initialisées, voyez la fonction error_reporting(), qui peut afficher les erreurs de niveau E_NOTICE.

Pour des informations sur l'émulation de register_globals On ou Off, voyez la FAQ.

Note: Superglobales : disponibilité

Depuis PHP 4.1.0, les tableaux superglobaux tels que $_GET, $_POST et $_SERVER, etc. sont disponibles. Pour plus d'informations, lisez la section superglobals



Données transmises par les internautes

Les plus grandes faiblesses de nombreux programmes PHP ne viennent pas du langage lui-même, mais de son utilisation en omettant les caractéristiques de sécurité. Pour cette raison, vous devez toujours prendre le temps de prendre en compte les implications d'une fonction, et de cerner toutes les applications d'une utilisation exotiques des paramètres.

Exemple #1 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 ajoute une entrée dans /etc/password ?
system($evil_var);
exec($evil_var);
?>

Il est vivement recommandé d'examiner minutieusement votre code pour vous assurer qu'il n'y a pas de variables envoyées par le client web, et qui ne sont pas suffisamment vérifiées avant utilisation.

  • Est-ce que ce script n'affectera que les fichiers prévus?
  • Est-il possible que des valeurs incohérentes soient exploitées ici?
  • Est-ce que ce script peut être utilisé dans un but différent?
  • Est-ce que ce script peut être utilisé malicieusement, en conjonction avec d'autres?
  • Est-ce que toutes les actions seront notées?

En répondant de manière adéquate à ces questions lors de l'écriture de vos scripts (plutôt qu'après), vous éviterez une réécriture inopportune pour raison de sécurité. En commençant vos projets avec ces recommandations en tête, vous ne garantirez pas la sécurité de votre système, mais vous contribuerez à l'améliorer.

Vous pouvez aussi envisager de supprimer l'acquisition automatique des variables d'environnement, les guillemets magiques (magic_quotes), ou encore toute option qui pourrait vous conduire à vous tromper sur la validité, la source ou la valeur d'une variable. En travaillant avec avec PHP en 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).



Guillemets magiques

Sommaire

Avertissement

Cette fonctionnalité est devenue OBSOLETE depuis PHP 5.3.0 et a été SUPPRIMEE depuis PHP 5.4.0.

Les guillemets magiques (littéralement, les Magic Quotes) est un processus qui protège automagiquement les données introduites dans un script PHP. Il est recommandé de développer les applications sans l'aide des guillemets magiques, et de protéger manuellement les données.


Qu'est-ce que les guillemets magiques?

Avertissement

Cette fonctionnalité est devenue OBSOLETE depuis PHP 5.3.0 et a été SUPPRIMEE depuis PHP 5.4.0.

Lorsque cette directive est active, les guillemets simples ', les guillemets doubles ", les antislashs \ et les caractères nul NULL sont protégés automatiquement avec un antislash. C'est le même résultat que celui de la fonction addslashes().

Il y a trois directives de guillemets magiques différentes :

  • magic_quotes_gpc Affecte les données issues des requêtes HTTP (GET, POST, et COOKIE). Ne peut pas être configurée durant l'exécution, et vaut par défaut on en PHP. Voir aussi get_magic_quotes_gpc().
  • magic_quotes_runtime Si activée, la plupart des fonctions qui retournent des données externes, y compris issues d'une base de données ou d'un fichier texte, verront les données protégées par des antislashs. Cette directive peut être modifiée durant l'exécution, et vaut par défaut off en PHP. Voir aussi set_magic_quotes_runtime() et get_magic_quotes_runtime().
  • magic_quotes_sybase Si cette configuration est active, les guillemets simples sont protégés avec un autre guillemets simples, et non pas un antislash. Lorsqu'elle est active, cette directive remplace entièrement magic_quotes_gpc. Si vous activez ces deux directives, alors seuls les guillemets simples seront protégés, avec ''. Les guillemets doubles, les antislashs et les caractères nul seront laissés intacts. Voir aussi ini_get() pour lire la valeur de la directive.


Pourquoi utiliser les guillemets magiques?

Avertissement

Cette fonctionnalité est devenue OBSOLETE depuis PHP 5.3.0 et a été SUPPRIMEE depuis PHP 5.4.0.

  • Il n'y a aucune raison d'utiliser les guillemets magiques, car ils ne sont plus supportés en PHP. Cependant, ils ont existés, et ont aidé quelques débutants, en le permettant de produire, sans le savoir et involontairement, du code plus sécuritaire. Lorsque vous tombez sur des scripts qui s'appuient sur ce type de comportements, il est recommandé de modifier ce code et de désactiver les guillemets magiques. Pour quelles raisons cette fonctionnalité est apparue? Simplement pour se protéger des injections SQL. Aujourd'hui, les développeurs sont plus conscients des problèmes de sécurité, et adoptent les mécanismes de protections de leur base de données, ou les commandes préparées, au lieu de passer par les guillemets magiques.


Pourquoi ne pas utiliser les guillemets magiques?

Avertissement

Cette fonctionnalité est devenue OBSOLETE depuis PHP 5.3.0 et a été SUPPRIMEE depuis PHP 5.4.0.

  • Portabilité Cette directive peut être activée ou désactivée suivant les serveurs et cela affecte grandement la portabilité. Utilisez get_magic_quotes_gpc() pour vérifier s'ils sont actifs ou pas, et adaptez votre application.
  • Performances Comme ce n'est pas toutes les données qui sont finalement placées dans une base, il y a un coût en vitesse pour protéger toutes ces données. Le simple appel des fonctions de protections en fonction des besoins est plus efficace (addslashes()). Même si php.ini-development active ces options par défaut, php.ini-recommended les désactive. Cette recommandation est surtout faite pour des raisons de vitesse.
  • Peu pratique Comme toutes les données n'ont pas forcément besoin de protection, il est souvent désagréable de voir des données protégées là où ça ne sert à rien. Par exemple, lorsque vous envoyez par mail un formulaire, et que vous voyez des antislashs parsemer le message. Pour corriger cela, il faut faire un usage fréquent de stripslashes().


Désactiver les guillemets magiques

La directive magic_quotes_gpc ne peut être désactivée qu'au niveau du système, et non pas à l'exécution. En d'autres termes, utiliser ini_set() n'est pas possible.

Exemple #1 Désactiver les guillemets magiques du coté du serveur

Voici un exemple qui donne la valeur de Off à ces directives dans le fichier php.ini. Pour plus de détails, voyez la section Comment changer la configuration.

; Magic quotes
;

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

Si vous n'avez pas accès au serveur, utilisez le fichier .htaccess. Par exemple :

php_flag magic_quotes_gpc Off

Afin d'écrire du code portable sur tous les environnements, et où vous ne pourrez pas forcément modifier la configuration du serveur, voici un exemple de désactivation de magic_quotes_gpc à l'exécution. Cette méthode est inefficace, et il est recommandé d'utiliser les autres solutions si possible.

Exemple #2 Désactivation des guillemets magiques à l'exécution

<?php
if (get_magic_quotes_gpc()) {
    
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list(
$key$val) = each($process)) {
        foreach (
$val as $k => $v) {
            unset(
$process[$key][$k]);
            if (
is_array($v)) {
                
$process[$key][stripslashes($k)] = $v;
                
$process[] = &$process[$key][stripslashes($k)];
            } else {
                
$process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset(
$process);
}
?>




Masquer PHP

En général, la sécurité par l'obscurité est une des formes de sécurité les plus faibles. Mais dans certains cas, chaque action, aussi faible soit elle, concernant la sécurité, est souhaitable.

Quelques astuces permettent de masquer PHP, et cela entrave les pirates qui recherchent des faiblesses dans votre système. En règlant l'option expose_php à off dans votre fichier php.ini, vous pouvez réduire la quantité d'informations disponible.

Une autre astuce est de configurer le serveur web, comme Apache, pour qu'il utilise plusieurs types de fichiers différents avec PHP, soit localement avec le fichier .htaccess, soit dans le fichier de configuration lui-même. Vous pouvez utiliser des informations déroutantes comme ceci :

Exemple #1 Masquer PHP avec un autre langage

# Faire que le code PHP ressemble à un autre langage
AddType application/x-httpd-php .asp .py .pl
Ou masquez le complètement :

Exemple #2 Masquer PHP avec des types inconnus

# Faire que le code PHP ressemble à un autre langage qui n'existe pas
AddType application/x-httpd-php .bop .foo .133t
Ou encore, cachez-le sous forme de HTML. Cela a un léger impact négatif sur les performances générales, car tous les fichiers HTML seront aussi analysés et traités par le moteur PHP :

Exemple #3 Utiliser le type HTML pour les extensions PHP

# Faire que le code PHP ressemble à du html
AddType application/x-httpd-php .htm .html
Pour que cela fonctionne efficacement, pensez à renommer tous vos fichiers PHP avec les extensions ci-dessus. Même si c'est une forme de sécurité du non-dit, c'est une mesure de prévention mineure, avec peu d'inconvénients.



Être à jour

PHP, comme de nombreux systèmes de grande taille, est constamment testé et amélioré. Chaque nouvelle version rassemble des modifications majeures et mineures, aussi bien pour renforcer la sécurité, que pour réparer les problèmes de conception 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.




Caractéristiques


Identification HTTP avec PHP

Il est possible d'utiliser la fonction header() pour demander une identification ("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 prédéfinies PHP_AUTH_USER, PHP_AUTH_PW et AUTH_TYPE contenant respectivement le nom d'utilisateur, le mot de passe et le type d'identification. Ces variables prédéfinies sont trouvées dans les tableaux $_SERVER et $HTTP_SERVER_VARS. Les méthodes d'identification simple ("Basic") et de type "Digest" (depuis PHP 5.1.0) sont supportées. Reportez-vous à la fonction header() pour plus d'informations.

Note: Note de version PHP

Les Superglobales, comme $_SERVER, deviennent disponibles en PHP depuis la version » 4.1.0.

Voici un exemple de script qui force l'identification du client pour accéder à une page :

Exemple #1 Exemple d'identification HTTP simple

<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    
header('WWW-Authenticate: Basic realm="My Realm"');
    
header('HTTP/1.0 401 Unauthorized');
    echo 
'Texte utilisé si le visiteur utilise le bouton d\'annulation';
    exit;
} else {
    echo 
"<p>Bonjour, {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo 
"<p>Votre mot de passe est {$_SERVER['PHP_AUTH_PW']}.</p>";
}
?>

Exemple #2 Exemple d'identification HTTP Digest

Cet exemple montre comment appliquer l'utilisation d'un script d'identification HTTP de type "Digest". Pour plus d'informations, lisez la documentation » RFC 2617.

<?php
$realm 
'Restricted area';

//utilisateur => mot de passe
$users = array('admin' => 'mypass''guest' => 'guest');


if (empty(
$_SERVER['PHP_AUTH_DIGEST'])) {
    
header('HTTP/1.1 401 Unauthorized');
    
header('WWW-Authenticate: Digest realm="'.$realm.
           
'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');

    die(
'Texte utilisé si le visiteur utilise le bouton d\'annulation');
}

// analyse la variable PHP_AUTH_DIGEST
if (!($data http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) ||
    !isset(
$users[$data['username']]))
    die(
'Mauvaise Pièce d\'identité!');


// Génération de réponse valide
$A1 md5($data['username'] . ':' $realm ':' $users[$data['username']]);
$A2 md5($_SERVER['REQUEST_METHOD'].':'.$data['uri']);
$valid_response md5($A1.':'.$data['nonce'].':'.$data['nc'].':'.$data['cnonce'].':'.$data['qop'].':'.$A2);

if (
$data['response'] != $valid_response)
    die(
'Mauvaise Pièce d\'identitée!');

// ok, utilisateur & mot de passe valide
echo 'Vous êtes identifié en tant que : ' $data['username'];


// fonction pour analyser l'en-tête http auth
function http_digest_parse($txt)
{
    
// protection contre les données manquantes
    
$needed_parts = array('nonce'=>1'nc'=>1'cnonce'=>1'qop'=>1'username'=>1'uri'=>1'response'=>1);
    
$data = array();
    
$keys implode('|'array_keys($needed_parts));
 
    
preg_match_all('@(' $keys ')=(?:([\'"])([^\2]+?)\2|([^\s,]+))@'$txt$matchesPREG_SET_ORDER);

    foreach (
$matches as $m) {
        
$data[$m[1]] = $m[3] ? $m[3] : $m[4];
        unset(
$needed_parts[$m[1]]);
    }

    return 
$needed_parts false $data;
}
?>

Note: Note de compatibilité

Soyez bien prudent lorsque vous utilisez des en-têtes HTTP avec PHP. Afin de garantir un maximum de compatibilité entre les navigateurs, le mot clé "Basic" doit être écrit avec un B majuscule, et le texte de présentation doit être placé entre guillemets simples, et exactement un espace doit précéder le code 401 dans l'en-tête HTTP/1.0 401. Les paramètres d'authentification doivent être séparés par des virgules comme montré dans l'exemple ci-dessus.

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 bogués, tels qu'Internet Explorer. Ils semblent très susceptibles en ce qui concerne l'ordre des en-têtes. Envoyer l'en-tête d'identification (WWW-Authenticate) avant le code de HTTP/1.0 401 semble lui convenir jusqu'à présent.

Depuis PHP 4.3.0, pour éviter que quelqu'un écrive un script qui révèle les mots de passe d'une page, à laquelle on a accédé par une identification traditionnelle, les variables globales PHP_AUTH ne seront pas assignées si l'identification externe a été activée pour cette page et que le safe mode est activé. Dans ce cas, la variable REMOTE_USER peut être utilisée pour identifier l'utilisateur à l'extérieur. De même que $_SERVER['REMOTE_USER'].

Note: Note de configuration

PHP utilise la présence de la directive AuthType pour déterminer si une identification externe est activée. Évitez donc cette directive de contexte si vous voulez utiliser l'identification de PHP (sinon, les deux identifications se contrediront, et échoueront).

Notez cependant que les manipulations ci-dessus n'empêchent pas quiconque possède une page non identifiée de voler les mots de passe des pages protégées, sur le même serveur.

Netscape et Internet Explorer effaceront le cache d'identification client s'ils reçoivent une réponse 401. Cela permet de déconnecter un utilisateur, pour le forcer à saisir à nouveau son nom de compte et son mot de passe. Certains programmeurs l'utilisent pour donner un délai d'expiration ou, alors, fournissent un bouton de déconnexion.

Exemple #3 Identification 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 identifiant et un mot de passe valides pour accéder
    à cette ressource.\n"
;
    exit;
}

if ( !isset(
$_SERVER['PHP_AUTH_USER']) ||
     (
$_POST['SeenBefore'] == && $_POST['OldAuth'] == $_SERVER['PHP_AUTH_USER'])) {
    
authenticate();
} else {
    echo 
"<p>Bienvenue : " htmlspecialchars($_SERVER['PHP_AUTH_USER']) . "<br />";
    echo 
"Ancien : " htmlspecialchars($_REQUEST['OldAuth']);
    echo 
"<form action='' method='post'>\n";
    echo 
"<input type='hidden' name='SeenBefore' value='1' />\n";
    echo 
"<input type='hidden' name='OldAuth' value=\"" htmlspecialchars($_SERVER['PHP_AUTH_USER']) . "\" />\n";
    echo 
"<input type='submit' value='Re Authenticate' />\n";
    echo 
"</form></p>\n";
}
?>

Ce comportement n'est pas nécessaire par le standard d'identification 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 presser la touche "retour" à un client Lynx précédemment identifié donnera l'accès direct à la ressource. Cependant, l'utilisateur peut utiliser la touche '_' pour détruire les anciennes identifications.

Noter également que depuis PHP 4.3.3, l'authentification HTTP ne fonctionnera pas lors de l'utilisation de Microsoft IIS avec la version CGI de PHP en raison d'une limitation d'IIS. Pour retrouver un fonctionnement normal en PHP 4.3.3+, vous devez éditer votre configuration "Directory Security". Cliquez sur "Edit" et activez uniquement "Anonymous Access", tous les autres champs doivent être laissés non actifs.

Une autre limitation : si vous utilisez le module IIS (ISAPI) et PHP 4, vous ne pourrez pas utiliser les variables PHP_AUTH_* mais à la place, la variable HTTP_AUTHORIZATION est disponible. Par exemple, considérez le code suivant : list($user, $pw) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));

Note: Note pour les utilisateurs de IIS :
Pour que l'identification HTTP fonctionne avec IIS, la directive PHP cgi.rfc2616_headers doit être définie à 0 (la valeur par défaut).

Note:

Si le safe mode est activé, le uid de ce script est ajouté à la partie realm des en-têtes WWW-Authenticate.



Cookies

PHP supporte les cookies HTTP 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'identifier et de suivre les visiteurs. Vous pouvez envoyer un cookie avec la fonction setcookie() ou setrawcookie(). Les cookies font partie des en-têtes HTTP, ce qui impose que setcookie() soit appelée avant tout affichage de texte. Ce sont les mêmes limitations que pour header(). Vous pouvez utiliser les fonctions de bufferisation de sortie pour retarder l'affichage de votre script tant que vous n'avez pas décidé d'envoyer un cookie ou des en-têtes.

Tous les cookies qui sont envoyés au client seront automatiquement inclus dans un tableau auto-global $_COOKIE si variables_order contient "C". Si vous souhaitez affecter plusieurs valeurs à un seul cookie, ajoutez [] au nom du cookie.

Selon la configuration de register_globals, des variables PHP peuvent être créées à partir des cookies. Cependant, il n'est pas recommandé de se fier à elles, puisque cette fonctionnalité est souvent désactivée pour des raisons de sécurité. $HTTP_COOKIE_VARS est aussi prédéfinie dans les versions de PHP plus anciennes, lorsque la directive track_vars est activée.

Pour plus de détails, y compris des notes sur les bogues des navigateurs, voir les fonctions setcookie() et setrawcookie().



Sessions

Le support des sessions de PHP est un mécanisme pour conserver des données entre différents accès. Cela vous permet de personnaliser les applications, et d'augmenter l'attrait de votre site. Toutes les informations sur les sessions sont disponibles dans la section sessions.



Utiliser les XForms

» XForms est une variation des formulaires web traditionnels, qui permet leur utilisation sur diverses plates-formes et navigateurs, et même sur des médias moins traditionnels comme les documents PDF.

La première différence des XForms est leur présentation au client. » XForms for HTML Authors contient une description détaillée de la création des XForms, complémentaire de notre tutoriel : nous allons nous consacrer à un exemple simple.

Exemple #1 Un simple formulaire XForms de recherche

<h:html xmlns:h="http://www.w3.org/1999/xhtml"
        xmlns="http://www.w3.org/2002/xforms">
<h:head>
 <h:title>Search</h:title>
 <model>
  <submission action="http://example.com/search"
              method="post" id="s"/>
 </model>
</h:head>
<h:body>
 <h:p>
  <input ref="q"><label>Find</label></input>
  <submit submission="s"><label>Go</label></submit>
 </h:p>
</h:body>
</h:html>

Le formulaire ci-dessus affiche une boîte de texte (appelée q), et un bouton de soumission. Lorsque ce bouton est utilisé, le formulaire est envoyé à la page d'action.

C'est là que la différence se fait sentir, du point de vue de l'application web. Dans un formulaire HTML, les données sont envoyées au format application/x-www-form-urlencoded. Pour un XForm, c'est en fait un format XML qui est utilisé.

Si vous avez décidé d'utiliser des XForms, vous attendez peut être des données au format XML, et dans ce cas, regardez dans la variable $HTTP_RAW_POST_DATA, où vous trouverez le document XML généré par le navigateur, que vous pourrez passer à votre moteur XSLT favori.

Si vous n'êtes pas intéressé par ce format, et que vous voulez simplement exploiter vos données avec la variable $_POST, vous pouvez demander au navigateur de les envoyer au format application/x-www-form-urlencoded, en modifiant l'attribut de méthode method et en lui donnant la valeur de urlencoded-post.

Exemple #2 Utiliser des XForms pour remplir $_POST

<h:html xmlns:h="http://www.w3.org/1999/xhtml"
        xmlns="http://www.w3.org/2002/xforms">
<h:head>
 <h:title>Search</h:title>
 <model>
  <submission action="http://example.com/search"
              method="urlencoded-post" id="s"/>
 </model>
</h:head>
<h:body>
 <h:p>
  <input ref="q"><label>Find</label></input>
  <submit submission="s"><label>Go</label></submit>
 </h:p>
</h:body>
</h:html>

Note: Au moment de la rédaction de cet article, de nombreux navigateurs ne supportent pas les XForms. Vérifiez la version de votre navigateur si les exemples de ce tutoriel ne fonctionnent pas.



Gestion des chargements de fichiers

Sommaire


Chargements de fichiers par méthode POST

Cette fonctionnalité permet aux personnes de télécharger à la fois du texte et des fichiers binaires. Avec les fonctions d'identification et de manipulation de fichiers de PHP, vous avez le contrôle total pour définir qui a le droit de télécharger mais aussi ce qui sera fait du fichier une fois qu'il sera téléchargé.

PHP est capable de recevoir des fichiers émis par un navigateur conforme à la norme RFC-1867.

Note: Notes de configuration

Voir aussi les directives file_uploads, upload_max_filesize, upload_tmp_dir, post_max_size et max_input_time dans php.ini

PHP supporte aussi le chargement par la méthode PUT comme dans le navigateur Netscape Composer et Amaya du W3C. Reportez-vous au chapitre sur le support de la méthode PUT.

Exemple #1 Formulaire de chargement de fichier

Un formulaire de téléchargement de fichiers peut être construit en créant un formulaire spécifique comme ceci :

<!-- Le type d'encodage des données, enctype, DOIT être spécifié comme ce qui suit -->
<form enctype="multipart/form-data" action="_URL_" method="post">
  <!-- MAX_FILE_SIZE doit précéder le champ input de type file -->
  <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
  <!-- Le nom de l'élément input détermine le nom dans le tableau $_FILES -->
  Envoyez ce fichier : <input name="userfile" type="file" />
  <input type="submit" value="Envoyer le fichier" />
</form>

_URL_ dans l'exemple précédent doit être remplacé et pointé vers un fichier PHP.

Le champ caché MAX_FILE_SIZE (mesuré en octets) doit précéder le champ input de type file et sa valeur représente la taille maximale acceptée du fichier par PHP. Cet élément de formulaire doit toujours être utilisé car il permet d'informer l'utilisateur que le transfert désiré est trop lourd avant d'atteindre la fin du téléchargement. Gardez à l'esprit que ce paramètre peut être "trompé" du côté du navigateur facilement, aussi ne faîtes pas confiance à ce dernier, ne s'agissant finalement que d'une fonctionnalité de convenance côté client. Le paramètre PHP (côté serveur) à propos de la taille maximale d'un fichier téléchargé, ne peut, lui, être trompé.

Note:

Assurez-vous que votre formulaire de téléchargement de fichier contienne enctype="multipart/form-data", sinon, le fichier se sera pas téléchargé.

La variable globale $_FILES existe depuis PHP 4.1.0 (utilisez $HTTP_POST_FILES à la place si vous utilisez une version plus ancienne). Ces tableaux devraient contenir toutes les informations du fichier téléchargé.

Le contenu du tableau $_FILES est détaillé dans notre exemple ci-dessous. Notez que l'on suppose que le nom de la variable du fichier téléchargé est userfile, tel que défini dans le formulaire ci-dessus, mais peut être n'importe quel nom.

$_FILES['userfile']['name']

Le nom original du fichier, tel que sur la machine du client web.

$_FILES['userfile']['type']

Le type MIME du fichier, si le navigateur a fourni cette information. Par exemple, cela pourra être "image/gif". Ce type mime n'est cependant pas vérifié du côté de PHP et, donc, ne prend pas sa valeur pour se synchroniser.

$_FILES['userfile']['size']

La taille, en octets, du fichier téléchargé.

$_FILES['userfile']['tmp_name']

Le nom temporaire du fichier qui sera chargé sur la machine serveur.

$_FILES['userfile']['error']

Le code d'erreur associé au téléchargement de fichier.

Le fichier téléchargé sera stocké temporairement dans le dossier temporaire du système, à moins qu'un autre dossier soit fourni avec la directive upload_tmp_dir du php.ini. Le dossier par défaut du serveur peut être changé dans l'environnement via la variable TMPDIR. Modifier la valeur de cette variable avec la fonction putenv() dans un script PHP sera sans effet. Cette variable d'environnement peut aussi être utilisée pour s'assurer que d'autres opérations fonctionnent aussi sur les fichiers téléchargés.

Exemple #2 Validation de téléchargement de fichiers

Voyez aussi les fonctions is_uploaded_file() et move_uploaded_file() pour plus d'informations. L'exemple suivant va télécharger un fichier venant d'un formulaire.

<?php
// Dans les versions de PHP antiéreures à 4.1.0, la variable $HTTP_POST_FILES
// doit être utilisée à la place de la variable $_FILES.

$uploaddir '/var/www/uploads/';
$uploadfile $uploaddir basename($_FILES['userfile']['name']);

echo 
'<pre>';
if (
move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo 
"Le fichier est valide, et a été téléchargé
           avec succès. Voici plus d'informations :\n"
;
} else {
    echo 
"Attaque potentielle par téléchargement de fichiers.
          Voici plus d'informations :\n"
;
}

echo 
'Voici quelques informations de débogage :';
print_r($_FILES);

echo 
'</pre>';

?>

Le script PHP qui reçoit le fichier chargé doit pouvoir gérer le fichier de manière appropriée. Vous pouvez utiliser la variable $_FILES['userfile']['size'] pour recaler tous les fichiers qui sont trop gros ou trop petits. Vous pouvez utiliser la variable $_FILES['userfile']['type'] pour écarter les fichiers qui n'ont pas le bon type, mais l'utiliser uniquement pour une série de vérifications, car cette valeur est complètement sous le contrôle du client et n'est pas vérifiée du côté de PHP. Depuis PHP 4.2.0, vous pouvez utiliser l'information dans $_FILES['userfile']['error'] et adapter votre politique en fonction des codes d'erreur. Quelle que soit votre politique, vous devriez soit effacer le fichier du dossier temporaire, soit le déplacer.

Si aucun fichier n'est sélectionné dans le formulaire, PHP retournera 0 dans $_FILES['userfile']['size'] et rien du tout dans $_FILES['userfile']['tmp_name'].

Le fichier sera automatiquement effacé du dossier temporaire à la fin du script, s'il n'a pas été déplacé ou renommé.

Exemple #3 Envoi d'un tableau de fichiers

PHP supporte les tableaux en HTML ainsi qu'avec les fichiers.

<form action="" method="post" enctype="multipart/form-data">
<p>Images:
<input type="file" name="pictures[]" />
<input type="file" name="pictures[]" />
<input type="file" name="pictures[]" />
<input type="submit" value="Send" />
</p>
</form>
<?php
foreach ($_FILES["pictures"]["error"] as $key => $error) {
    if (
$error == UPLOAD_ERR_OK) {
        
$tmp_name $_FILES["pictures"]["tmp_name"][$key];
        
$name $_FILES["pictures"]["name"][$key];
        
move_uploaded_file($tmp_name"data/$name");
    }
}
?>

La barre de progression de téléchargement peut être implémentée en utilisant la progression du chargement via les sessions.



Explication sur les messages d'erreurs de chargement de fichiers

Depuis PHP 4.2.0, PHP retourne un code d'erreur approprié dans le tableau de fichiers. Ce code d'erreur est accessible à l'index ['error'] du tableau, qui est créé durant le téléchargement par PHP. En d'autres termes, le message d'erreur est accessible dans la variable $_FILES['userfile']['error'].

UPLOAD_ERR_OK

Valeur : 0. Aucune erreur, le téléchargement est correct.

UPLOAD_ERR_INI_SIZE

Valeur : 1. Le fichier téléchargé excède la taille de upload_max_filesize, configurée dans le php.ini.

UPLOAD_ERR_FORM_SIZE

Valeur : 2. Le fichier téléchargé excède la taille de MAX_FILE_SIZE, qui a été spécifiée dans le formulaire HTML.

UPLOAD_ERR_PARTIAL

Valeur : 3. Le fichier n'a été que partiellement téléchargé.

UPLOAD_ERR_NO_FILE

Valeur : 4. Aucun fichier n'a été téléchargé.

UPLOAD_ERR_NO_TMP_DIR

Valeur : 6. Un dossier temporaire est manquant. Introduit en PHP 5.0.3.

UPLOAD_ERR_CANT_WRITE

Valeur : 7. Échec de l'écriture du fichier sur le disque. Introduit en PHP 5.1.0.

UPLOAD_ERR_EXTENSION

Valeur : 8. Une extension PHP a arrêté l'envoi de fichier. PHP ne propose aucun moyen de déterminer quelle extension est en cause. L'examen du phpinfo() peut aider. Introduit en PHP 5.2.0.

Note:

Ces valeurs deviennent des constantes PHP en version 4.3.0.



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 php.ini. La valeur par défaut est 2 megaoctets.

Si une limite de mémoire est activée, une plus grande valeur de memory_limit peut être nécessaire. Assurez-vous d'avoir défini une valeur pour memory_limit assez grande.

Si la valeur de max_execution_time est trop petite, le temps d'exécution du script peut excéder cette valeur. Assurez-vous d'avoir défini une valeur pour max_execution_time assez grande.

Note: max_execution_time affecte uniquement le temps d'exécution du script. Le temps passé sur l'activité qui apparaît en dehors de l'exécution du script comme les appels systèmes avec la fonction system(), la fonction sleep(), les requêtes sur les bases de données, le temps mis pour effectuer le téléchargement du fichier, etc. n'est pas inclus lors du calcul du temps maximal de l'exécution du script.

Avertissement

max_input_time définit le temps maximal, en secondes, au script pour recevoir les données ; cela inclut le téléchargement du fichier. Pour les fichiers multiples, ou les gros fichiers, ou encore pour les utilisateurs sur des connexions lentes, la valeur par défaut de 60 secondes peut être dépassée.

Si post_max_size est défini de façon trop faible, les gros fichiers ne pourront pas être téléchargés. Assurez-vous de définir post_max_size avec une taille suffisante.

Depuis PHP 5.2.12, la configuration de max_file_uploads contrôle le nombre maximum de fichiers qui peuvent être envoyés en une requête. Si le nombre de fichiers envoyés dépasse cette limite, alors $_FILES arrêtera la réception. Par exemple, si max_file_uploads vaut 10, alors $_FILES ne contiendra jamais plus de 10 entités.

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 chargements de fichiers.

Du fait de la grande diversité des systèmes, nous ne pouvons garantir que les fichiers avec des noms exotiques (par exemple, ceux contenant des espaces) seront traités correctement.

Le développeur ne doit pas mixer les champs input normaux et les champs de téléchargement dans une même variable (en utilisant un nom d'input comme foo[]).



Télécharger plusieurs fichiers simultanément

Le téléchargement de plusieurs fichiers est possible en utilisant des noms différents dans l'attribut name de la balise input.

Il est aussi possible de télécharger plusieurs fichiers simultanément et d'obtenir les informations sous forme de tableau. Pour cela, vous devez utiliser la syntaxe de tableau dans les noms de balises HTML, comme vous l'avez fait avec les sélections multiples et les boîtes à cocher.

Exemple #1 Télécharger plusieurs fichiers simultanément

<form action="file-upload.php" method="post" enctype="multipart/form-data">
  Envoyez plusieurs fichiers : <br />
  <input name="userfile[]" type="file" /><br />
  <input name="userfile[]" type="file" /><br />
  <input type="submit" value="Envoyer les fichiers" />
</form>

Lorsque le formulaire ci-dessus a été envoyé, les tableaux $_FILES['userfile'], $_FILES['userfile']['name'], et $_FILES['userfile']['size'] seront initialisés (tout comme $HTTP_POST_FILES pour les versions PHP antérieures à 4.1.0). Lorsque register_globals est activé, les variables globales concernant les fichiers téléchargés sont aussi initialisées. Chacune d'entre elles contiendra un tableau numériquement indexé, avec les valeurs décrivant les fichiers téléchargés.

Par exemple, supposons que les fichiers /home/test/review.html et /home/test/xwp.out ont été téléchargés. Dans ce cas, $_FILES['userfile']['name'][0] contient review.html et $_FILES['userfile']['name'][1] contient xwp.out. Similairement, $_FILES['userfile']['size'][0] va contenir la taille du fichier review.html, etc.

$_FILES['userfile']['name'][0], $_FILES['userfile']['tmp_name'][0], $_FILES['userfile']['size'][0] et $_FILES['userfile']['type'][0] sont aussi créées.

Avertissement

Depuis PHP 5.2.12, le paramètre max_file_uploads limite le nombre de fichiers qui peuvent être envoyés en une requête. Vous devrez vérifier que votre formulaire ne tente pas d'envoyer plus de fichiers dans la requête que ne le tolère cette limite.



Chargement par méthode PUT

PHP supporte la méthode HTTP PUT utilisée par les navigateurs pour y stocker des fichiers sur un serveur. Les requêtes de type PUT sont beaucoup plus simples que les chargements de fichiers en utilisant le type POST, et elles ressemblent à :

Exemple #1 Méthode PUT pour les chargements de fichiers

PUT /path/filename.html HTTP/1.1

Normalement, cela signifie que le serveur distant va sauver les données qui suivent dans le fichier : /path/filename.html de son 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 placent dans le bloc <Directory>, ou peut-être dans le bloc <VirtualHost>. La ligne suivante fera très bien l'affaire :

Exemple #2 Directive Apache pour le chargement par méthode PUT

Script PUT /put.php

Elle indique à Apache qu'il doit envoyer les requêtes de chargement par méthode PUT au script put.php. Bien entendu, cela présuppose que vous avez activé PHP pour qu'il prenne en charge les fichiers de type .php, et que PHP est actif. La ressource de destination pour toutes les requêtes PUT de ce script doit être le script lui-même, et non le nom du fichier que le fichier téléchargé doit avoir.

Avec PHP, vous voudriez faire quelque chose comme ce qui suit dans votre put.php. Ceci va copier le contenu du fichier téléchargé dans le fichier myputfile.ext sur le serveur. Vous devez probablement vouloir effectuer quelques vérifications et/ou identifier l'utilisateur avant d'effectuer cette copie de fichier.

Exemple #3 Sauvegarde de fichiers HTTP PUT

<?php
/* Les données PUT arrivent du flux */
$putdata fopen("php://input""r");

/* Ouvre un fichier pour écriture */
$fp fopen("myputfile.ext""w");

/* Lecture des données, 1 Ko à la fois et écriture dans le fichier */
while ($data fread($putdata1024))
fwrite($fp$data);

/* Fermeture du flux */
fclose($fp);
fclose($putdata);
?>




Utilisation des fichiers à distance

Aussi longtemps que le support des gestionnaires d'URL ("URL fopen wrapper") est activé dans le php.ini, avec l'option allow_url_fopen , vous pouvez utiliser des URL (HTTP et FTP) avec la majorité des fonctions qui utilisent un nom de fichier comme paramètre. Cela inclut notamment include, include_once, require et require_once (depuis PHP 5.2.0, allow_url_include doit être actif pour les utiliser). Reportez-vous à Liste des protocoles et des gestionnaires supportés pour plus d'informations sur les protocoles supportés par PHP.

Note:

En PHP 4.0.3 et antérieures, afin d'utiliser les gestionnaires URL, vous devez configurer PHP en utilisant l'option de configuration --enable-url-fopen-wrapper .

Note:

Les versions Windows de PHP antérieures à PHP 4.3 ne supportent pas l'accès aux fichiers distantes avec les fonctions suivantes : include, include_once, require, require_once, et les fonctions imagecreatefromXXX de l'extension Fonctions GD et images.

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 #1 Connaître le titre d'une page distante

<?php
$file 
fopen ("http://www.example.com/""r");
if (!
$file) {
  echo 
"<p>Impossible de lire la page.\n";
  exit;
}
while (!
feof ($file)) {
    
$line fgets ($file1024);
    
/* Cela ne fonctionne que si les balises Title sont correctement utilisées */
    
if (preg_match ("@\<title\>(.*)\</title\>@i"$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 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 identification simple).

Exemple #2 Stocker des données sur un serveur distant

<?php
$file 
fopen ("ftp://ftp.example.com/incoming/outputfile""w");
if (!
$file) {
  echo 
"<p>Impossible d'ouvrir le fichier distant pour écriture.\n";
  exit;
}
/* Ecriture des données. */
fputs ($file$_SERVER['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().



Gestion des connexions

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 que vos scripts continuent à s'exécuter jusqu'à la fin, même si le client n'est plus là pour recevoir les informations. Cependant, par défaut, le script s'arrêtera 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 php_value 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 interrompt sa requête, à la prochaine 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 être automatiquement interrompu après une certaine durée. 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 php_value max_execution_time, dans le fichier Apache httpd.conf ou encore avec la fonction set_time_limit(). Lorsque le délai expire, le script est terminé, et comme pour la déconnexion du client, une fonction de terminaison sera appelée. Dans cette fonction, vous pouvez savoir si c'est le délai d'expiration qui a causé la fin du script, en appelant la fonction connection_status(). Cette fonction retournera 2 si le délai d'expiration a été dépassé.

Une chose à noter est 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 expirer. À ce moment-là, la fonction connection_status() retournera 3.



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 le même mot de passe (s'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 ; elles 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 les connexions persistantes ?

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étruite pour chaque page demandée. Étant donné que cet interpréteur 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, de loin la plus prisée, est d'exécuter PHP sous la forme d'un module sur un serveur multi-processus, 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 multithread. Actuellement, PHP supporte ISAPI, WSAPI, et NSAPI (sous Windows), qui permettent tous d'utiliser PHP comme un module sur un serveur multithread tel que Netscape FastTrack (iPlanet), Microsoft Internet Information Server (IIS), et O'Reilly's WebSite Pro. Le comportement est essentiellement le même que pour les serveurs multi-processus décrits précédemment.

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 connexions simultanées et que 17 processus essaient de se connecter, le dernier restera sur la touche. S'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érifiez la documentation de votre base de données pour savoir comment elle traite les connexions inactives ou abandonnées.

Avertissement

Il y a quelques autres limitations à bien garder en tête lorsque vous utilisez les connexions persistantes. L'une est que lorsque vous posez un verrou avec une connexion persistante, si le script ne peut libérer le verrou pour une raison quelconque, alors les autres scripts qui réutiliseront la connexion seront bloqués indéfiniment, et vous imposeront le redémarrage du serveur ou de la base de données. Une autre limitation est, lors de l'utilisation des transactions, un bloc de transaction non fermé sera prolongé au script suivant, s'il n'est pas fermé par le script initiateur. Dans les deux cas, vous pouvez utiliser la fonction register_shutdown_function() pour enregistrer une fonction simple de nettoyage, pour déverrouiller les tables, et annuler les transactions en cours. Mieux encore, évitez le problème entièrement en n'utilisant pas les connexions persistantes dans les scripts qui ont besoin de verrous ou de transactions. Vous pourrez toujours les utiliser ailleurs.

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

Voir aussi fbsql_pconnect(), ibase_pconnect(), ifx_pconnect(), ingres_pconnect(), msql_pconnect(), mssql_pconnect(), mysql_pconnect(), ociplogon(), odbc_pconnect(), oci_pconnect(), pfsockopen(), pg_pconnect() et sybase_pconnect().



Safe mode

Sommaire

Le "Safe Mode" est le mode de sécurité de PHP : une solution au problème de partage de PHP sur un serveur. Ce système pêche au niveau de l'architecture car il n'est pas correct de tenter de résoudre ce problème au niveau de PHP, mais les solutions alternatives basées sur le serveur web et l'OS ne sont pas réalistes. De nombreux intervenants, notamment les fournisseurs d'hébergement, utilisent le "Safe Mode".

Avertissement

Cette fonctionnalité est devenue OBSOLETE depuis PHP 5.3.0 et a été SUPPRIMEE depuis PHP 5.4.0.

Changelog for safe mode
Version Description
5.4.0 Supprimé de PHP, et génère une erreur fatale de niveau E_CORE_ERROR lorsqu'activé.
5.3.0 Obsolète, et une erreur de niveau E_DEPRECATED a été ajoutée.


Sécurité et "Safe Mode"

Options de configuration
Nom Défaut Modifiable Historique
safe_mode "0" PHP_INI_SYSTEM Supprimé en PHP 5.4.0.
safe_mode_gid "0" PHP_INI_SYSTEM Disponible depuis PHP 4.1.0. Supprimé en PHP 5.4.0.
safe_mode_include_dir NULL PHP_INI_SYSTEM Disponible depuis PHP 4.1.0. Supprimé en PHP 5.4.0.
safe_mode_exec_dir "" PHP_INI_SYSTEM Supprimé en PHP 5.4.0.
safe_mode_allowed_env_vars "PHP_" PHP_INI_SYSTEM Supprimé en PHP 5.4.0.
safe_mode_protected_env_vars "LD_LIBRARY_PATH" PHP_INI_SYSTEM Supprimé en PHP 5.4.0.
Pour plus de détails sur les modes PHP_INI_*, reportez-vous à Où une directive de configuration peut être modifiée.

Voici un éclaircissement sur l'utilisation des directives de configuration.

safe_mode booléen

Active ou non le mode de sécurité de PHP. Si PHP est compilé avec --enable-safe-mode, la valeur par défaut sera On, sinon Off.

Avertissement

Cette fonctionnalité est devenue OBSOLETE depuis PHP 5.3.0 et a été SUPPRIMEE depuis PHP 5.4.0.

safe_mode_gid booléen

Par défaut, le safe mode fait une comparaison des propriétaires, avant d'ouvrir un fichier. Si vous voulez alléger un peu ce niveau de sécurité, vous pouvez réaliser une comparaison de groupe, et activer cette directive. Si cette directive vaut FALSE (sa valeur par défaut), c'est une comparaison sur les UID, et, si elle vaut TRUE c'est une comparaison sur les GID.

safe_mode_include_dir chaîne de caractères

Les vérifications basées sur le UID ou GID sont ignorées lorsque les fichiers inclus sont placés dans le dossier indiqué par cette directive, ainsi que ses sous-dossiers. Les dossiers peuvent être aussi dans l'include_path ou bien il faut inclure le chemin complet.

Depuis PHP 4.2.0, cette directive utilise le point virgule de la même façon que le fait include_path, pour permettre de configurer plusieurs dossiers. La restriction spécifiée est en fait un préfixe, plus qu'un nom de dossier. Cela signifie que "safe_mode_include_dir = /dir/incl" autorise aussi bien "/dir/include" que "/dir/incls", s'ils existent. Lorsque vous souhaitez restreindre l'accès à un dossier spécifique, il faut terminer cette directive avec un slash. Par exemple "safe_mode_include_dir = /dir/incl/". Si la valeur de cette directive est vide, aucun fichier avec le UID/GID différent ne peut être inclus dans PHP 4.2.3 et dans les versions PHP 4.3.3 et plus récentes. Dans les versions antérieures, tous les fichiers pouvaient être inclus.
safe_mode_exec_dir chaîne de caractères

Si PHP est utilisé en safe mode, les fonctions comme system() et toutes celles qui permettent l'exécution en ligne de commande refuseront d'exécuter des programmes qui ne sont pas dans ce dossier. Vous devez utiliser / en tant que séparateur de dossier sous tous les environnements, y compris Windows.

safe_mode_allowed_env_vars chaîne de caractères

Modifier certaines variables d'environnement est un trou de sécurité potentiel. Cette directive contient une liste de noms de variables d'environnement séparées par des virgules, ou de préfixes. En Safe mode, l'utilisateur ne pourra modifier que les variables d'environnement dont le nom commence par l'un des préfixes fourni ici. Par défaut, les utilisateurs ne peuvent modifier que les variables d'environnement qui commencent par PHP_ (e.g. PHP_FOO=BAR).

Note:

Si cette directive est vide, PHP autorisera la modification de TOUTES les variables d'environnement.

safe_mode_protected_env_vars chaîne de caractères

Cette directive contient une liste de variables d'environnement que le programmeur ne pourra pas modifier en utilisant la fonction putenv(). Ces variables seront protégées, même si la directive safe_mode_allowed_env_vars autorise leur modification.

Voir aussi open_basedir, disable_functions, disable_classes, register_globals, display_errors, et log_errors.

Lorsque Safe Mode est actif, PHP vérifie que le propriétaire du script courant est le même que le propriétaire des fichiers ou dossiers qui seront manipulés par ce script. Par exemple, dans la situation suivante :

-rw-rw-r--    1 rasmus   rasmus       33 Jul  1 19:20 script.php
-rw-r--r--    1 root     root       1116 May 26 18:01 /etc/passwd
exécuter le script script.php :
<?php
 readfile
('/etc/passwd');
?>
générera cette erreur, si le Safe Mode est activé :
Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not
allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on line 2

Cependant, il arrive que la vérification faite avec le nom du propriétaire (UID) du fichier soit trop restrictive, et qu'une vérification sur le nom du groupe (GID) soit suffisante. C'est une autre fonctionnalité supportée par la directive safe_mode_gid. En lui donnant la valeur de On, les vérifications seront faites sur le GID, alors qu'en lui laissant sa valeur par défaut de Off, les vérifications seront faites sur le UID.

Si au lieu d'utiliser le Safe Mode, vous utilisez la directive open_basedir, alors les manipulations seront limitées aux fichiers situés dans les dossiers spécifiés. Par exemple (Apache httpd.conf) :

<Directory /docroot>
  php_admin_value open_basedir /docroot
</Directory>
Si vous exécutez le script script.php ci-dessus avec la configuration d'open_basedir, le résultat sera l'affichage suivant :
Warning: open_basedir restriction in effect. File is in wrong directory in
/docroot/script.php on line 2

Vous pouvez également désactiver les fonctions particulières. Notez que la directive disable_functions ne peut être utilisée en dehors du fichier php.ini, ce qui signifie que vous ne pouvez pas désactiver des fonctions par virtualhost ou par dossiers, dans votre fichier httpd.conf. Si nous ajoutons ceci à notre fichier php.ini :

disable_functions = readfile,system
toute utilisation des fonctions readfile() et system() générera l'affichage suivant :
Warning: readfile() has been disabled for security reasons in
/docroot/script.php on line 2

Avertissement

Ces restrictions de PHP sont bien sûr invalides en exécution binaire.



Fonctions désactivées par le Safe Mode

Voici une liste non-exhaustive des fonctions désactivées par le Safe Mode.

Fonctions désactivées par le Safe Mode
Fonction Limitations
dbmopen() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté.
dbase_open() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté.
filepro() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté.
filepro_rowcount() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté.
filepro_retrieve() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté.
Fonctions ifx_* restrictions sql_safe_mode, (!= Safe Mode)
Fonctions ingres_* restrictions sql_safe_mode, (!= Safe Mode)
Fonctions mysql_* restrictions sql_safe_mode, (!= Safe Mode)
pg_lo_import() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté.
posix_mkfifo() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté.
putenv() Obéit aux directives safe_mode_protected_env_vars et safe_mode_allowed_env_vars. Voir aussi la documentation de putenv()
move_uploaded_file() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté.
chdir() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté.
dl() Cette fonction est désactivée par le safe-mode
opérateur guillemets obliques Cette fonction est désactivée par le safe-mode
shell_exec() (équivalent fonctionnel des guillemets obliques) Cette fonction est désactivée par le safe-mode
exec() Vous ne pouvez exécuter que les programmes qui sont dans le dossier safe_mode_exec_dir. Pour des raisons pratiques, il n'est pas possible d'utiliser des jokers comme .. dans le chemin de ce dossier. escapeshellcmd() est exécuté sur les arguments de cette fonction.
system() Vous ne pouvez exécuter que les programmes qui sont dans le dossier safe_mode_exec_dir. Pour des raisons pratiques, il n'est pas possible d'utiliser des jokers comme .. dans le chemin de ce dossier. escapeshellcmd() est exécuté sur les arguments de cette fonction.
passthru() Vous ne pouvez exécuter que les programmes qui sont dans le dossier safe_mode_exec_dir. Pour des raisons pratiques, il n'est pas possible d'utiliser des jokers comme .. dans le chemin de ce dossier. escapeshellcmd() est exécuté sur les arguments de cette fonction.
popen() Vous ne pouvez exécuter que les programmes qui sont dans le dossier safe_mode_exec_dir. Pour des raisons pratiques, il n'est pas possible d'utiliser des jokers comme .. dans le chemin de ce dossier. escapeshellcmd() est exécuté sur les arguments de cette fonction.
fopen() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté.
mkdir() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté.
rmdir() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté.
rename() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté.
unlink() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté.
copy() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. (sur source et target)
chgrp() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté.
chown() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté.
chmod() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. De plus, vous ne pouvez pas modifier les SUID, SGID et le bit sticky
touch() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté.
symlink() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. (note : seule l'hôte cible est vérifié)
link() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. (note : seul le fichier de destination est vérifié.)
apache_request_headers() En Safe Mode, les en-têtes commençant par authorization (sensible à la casse) ne seront pas retournés.
header() Avec le safe mode, le uid du script est ajouté à la partie realm de l'en-tête WWW-Authenticate si vous utilisez cet en-tête pour l'identification.
variables PHP_AUTH Avec le safe mode, les variables PHP_AUTH_USER, PHP_AUTH_PW et PHP_AUTH_TYPE ne sont pas disponibles dans la variable $_SERVER. Indépendamment, vous pouvez utiliser la variable REMOTE_USER pour connaître l'utilisateur. (note : affectée uniquement depuis PHP 4.3.0)
highlight_file(), show_source() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. (note : affectée uniquement depuis PHP 4.2.1)
parse_ini_file() Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. (note : affectée uniquement depuis PHP 4.2.1)
set_time_limit() N'a aucun effet lorsque PHP fonctionne avec le safe mode.
max_execution_time N'a aucun effet lorsque PHP fonctionne avec le safe mode.
mail() Si le Safe Mode est actif, le 5ème paramètre est désactivé (note : uniquement affecté depuis PHP 4.2.3)
session_start() Le propriétaire d'un script doit être le même que celui que celui du répertoire session.save_path si le répertoire par défaut session.save_handler est utilisé.
Toutes les fonctions sur les flux et sur le système de fichiers. Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. Vérifie que le fichier/dossier que vous allez utiliser a le même UID que le script qui est actuellement exécuté. (Voir l'option safe_mode_include_dir du php.ini.




Utiliser PHP en ligne de commande

Sommaire


Introduction

PHP supporte le CLI SAPI depuis PHP 4.3.0. Le but premier de ce SAPI est le développement d'applications shell avec PHP. Les différences entre le CLI SAPI et les autres SAPI sont expliqués dans ce chapitre. Il est important de mentionner que CLI et CGI sont des SAPI différents malgré le fait qu'ils puissent partager la majeure partie de leurs comportements.

Le CLI SAPI est activé par défaut en utilisant l'option --enable-cli , mais vous pouvez le désactiver en utilisant l'option --disable-cli lors de l'exécution de la commande ./configure.

Le nom, l'emplacement et l'existence des binaires CLI/CGI vont dépendre de la façon dont PHP est installé sur votre système. Par défaut, en exécutant make, les deux binaires CGI et CLI sont compilés et nommés respectivement sapi/cgi/php et sapi/cli/php dans votre répertoire source PHP. Vous remarquerez que les deux se nomment php. Ce qui se passe ensuite pendant le make install dépend de votre ligne de configuration. Si un module SAPI, apxs par exemple, a été choisi pendant la configuration, ou que l'option --disable-cgi a été activée, le CLI est copié dans {PREFIX}/bin/php pendant le make install sinon, le CGI sera placé ici. Si, par exemple, --with-apxs figure dans votre ligne de configuration, le CLI est copié dans {PREFIX}/bin/php pendant le make install. Si vous voulez forcer l'installation du binaire CGI, lancez make install-cli après le make install. Sinon, vous pouvez aussi spécifier --disable-cgi dans votre ligne de configuration.

Note:

Du fait que les deux options --enable-cli et --enable-cgi sont activées par défaut, avoir simplement --enable-cli dans votre ligne de configuration n'implique pas nécessairement que le CLI soit renommé en {PREFIX}/bin/php pendant le make install.

Depuis PHP 5, le binaire CLI est distribué dans le dossier principal sous le nom de php.exe sous Windows. La version CGI est distribuée sous le nom de php-cgi.exe. De plus, un fichier php-win.exe est distribué si PHP est configuré en utilisant l'option de configuration --enable-cli-win32 . Ce fichier fait la même chose que la version CLI, sauf qu'il n'affiche rien et qu'il ne fournit pas de console.

Note: Quel SAPI est installé ?

À partir d'un terminal, lancer php -v vous dira si php est en version CGI ou CLI. Vous pouvez aussi consulter la fonction php_sapi_name() et la constante PHP_SAPI.

Note:

Une page man de manuel Unix est disponible en tapant man php dans l'interpréteur de commande.



Différence avec les autres SAPIs

Les différences les plus notables entre le CLI SAPI et les SAPI sont :

  • Contrairement au CGI SAPI, aucun en-tête HTTP n'est écrit dans le résultat.

    Bien que le CGI SAPI fournisse un moyen de supprimer les en-têtes HTTP, il n'y a pas moyen d'activer les en-têtes HTTP dans le CLI SAPI.

    CLI est lancé en mode silencieux par défaut, bien que les options -q et --no-header soient gardées pour rester compatible avec les anciennes versions CGI.

    Il ne change pas le répertoire courant en celui du script. (les options -C et --no-chdir sont gardées par souci de compatibilité)

    Messages d'erreurs en texte brut (pas de formatage HTML).

  • Il y a plusieurs directives du php.ini qui sont ignorées par le CLI SAPI, car elles n'ont pas de sens en environnement shell :

    Directives php.ini ignorées
    Directive Valeur par défaut pour CLI SAPI Commentaire
    html_errors FALSE Par défaut à FALSE, vu qu'il peut être bien difficile de lire des messages d'erreur sur un terminal lorsqu'ils sont noyés dans des balises HTML non-interprétées.
    implicit_flush TRUE Dans un terminal, il est généralement souhaitable que tout affichage en provenance de print, echo et autres, soit immédiatement affiché, et non pas placé dans un buffer quelconque. Néanmoins, il est toujours possible d'utiliser la bufferisation de sortie si vous voulez retarder un affichage, ou bien en manipuler le contenu une dernière fois.
    max_execution_time 0 (sans limite) PHP dans un terminal est susceptible d'être utilisé pour des tâches bien plus diverses que dans des scripts web, et vu que cela prend généralement beaucoup de temps, ce paramètre sera défini par défaut à 0 permettant ainsi d'être illimité.
    register_argc_argv TRUE

    La définition à TRUE de cette directive signifie que les scripts exécutés via le SAPI CLI auront toujours accès à argc (représentant le nombre d'arguments passés à l'application) et argv (le tableau contenant les arguments passés).

    Les variables PHP $argc et $argv sont automatiquement définies et remplies avec les valeurs appropriées, lors de l'utilisation du SAPI CLI. Ces valeurs peuvent également être trouvées dans la variable $_SERVER, par exemple : $_SERVER['argv'].

    output_buffering FALSE

    Même si cette configuration INI est codée en dur à FALSE, les fonctions relatives à l'affichage du buffer sont disponibles.

    max_input_time FALSE

    Le PHP CLI ne supporte pas GET, POST et le téléchargement de fichiers.

    Note:

    Ces directives ne peuvent pas être initialisées avec d'autres valeurs dans le fichier php.ini ou par une autre méthode. C'est une limitation, car ces valeurs par défaut s'appliquent une fois que tous les autres fichiers de configuration ont été analysés. Cependant, ces valeurs peuvent être modifiées durant l'exécution (ce qui n'est pas logique pour certaines directives, comme register_argc_argv).

    Note:

    Il est recommandé de définit ignore_user_abort pour les scripts en ligne de commande. Voir la fonction ignore_user_abort() pour plus d'informations.

  • Pour faciliter le travail en environnement shell, plusieurs constantes sont définies pour les flux I/O.

  • Le CLI SAPI ne transforme pas le dossier courant en dossier d'exécution du script.

    Exemple #1 Exemple montrant la différence avec le SAPI CGI :

    <?php
    // Un test simple : affiche le dossier d'exécution */
    echo getcwd(), "\n";
    ?>

    Lorsque vous utilisez la version CGI, l'affichage sera :

    $ pwd
    /tmp
    
    $ php -q autre_dossier/test.php
    /tmp/autre_dossier
    

    Cela montre clairement que PHP modifie le dossier courant, et utilise le dossier du script exécuté.

    En utilisant le CLI SAPI, on obtient :

    $ pwd
    /tmp
    
    $ php -f autre_dossier/test.php
    /tmp
    

    Cela donne beaucoup plus de souplesse lorsque vous rédigez des scripts shell avec PHP.

    Note:

    Le CGI SAPI se comporte de la même façon que le CLI SAPI, en lui passant l'option -C , lorsque vous l'invoquez en ligne de commande.



Options de ligne de commande

La liste des options de ligne de commande fournies par PHP est disponible à n'importe quel moment en exécutant PHP avec l'option -h :

Usage: php [options] [-f] <file> [--] [args...]
   php [options] -r <code> [--] [args...]
   php [options] [-B <begin_code>] -R <code> [-E <end_code>] [--] [args...]
   php [options] [-B <begin_code>] -F <file> [-E <end_code>] [--] [args...]
   php [options] -- [args...]
   php [options] -a

  -a               Run interactively
  -c <path>|<file> Look for php.ini file in this directory
  -n               No php.ini file will be used
  -d foo[=bar]     Define INI entry foo with value 'bar'
  -e               Generate extended information for debugger/profiler
  -f <file>        Parse and execute <file>.
  -h               This help
  -i               PHP information
  -l               Syntax check only (lint)
  -m               Show compiled in modules
  -r <code>        Run PHP <code> without using script tags <?..?>
  -B <begin_code>  Run PHP <begin_code> before processing input lines
  -R <code>        Run PHP <code> for every input line
  -F <file>        Parse and execute <file> for every input line
  -E <end_code>    Run PHP <end_code> after processing all input lines
  -H               Hide any passed arguments from external tools.
  -S <addr>:<port> Run with built-in web server.
  -t <docroot>     Specify document root <docroot> for built-in web server.
  -s               Output HTML syntax highlighted source.
  -v               Version number
  -w               Output source with stripped comments and whitespace.
  -z <file>        Load Zend extension <file>.

  args...          Arguments passed to script. Use -- args when first argument
                   starts with - or script is read from stdin

  --ini            Show configuration file names

  --rf <name>      Show information about function <name>.
  --rc <name>      Show information about class <name>.
  --re <name>      Show information about extension <name>.
  --rz <name>      Show information about Zend extension <name>.
  --ri <name>      Show configuration for extension <name>.

Options de ligne de commande
Option Option longue Description
-a --interactive

Lance PHP de façon interactive. Pour plus d'informations, reportez-vous à la documentation concernant le shell intéractif.

-b --bindpath

Lie le chemin pour les externes, en mode serveur FASTCGI (CGI uniquement).

-C --no-chdir

Ne pas aller dans le dossier du script (CGI uniquement).

-q --no-header

Mode silencieux. Supprime la sortie des en-têtes HTTP (CGI uniquement).

-T --timing

Mesure le temps d'exécution du script, répété count fois (CGI uniquement).

-c --php-ini

Spécifie le nom du dossier dans lequel se trouve le fichier php.ini, ou encore spécifie un fichier de configuration (INI) directement (qui ne s'appelle pas obligatoirement php.ini) :

$ php -c /custom/directory/ mon_script.php

$ php -c /custom/directory/custom-file.ini mon_script.php

Si cette option n'est pas spécifiée, php.ini est recherché dans les endroits par défaut.

-n --no-php-ini

Ignore totalement php.ini.

-d --define

Définit une valeur personnalisée pour n'importe quelle directive de configuration du fichier php.ini. La syntaxe est :

 -d configuration_directive[=value]

# L'omission de la valeur conduit à donner la valeur de "1"
$ php -d max_execution_time
        -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(1) "1"

# Passer une valeur vide conduit à donner la valeur de ""
php -d max_execution_time=
        -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(0) ""

# La directive de configuration sera n'importe quelle valeur passée après le caractère '='
$  php -d max_execution_time=20
        -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(2) "20"
$  php
        -d max_execution_time=doesntmakesense
        -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(15) "doesntmakesense"

-e --profile-info

Génère des informations étendues pour le profilage et le débogage.

-f --file

Analyse et exécute le fichier spécifié. L'option -f est facultative, et peut être omise. Le seul nom du fichier est suffisant.

Note:

Pour passer des arguments à un script, le premier argument doit être --, sinon, PHP les interprètera comme des options PHP.

-h et -? --help et --usage Affiche des informations sur la liste courante des options de la ligne de commande, ainsi que leur description.
-i --info Appelle la fonction phpinfo(), et affiche le résultat. Si PHP ne fonctionne pas correctement, il est recommandé d'utiliser la commande php -i et de voir s'il n'y a pas d'erreurs affichées avant ou après la table d'information. N'oubliez pas que le résultat de cette option, si vous utilisez le mode CGI, est au format HTML, et donc de taille conséquente.
-l --syntax-check

Vérifie syntaxiquement le code PHP fourni. En cas de réussite, le message No syntax errors detected in <filename> (Littéralement, aucune erreur de syntaxe n'a été détectée dans le fichier) est affiché sur la sortie standard, et le script shell retourne 0. En cas d'erreur, le message Errors parsing <filename> (Littéralement, erreur d'analyse dans le fichier filename) est affiché, en plus des messages d'erreurs détectés par l'analyseur lui-même. Le script Shell retourne le code -1.

Cette option ne détecte pas les erreurs fatales (par exemple les fonctions non définies). Utilisez l'option -f pour tester aussi les erreurs fatales.

Note:

Cette option ne fonctionne pas avec l'option -r .

-m --modules

Exemple #1 Affichage des modules internes (et chargés) de PHP et Zend

$ php -m
[PHP Modules]
xml
tokenizer
standard
session
posix
pcre
overload
mysql
mbstring
ctype

[Zend Modules]

-r --run

Permet l'exécution de PHP directement dans la ligne de commande. Les balises de PHP (<?php et ?>) ne sont pas nécessaires, et causeront une erreur d'analyse si elles sont présentes.

Note:

Une attention toute particulière doit être portée lors de l'utilisation de cette option de PHP, pour qu'il n'y ait pas de collision avec les substitutions de variables en ligne de commande, réalisées par le shell.

Exemple #2 Erreur de syntaxe lors de l'utilisation de doubles guillemets

$ php -r "$foo = get_defined_constants();"
PHP Parse error:  syntax error, unexpected '=' in Command line code on line 1

Parse error: syntax error, unexpected '=' in Command line code on line 1

Le problème ici est que le shell (sh/bash) effectue une substitution de variables, même avec les guillemets doubles ". puisque la variable $foo n'est probablement pas définie dans le shell, elle est remplacée par rien, ce qui fait que le code passé à PHP pour l'exécution est :

$ php -r " = get_defined_constants();"

La solution de ce problème est d'utiliser les guillemets simples '. Les variables de ces chaînes ne seront pas substituées par leurs valeurs par le shell.

Exemple #3 Utilisation de guillemets simples pour éviter une substitution par le shell

$ php -r '$foo = get_defined_constants(); var_dump($foo);'
array(370) {
  ["E_ERROR"]=>
  int(1)
  ["E_WARNING"]=>
  int(2)
  ["E_PARSE"]=>
  int(4)
  ["E_NOTICE"]=>
  int(8)
  ["E_CORE_ERROR"]=>
  [...]

Si un shell différent de sh/bash est utilisé, d'autres problèmes pourront être rencontrés - si approprié, un rapport de bogues pourra être ouvert via à » http://bugs.php.net/. Il est toujours très facile d'avoir des problèmes lorsque vous essayez d'inclure des variables shell dans le code, ou d'utiliser les antislash pour la protection. Vous aurez été prévenu !

Note:

-r est disponible avec le CLI SAPI mais pas avec le SAPI CGI.

Note:

Cette option est seulement utilisée pour des choses simples. Ainsi, quelques directives de configuration (par exemple auto_prepend_file et auto_append_file) sont ignorées dans ce mode.

-B --process-begin

Code PHP à exécuter avant le traitement de stdin.

-R --process-code

Code PHP à exécuter pour chaque ligne en entrée.

Il y a deux variables spéciales de disponibles dans ce mode : $argn et $argi. $argn doit contenir la ligne PHP traitée à ce moment donné, tandis que $argi doit contenir le numéro de la ligne.

-F --process-file

Fichier PHP à exécuter pour chaque ligne en entrée.

-E --process-end

Code PHP à exécuter après avoir effectué l'entrée.

Exemple #4 Exemple d'utilisation des options -B , -R et -E pour compter le nombre de lignes d'un projet.

$ find my_proj | php -B '$l=0;' -R '$l += count(@file($argn));' -E 'echo "Total Lines: $l\n";'
Total Lines: 37328

-S --server

Démarre le serveur web interne. Disponible depuis 5.4.0.

-t --docroot Spécifie la racine des documents pour le serveur web interne. Disponible depuis PHP 5.4.0.
-s --syntax-highlight et --syntax-highlighting

Affiche le code avec la colorisation syntaxique.

Cette option utilise le mécanisme interne pour analyser le fichier, et écrire au format HTML une version colorisée du code source. Notez que cette option ne fait que générer un bloc HTML, avec les balises HTML <code> [...] </code>, sans en-têtes HTML.

Note:

Cette option ne fonctionne pas avec l'option -r .

-v --version

Exemple #5 Utilisation de l'option -v pour récupérer le nom du SAPI ainsi que la version de PHP et de Zend

$ php -v
PHP 5.3.1 (cli) (built: Dec 11 2009 19:55:07)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies

-w --strip

Affiche la source sans les commentaires ni les espaces.

Note:

Cette option ne fonctionne pas avec l'option -r .

-z --zend-extension

Charge une extension Zend. Si et seulement si un fichier est fourni, PHP essaie de charger cette extension dans le dossier courant par défaut des bibliothèque sur votre système (généralement spécifié avec /etc/ld.so.conf sous Linux par exemple). Passer un nom de fichier avec le chemin complet fera que PHP utilisera ce fichier, sans recherche dans les dossiers classiques. Un chemin de dossier relatif, incluant les informations sur le dossier, indiquera à PHP qu'il doit chercher les extensions uniquement dans ce dossier.

  --ini

Affiche les noms des fichiers de configuration et des dossiers analysés. Disponible depuis PHP 5.2.3.

Exemple #6 Exemple avec --ini

$ php --ini
Configuration File (php.ini) Path: /usr/dev/php/5.2/lib
Loaded Configuration File:         /usr/dev/php/5.2/lib/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

--rf --rfunction

Affiche des informations sur la fonction donnée ou la méthode d'une classe (i.e. nombre et nom des paramètres). Disponible depuis PHP 5.1.2.

Cette option n'est disponible que si PHP a été compilé avec le support Reflection.

Exemple #7 Exemple avec --rf

$ php --rf var_dump
Function [ <internal> public function var_dump ] {

  - Parameters [2] {
    Parameter #0 [ <required> $var ]
    Parameter #1 [ <optional> $... ]
  }
}

--rc --rclass

Affiche des informations sur la classe donnée (liste des constantes, propriétés et méthodes). Disponible depuis PHP 5.1.2.

Cette option n'est disponible que si PHP a été compilé avec le support Reflection.

Exemple #8 Exemple avec --rc

$ php --rc Directory
Class [ <internal:standard> class Directory ] {

  - Constants [0] {
  }

  - Static properties [0] {
  }

  - Static methods [0] {
  }

  - Properties [0] {
  }

  - Methods [3] {
    Method [ <internal> public method close ] {
    }

    Method [ <internal> public method rewind ] {
    }

    Method [ <internal> public method read ] {
    }
  }
}

--re --rextension

Affiche les informations sur l'extension donnée (liste les options du php.ini, les fonctions définies, les constantes et les classes). Disponible depuis PHP 5.1.2.

Cette option n'est disponible que si PHP a été compilé avec le support Reflection.

Exemple #9 Exemple avec --re

$ php --re json
Extension [ <persistent> extension #19 json version 1.2.1 ] {

  - Functions {
    Function [ <internal> function json_encode ] {
    }
    Function [ <internal> function json_decode ] {
    }
  }
}

--rz --rzendextension

Affiche les informations de configuration pour l'extension Zend fourni (les mêmes informations que celles retournées par la fonction phpinfo()). Disponible depuis PHP 5.4.0.

--ri --rextinfo

Affiche les informations de configuration pour l'extension donnée (les mêmes informations retournées par la fonction phpinfo()). Disponible depuis PHP 5.2.2. Les informations de configurations internes sont disponibles en utilisant le nom d'extension "main" ou "core".

Exemple #10 Exemple avec --ri

$ php --ri date

date

date/time support => enabled
"Olson" Timezone Database Version => 2009.20
Timezone Database => internal
Default timezone => Europe/Oslo

Directive => Local Value => Master Value
date.timezone => Europe/Oslo => Europe/Oslo
date.default_latitude => 59.930972 => 59.930972
date.default_longitude => 10.776699 => 10.776699
date.sunset_zenith => 90.583333 => 90.583333
date.sunrise_zenith => 90.583333 => 90.583333

Note:

Les options -rBRFEH, --ini et --r[fcezi] ne sont disponibles qu'en mode CLI.



Exécution de fichiers PHP

Il y a 3 façons différentes d'appeler le CLI SAPI avec du code PHP à exécuter :

  1. Indiquer à PHP d'exécuter un fichier donné :

    php mon_script.php
    
    php -f mon_script.php
    

    Les deux méthodes (en utilisant -f ou pas) exécutent le script contenu dans le fichier mon_script.php. Notez qu'il n'existe pas de restriction sur les fichiers pouvant être exécutés ; en particulier, il n'est pas nécessaire que l'extension du fichier soit .php.

    Note:

    Si les arguments doivent être passés au script lors de l'utilisation de l'option -f , le premier argument doit être --.

  2. Donner du code PHP à exécuter directement en ligne de commande.

    php -r 'print_r(get_defined_constants());'
    

    Une attention particulière doit alors être apportée aux variables d'environnement, qui seront remplacées, et aux guillemets, qui ont des significations spéciales en ligne de commande.

    Note:

    Lisez l'exemple attentivement, il n'y a ni balise d'ouverture, ni balise de fermeture ! L'option -r rend caduque l'utilisation de celles-ci, et les ajouter conduirait alors à une erreur d'analyse syntaxique.

  3. Alimenter l'entrée standard en code PHP (stdin).

    Cela donne la possibilité de créer dynamiquement du code PHP, puis de le fournir à PHP, et enfin, de le traiter à nouveau en shell. Voici un exemple fictif :

    $ some_application | some_filter | php | sort -u > final_output.txt
    
Il n'est pas possible de combiner ces trois modes d'exécution.

Comme toute application shell, l'exécutable PHP accepte des arguments ; cependant, le script PHP peut aussi en recevoir. Le nombre d'arguments pouvant être passés à votre script n'est pas limité par PHP (le shell a une limite en terme de nombre de caractères qui peuvent être passés. Généralement, vous n'atteindrez pas cette limite). Les arguments passés au script seront transmis via la variable tableau $argv. Le premier index (zéro) contient toujours le nom du script appelé depuis la ligne de commande. Notez que, si le code est exécuté en ligne en utilisant l'option de ligne commande -r , la valeur de $argv[0] sera simplement un tiret (-). Cela est aussi vrai si le code est exécuté via un pipe depuis STDIN.

Une seconde variable globale, $argc, contient le nombre d'éléments du tableau $argv (et non pas le nombre d'arguments passés à votre script).

Tant que les arguments passés au script ne commencent pas par le caractère -, il n'y a rien de spécial à surveiller. Le fait de passer des arguments au script qui commencent par - pose des problèmes car PHP va penser qu'il doit les interpréter. Pour éviter cela, utilisez le séparateur --. Après cet argument, tous les arguments suivants seront passés au script sans être modifiés ou analysés par PHP.

# Cela ne va pas exécuter le code, mais afficher l'aide de PHP
$ php -r 'var_dump($argv);' -h
Usage: php [options] [-f] <file> [args...]
[...]

# Cela va passer l'argument '-h' au script, et éviter que PHP ne le traite
$ php -r 'var_dump($argv);' -- -h
array(2) {
  [0]=>
  string(1) "-"
  [1]=>
  string(2) "-h"
}

Cependant, il y a une autre méthode pour utiliser PHP en script shell ; la première ligne du script devra être #!/usr/bin/php (à remplacer par le chemin vers le binaire PHP CLI sur le système sous-jacent). Le reste du fichier doit contenir le code PHP normal, compris entre les balises ouvrantes/fermantes. Après avoir mis les droits d'exécution sur le script (chmod +x test), il peut être exécuté comme un script shell ou perl habituel :

Exemple #1 Exécute un script PHP en tant que script shell

#!/usr/bin/php
<?php
var_dump
($argv);
?>

En supposant que ce fichier s'appelle test, dans le dossier courant, il est alors possible de faire ceci :

$ chmod +x test
$ ./test -h -- foo
array(4) {
   [0]=>
   string(6) "./test"
   [1]=>
   string(2) "-h"
   [2]=>
   string(2) "--"
   [3]=>
   string(3) "foo"
}

Comme vous pouvez le voir, dans ce cas, vous n'avez pas besoin de faire attention lors du passage de paramètres qui commencent par - à votre script.

L'exécutable PHP peut être utilisé pour exécuter des scripts indépendants du serveur web. Si vous êtes sur un système Unix, il est recommandé d'ajouter la ligne spéciale en début de script, de le rendre exécutable de manière à ce que le système sache quel programme doit exécuter le script. Sous Windows, vous pouvez associer l'exécutable php.exe avec le double-clic sur les fichiers d'extension .php, ou bien vous pouvez faire un fichier batch pour exécuter le script grâce à PHP. La première ligne utilisée dans le monde Unix ne perturbera pas l'exécution sous Windows, ce qui rend les scripts facilement portables. Un exemple complet est disponible ci-dessous :

Exemple #2 Script prévu pour être exécuté en ligne de commande (script.php)

#!/usr/bin/php
<?php

if ($argc != || in_array($argv[1], array('--help''-help''-h''-?'))) {
?>

C'est une ligne de commande à une option.

  Utilisation :
  <?php echo $argv[0]; ?> <option>

  <option> peut être un mot que vous souhaitez afficher.
  Avec les options --help, -help, -h,
  et -?, vous obtiendrez cette aide.

<?php
} else {
    echo 
$argv[1];
}
?>

Le script ci-dessus inclut la première ligne spéciale indiquant que ce fichier doit être exécuté par PHP. Nous travaillons ici avec la version CLI, aussi, aucun en-tête HTTP ne sera affiché.

Le programme commence par vérifier que l'argument requis est spécifié (en plus du nom du script, qui est aussi compté). S'il n'est pas présent, ou si l'argument est --help , -help , -h ou -? , un message d'aide sera affiché, en utilisant $argv[0] pour afficher dynamiquement le nom du script tel qu'entré dans la ligne de commande. Sinon, l'argument est affiché tel qu'il a été entré dans le terminal.

Pour exécuter le script ci-dessus sous Unix, vous devez le rendre exécutable, puis l'appeler avec une commande comme : script.php echothis ou script.php -h. Sous Windows, vous pouvez faire un fichier batch pour cela :

Exemple #3 Fichier batch pour exécuter un script PHP en ligne de commande (script.bat)

@echo OFF
"C:\php\php.exe" script.php %*

En supposant que le programme ci-dessus est nommé script.php, et que l'exécutable CLI php.exe se trouve dans C:\php\php.exe, ce fichier batch l'exécutera avec les options que vous lui passez : script.bat echothis ou script.bat -h.

Voir aussi l'extension Readline, qui dispose de nombreuses fonctions pour améliorer la convivialité de des applications PHP en ligne de commande.

Sous Windows, PHP peut être configuré pour fonctionner sans avoir besoin de fournir les extensions C:\php\php.exe ou .php, tel que décrit dans la ligne de commande PHP sous Microsoft Windows.



Flux d'entrée/sortie

Le CLI SAPI définit quelques constantes pour les flux I/O pour rendre la programmation en ligne de commande plus facile.

Constantes spécifiques CLI
Constante Description
STDIN

Un flux déjà ouvert vers stdin. Ceci évite de l'ouvrir explicitement avec

<?php
$stdin 
fopen('php://stdin''r');
?>
Si vous voulez lire une seule ligne depuis stdin, vous pouvez utiliser
<?php
$line 
trim(fgets(STDIN)); // lit une ligne depuis STDIN
fscanf(STDIN"%d\n"$number); // lit des nombres depuis STDIN
?>

STDOUT

Un flux déjà ouvert vers stdout. Ceci évite de l'ouvrir explicitement avec

<?php
$stdout 
fopen('php://stdout''w');
?>

STDERR

Un flux déjà ouvert vers stderr. Ceci évite de l'ouvrir explicitement avec

<?php
$stderr 
fopen('php://stderr''w');
?>

Ainsi, vous n'avez pas besoin d'ouvrir un flux spécifique pour, par exemple, stderr mais vous pouvez simplement utiliser la constante correspondante à ce flux :

php -r 'fwrite(STDERR, "stderr\n");'
Vous n'avez pas à clore explicitement ces flux, sachant qu'ils le seront automatiquement par PHP à la fin de votre script.

Note:

Ces constantes ne sont pas disponibles lors d'une lecture d'un script PHP depuis stdin.



Shell Interactif

Depuis PHP 5.1.0, le CLI SAPI fournit un shell intéractif lors de l'utilisation de l'option -a si PHP a été compilé avec l'option --with-readline .

En utilisant le shell interactif, vous avez la possibilité de taper du code PHP et qu'il soit exécuté directement.

Exemple #1 Exécution de code en utilisant le shell interactif

$ php -a
Interactive shell

php > echo 5+8;
13
php > function addTwo($n)
php > {
php { return $n + 2;
php { }
php > var_dump(addtwo(2));
int(4)
php >

Le shell interactif fournit également une auto-complétion des fonctions, des constantes, des noms de classes, des variables, des appels aux méthodes statiques, et des constantes de classes en utilisant la touche de tabulation.

Exemple #2 Auto-complétion en utilisant la touche de tabulation

Le fait de presser deux fois la touche de tabulation lorsqu'il y a plusieurs complétions possibles affichera une liste de ces complétions :

php > strp[TAB][TAB]
strpbrk   strpos    strptime  
php > strp

Lorsqu'il n'y a qu'une seul complétion possible, presser la touche de tabulation une seule fois complétera le reste sur la même ligne :

php > strpt[TAB]ime(

La complétion fonctionnera aussi pour les noms qui ont été définis lors de la session courante du shell interactif :

php > $fooThisIsAReallyLongVariableName = 42;
php > $foo[TAB]ThisIsAReallyLongVariableName

Le shell interactif stocke votre historique et peut y accéder en utilisant les touches haut et bas. L'historique est sauvegardé dans le fichier ~/.php_history.

Depuis PHP 5.4.0, le CLI SAPI fournit 2 nouvelles directives du php.ini : cli.pager et cli.prompt. La directive cli.pager permet la définition d'un programme externe (comme less) à utiliser comme pager pour la sortie au lieu d'afficher directement sur l'écran. La directive cli.prompt autorise la modification du prompte php >.

En PHP 5.4.0, il est également possible de définir des directives du php.ini dans un shell interactif en utilisant des notations raccourcies.

Exemple #3 Définition de directives du php.ini dans un shell interactif

La définition de la directive cli.prompt :

php > #cli.prompt=hello world :> 
hello world :>

En utilisant des backticks, il est possible d'exécuter du code PHP dans le prompte :

php > #cli.prompt=`echo date('H:i:s');` php > 
15:49:35 php > echo 'hi';
hi
15:49:43 php > sleep(2);
15:49:45 php >

Définition du pager à less :

php > #cli.pager=less
php > phpinfo();
(sortie affichée avec less)
php >

La directive cli.prompt supporte quelques séquences d'échappements :

Séquences d'échappements de cli.prompt
Séquence : Description :
\e utilisé pour ajouter des couleurs au prompte. Exemple : \e[032m\v \e[031m\b \e[34m\> \e[0m
\v La version de PHP.
\b Indique dans quel bloc de PHP nous nous trouvons. Par exemple, /* permet d'indiquer que nous sommes dans un commentaire multi-lignes. Le scope externe est représenté par php.
\> Indique le caractère utilisé pour le prompte. Par défaut, ce sera >, mais peut être modifié lorsque le shell se trouve dans un bloc indéterminé ou dans une chaîne de caractères. Les caractères possibles sont : ' " { ( >

Note:

Les fichiers inclus via auto_prepend_file et auto_append_file sont analysés dans ce mode, mais avec quelques restrictions - i.e. les fonctions doivent avoir été définies avant l'appel.

Note:

L'autoloading n'est pas disponible si vous utilisez PHP en mode CLI interactif.



Serveur web interne

Depuis PHP 5.4.0, le CLI SAPI fournit un serveur web interne.

Ce serveur web est prévu uniquement dans un but de développement, et ne doit pas être utilisé en production.

Les requêtes URI sont servies depuis le dossier de travail courant où PHP a été démarré, tant que l'option -t est utilisé pour spécifier explicitement un document racine.

Si une requête URI ne spécifie pas un fichier, alors soit index.php, soit index.html du dossier courant sera retourné. Si aucun de ces fichiers n'existe, alors un code réponse 404 est retourné.

Si un fichier PHP est fourni dans la ligne de commande lorsque le serveur web est démarré, il sera traité comme un script "routeur" pour le serveur web. Le script sera exécuté au début de chaque requête HTTP. Si ce script retourne FALSE, alors la ressource demandée est retournée telle quelle. Sinon, la sortie du script est retournée au navigateur.

Exemple #1 Démarrage du serveur web

$ cd ~/public_html
$ php -S localhost:8000

Le terminal affichera :

PHP 5.4.0 Development Server started at Thu Jul 21 10:43:28 2011
Listening on localhost:8000
Document root is /home/me/public_html
Press Ctrl-C to quit

Après des requêtes URI sur http://localhost:8000/ et http://localhost:8000/myscript.html, le terminal affichera quelques choses comme :

PHP 5.4.0 Development Server started at Thu Jul 21 10:43:28 2011
Listening on localhost:8000
Document root is /home/me/public_html
Press Ctrl-C to quit.
[Thu Jul 21 10:48:48 2011] ::1:39144 GET /favicon.ico - Request read
[Thu Jul 21 10:48:50 2011] ::1:39146 GET / - Request read
[Thu Jul 21 10:48:50 2011] ::1:39147 GET /favicon.ico - Request read
[Thu Jul 21 10:48:52 2011] ::1:39148 GET /myscript.html - Request read
[Thu Jul 21 10:48:52 2011] ::1:39149 GET /favicon.ico - Request read

Exemple #2 Démarrage avec un dossier racine spécifique

$ cd ~/public_html
$ php -S localhost:8000 -t foo/

Le terminal affichera :

PHP 5.4.0 Development Server started at Thu Jul 21 10:50:26 2011
Listening on localhost:8000
Document root is /home/me/public_html/foo
Press Ctrl-C to quit

Exemple #3 Utilisation d'un script routeur

Le fait de demander des images les affichera, mais les requêtes pour les fichiers HTML afficheront "Bienvenue chez PHP !"

<?php
// router.php
if (preg_match('/\.(?:png|jpg|jpeg|gif)$/'$_SERVER["REQUEST_URI"]))
    return 
false;    // retourne la requête telle quelle.
else { 
    echo 
"<p>Bienvenue chez PHP !</p>";
}
?>
$ php -S localhost:8000 router.php

Après plusieurs requêtes URI, le terminal affichera quelques choses comme :

PHP 5.4.0 Development Server started at Thu Jul 21 10:53:19 2011
Listening on localhost:8000
Document root is /home/me/public_html
Press Ctrl-C to quit.
[Thu Jul 21 10:53:45 2011] ::1:55801 GET /mylogo.jpg - Request read
[Thu Jul 21 10:53:52 2011] ::1:55803 GET /abc.html - Request read
[Thu Jul 21 10:53:52 2011] ::1:55804 GET /favicon.ico - Request read


Configurations INI

Options de configuration CLI SAPI
Nom Défaut Modifiable Historique
cli_server.color "0" PHP_INI_ALL Disponible depuis PHP 5.4.0.

Voici un éclaircissement sur l'utilisation des directives de configuration.

cli_server.color boolean

Active le serveur web de développement interne à utiliser la coloration ANSI du code dans la sortie du terminal.




Ramasse-miettes (Garbage Collection)

Sommaire

Cette section explique les mérites du nouveau mécanisme ramasse-miettes (aussi appelé GC) fourni avec PHP 5.3.


Bases sur le comptage des références

Une variable PHP est stockée en interne dans un conteneur appelé "zval". Un conteneur zval contient, outre le type de la variable et sa valeur, deux unités d'information additionnelles. La première se nomme "is_ref" et est une valeur booléenne qui indique si une variable fait partie d'une référence ou non. Grâce à cette information, le moteur de PHP sait différencier les variables normales des références. Comme PHP autorise le programmeur à utiliser des références, au moyen de l'opérateur &, un conteneur zval possède aussi un mécanisme de comptage des références afin d'optimiser l'utilisation de la mémoire. Cette seconde information, appelée "refcount", contient le nombre de variables (aussi appelées symboles) qui pointent vers ce conteneur zval. Tous les symboles sont stockés dans une table de symboles et il y a une table par espace de visibilité (scope). Il y a un espace global pour le script principal (celui appelé par exemple via le navigateur) et un espace par fonction ou méthode.

Un conteneur zval est crée lorsqu'une nouvelle variable est créee avec une valeur constante, par exemple:

Exemple #1 Création d'un nouveau conteneur zval

<?php
$a 
"new string";
?>

Dans ce cas, le nouveau symbole a est crée dans le scope global, et un nouveau conteneur est crée avec comme type string et comme valeur new string. Le bit "is_ref" est mis par défaut à FALSE car aucune référence n'a été créee par le programmeur. Le bit "refcount" iest mis à 1 car il n'y a qu'un seul symbole qui utilise ce conteneur. Notez que si "refcount" vaut 1, "is_ref" vaut toujours FALSE. Si vous avez installé » Xdebug, vous pouvez afficher cette information en appelant xdebug_debug_zval().

Exemple #2 Affichage des informations zval

<?php
xdebug_debug_zval
('a');
?>

L'exemple ci-dessus va afficher :

a: (refcount=1, is_ref=0)='new string'

Assigner cette variable à un autre symbole va incrémenter le refcount.

Exemple #3 Incrémentation du refcount d'une zval

<?php
$a 
"new string";
$b $a;
xdebug_debug_zval'a' );
?>

L'exemple ci-dessus va afficher :

a: (refcount=2, is_ref=0)='new string'

Le refcount vaut 2 ici, car le même conteneur est lié à a et b à la fois. PHP est suffisament intelligent pour ne pas dupliquer le conteneur lorsque ce n'est pas nécessaire. Les conteneurs sont détruits lorsque leur "refcount" atteint zéro. Le "refcount" est décrémenté de une unité lorsque n'importe quel symbole lié à un conteneur est détruit du scope (e.g. lorsque la fonction se termine) ou lorsque unset() est appelée sur un symbole. L'exemple qui suit le démontre:

Exemple #4 Decrémentation du refcount d'une zval

<?php
$a 
"new string";
$c $b $a;
xdebug_debug_zval'a' );
unset( 
$b$c );
xdebug_debug_zval'a' );
?>

L'exemple ci-dessus va afficher :

a: (refcount=3, is_ref=0)='new string'
a: (refcount=1, is_ref=0)='new string'

Si maintenant nous appelons unset($a);, le conteneur zval, incluant le type et la valeur, va être détruit de la mémoire.

Types composés

Les choses se compliquent dans le cas des types composés comme array et object. A la différence des valeurs scalaires, les array et object stockent leurs propriétés dans une table de symboles qui leur est propre. Ceci signifie que l'exemple qui suit crée trois conteneurs zval:

Exemple #5 Creation d'une zval array

<?php
$a 
= array( 'meaning' => 'life''number' => 42 );
xdebug_debug_zval'a' );
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

a: (refcount=1, is_ref=0)=array (
   'meaning' => (refcount=1, is_ref=0)='life',
   'number' => (refcount=1, is_ref=0)=42
)

Ou graphiquement

Zvals d'un tableau simple

Les trois conteneurs zval sont: a, meaning, et number. Les mêmes règles s'appliquent pour l'incrémentation et la décrémentation des "refcounts". Ci-après, nous ajoutons un élément au tableau et nous affectons son contenu à une valeur déja existante dans le tableau:

Exemple #6 Ajout d'un élément déja existant au tableau

<?php
$a 
= array( 'meaning' => 'life''number' => 42 );
$a['life'] = $a['meaning'];
xdebug_debug_zval'a' );
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

a: (refcount=1, is_ref=0)=array (
   'meaning' => (refcount=2, is_ref=0)='life',
   'number' => (refcount=1, is_ref=0)=42,
   'life' => (refcount=2, is_ref=0)='life'
)

Ou graphiquement

Zvals pour un tableau simple avec une référence

La sortie Xdebug que nous voyons indique que les anciens et nouveaux éléments du tableau pointent maintenant vers un conteneur zval dont le "refcount" vaut 2. Même si la sortie XDebug montre 2 conteneurs zval avec comme valeur 'life', ils sont les mêmes. La fonction xdebug_debug_zval() ne montre pas cela, mais vous pourriez le voir en affichant le pointeur de mémoire.

Supprimer un élément du tableau est assimilable à la suppression d'un symbole depuis un espace. Ce faisant, le "refcount" du conteneur vers lequel l'élément du tableau pointe est décrémenté. Une fois encore, s'il atteind zéro, le conteneur zval est supprimé de la mémoire. Voici un exemple qui le démontre:

Exemple #7 Suppression d'un élément de tableau

<?php
$a 
= array( 'meaning' => 'life''number' => 42 );
$a['life'] = $a['meaning'];
unset( 
$a['meaning'], $a['number'] );
xdebug_debug_zval'a' );
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

a: (refcount=1, is_ref=0)=array (
   'life' => (refcount=1, is_ref=0)='life'
)

Maintenant, les choses deviennent intéressantes si nous ajoutons le tableau comme élément de lui-même. Nous faisons ça dans l'exemple qui suit avec un opérateur de référence, sinon PHP va crée une copie:

Exemple #8 Ajout du tableau comme référence à lui-même en tant qu'élement

<?php
$a 
= array( 'one' );
$a[] =& $a;
xdebug_debug_zval'a' );
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

a: (refcount=2, is_ref=1)=array (
   0 => (refcount=1, is_ref=0)='one',
   1 => (refcount=2, is_ref=1)=...
)

Ou graphiquement

Zvals dans un tableau avec référence circulaire

Vous pouvez voir que la variable tableau (a) tout comme le second élément (1) pointent désormais vers un conteneur dont le "refcount" vaut 2. Les "..." sur l'affichage indiquent une récursion et représentent donc le tableau lui-même.

Comme avant, supprimer une variable supprime son symbole et le refcount est décrémenté. Donc si nous supprimons la variable $a après son effectation, le refcount du conteneur sur lequel pointe $a et l'élément "1" sera décrémenté de une unité, de "2" vers "1". Ceci est représenté par:

Exemple #9 Suppression de $a

(refcount=1, is_ref=1)=array (
   0 => (refcount=1, is_ref=0)='one',
   1 => (refcount=1, is_ref=1)=...
)

Ou graphiquement

Zvals après suppression du tableau contenant une référence circulaire, fuite mémoire

Problèmes de nettoyage

Bien qu'il n'y ait plus aucun symbole dans l'espace de variables courant qui pointe vers cette structure, elle ne peut être nettoyée car l'élément du tableau "1" pointe toujours vers ce même tableau. Comme il n'y a plus de symbole externe pointant vers cette structure, l'utilisateur ne peut plus la nettoyer manuellement, il y a donc fuite mémoire. Heureusement, PHP va détruire cette structure à la fin de la requête, mais avant cette étape, la mémoire n'est pas libérée. Cette situation se produit souvent lorsque qu'un enfant pointe vers son parent. Notamment avec les objets qui sont utilisés par référence implicitement.

Ceci ne devrait pas être un problème si ça arrive une ou deux fois, mais s'il y a des centaines ou des milliers de situations similaires dans un même programme, alors cela peut devenir un problème important. Ceci en particulier pour les scripts démons dans lesquels la requête ne termine jamais, ou encore dans une grosse suite de tests unitaires. Ce dernier cas a été rencontré en lançant les tests du composant Template de la bibliothèque eZ Components. Dans certains cas, la suite de tests nécessitait 2Go de mémoire, ce que le serveur ne pouvait alors fournir.



Cycles de nettoyage

Traditionnellement, les mécanismes de comptage des références comme utilisés dans PHP auparavant ne pouvaient détecter les fuites mémoires dûes à des références circulaires. Depuis PHP 5.3.0, un algorithme synchrone issue de l'analyse » Concurrent Cycle Collection in Reference Counted Systems est utilisé pour répondre à ce problème particulier.

Une explication complète du fonctionnement de l'algorithme serait hors de portée pour cette section, mais nous allons ici détailler les principes de base. D'abord, nous allons établir quelques règles. Si un refcount est incrémenté, le conteneur est toujours utilisé, donc pas nettoyé. Si le refcount est décrémenté et atteint zéro, le conteneur zval peut être supprimé et la mémoire libérée. Ceci signifie que les cycles de nettoyages ne peuvent intervenir que lorsque le refcount est décrémenté vers une valeur différente de zéro. Ensuite, dans un cycle de nettoyage, il est possible de détecter les déchets en vérifiant s'il est possible ou non de décrémenter leur refcount de une unité en vérifiant quelles zvals ont un refcount à zéro.

Algorithme de collecte des déchets

Pour éviter d'appeler la routine de nettoyage à chaque décrémentation de refcount possible, l'algorithme place toutes les zval racines dans un "tampon de racines" (en les marquant). Il s'assure aussi que chaque racine n'apparait qu'une seule fois dans le tampon. Le mécanisme de nettoyage intervient alors lorsque le tampon est plein. Voyez l'étape A sur la figure ci-dessus.

A l'étape B, l'algorithme lance une recherche sur toutes les racines possibles afin de décrémenter de une unité les refcounts de toutes les zvals qu'il trouve, en faisant bien attention de ne pas décrémenter 2 fois le refcount de la même zval (en les marquant comme "grises"). Dans l'étape C, l'algorithme relance une recherche sur toutes les racines possibles et scrute la valeur de refcount de chaque zval. S'il trouve un refcount à zéro, la zval est marquée comme "blanche" (bleu sur la figure). S'il trouve autre chose que zéro, il annule sa décrémentation en refaisant une recherche à partir de ce noeud, et les marque comme "noires" à nouveau. Dans la dernière étape, D, l'algorithme parcours tout le tampon des racines et les supprime, tout en scrutant chaque zval, toute zval marquée comme "blanche" à l'étape précédente est alors supprimée de la mémoire.

Maintenant que vous savez globalement comment fonctionne l'algorithme, nous allons voir comment il a été intégré dans PHP. Par défaut, le ramasse-miettes de PHP est activé. Il existe cependant une options de php.ini pour changer cela : zend.enable_gc .

Lorsque le ramasse-miettes est activé, l'algorithme de recherche des cycles tel que décrit au dessus est exécuté à chaque fois que le tampon est plein. Le tampon de racines a une taille fixée à 10.000 racines (ce paramètre est changeable grâce à GC_ROOT_BUFFER_MAX_ENTRIES dans Zend/zend_gc.c dans le code source de PHP, une recompilation est donc nécessaire). Si le ramasse- miettes est désactivé, la recherche des cycles l'est aussi. Cependant, les racines probables seront toujours enregistrées dans le tampon, ceci ne dépend pas de l'activation du ramasse-miettes.

Si le tampon est plein alors que le mécanisme est désactivé, alors plus aucune racine ne pourra y être insérée. Ces racines ne seront donc pas analysées par l'algorithme au besoin, et si elles représentaient des références circulaires, il y aura fuite mémoire.

La raison pour laquelle les racines possibles sont tout de même enregistrées dans le tampon même si le mécanisme est désactivé est qu'il aurait été trop couteux de vérifier l'activation éventuelle du mécanisme à chaque tentative d'ajout d'une racine dans le tampon. Le mécanisme de ramasse-miettes et d'analyse peut être lui, couteux en temps.

En plus de pouvoir changer la valeur du paramètre de configuration zend.enable_gc , vous pouvez aussi activer ou désactiver le mécanisme de ramasse-miettes en appelant les fonctions gc_enable() ou gc_disable() respectivement. Ceci aura le même effet que de modifier le paramètre de configuration. Vous avez de plus la possibilité de forcer le passe du ramasse-miettes à un moment donné dans votre script, même si le tampon n'est pas encore complètement plein. Utilisez pour cela la fonction gc_collect_cycles(), cette fonction retournera le nombre de cycles alors collectés.

Vous pouvez prendre le contrôle en désactivant le ramasse-miettes ou en le forçant à passer à un moment donné car certaines parties de votre application peuvent être gourmandes en temps de traitement auquel cas vous pouvez désactiver le ramasse-miettes. Vous risquez à ce moment là des fuites mémoires. Vous pourriez vouloir déclencher manuellement le processus grâce à gc_collect_cycles() juste avant l'appel à gc_disable() pour libérer de la mémoire. Ceci laissera un tampon vidé et il y aura plus d'espace pour des racines probables (surtout lorsque le mécanisme est désactivé).



Considerations sur les performances

Nous avons déja vu dans les sections précédentes que la collecte des racines probables avait un impact très léger sur les performances, mais c'est lorsqu'on compare PHP5.2 à PHP5.3. Même si l'enregistrement des racines probables est plus lent que de pas les enregistrer du tout, comme dans PHP5.2, d'autres changements durant l'éxécution de PHP5.3 font de cette opération une opération quasi indolore au niveau des performances.

Il y a deux axes pour étudier les performances avec GC. D'abord l'empreinte mémoire et ensuite le temps d'éxécution pour nettoyer la mémoire. Nous allons étudier ces deux axes.

Empreinte mémoire réduite

D'abord, la raison principale de l'implémentation du mécanisme de collecte des déchets est la réduction de la mémoire consommée en nettoyant les références circulaires aussitôt que possible. Dans PHP, ceci arrive lorsque le tampon de racines est plein, ou lorsque la fonction gc_collect_cycles() est appelée. Sur le graphe ci-après, nous affichons l'utilisation mémoire d'un script dans PHP5.2 et PHP5.3, en excluant la mémoire obligatoire que PHP consomme pour lui-même au démarrage.

Exemple #1 Exemple d'utilisation mémoire

<?php
class Foo
{
    public 
$var '3.141592654';
}

$baseMemory memory_get_usage();

for ( 
$i 0$i <= 100000$i++ )
{
    
$a = new Foo;
    
$a->self $a;
    if ( 
$i 500 === )
    {
        echo 
sprintf'%8d: '$i ), memory_get_usage() - $baseMemory"\n";
    }
}
?>
Comparaison de la consommation mémoire entre PHP 5.2 et PHP 5.3

L'exemple est étuidé pour, nous allons créer un objet possédant un attribut le référençant lui-même. Lorsque la variable $a dans le script est réassignée à la prochaine itération, une fuite mémoire apparaitra. Dans ce cas, les deux conteneurs zval fuient (la zval de l'objet et celle de l'attribut), mais seulement une racine possible est trouvée : la variable qui a été supprimée. Lorsque le tampon de racines est plein après 10.000 itérations (un total de 10.000 racines possibles), le mécanisme de collection des déchets entre en jeu et libère la mémoire associée à ces racines probables. Cela se voit très clairement sur les graphes d'utilisation mémoire de PHP5.3. Après chaques 10.000 itérations, le mécanisme se déclenche et libère la mémoire associée aux variables références circulaires. Le diagramme montre que l'utilisation maximale de mémoire de PHP5.3 est d'environ 9Mo là où PHP5.2 n'arrête pas d'en consommer.

Ralentissement durant l'exécution

Le second point concernant les performances du mécanisme de collecte des déchets (GC) est le temps pris par le mécanisme pour libérer la mémoire "gaspillée". Pour voir cet impact, nous allons modifier le script précédent afin d'avoir un nombre d'itérations beaucoup plus élevé. Le script ressemble à:

Exemple #2 Impact de GC sur les performances

<?php
class Foo
{
    public 
$var '3.141592654';
}

for ( 
$i 0$i <= 1000000$i++ )
{
    
$a = new Foo;
    
$a->self $a;
}

echo 
memory_get_peak_usage(), "\n";
?>

Nous allons lancer ce script 2 fois, une fois avec zend.enable_gc à on, et une fois à off:

Exemple #3 Lancement du script ci-dessus

time php -dzend.enable_gc=0 -dmemory_limit=-1 -n example2.php
# and
time php -dzend.enable_gc=1 -dmemory_limit=-1 -n example2.php

Sur ma machine, la première commande semble durer tout le temps 10,7 secondes, alors que la seconde commande prend environ 11,4 secondes. Un ralentissement de 7% environ. Cependant, la quantité totale de mémoire utilisée par le script est réduite de 98% passant de 931Mo à 10Mo. Ce benchmark n'est pas très scientifique ou même représentatif d'applications réelles, mais il démontre concrètement en quoi le mécanisme de collecte des déchets peut être utile concernant la consommation mémoire. Le bon point est que le ralentissement est toujours de 7%, dans le cas particulier de ce script, alors que la mémoire restaurée sera de plus en plus importante au fur et à mesure que des références circulaires apparaitront durant l'éxécution.

Statistiques internes du GC de PHP

Il est possible d'obtenir quelques informations concernant le mécanisme de collecte des déchets interne à PHP. Mais pour cela, il faut recompiler PHP avec le support du benchmarking et de la collection de données. Vous devrez passer la variable d'environnement CFLAGS avec -DGC_BENCH=1 avant de lancer ./configure. L'exemple suivant démontre cela:

Exemple #4 Recompiler PHP pour le support du benchmark du GC

export CFLAGS=-DGC_BENCH=1
./config.nice
make clean
make

Lorsque vous ré-éxécutez le code du script ci-dessus avec un PHP fraichement reconstruit, vous devriez voir le résultat suivant après l'éxecution:

Exemple #5 Statistiques GC

GC Statistics
-------------
Runs:               110
Collected:          2072204
Root buffer length: 0
Root buffer peak:   10000

      Possible            Remove from  Marked
        Root    Buffered     buffer     grey
      --------  --------  -----------  ------
ZVAL   7175487   1491291    1241690   3611871
ZOBJ  28506264   1527980     677581   1025731

Les statistiques les plus descriptives sont affichées dans le premier bloc. Vous voyez que le mécanisme de collecte des dechets a été déclenché 110 fois, et au total ce sont plus de 2 millions d'allocations mémoires qui ont été libérées durant ces 110 passages. Dès lors que le mécanisme est intervenu une seule fois, le pic du buffer racine est toujours de 10000.

Conclusion

De manière générale, la collection des dechets en PHP ne causera un ralentissement que lorsque le cycle tournera, ainsi dans les scripts normaux il ne devrait pas y avoir de ressenti de ce ralentissement.

Cependant, lorsque le cycle de collection de déchets sera enclenché dans des scripts normaux, la réduction de l'empreinte mémoire permettra alors d'éxécuter plus de scripts en parallèle.

Les avantages se sentent plus dans le cas de scripts démons ou devant tourner longtemps. Aussi, concernant les applications » PHP-GTK qui souvent tournent plus longtemps que des scripts pour le Web, le nouveau mécanisme devrait réduire significativement les fuites mémoires sur le long terme.





Référence des fonctions


Affecte le comportement de PHP


Cache PHP alternatif


Introduction

Le "Alternative PHP Cache" (APC) est un cache d'opcode libre et ouvert pour PHP. Son objectif est de fournir un framework libre, ouvert et robuste pour la mise en cache et l'optimisation de code intermédiaire PHP.



Installation/Configuration

Sommaire


Pré-requis

Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible.



Installation

Cette extension » PECL n'est pas intégrée à PHP.

Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici : » http://pecl.php.net/package/apc.

Aucune bibliothèque DLL pour cette extension PECL n'est actuellement disponible. Reportez-vous à la section Compilation sous Windows.

Note: Sous Windows, APC a besoin d'un chemin temporaire pour exister devant être accessible en écriture par le serveur Web. Il vérifie la valeur des variables d'environnement TMP, TEMP et USERPROFILE dans cet ordre, et tente finalement le dossier WINDOWS si aucune de ces variables n'est définie.

Note: Pour des détails techniques sur l'implémentation de ce framework, lisez le »  fichier TECHNOTES fourni par les développeurs .



Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Bien que la configuration par défaut d'APC soit suffisante pour la plupart des installations, les utilisateurs avancés devraient affiner certains paramètres.

Il y a deux décisions importantes que vous devez prendre. D'abord, la quantité de mémoire partagée que vous voulez allouer à APC et ensuite, si vous voulez qu'APC vérifie si un fichier a été modifié à chaque requête. Les deux directives de configuration concernées sont apc.shm_size et apc.stat. Lisez avec attention la section suivante sur ces deux directives de configuration.

Une fois que vous avez un serveur qui fonctionne, vous devez copier le script apc.php fourni avec l'extension dans un endroit accessible par le serveur web, puis, appelez-le depuis votre navigateur. Il vous fournit tous les détails de votre cache. Si GD est actif sur votre configuration PHP, il y aura aussi de jolis graphiques. La première chose à vérifier est s'il y a actuellement des fichiers en cache. En supposant que cela fonctionne, vous devez donc faire attention au nombre Cache full count sur la gauche. Il indique le temps depuis lequel le cache a été créé et qui doit effacer les entrées non utilisées depuis apc.ttl secondes. Vous devriez configurer votre cache pour minimiser ce nombre. Si vous remplissez constamment votre cache, la génération du cache résultant va prendre beaucoup de ressources. Vous devriez soit allouer plus de mémoire pour APC, soit utiliser apc.filters pour mettre en cache moins de scripts.

Lorsque APC est compilé avec le support mmap (Memory Mapping), il n'utilisera qu'un seul segment mémoire alors que APC compilé avec le support SHM (SysV Shared Memory) utilisera plusieurs segments mémoires. MMAP n'a pas de limite maxi comme SHM dans /proc/sys/kernel/shmmax. En général MMAP est recommandé car il accèdera à la mémoire de manière plus rapide lorsque le serveur web est redémarré et il réduit aussi les allocations mémoire au démarrage.

Options de configuration APC
Nom Défaut Modifiable Historique
apc.enabled "1" PHP_INI_SYSTEM PHP_INI_SYSTEM avec APC 2. PHP_INI_ALL avec APC <= 3.0.12p2
apc.shm_segments "1" PHP_INI_SYSTEM  
apc.shm_size "32M" PHP_INI_SYSTEM  
apc.optimization "0" PHP_INI_ALL PHP_INI_SYSTEM avec APC 2. Supprimé depuis APC 3.0.13.
apc.num_files_hint "1000" PHP_INI_SYSTEM  
apc.user_entries_hint "4096" PHP_INI_SYSTEM Disponible depuis APC 3.0.0.
apc.ttl "0" PHP_INI_SYSTEM Disponible depuis APC 3.0.0.
apc.user_ttl "0" PHP_INI_SYSTEM Disponible depuis APC 3.0.0.
apc.gc_ttl "3600" PHP_INI_SYSTEM  
apc.cache_by_default "1" PHP_INI_ALL PHP_INI_SYSTEM avec APC <= 3.0.12p2. Disponible depuis APC 3.0.0.
apc.filters NULL PHP_INI_SYSTEM  
apc.mmap_file_mask NULL PHP_INI_SYSTEM  
apc.slam_defense "1" PHP_INI_SYSTEM Disponible depuis APC 3.0.0. Avant la version 3.1.4 d'APC, la valeur par défaut était "0" (désactivé).
apc.file_update_protection "2" PHP_INI_SYSTEM Disponible depuis APC 3.0.6.
apc.enable_cli "0" PHP_INI_SYSTEM Disponible depuis APC 3.0.7.
apc.max_file_size "1M" PHP_INI_SYSTEM Disponible depuis APC 3.0.7.
apc.use_request_time "1" PHP_INI_ALL Disponible depuis APC 3.1.3.
apc.stat "1" PHP_INI_SYSTEM Disponible depuis APC 3.0.10.
apc.write_lock "1" PHP_INI_SYSTEM Disponible depuis APC 3.0.11.
apc.report_autofilter "0" PHP_INI_SYSTEM Disponible depuis APC 3.0.11.
apc.include_once_override "0" PHP_INI_SYSTEM Disponible depuis APC 3.0.12.
apc.rfc1867 "0" PHP_INI_SYSTEM Disponible depuis APC 3.0.13.
apc.rfc1867_prefix "upload_" PHP_INI_SYSTEM  
apc.rfc1867_name "APC_UPLOAD_PROGRESS" PHP_INI_SYSTEM  
apc.rfc1867_freq "0" PHP_INI_SYSTEM  
apc.rfc1867_ttl "3600" PHP_INI_SYSTEM Disponible depuis APC 3.1.1.
apc.localcache "0" PHP_INI_SYSTEM Disponible depuis APC 3.0.14.
apc.localcache.size "512" PHP_INI_SYSTEM Disponible depuis APC 3.0.14.
apc.coredump_unmap "0" PHP_INI_SYSTEM Disponible depuis APC 3.0.16.
apc.stat_ctime "0" PHP_INI_SYSTEM Disponible depuis APC 3.0.13.
apc.preload_path NULL PHP_INI_SYSTEM Disponible depuis APC 3.1.1.
apc.file_md5 "0" PHP_INI_SYSTEM Disponible depuis APC 3.1.1.
apc.canonicalize "1" PHP_INI_SYSTEM Disponible depuis APC 3.1.1.
apc.lazy_functions 0 PHP_INI_SYSTEM Disponible depuis APC 3.1.3.
apc.lazy_classes 0 PHP_INI_SYSTEM Disponible depuis APC 3.1.3.
Pour plus de détails sur les modes PHP_INI_*, reportez-vous à Où une directive de configuration peut être modifiée.

Voici un éclaircissement sur l'utilisation des directives de configuration.

apc.enabled booléen

apc.enabled peut être défini à 0 pour désactiver APC. Ceci est utile lorsque APC est compilé statiquement dans PHP, et qu'il n'y a donc aucun autre moyen de le désactiver (lorsque compilé en tant que DSO, la ligne extension dans le php.ini peut juste être commentée).

apc.shm_segments entier

Le nombre de segments mémoire à allouer pour le cache compilé. Si APC fonctionne en dehors de la mémoire partagée, mais que vous avez déjà défini apc.shm_size aussi élevé que votre système le permet, vous pouvez tenter de relever cette valeur.

apc.shm_size entier

La taille de chaque segment de mémoire partagé en MB. Par défaut, quelques systèmes (incluant la plupart des BSD) ont une limite basse de la taille d'un segment mémoire partagé.

apc.optimization entier

Le degré d'optimisation. Zéro désactive l'optimiseur, et de hautes valeurs utilisent des optimisations agressives. Attendez-vous à des améliorations très modestes de vitesse. Ceci est expérimental.

apc.num_files_hint entier

Un "conseil" au sujet du nombre de fichiers sources distincts qui seront inclus ou demandés sur votre serveur web. Placez à zéro ou omettez-le si vous n'êtes pas sûr ; cet arrangement est principalement utile pour les sites qui ont des milliers de fichiers sources.

apc.user_entries_hint entier

Tout comme apc.num_files_hint, un "conseil" à propos du nombre de variables de cache utilisateur distinctes à stocker. Définissez le à 0 ou ne le définissez pas si vous n'êtes pas sûr.

apc.ttl entier

Le nombre de secondes qu'une entrée de cache est autorisée à stagner dans un slot dans le cas où ce slot d'entrée de cache est nécessaire pour une autre entrée. Laisser à zéro signifie que votre cache pourrait potentiellement remplir d'autres entrées tant que d'autres entrées ne seront pas mises en cache.

apc.user_ttl entier

Le nombre de secondes qu'une entrée utilisateur du cache est autorisée à résider dans un slot dans le cas où ce slot d'entrée de cache est demandé par une autre entrée. Laisser cette option à zéro signifie que votre cache peut potentiellement être rempli avec des entrées obsolètes lorsqu'il n'y a eu jamais d'entrées mises en cache. Dans le cas où le cache est à court d'espace, ce dernier sera totalement vidé si ttl vaut 0. Sinon, et si le ttl est supérieur à 0, APC va tenter de supprimer les entrées qui ont dépassé leur date d'expiration.

apc.gc_ttl entier

Le nombre de secondes qu'une entrée de cache est autorisée à rester sans utilisation, au cas où cet espace pourrait être nécessaires à une autre entrée. La valeur de zéro fait que votre cache pourrait se remplir avec des entrées oisives, et que les nouvelles entrées ne soient pas mises en cache. Dans le cas où le cache est à court de mémoire, le cache sera totalement vidé si ttl vaut 0. Sinon, et si ttl est supérieur à 0, APC va tenter de supprimer les entrées qui ont dépassé leur date d'expiration.

apc.cache_by_default booléen

Actif par défaut, mais peut être désactivé et utilisé en conjonction avec un apc.filters positif donc ces fichiers seront uniquement mis en cache s'ils correspondent à un filtre positif.

apc.filters chaîne de caractères

Une liste séparée par des virgules d'expressions rationnelles POSIX. Si un seul masque correspond à un nom de fichier source, le fichier ne sera pas mis en cache. Notez que le nom du fichier utilisé pour le masque est celui passé aux instructions include require, et non un chemin absolu. Si le premier caractère de l'expression est un + alors l'expression sera additive dans le sens que chaque fichier correspondant à l'expression sera mis en cache, et si le premier caractère est un - alors tout ce qui correspond ne sera pas mis en cache. Le cas du - est celui par défaut, donc, il peut être omis.

apc.mmap_file_mask chaîne de caractères

Si compilé avec le support MMAP en utilisant --enable-mmap, ce sera le style mktemp de masque de fichier à passer au module MMAP pour déterminer si votre région de mémoire MMAP va être mise dans un fichier ou en mémoire partagée. Dans le cas de la mise en cache dans un fichier MMAP, définissez ce paramètre comme /tmp/apc.XXXXXX (exactement 6 X). Pour utiliser le style POSIX shm_open/mmap, placez un .shm quelque part dans votre masque, e.g. /apc.shm.XXXXXX. Vous pouvez également définir ce paramètre à /dev/zero pour utiliser votre interface kernel /dev/zero pour la mémoire anonyme MMAP. Le laisser indéfini forcera un MMAP anonyme.

apc.slam_defense entier

Sur les serveurs très surchargés lorsque vous démarrez le serveur ou modifiez des fichiers, vous pouvez créer une course de plusieurs processus pour mettre en cache le même fichier en même temps. Cette option définit le pourcentage de processus qui évitera de tenter de mettre en cache un fichier non mis en cache. Ou pensez à lui comme probabilité d'un processus simple pour éviter la mise en cache. Par exemple, définir apc.slam_defense à 75 signifie qu'il y a 75 % de chances que le processus ne mettra pas en cache un fichier qui ne s'y trouvera pas déjà. Définir à 0 pour désactiver cette fonctionnalité.

Obsolète avec apc.write_lock.

apc.file_update_protection entier

Lorsque vous modifiez un fichier sur un serveur web, vous devriez le faire d'une façon atomique. Écrivez-le dans un fichier temporaire et renommez-le (mv) vers sa position permanente lorsqu'il est prêt. La plupart des éditeurs de texte, cp, tar et les autres programmes de ce genre ne font pas cela. Cela signifie qu'il y a une chance pour que le fichier soit accédé (et donc, mis en cache) alors qu'il est encore en cours d'écriture. Ce paramètre apc.file_update_protection fait intervenir un délai pour la mise en cache des nouveaux fichiers. Par défaut, il vaut 2 secondes, ce qui signifie que si le timestamp de modification (mtime) d'un fichier montre qu'il vaut moins de 2 secondes, ce fichier ne sera pas mis en cache. La personne malheureuse qui a accédé à ce fichier à moitié écrit verra une ébauche, mais au moins celui-ci ne persistera pas en cache. Si vous êtes certain de mettre toujours et automatiquement à jour vos fichiers en utilisant quelque chose comme rsync qui fait cela correctement, vous pouvez désactiver cette protection en le définissant à 0. Si vous avez une application très intensive sur le disque, qui force les procédures de mise à jour à prendre plus de 2 secondes, vous pourriez vouloir augmenter la valeur de cette directive.

apc.enable_cli entier

Pour tester et déboguer. Définir ceci active APC pour la version CLI de PHP. Normalement, vous ne devriez pas vouloir créer, peupler et démonter le cache APC à chaque requête CLI, mais pour divers scénarios de test, elle est maniable afin de pouvoir activer facilement APC pour la version CLI d'APC.

apc.max_file_size entier

Permet d'éviter la mise en cache des fichiers dont la taille est supérieure à cette valeur. Par défaut, 1Mo.

apc.stat entier

Faites très attention si vous modifiez cette valeur. Par défaut, APC vérifie le script à chaque demande pour voir s'il a été modifié ou non. S'il a été modifié, il sera compilé à nouveau et la nouvelle version sera mise en cache. En désactivant cette option, aucune vérification n'aura lieu. Cela signifie que si vous voulez activer les modifications, vous devez redémarrer le serveur web. Sur un serveur de production où vous modifiez rarement le code, le fait de désactiver cette option permet de gagner en performances de manière significative.

Pour les fichiers inclus/requis, cette option est également appliquée, mais notez que si vous utilisez des chemins relatifs (n'importe quel chemin qui ne commence pas par un / sous Unix), APC doit identifier de manière unique le fichier à vérifier. Si vous utilisez des chemins absolus pour vos inclusions, APC peut éviter ces vérifications et utiliser ce chemin absolu en tant qu'identifiant unique du fichier.

apc.write_lock booléen

Sur les serveurs très chargés, lorsque vous démarrez le serveur, ou lorsque beaucoup de fichiers sont modifiés, vous pouvez en finir avec les processus qui tentent de compiler et mettre en cache le même fichier. Lorsque apc.write_lock est activé, uniquement un seul processus à la fois tentera de compiler un script de mise en cache tandis que les autres processus exécuteront les fichiers non mis en cache au lieu d'attendre que le verrou se libère.

apc.report_autofilter booléen

Logs tous les scripts qui sont automatiquement exclus de la mise en cache à cause de problèmes de liaison.

apc.include_once_override booléen

Optimise les appels aux fonctions include_once et require_once et évite ainsi de surcharger le système appelant.

Avertissement

Cette fonctionnalité est EXPERIMENTALE. Son comportement, son nom ainsi que sa documentation peuvent être modifiés sans avertissement dans une version future d'APC. Cette fonctionnalité doit être utilisée à votre propre risque.

apc.rfc1867 booléen

Le gestionnaire de progression de téléchargement de fichier RFC1867 n'est disponible que si vous avez compilé APC avec PHP 5.2.0 ou supérieur. Lors le support est actif, les fichiers téléchargés qui incluent un champ appelé APC_UPLOAD_PROGRESS avant le champ "file" d'un formulaire de téléchargement fera qu'APC créera automatiquement une entrée de cache utilisateur nommée upload_keykey est la valeur de l'entrée de formulaire APC_UPLOAD_PROGRESS.

Notez que les champs cachés spécifié par APC_UPLOAD_PROGRESS doivent être placés avant le champ de type file, sinon le suivi de l'upload ne fonctionnera pas correctement.

Notez que la surveillance du téléchargement de fichier n'est pas compatible avec les threads pour le moment, ainsi, les nouveaux téléchargements survenant tandis qu'un précédent est toujours en cours désactivera la surveillance précédente.

Notez que rate n'est disponible que lorsque tous les transferts sont terminés.

Exemple #1 Exemple avec apc.rfc1867

<?php
print_r
(apc_fetch("upload_$_POST[APC_UPLOAD_PROGRESS]"));
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Array
(
    [total] => 1142543
    [current] => 1142543
    [rate] => 1828068.8
    [filename] => test
    [name] => file
    [temp_filename] => /tmp/php8F
    [cancel_upload] => 0
    [done] => 1
)

apc.rfc1867_prefix chaîne de caractères

Préfixe de la clé à utiliser pour l'entrée de cache utilisateur généré par la fonctionnalité de progression de téléchargement RFC1867.

apc.rfc1867_name chaîne de caractères

Spécifie le nom du champ masqué du formulaire qui active la progression du téléchargement et spécifie le suffixe de la clé du cache utilisation.

apc.rfc1867_freq chaîne de caractères

La fréquence à laquelle la mise à jour doit être effectuée pour l'entrée du cache utilisateur pour la progression du téléchargement. Peut prendre la forme d'un pourcentage de la taille totale du fichier ou une taille, en octets, optionnellement suffixée par "k", "m", ou "g" pour kilo-octets, méga-octets ou giga-octets (insensible à la casse). Si vous définissez cette option à 0, la mise à jour intervient aussi souvent que possible, ce qui peut rendre le téléchargement plus lent.

apc.rfc1867_ttl bool

TTL pour les entrées rfc1867.

apc.localcache booléen

Ceci active un processus d'interface locale libre de cache, ce qui réduit les controverses de verrous lorsque le cache est sur le point d'être écrit.

apc.localcache.size entier

La taille du processus d'interface locale libre de cache, doit être définit à une valeur suffisamment élevée, soit approximativement la moitié de la valeur de apc.num_files_hint.

apc.coredump_unmap booléen

Active la gestion APC des signaux, comme SIGSEGV, qui écrit les fichiers internes lorsqu'il est émis. Lorsque ces signaux sont reçus, APC tentera de détacher les segments de la mémoire partagée afin de les exclure du fichier interne. Cette configuration devrait rendre plus stable le système lorsque des signaux fatals sont reçus et qu'un gros segment APC de mémoire partagée est configuré.

Avertissement

Cette fonctionnalité est potentiellement dangereuse. Le détachement d'un segment de mémoire partagée dans un gestionnaire de signaux fatals peut produire à un comportement indéterminé si une erreur fatale survient.

Note:

Bien que quelques noyaux puissent ignorer divers types de mémoire partagée lors de la génération du fichier interne, ces implémentations peuvent également ignorer d'importants segments de mémoire partagée tel que le scoreboard d'Apache.

apc.stat_ctime entier

Une vérification avec ctime prévient les problèmes causés par des programmes comme svn ou rsync en s'assurant que les inodes n'ont pas été modifiés depuis le dernier appel à stat. APC, normalement, n'utilise que mtime pour cela.

apc.canonicalize bool

Si activé les chemins relatifs sont cononisés en mode no-stat. Si défini, alors les fichiers inclus via les gestionnaires de flux ne pourront pas être mis en cache, vu que la fonction realpath() ne supporte pas les gestionnaires de flux.

apc.preload_path string

apc.use_request_time bool

Utilise le temps de début derequête SAPI pour le TTL.

apc.file_md5 bool

Enregistre un hashage md5 pour les fichiers.

apc.lazy_functions integer

Active le chargement à la demande pour les fonctions.

apc.lazy_classes integer

Active le chargement à la demande pour les classes.



Types de ressources

Cette extension ne définit aucune ressource.




Constantes pré-définies

Cette extension ne définit aucune constante.

APC_BIN_VERIFY_CRC32 (integer)
APC_BIN_VERIFY_MD5 (integer)
APC_ITER_ALL (integer)
APC_ITER_ATIME (integer)
APC_ITER_CTIME (integer)
APC_ITER_DEVICE (integer)
APC_ITER_DTIME (integer)
APC_ITER_FILENAME (integer)
APC_ITER_INODE (integer)
APC_ITER_KEY (integer)
APC_ITER_MD5 (integer)
APC_ITER_MEM_SIZE (integer)
APC_ITER_MTIME (integer)
APC_ITER_NONE (integer)
APC_ITER_NUM_HITS (integer)
APC_ITER_REFCOUNT (integer)
APC_ITER_TTL (integer)
APC_ITER_TYPE (integer)
APC_ITER_VALUE (integer)
APC_LIST_ACTIVE (integer)
APC_LIST_DELETED (integer)



Fonctions APC


apc_add

(PECL apc >= 3.0.13)

apc_addMet en cache une nouvelle variable dans le magasin de données

Description

bool apc_add ( string $key [, mixed $var [, int $ttl = 0 ]] )
array apc_add ( array $values [, mixed $unused [, int $ttl = 0 ]] )

Met en cache une variable dans le magasin de données, uniquement si elle ne s'y trouve pas déjà.

Note: Contrairement aux autres mécanismes en PHP, les variables stockées en utilisant la fonction apc_add() seront persistantes entre les requêtes (jusqu'à ce que la valeur soit effacée du cache).

Liste de paramètres

key

Stocke la variable en utilisant son nom. La clé key est unique dans le cache, donc utilisez la fonction apc_add() pour stocker une donnée avec une clé qui existe déjà n'efface pas la donnée existante, mais retournera FALSE. (C'est la seule différence entre la fonction apc_add() et la fonction apc_store().)

var

La variable à stocker

ttl

Durée de vie ; stocke la variable var dans le cache pendant ttl secondes. Après ce délai, la variable stockée sera effacée du cache (à la requête suivante). Si le paramètre ttl n'est pas fourni (ou s'il vaut 0), la valeur persistera tant qu'elle ne sera pas effacée manuellement du cache, ou si elle n'existe plus dans le cache (effacement, redémarrage, etc.).

values

Les noms comme clés, les variables comme valeurs.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient. La seconde syntaxe retourne un tableau avec les clés en erreur.

Exemples

Exemple #1 Exemple avec apc_add()

<?php
$bar 
'BAR';
apc_add('foo'$bar);
var_dump(apc_fetch('foo'));
echo 
"\n";
$bar 'NEVER GETS SET';
apc_add('foo'$bar);
var_dump(apc_fetch('foo'));
echo 
"\n";
?>

L'exemple ci-dessus va afficher :

string(3) "BAR"
string(3) "BAR"

Voir aussi

  • apc_store() - Met en cache une variable dans le magasin
  • apc_fetch() - Récupère une variable stockée dans le cache
  • apc_delete() - Efface une variable stockée dans le cache



apc_bin_dump

(PECL apc >= 3.1.4)

apc_bin_dumpRécupère une sortie binaire des fichiers fournis et des variables utilisateur

Description

string apc_bin_dump ([ array $files [, array $user_vars ]] )

Retourne une sortie binaire des fichiers fournis et des variables utilisateur depuis le cache APC. Passer NULL pour les fichiers ou les variables utilisateur signifie une sortie pour chaque entrée alors que array() permettra de n'avoir aucune sortie.

Liste de paramètres

files

Les fichiers. Passer NULL indique un retour pour chaque entrée alors que passer array() ne génèrera aucune sortie.

user_vars

Les variables utilisateur. Passer NULL indique un retour pour chaque entrée alors que passer array() ne génèrera aucune sortie.

Valeurs de retour

Retourne une sortie binaire de chaque fichiers et chaque variables utilisateur depuis le cache APC. FALSE est retourné si APC n'est pas activé et NULL si une erreur est survenue.

Voir aussi

  • apc_bin_dumpfile() - Envoi une sortie binaire des fichiers fournis et des variables utilisateur vers un fichier spécifique
  • apc_bin_load() - Charge une sortie binaire dans le cache fichiers ou utilisateur d'APC


apc_bin_dumpfile

(PECL apc >= 3.1.4)

apc_bin_dumpfileEnvoi une sortie binaire des fichiers fournis et des variables utilisateur vers un fichier spécifique

Description

int apc_bin_dumpfile ( array $files , array $user_vars , string $filename [, int $flags = 0 [, resource $context ]] )

Envoi une sortie binaire des fichiers fournis et des variables utilisateur depuis le cache APC vers un fichier fourni.

Liste de paramètres

files

Les noms de fichier à sortir.

user_vars

Les variables utilisateur à sortir.

filename

Le fichier vers lequel envoyer les sorties.

flags

Drapeaux passés au flux filename. Voyez la documentation de file_put_contents() pour plus de détails.

context

Le contexte de flux à passer pour filename. Voyez la documentation de file_put_contents() pour plus de détails.

Valeurs de retour

Le nombre d'octets écrits dans le fichier, sinon FALSE si APC n'est pas activé, si filename est invalide ou ne peut être ouvert, si la sortie générée est incomplète (ex: le disque est plein) ou enfin si une erreur quelconque est survenue.

Voir aussi

  • apc_bin_dump() - Récupère une sortie binaire des fichiers fournis et des variables utilisateur
  • apc_bin_load() - Charge une sortie binaire dans le cache fichiers ou utilisateur d'APC


apc_bin_load

(PECL apc >= 3.1.4)

apc_bin_loadCharge une sortie binaire dans le cache fichiers ou utilisateur d'APC

Description

bool apc_bin_load ( string $data [, int $flags = 0 ] )

Charge la sortie binaire fournie dans le cache fichiers ou utilisateur d'APC

Liste de paramètres

data

La sortie binaire à charger, provenant de apc_bin_dump().

flags

Soit APC_BIN_VERIFY_CRC32, soit APC_BIN_VERIFY_MD5, ou encore les deux combinés.

Valeurs de retour

Retourne TRUE si la sortie binaire data a été chargée avec succès, sinon FALSE est retourné. FALSE est retourné si APC n'est pas activé ou si data n'est pas une sortie APC valide (ex: taille incorrecte).

Exemples

Exemple #1 Exemple apc_bin_load()

<?php
$data 
apc_bin_dump(NULLNULL);
apc_bin_load($dataAPC_BIN_VERIFY_MD5 APC_BIN_VERIFY_CRC32);
?>

Voir aussi

  • apc_bin_dump() - Récupère une sortie binaire des fichiers fournis et des variables utilisateur
  • apc_bin_loadfile() - Charge une sortie binaire depuis un fichier dans le cache fichiers ou utilisateur d'APC


apc_bin_loadfile

(PECL apc >= 3.1.4)

apc_bin_loadfileCharge une sortie binaire depuis un fichier dans le cache fichiers ou utilisateur d'APC

Description

bool apc_bin_loadfile ( string $filename [, resource $context [, int $flags ]] )

Charge une sortie binaire depuis un fichier dans le cache fichiers ou utilisateur d'APC

Liste de paramètres

filename

Le nom du fichier contenant la sortie binaire, typiquement depuis apc_bin_dumpfile().

context

Le contexte des fichiers.

flags

Soit APC_BIN_VERIFY_CRC32, soit APC_BIN_VERIFY_MD5, ou encore les deux combinés.

Valeurs de retour

Retourne TRUE en cas de succès, ou alors FALSE Les raisons d'un retour FALSE incluent la non activation de APC, filename invalide ou non ouvrable, le fichier de sortie est incomplet ou encore si data n'est pas une sortie APC valide (ex: taille incorrecte).

Voir aussi

  • apc_bin_dumpfile() - Envoi une sortie binaire des fichiers fournis et des variables utilisateur vers un fichier spécifique
  • apc_bin_load() - Charge une sortie binaire dans le cache fichiers ou utilisateur d'APC


apc_cache_info

(PECL apc >= 2.0.0)

apc_cache_info Récupère les informations du cache dans l'entrepôt APC

Description

array apc_cache_info ([ string $cache_type [, bool $limited = false ]] )

Récupère les informations du cache et les métadonnées depuis le magasin APC.

Liste de paramètres

cache_type

Si cache_type vaut "user", les informations sur le cache utilisateur seront retournées.

Si cache_type vaut "filehits", les informations sur les fichiers ayant été servis depuis le cache pour la requête courante seront retournées. Cette fonctionnalité doit être activé lors de la compilation, en utilisant l'option --enable-filehits .

Si cache_type est non spécifié ou invalide, l'information à propos du cache système (fichiers mis en cache) est retournée.

limited

Si limited vaut TRUE, la valeur retournée exclue les entrées de la liste individuelle du cache. Ceci est utile lorsque l'on tente d'optimiser les appels pour la collecte de statistiques.

Valeurs de retour

Un tableau de données mis en cache (et les métadonnées) ou FALSE si une erreur survient.

Note: apc_cache_info() émet une alerte s'il n'est pas capable de récupérer les données APC mises en cache. Ceci arrive typiquement lorsque APC n'est pas activé.

Historique

Version Description
3.0.11 Le paramètre limited a été introduit.
3.0.16 L'option "filehits" du paramètre cache_type a été introduite.

Exemples

Exemple #1 Exemple avec apc_cache_info()

<?php
print_r
(apc_cache_info());
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Array
(
    [num_slots] => 2000
    [ttl] => 0
    [num_hits] => 9
    [num_misses] => 3
    [start_time] => 1123958803
    [cache_list] => Array
        (
            [0] => Array
                (
                    [filename] => /chemin/vers/apc_test.php
                    [device] => 29954
                    [inode] => 1130511
                    [type] => file
                    [num_hits] => 1
                    [mtime] => 1123960686
                    [creation_time] => 1123960696
                    [deletion_time] => 0
                    [access_time] => 1123962864
                    [ref_count] => 1
                    [mem_size] => 677
                )
            [1] => Array (...itération pour chaque fichier mis en cache)
)

Voir aussi



apc_cas

(PECL apc >= 3.1.1)

apc_casMet à jour une ancienne valeur par une nouvelle

Description

bool apc_cas ( string $key , int $old , int $new )

apc_cas() met à jour une valeur entière existante (si le paramètre old correspond à la valeur actuellement stockée), avec la valeur du paramètre new.

Liste de paramètres

key

La clé de la valeur à mettre à jour.

old

L'ancienne valeur (la valeur actuellement stockée).

new

La nouvelle valeur à utiliser.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple apc_cas()

<?php
apc_store
('foobar'2);
echo 
'$foobar = 2'PHP_EOL;
echo 
'$foobar == 1 ? 2 : 1 = ', (apc_cas('foobar'12) ? 'ok' 'fail'), PHP_EOL;
echo 
'$foobar == 2 ? 1 : 2 = ', (apc_cas('foobar'21) ? 'ok' 'fail'), PHP_EOL;

echo 
'$foobar = 'apc_fetch('foobar'), PHP_EOL;

echo 
'$f__bar == 1 ? 2 : 1 = ', (apc_cas('f__bar'12) ? 'ok' 'fail'), PHP_EOL;

apc_store('perfection''xyz');
echo 
'$perfection == 2 ? 1 : 2 = ', (apc_cas('perfection'21) ? 'ok' 'epic fail'), PHP_EOL;

echo 
'$foobar = 'apc_fetch('foobar'), PHP_EOL;
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

$foobar = 2
$foobar == 1 ? 2 : 1 = fail
$foobar == 2 ? 1 : 2 = ok
$foobar = 1
$f__bar == 1 ? 2 : 1 = fail
$perfection == 2 ? 1 : 2 = epic fail
$foobar = 1

Voir aussi

  • apc_dec() - Décrémente un nombre stocké
  • apc_store() - Met en cache une variable dans le magasin


apc_clear_cache

(PECL apc >= 2.0.0)

apc_clear_cache Efface le cache APC

Description

bool apc_clear_cache ([ string $cache_type ] )

Efface le cache utilisateur/système.

Liste de paramètres

cache_type

Si cache_type vaut "user", le cache utilisateur sera nettoyé ; sinon, le cache système (les fichiers mis en cache) sera nettoyé.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



apc_compile_file

(PECL apc >= 3.0.13)

apc_compile_fileStocke un fichier dans le cache, en évitant tous les filtres

Description

mixed apc_compile_file ( string $filename [, bool $atomic = true ] )

Stocke un fichier dans le cache, en évitant tous les filtres.

Liste de paramètres

filename

Chemin complet ou relatif vers un fichier PHP qui sera compilé et stocké dans le cache.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi

  • apc_bin_dumpfile() - Envoi une sortie binaire des fichiers fournis et des variables utilisateur vers un fichier spécifique
  • apc_bin_loadfile() - Charge une sortie binaire depuis un fichier dans le cache fichiers ou utilisateur d'APC


apc_dec

(PECL apc >= 3.1.1)

apc_decDécrémente un nombre stocké

Description

int apc_dec ( string $key [, int $step = 1 [, bool &$success ]] )

Décrémente un nombre stocké

Liste de paramètres

key

La clé de la valeur à décrémenter.

step

Le pas, ou la valeur à décrémenter.

success

Booléen optionnel pass/fail (par référence).

Valeurs de retour

Retourne la valeur courante de key en cas de succès, ou FALSE si une erreur survient

Exemples

Exemple #1 Exemple apc_dec()

<?php
echo "Faisons les choses bien"PHP_EOL;

apc_store('anumber'42);

echo 
apc_fetch('anumber'), PHP_EOL;

echo 
apc_dec('anumber'), PHP_EOL;
echo 
apc_dec('anumber'10), PHP_EOL;
echo 
apc_dec('anumber'10$success), PHP_EOL;

var_dump($success);

echo 
"Maintenant, un échec"PHP_EOLPHP_EOL;

apc_store('astring''foo');

$ret apc_dec('astring'1$fail);

var_dump($ret);
var_dump($fail);
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Faisons les choses bien
42
41
31
21
bool(true)

Maintenant, un échec
bool(false)
bool(false)

Voir aussi



apc_define_constants

(PECL apc >= 3.0.0)

apc_define_constants Définit un jeu de constantes pour la récupération et la définition en masse

Description

bool apc_define_constants ( string $key , array $constants [, bool $case_sensitive = true ] )

define() est notoirement lent. Vu que le principal bénéfice d'APC est d'augmenter les performances des applications/scripts, ce mécanisme est fourni pour améliorer le processus de la définition de constantes en masse. Cependant, cette fonction n'effectue aucune opération anticipée.

Pour une solution plus performante, essayez l'extension PECL » hidef.

Note: Pour effacer plusieurs constantes stockées (sans effacer tout le cache), un tableau vide peut être passé en tant que paramètre constants, ce qui effacera les valeurs stockées.

Liste de paramètres

key

La clé key correspondant au nom du jeu de constantes stockées. Ce paramètre key est utilisé pour récupérer les constantes stockées avec la fonction apc_load_constants().

constants

Un tableau associatif de paires constant_name => value. Le constant_name doit suivre les règles de nommage normales des constantes. value doit être évaluée comme une valeur scalaire.

case_sensitive

Le comportement par défaut pour les constantes est d'être déclarées en tenant compte de la casse ; i.e. CONSTANT et Constant représentent des valeurs différentes. Si ce paramètre est évalué à FALSE, les constantes seront déclarées en tant que symboles insensibles à la casse.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec apc_define_constants()

<?php
$constants 
= array(
    
'UN'   => 1,
    
'DEUX'   => 2,
    
'TROIS' => 3,
);
apc_define_constants('numbers'$constants);
echo 
UNDEUXTROIS;
?>

L'exemple ci-dessus va afficher :

123

Voir aussi



apc_delete_file

(PECL apc >= 3.1.1)

apc_delete_fileEfface un fichier depuis le cache opcode

Description

mixed apc_delete_file ( mixed $keys )

Efface les fichiers indiqués depuis le cache opcode

Liste de paramètres

keys

Les fichiers à effacer. Accepte une string, array de strings, ou un objet APCIterator.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient. Ou si keys est un array, alors un tableau vide est retourné en cas de succès, ou un tableau contenant les fichiers en échec sinon.

Exemples

Exemple #1 Exemple apc_delete_file()

<?php
$filename 
'file.php';

if (
apc_compile_file($filename)) {

    if (
apc_delete_file($filename)) {
        echo 
"Fichier $filename supprimé avec succès depuis le cache APC."PHP_EOL;
    }
}

if (
apc_compile_file($filename)) {

    if (
$good apc_delete_file(array($filename'donotexist.php'))) {
        
var_dump($good);
    }
}

$bad apc_delete_file('donotexist.php');
var_dump($bad);
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Fichier $filename supprimé avec succès depuis le cache APC
[Mon May 24 09:30:33 2010] [apc-warning] Could not stat file donotexist.php, unable to delete from cache. in /tmp/test.php on line 13.
array(1) {
  [0]=>
  string(14) "donotexist.php"
}
[Mon May 24 09:30:33 2010] [apc-warning] Could not stat file donotexist.php, unable to delete from cache. in /tmp/test.php on line 18.
bool(false)

Voir aussi



apc_delete

(PECL apc >= 3.0.0)

apc_delete Efface une variable stockée dans le cache

Description

mixed apc_delete ( string $key )

Efface une variable stockée dans le cache.

Liste de paramètres

key

La clé key utilisée pour stocker la valeur (avec apc_store()).

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec apc_delete()

<?php
$bar 
'BAR';
apc_store('foo'$bar);
apc_delete('foo');
// c'est évidemment inutile sous cette forme
?>

Voir aussi

  • apc_store() - Met en cache une variable dans le magasin
  • apc_fetch() - Récupère une variable stockée dans le cache



apc_exists

(PECL apc >= 3.1.4)

apc_existsVérifie si une clé APC existe

Description

mixed apc_exists ( mixed $keys )

Vérifie si une ou plusieurs clés APC existent.

Liste de paramètres

keys

Une string, ou un array de chaines qui contient les clés.

Valeurs de retour

Retourne TRUE si la clé existe, sinon FALSE Ou si un array était passé à keys, alors un tableau est retourné, il contient toutes les clés existantes, ou un tableau vide si aucune clé n'existait.

Exemples

Exemple #1 Exemple apc_exists()

<?php
$fruit  
'apple';
$veggie 'carrot';

apc_store('foo'$fruit);
apc_store('bar'$veggie);

if (
apc_exists('foo')) {
    echo 
"Foo existe: ";
    echo 
apc_fetch('foo');
} else {
    echo 
"Foo n'existe pas";
}

echo 
PHP_EOL;
if (
apc_exists('baz')) {
    echo 
"Baz existe.";
} else {
    echo 
"Baz n'existe pas";
}

echo 
PHP_EOL;

$ret apc_exists(array('foo''donotexist''bar'));
var_dump($ret);

?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Foo existe: apple
Baz n'existe pas
array(2) {
  ["foo"]=>
  bool(true)
  ["bar"]=>
  bool(true)
}

Voir aussi

  • apc_cache_info() - Récupère les informations du cache dans l'entrepôt APC
  • apc_fetch() - Récupère une variable stockée dans le cache


apc_fetch

(PECL apc >= 3.0.0)

apc_fetch Récupère une variable stockée dans le cache

Description

mixed apc_fetch ( mixed $key [, bool &$success ] )

Récupère une variable stockée dans le cache.

Liste de paramètres

key

La clé key utilisée pour stocker la valeur (avec apc_store()). Si un tableau est passé, chaque élément sera récupéré et retourné.

success

Vaut TRUE en cas de succès, et FALSE si une erreur survient.

Valeurs de retour

La variable stockée ou les variables du tableau en cas de succès, FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec apc_fetch()

<?php
$bar 
'BAR';
apc_store('foo'$bar);
var_dump(apc_fetch('foo'));
?>

L'exemple ci-dessus va afficher :

string(3) "BAR"

Historique

Version Description
3.0.17 Le paramètre success est ajouté.

Voir aussi



apc_inc

(PECL apc >= 3.1.1)

apc_incIncrémente un nombre stocké

Description

int apc_inc ( string $key [, int $step = 1 [, bool &$success ]] )

Incrémente un nombre stocké.

Liste de paramètres

key

La clé de la valeur à incrémenter.

step

Le pas, ou la valeur à incrémenter.

success

Booléen optionnel pass/fail (par référence).

Valeurs de retour

Retourne la valeur courante de key en cas de succès, ou FALSE si une erreur survient

Exemples

Exemple #1 Exemple apc_inc()

<?php
echo "Faisons les choses bien"PHP_EOL;

apc_store('anumber'42);

echo 
apc_fetch('anumber'), PHP_EOL;

echo 
apc_inc('anumber'), PHP_EOL;
echo 
apc_inc('anumber'10), PHP_EOL;
echo 
apc_inc('anumber'10$success), PHP_EOL;

var_dump($success);

echo 
"Maintenant, un échec"PHP_EOLPHP_EOL;

apc_store('astring''foo');

$ret apc_inc('astring'1$fail);

var_dump($ret);
var_dump($fail);
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Faisons les choses bien
42
43
53
63
bool(true)
Maintenant, un échec

bool(false)
bool(false)

Voir aussi



apc_load_constants

(PECL apc >= 3.0.0)

apc_load_constants Charge un jeu de constantes depuis le cache

Description

bool apc_load_constants ( string $key [, bool $case_sensitive = true ] )

Charge un jeu de constantes depuis le cache.

Liste de paramètres

key

Le nom du jeu de constantes (qui a été stocké avec la fonction apc_define_constants()) à récupérer.

case_sensitive

Le comportement par défaut pour les constantes est d'être déclarées en tenant compte de la casse ; i.e. CONSTANT et Constant représentent des valeurs différentes. Si ce paramètre est évalué à FALSE, les constantes seront déclarées en tant que symboles insensibles à la casse.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec apc_load_constants()

<?php
$constants 
= array(
    
'UN'   => 1,
    
'DEUX'   => 2,
    
'TROIS' => 3,
);
apc_define_constants('numbers'$constants);
apc_load_constants('numbers');
echo 
UNDEUXTROIS;
?>

L'exemple ci-dessus va afficher :

123

Voir aussi



apc_sma_info

(PECL apc >= 2.0.0)

apc_sma_info Récupère les informations d'allocation mémoire partagée d'APC

Description

array apc_sma_info ([ bool $limited = false ] )

Récupère les informations d'allocation mémoire partagée d'APC.

Liste de paramètres

limited

Lorsque défini à FALSE (défaut) apc_sma_info() retournera une information détaillée de chaque segment.

Valeurs de retour

Tableau de données d'allocation mémoire partagée ; FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec apc_sma_info()

<?php
print_r
(apc_sma_info());
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Array
(
    [num_seg] => 1
    [seg_size] => 31457280
    [avail_mem] => 31448408
    [block_lists] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [size] => 31448408
                            [offset] => 8864
                        )

                )

        )

)



apc_store

(PECL apc >= 3.0.0)

apc_store Met en cache une variable dans le magasin

Description

bool apc_store ( string $key , mixed $var [, int $ttl = 0 ] )
array apc_store ( array $values [, mixed $unused [, int $ttl = 0 ]] )

Met en cache une variable en magasin.

Note: Contrairement à tous les autres mécanismes de PHP, les variables stockées en utilisant la fonction apc_store() persistent entre les requêtes (tant que la valeur n'est pas effacée du cache).

Liste de paramètres

key

Stocke la variable en utilisant ce nom. Les clés key sont uniques, donc, stocker une seconde valeur avec la même clé effacera la valeur originale.

var

La variable à stocker.

ttl

Temps de vie : stocke la variable var dans le cache pour ttl secondes. Après que ttl soit passé, la variable stockée sera supprimée du cache (à la requête suivante). Si aucun ttl n'est fourni (ou si le ttl vaut 0), la valeur persistera tant qu'elle ne sera pas effacée manuellement du cache, ou si elle n'existe plus dans le cache (effacement, redémarrage, etc.).

values

Les noms comme clés, les variables comme valeurs.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient. La seconde syntaxe retourne un tableau avec les clés en erreur.

Exemples

Exemple #1 Exemple avec apc_store()

<?php
$bar 
'BAR';
apc_store('foo'$bar);
var_dump(apc_fetch('foo'));
?>

L'exemple ci-dessus va afficher :

string(3) "BAR"

Voir aussi

  • apc_add() - Met en cache une nouvelle variable dans le magasin de données
  • apc_fetch() - Récupère une variable stockée dans le cache
  • apc_delete() - Efface une variable stockée dans le cache


Sommaire

  • apc_add — Met en cache une nouvelle variable dans le magasin de données
  • apc_bin_dump — Récupère une sortie binaire des fichiers fournis et des variables utilisateur
  • apc_bin_dumpfile — Envoi une sortie binaire des fichiers fournis et des variables utilisateur vers un fichier spécifique
  • apc_bin_load — Charge une sortie binaire dans le cache fichiers ou utilisateur d'APC
  • apc_bin_loadfile — Charge une sortie binaire depuis un fichier dans le cache fichiers ou utilisateur d'APC
  • apc_cache_info — Récupère les informations du cache dans l'entrepôt APC
  • apc_cas — Met à jour une ancienne valeur par une nouvelle
  • apc_clear_cache — Efface le cache APC
  • apc_compile_file — Stocke un fichier dans le cache, en évitant tous les filtres
  • apc_dec — Décrémente un nombre stocké
  • apc_define_constants — Définit un jeu de constantes pour la récupération et la définition en masse
  • apc_delete_file — Efface un fichier depuis le cache opcode
  • apc_delete — Efface une variable stockée dans le cache
  • apc_exists — Vérifie si une clé APC existe
  • apc_fetch — Récupère une variable stockée dans le cache
  • apc_inc — Incrémente un nombre stocké
  • apc_load_constants — Charge un jeu de constantes depuis le cache
  • apc_sma_info — Récupère les informations d'allocation mémoire partagée d'APC
  • apc_store — Met en cache une variable dans le magasin


La classe APCIterator

(PECL apc >= 3.1.1)

Introduction

La classe APCIterator simplifie l'itération des caches APC volumineux. C'est utile car cela permet d'itérer sur les gros caches par pas tout en récupérant un nombre défini d'entrées par instance de verrou, ainsi les verrous sont libérés pour des activités ultérieures plutôt que de bloquer tout le cache pour récupérer (par défaut) 100 entrées. Aussi, l'utilisation d'expression régulière est plus réactive car l'implémentation a été faite au niveau C.

Synopsis de la classe

APCIterator implements Iterator , Traversable {
/* Méthodes */
public __construct ( string $cache [, mixed $search = null [, int $format [, int $chunk_size = 100 [, int $list ]]]] )
public mixed current ( void )
public int getTotalCount ( void )
public int getTotalHits ( void )
public int getTotalSize ( void )
public string key ( void )
public void next ( void )
public void rewind ( void )
public void valid ( void )
}

APCIterator::__construct

(PECL apc >= 3.1.1)

APCIterator::__constructConstruit un objet d'itération APCIterator

Description

public APCIterator::__construct ( string $cache [, mixed $search = null [, int $format [, int $chunk_size = 100 [, int $list ]]]] )

Construit un objet APCIterator.

Liste de paramètres

cache

Le type de cache, user ou file.

search

Une expression régulière PCRE pour établir la correspondance avec les clés APC. Peut être une string pour une expression régulière simple ou un array d'expressions régulières. Passez optionnellement NULL pour sauter la recherche.

format

Le format désiré, configuré à partir d'une ou plusieurs constantes APC_ITER_*.

chunk_size

La taille du segment. Doit être une valeur supérieure à 0. La valeur par défaut est 100.

list

Le type de liste. Passez APC_LIST_ACTIVE ou APC_LIST_DELETED.

Valeurs de retour

Un objet APCIterator en cas de succès, ou NULL si échec.

Exemples

Exemple #1 Exemple avec APCIterator::__construct()

<?php
foreach (new APCIterator('user''/^counter\./') as $counter) {
    echo 
"$counter[key]$counter[value]\n";
    
apc_dec($counter['key'], $counter['value']);
}
?>

Voir aussi



APCIterator::current

(PECL apc >= 3.1.1)

APCIterator::currentRécupère l'élément en cours

Description

public mixed APCIterator::current ( void )

Récupère l'élément en cours dans la pile APCIterator.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne l'élément en cours en cas de succès, ou FALSE si aucun élément supplémentaire n'existe ou en cas d'échec.

Voir aussi



APCIterator::getTotalCount

(PECL apc >= 3.1.1)

APCIterator::getTotalCountRécupère le nombre total d'éléments

Description

public int APCIterator::getTotalCount ( void )

Récupère le nombre total d'éléments.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Le nombre total d'éléments.

Voir aussi



APCIterator::getTotalHits

(PECL apc >= 3.1.1)

APCIterator::getTotalHitsRécupère le nombre total de cache hits

Description

public int APCIterator::getTotalHits ( void )

Récupère le nombre total de cache hits.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Le nombre de hits en cas de succès, ou FALSE si échec.

Voir aussi



APCIterator::getTotalSize

(PECL apc >= 3.1.1)

APCIterator::getTotalSizeRécupère la taille totale du cache

Description

public int APCIterator::getTotalSize ( void )

Récupère la taille totale du cache.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

La taille totale du cache.

Voir aussi



APCIterator::key

(PECL apc >= 3.1.1)

APCIterator::keyRécupère la clé de l'itérateur

Description

public string APCIterator::key ( void )

Récupère la clé de l'itérateur.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne la clé en cas de succès, ou FALSE si échec.

Voir aussi



APCIterator::next

(PECL apc >= 3.1.1)

APCIterator::nextDéplace le pointeur vers l'élément suivant

Description

public void APCIterator::next ( void )

Déplace le pointeur vers l'élément suivant.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



APCIterator::rewind

(PECL apc >= 3.1.1)

APCIterator::rewindRembobine l'itérateur

Description

public void APCIterator::rewind ( void )

Rembobine l'itérateur sur le premier élément.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Aucune valeur n'est retournée.

Voir aussi



APCIterator::valid

(PECL apc >= 3.1.1)

APCIterator::validVérifie si la position actuelle de l'itérateur est valide

Description

public void APCIterator::valid ( void )

Vérifie si la position actuelle de l'itérateur est valide

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne TRUE si la position actuelle de l'itérateur est valide, sinon FALSE.

Voir aussi


Sommaire




Débogueur PHP avancé


Introduction

APD est un débogueur PHP avancé. Il a été écrit afin de fournir des possibilités de profilage et de déboguage pour le code PHP, mais aussi la possibilité d'afficher une trace complète. APD supporte le déboguage interactif, mais, par défaut, il écrit les données dans des fichiers de traces. Il fournit également des événements lors de la journalisation à différents niveaux (incluant les appels aux fonctions, les arguments passés, le temps passé, etc...) pouvant être activés ou non pour des scripts particuliers.

Attention

APD est une extension Zend, modifiant la façon dont les appels aux fonctions, en interne, s'effectue, et donc, peut ne pas être compatible avec les autres extensions Zend (par exemple, Zend Optimizer).



Installation/Configuration

Sommaire


Pré-requis

Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible.



Installation

Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici : » http://pecl.php.net/package/apd.

Aucune bibliothèque DLL pour cette extension PECL n'est actuellement disponible. Reportez-vous à la section Compilation sous Windows.

Dans votre fichier INI, ajoutez les lignes suivantes:

zend_extension = /absolute/path/to/apd.so
apd.dumpdir = /absolute/path/to/trace/directory
apd.statement_tracing = 0

En fonction de votre compilation de PHP, la directive zend_extension peut prendre l'une des formes suivantes :

zend_extension              (non ZTS, non debug build)
zend_extension_ts           (    ZTS, non debug build)
zend_extension_debug        (non ZTS,     debug build)
zend_extension_debug_ts     (    ZTS,     debug build)



Building on Win32

Pour compiler APD sous Windows, vous devez installer un environnement de compilation PHP, tel que décrit sur http://php.net/ : en fait, vous avez besoin de Microsoft Visual C++, win32build.zip, bison/flex, et d'un peu de savoir-faire pour le faire fonctionner. De plus, assurez-vous que adp.dsp utilise les nouvelles lignes de format DOS; si c'est le format Unix, Microsoft Visual C++ va s'en plaindre.



Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Options de configuration APD
Nom Défaut Modifiable Historique
apd.dumpdir NULL PHP_INI_ALL  
apd.statement_tracing "0" PHP_INI_ALL Disponible depuis apd 0.9.
Pour plus de détails sur les modes PHP_INI_*, reportez-vous à Où une directive de configuration peut être modifiée.

Voici un éclaircissement sur l'utilisation des directives de configuration.

apd.dumpdir chaîne de caractères

Spécifie le dossier dans lequel APD écrit les fichiers de profilage. Vous pouvez spécifier un chemin absolu ou relatif.

Vous pouvez spécifier un dossier différent comme argument de apd_set_pprof_trace().

apd.statement_tracing booléen

Active ou désactive les traces à la ligne. En activant cette option (valeur de 1), l'application sera considérablement ralentie.



Types de ressources

Cette extension ne définit aucune ressource.




Constantes pré-définies

Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.

Constantes APD
Constante Valeur Description
FUNCTION_TRACE (entier) 1  
ARGS_TRACE (entier) 2  
ASSIGNMENT_TRACE (entier) 4  
STATEMENT_TRACE (entier) 8  
MEMORY_TRACE (entier) 16  
TIMING_TRACE (entier) 32  
SUMMARY_TRACE (entier) 64  
ERROR_TRACE (entier) 128  
PROF_TRACE (entier) 256  
APD_VERSION (chaîne de caractères) exemple : 1.0.2-dev  


Exemples

Sommaire


Comment utiliser PHP-APD dans vos scripts

  1. À la première ligne de votre script PHP, appelez la fonction apd_set_pprof_trace() afin de commencer à enregistrer la trace :

    <?php
    apd_set_pprof_trace
    ();
    ?>

    Vous pouvez insérer la ligne n'importe où dans votre script, mais si vous ne commencez pas à enregistrer la trace au début de votre script, vous désactiverez les données du profile qui pourraient vous mener à trouver un goulot d'étranglement.

  2. Maintenant, exécutez votre script. L'affichage sera écrit dans le fichier apd.dumpdir/pprof_pid.ext.

    Astuce

    Si vous utilisez la version CGI de PHP, vous devrez utiliser l'option "-e" afin d'activer les informations étendues d'APD. Par exemple : php -e -f script.php

  3. Pour afficher les données formatées du profil, exécutez la commande pprofp avec les options de tri et d'affichage de votre choix. Le formatage de la sortie ressemblera à :

    bash-2.05b$ pprofp -R /tmp/pprof.22141.0
    
    Trace for /home/dan/testapd.php
    Total Elapsed Time = 0.00
    Total System Time  = 0.00
    Total User Time    = 0.00
    
    
    Real         User        System             secs/    cumm
    %Time (excl/cumm)  (excl/cumm)  (excl/cumm) Calls    call    s/call  Memory Usage Name
    --------------------------------------------------------------------------------------
    100.0 0.00 0.00  0.00 0.00  0.00 0.00     1  0.0000   0.0009            0 main
    56.9 0.00 0.00  0.00 0.00  0.00 0.00     1  0.0005   0.0005            0 apd_set_pprof_trace
    28.0 0.00 0.00  0.00 0.00  0.00 0.00    10  0.0000   0.0000            0 preg_replace
    14.3 0.00 0.00  0.00 0.00  0.00 0.00    10  0.0000   0.0000            0 str_replace
    

    L'option -R utilisé dans cet exemple trie la table de profil par la colonne "Real Time", représentant le temps mis par le script pour exécuter une fonction donnée. La colonne "cumm call" montre le nombre de fois que la fonction a été appelée et la colonne "s/call", le nombre de secondes chaque appel à la fonction nécessite, en moyenne.

  4. Pour générer un fichier "calltree" que vous pourrez importer dans l'application d'analyse de profil KCacheGrind, exécutez la commande pprof2calltree.




Fonctions APD

Informations de contact

Si vous avez des commentaires, des corrections de bogues ou si vous voulez développer des améliorations pour cette extension, vous pouvez envoyer un message à » apd@mail.communityconnect.com. Toute aide est vraiment la bienvenue.


apd_breakpoint

(PECL apd >= 0.2)

apd_breakpointStoppe l'interpréteur et attend un CR depuis le socket

Description

bool apd_breakpoint ( int $debug_level )

apd_breakpoint() peut être utilisé pour stopper l'exécution de votre script PHP et attend les réponses depuis le socket connecté. Pour reprendre l'exécution du programme, appuyez juste sur la touche ENTRER (une ligne vide) ou entrez une commande PHP à exécuter.

Liste de paramètres

debug_level

Un entier qui est formé en ajoutant les constantes XXX_TRACE.

Il n'est pas recommandé d'utiliser MEMORY_TRACE. C'est très lent et ne semble pas être précis. ASSIGNMENT_TRACE n'est actuellement pas implémenté.

Pour activer toutes les traces fonctionnelles (TIMING, FUNCTIONS, ARGS SUMMARY (comme strace -c)), utilisez la valeur 99

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Session typique utilisant tcplisten

bash#tcplisten localhost 7777

APD - Advanced PHP Debugger Trace File
---------------------------------------------------------------------------
Process Pid (6118)
Trace Begun at Sun Mar 10 23:13:12 2002
---------------------------------------------------------------------------
(  0.000000): apd_set_session_trace called at /home/alan/Projects/project2/test. 
php:5
(  0.074824): apd_set_session_trace_socket() at /home/alan/Projects/project2/tes 
t.php:5 returned.  Elapsed (0.074824)
(  0.074918): apd_breakpoint() /home/alan/Projects/project2/test.php:7
              ++ argv[0] $(??) = 9
apd_breakpoint() at /home/alan/Projects/project2/test.php:7 returned.  Elapsed ( 
-2089521468.1073275368)
>\n
statement: /home/alan/Projects/project2/test.php:8
>\n
statement: /home/alan/Projects/project2/test.php:8
>\n
statement: /home/alan/Projects/project2/test.php:10
>apd_echo($i);
EXEC: apd_echo($i);
0
>apd_echo(serialize(apd_get_active_symbols()));
EXEC:  apd_echo(serialize(apd_get_active_symbols()));
a:47:{i:0;s:4:"PWD";i:1;s:10:"COLORFGBG";i:2;s:11:"XAUTHORITY";i:3;s:14:"
COLORTERM_BCE";i:4;s:9:"WINDOWID";i:5;s:14:"ETERM_VERSION";i:6;s:16:"SE
SSION_MANAGER";i:7;s:4:"PS1";i:8;s:11:"GDMSESSION";i:9;s:5:"USER";i:10;s:5:"
MAIL";i:11;s:7:"OLDPWD";i:12;s:5:"LANG";i:13;s:10:"COLORTERM";i:14;s:8:"DISP
LAY";i:15;s:8:"LOGNAME";i:16;s:6:"
>apd_echo(system('ls /home/mydir'));

>apd_continue(0);



apd_callstack

(PECL apd 0.2-0.4)

apd_callstackRetourne la pile d'appel courante dans un tableau

Description

array apd_callstack ( void )

apd_callstack() retourne la pile d'appel courante dans un tableau d'éléments.

Valeurs de retour

Un tableau contenant la pile d'appel courante.

Exemples

Exemple #1 Exemple avec apd_callstack()

<?php
print_r
(apd_callstack());
?>



apd_clunk

(PECL apd 0.2-0.4)

apd_clunkLance une alerte et un callstack

Description

void apd_clunk ( string $warning [, string $delimiter ] )

Cette fonction fonctionne de la même façon que son homologue Perl Carp::cluck. apd_clunk() lance une alerte et un callstack en utilisant le paramètre delimiter comme délimiteur.

Liste de paramètres

warning

L'alerte à lancer.

delimiter

Le délimiteur. Par défaut, <BR />.

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Exemple avec apd_clunk()

<?php
apd_clunk
("Quelques alertes""<br/>");
?>

Voir aussi



apd_continue

(PECL apd >= 0.2)

apd_continueRedémarre l'interpréteur

Description

bool apd_continue ( int $debug_level )

apd_continue() envoie une instruction via le socket pour redémarrer l'interpréteur.

Liste de paramètres

debug_level

Un entier qui est formé en ajoutant les constantes XXX_TRACE.

Il n'est pas recommandé d'utiliser MEMORY_TRACE. C'est très lent et ne semble pas être précis. ASSIGNMENT_TRACE n'est actuellement pas implémenté.

Pour activer toutes les traces fonctionnelles (TIMING, FUNCTIONS, ARGS SUMMARY (comme strace -c)), utilisez la valeur 99

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec apd_continue()

<?php
apd_continue
(0);
?>



apd_croak

(PECL apd 0.2-0.4)

apd_croakLance une erreur, un callstack et sort

Description

void apd_croak ( string $warning [, string $delimiter ] )

Cette fonction fonctionne comme son homologue Perl Carp::croak. apd_croak() lance une erreur, un callstack et sort.

Liste de paramètres

warning

L'alerte à lancer.

delimiter

Le délimiteur. Par défaut, <BR />.

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Exemple avec apd_croak()

<?php
apd_croak
("Quelques alertes","<P>");
?>

Voir aussi



apd_dump_function_table

(Unknown)

apd_dump_function_tableAffiche la table courante de fonction

Description

void apd_dump_function_table ( void )

apd_dump_function_table() affiche la table courante de fonction.

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Exemple avec apd_dump_function_table()

<?php
apd_dump_function_table
();
?>



apd_dump_persistent_resources

(PECL apd 0.2-0.4)

apd_dump_persistent_resourcesRetourne toutes les ressources persistantes dans un tableau

Description

array apd_dump_persistent_resources ( void )

apd_dump_persistent_resources() retourne toutes les ressources persistantes dans un tableau.

Valeurs de retour

Un tableau contenant toutes les ressources persistantes.

Exemples

Exemple #1 Exemple avec apd_dump_persistent_resources()

<?php
print_r
(apd_dump_persistent_resources());
?>

Voir aussi



apd_dump_regular_resources

(PECL apd 0.2-0.4)

apd_dump_regular_resourcesRetourne toutes les ressources régulières courantes dans un tableau

Description

array apd_dump_regular_resources ( void )

Retourne toutes les ressources régulières courantes dans un tableau.

Valeurs de retour

Un tableau contenant les ressources régulières courantes.

Exemples

Exemple #1 Exemple avec apd_dump_regular_resources()

<?php
print_r
(apd_dump_regular_resources());
?>

Voir aussi



apd_echo

(PECL apd >= 0.2)

apd_echoÉcrit dans le socket de déboguage

Description

bool apd_echo ( string $output )

apd_echo() envoie via le socket une demande d'information concernant le script exécuté.

Liste de paramètres

output

La variable de déboguage.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec apd_echo()

<?php
apd_echo
($i);
?>



apd_get_active_symbols

(PECL apd 0.2)

apd_get_active_symbolsRécupère un tableau contenant les noms des variables courantes de portée locale

Description

array apd_get_active_symbols ( void )

apd_get_active_symbols() récupère les noms de toutes les variables définies dans le contexte actif (et non leurs valeurs).

Valeurs de retour

Un tableau multidimensionnel contenant toutes les variables.

Exemples

Exemple #1 Exemple avec apd_get_active_symbols()

<?php
apd_echo
(apd_get_active_symbols());
?>



apd_set_pprof_trace

(PECL apd >= 0.2)

apd_set_pprof_traceDémarre la session de déboguage APD

Description

string apd_set_pprof_trace ([ string $dump_directory [, string $fragment = "pprof" ]] )

Démarre la session de déboguage dans le dossier dump_directory/pprof_{process_id}.

Liste de paramètres

dump_directory

Le dossier dans lequel le fichier sera écrit. S'il n'est pas fourni, la directive apd.dumpdir du php.ini sera utilisée.

fragment

Valeurs de retour

Retourne le chemin du fichier de destination.

Exemples

Exemple #1 Exemple avec apd_set_pprof_trace()

<?php
apd_set_pprof_trace
();
?>

Voir aussi



apd_set_session_trace_socket

(PECL apd >= 0.2)

apd_set_session_trace_socketDémarre la session de déboguage à distance

Description

bool apd_set_session_trace_socket ( string $tcp_server , int $socket_type , int $port , int $debug_level )

Cette fonction se connecte au serveur TCP (e.g. tcplisten) spécifié par l'IP ou le socket Unix (comme un fichier) et envoie des données de déboguage au socket.

Liste de paramètres

tcp_server

IP ou socket Unix (comme un fichier) du serveur TCP.

socket_type

Peut prendre les valeurs des constantes AF_UNIX, pour un socket à base de fichiers, ou APD_AF_INET, pour des sockets TCP/IP standard.

port

Vous pouvez utiliser n'importe quel port, mais les numéros de port les plus élevés sont plus recommandés que les moins élevés, qui risquent d'être utilisés par d'autres services du système.

debug_level

Un entier qui est formé en ajoutant les constantes XXX_TRACE.

Il n'est pas recommandé d'utiliser MEMORY_TRACE. C'est très lent et ne semble pas être précis. ASSIGNMENT_TRACE n'est actuellement pas implémenté.

Pour activer toutes les traces fonctionnelles (TIMING, FUNCTIONS, ARGS SUMMARY (comme strace -c)), utilisez la valeur 99

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec apd_set_socket_session_trace()

<?php
  apd_set_socket_session_trace
("127.0.0.1",APD_AF_INET,7112,0);
?>



apd_set_session_trace

(PECL apd 0.2-0.4)

apd_set_session_traceDémarre la session de déboguage APD

Description

void apd_set_session_trace ( int $debug_level [, string $dump_directory ] )

Démarre le déboguage de apd_dump_{process_id} dans le dossier dump_directory.

Liste de paramètres

debug_level

Un entier qui est formé en ajoutant les constantes XXX_TRACE.

Il n'est pas recommandé d'utiliser MEMORY_TRACE. C'est très lent et ne semble pas être précis. ASSIGNMENT_TRACE n'est actuellement pas implémenté.

Pour activer toutes les traces fonctionnelles (TIMING, FUNCTIONS, ARGS SUMMARY (comme strace -c)), utilisez la valeur 99

dump_directory

Le dossier dans lequel le fichier sera écrit. S'il n'est pas défini, la valeur du paramètre de configuration apd.dumpdir du php.ini sera utilisée.

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Exemple avec apd_set_session_trace()

<?php
apd_set_session_trace
(99);
?>



apd_set_session

(PECL apd 0.2-0.4)

apd_set_sessionModifie ou définit le degré de déboguage courant

Description

void apd_set_session ( int $debug_level )

apd_set_session() peut être utilisé pour augmenter ou diminuer le degré de déboguage dans un endroit particulier de votre application.

Liste de paramètres

debug_level

Un entier qui est formé en ajoutant les constantes XXX_TRACE.

Il n'est pas recommandé d'utiliser MEMORY_TRACE. C'est très lent et ne semble pas être précis. ASSIGNMENT_TRACE n'est actuellement pas implémenté.

Pour activer toutes les traces fonctionnelles (TIMING, FUNCTIONS, ARGS SUMMARY (comme strace -c)), utilisez la valeur 99

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Exemple avec apd_set_session()

<?php
apd_set_session
(9);
?>



override_function

(PECL apd >= 0.2)

override_functionSurcharge les fonctions intégrées

Description

bool override_function ( string $function_name , string $function_args , string $function_code )

override_function() surcharge les fonctions intégrées (les remplace dans la table des symboles).

Liste de paramètres

function_name

La fonction à surcharger.

function_args

Les arguments de la fonction, séparés par une virgule.

Habituellement, vous voudriez passer ce paramètre, tout comme le paramètre function_code, délimité par un guillemet simple. La raison pour laquelle on utilise un guillemet simple est pour protéger le nom de la variable lors de l'analyse, sinon, si vous utilisez des guillemets doubles, il devient nécessaire d'échapper le nom de la variable, e.g. \$votre_variable.

function_code

Le nouveau code pour la fonction.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec override_function()

<?php
override_function
('test''$a,$b''echo "DOING TEST"; return $a * $b;');
?>



rename_function

(PECL apd >= 0.2)

rename_functionRenomme une fonction intégrée dans la table des fonctions globales

Description

bool rename_function ( string $original_name , string $new_name )

rename_function() renomme une fonction intégrée dans la table des fonctions globales. Utile pour surcharger temporairement une fonction intégrée.

Liste de paramètres

original_name

Le nom original de la fonction.

new_name

Le nouveau nom pour la fonction original_name.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec rename_function()

<?php
rename_function
('mysql_connect''debug_mysql_connect' );
?>


Sommaire




Compilateur bytecode PHP


Introduction

Avertissement

Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez ce module à vos risques et périls.

Bcompiler a été écrit pour diverses raisons :

  • Pour encoder un script entier dans une application PHP propriétaire
  • Pour encoder quelques fonctions / classes dans une application PHP propriétaire
  • Pour activer la production d'applications php-gtk qui peuvent être utilisées dans des applications bureautiques, sans avoir besoin d'un php.exe.
  • Pour faire la transition facilement du PHP au C
La première des raisons est possible en utilisant les fonctions bcompiler_write_header(), bcompiler_write_file() et bcompiler_write_footer(). Les fichiers bytecode peuvent être écrits compressés ou non. Pour utiliser le bytecode généré, vous pouvez simplement l'inclure grâce aux instructions include ou require.

La deuxième raison est possible en utilisant les fonctions bcompiler_write_header(), bcompiler_write_class(), bcompiler_write_footer(), bcompiler_read(), et bcompiler_load(). Les fichiers bytecode peuvent être écrits compressés ou non. La fonction bcompiler_load() lit le fichier bytecode compressé, qui représente un tiers de la taille du fichier original.

Pour créer les fichiers de type EXE, bcompiler doit être utilisé avec un fichier sapi modifié ou une version de PHP qui a été compilé en tant que bibliothèque partagé. Dans ce cas, bcompiler lit le bytecode compressé depuis la fin du fichier EXE.

Bcompiler peut améliorer les performances d'environ 30% lors de l'utilisation de bytecode non compressé uniquement. Mais garder à l'esprit que le bytecode non compressé peut représenter une taille 5 fois plus large que le code source original. L'utilisation de bytecode compressé prendra moins de place, mais la décompression nécessite plus de temps que d'analyser le code source. De plus, Bcompiler n'effectue aucune optimisation du bytecode. Cette fonctionnalité devrait être ajoutée dans les futures versions...

D'un point de vue de la protection du code, l'on peut dire qu'il est absolument impossible de recréer le code source exact, tel qu'à l'origine, et sans les commentaires originaux. Cependant, il est possible de récupérer les données depuis un fichier bytecode Bcompiler - de ce fait, n'y incluez pas vos mots de passes personnels.



Installation/Configuration

Sommaire


Pré-requis

Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible.



Installation

Cette extension » PECL n'est pas intégrée à PHP.

Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici : » http://pecl.php.net/package/bcompiler.

Aucune bibliothèque DLL pour cette extension PECL n'est actuellement disponible. Reportez-vous à la section Compilation sous Windows.



Configuration à l'exécution

Cette extension ne définit aucune directive de configuration.



Types de ressources

Cette extension ne définit aucune ressource.




Constantes pré-définies

Cette extension ne définit aucune constante.



Fonctions bcompiler

Contact

Si vous avez des commentaires, des corrections de bogues, des améliorations ou que vous voulez aider à rendre cette extension meilleure, vous pouvez envoyer un message à » alan_k@php.net. Toute aide est vraiment la bienvenue.


bcompiler_load_exe

(PECL bcompiler >= 0.4)

bcompiler_load_exeLit et crée des classes depuis un fichier exe bcompiler

Description

bool bcompiler_load_exe ( string $filename )

Lit les données depuis le fichier exe bcompiler appelé filename et crée les classes à partir du bytecode.

Liste de paramètres

filename

Le chemin vers le fichier exe, sous la forme d'une chaîne de caractères.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec bcompiler_load_exe()

<?php

bcompiler_load_exe
("/tmp/example.exe");
print_r(get_defined_classes());

?>

Notes

Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Voir aussi

  • bcompiler_load() - Lit et crée les classes depuis un fichier compressé en bzip2



bcompiler_load

(PECL bcompiler >= 0.4)

bcompiler_loadLit et crée les classes depuis un fichier compressé en bzip2

Description

bool bcompiler_load ( string $filename )

Lit les données depuis le fichier compressé en bzip2 filename et crée les classes depuis le bytecode.

Liste de paramètres

filename

Le chemin vers le fichier compressé avec bzip2, sous la forme d'une chaîne de caractères.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec bcompiler_load()

<?php

bcompiler_load
("/tmp/example");

print_r(get_defined_classes());

?>

Notes

Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Note:

Utiliser les instructions include ou require pour analyser les bytecodes : c'est plus portable et plus commode que d'utiliser cette fonction.

Notez que cette fonction n'exécute pas le corps du script contenu dans le fichier bytecode.

Voir aussi



bcompiler_parse_class

(PECL bcompiler >= 0.4)

bcompiler_parse_classLit le bytecode d'une classe et revient à une fonction utilisateur

Description

bool bcompiler_parse_class ( string $class , string $callback )

Lit le bytecode d'une classe et revient à une fonction utilisateur.

Liste de paramètres

class

Le nom de la classe, sous la forme d'une chaîne de caractères.

callback

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec bcompiler_parse_class()

<?php

function readByteCodes($data) {
    
print_r($data);
}

bcompiler_parse_class("DB","readByteCodes");

?>

Notes

Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Note:

Cette fonction a été supprimée de bcompiler et n'est plus disponible depuis bcompiler 0.5.



bcompiler_read

(PECL bcompiler >= 0.4)

bcompiler_readLit et crée les classes depuis un pointeur de fichier

Description

bool bcompiler_read ( resource $filehandle )

Lit les données depuis un fichier ouvert représenté par la ressource filehandle et crée les classes depuis le bytecode.

Liste de paramètres

filehandle

Une ressource de fichier retournée par la fonction fopen().

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec bcompiler_read()

<?php
$fh 
fopen("/tmp/example","r");
bcompiler_read($fh);
fclose($fh);
print_r(get_defined_classes());

?>

Notes

Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Note:

Utiliser les instructions include ou require pour analyser les bytecodes : c'est plus portable et plus commode que d'utiliser cette fonction.

Notez que cette fonction n'exécute pas le corps du script contenu dans le fichier bytecode.



bcompiler_write_class

(PECL bcompiler >= 0.4)

bcompiler_write_classÉcrit une classe définie en bytecode

Description

bool bcompiler_write_class ( resource $filehandle , string $className [, string $extends ] )

Lit le bytecode d'une classe existante nommée className depuis PHP et l'écrit dans le fichier ouvert désigné par la ressource filehandle.

Liste de paramètres

filehandle

Une ressource de fichier retournée par la fonction fopen().

className

Le nom de la classe, sous la forme d'une chaîne de caractères.

extends

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec bcompiler_write_class()

<?php
$fh 
fopen("/tmp/example","w");
bcompiler_write_header($fh);
bcompiler_write_class($fh,"DB");
// vous devez écrire DB_common avant DB_mysql, car DB_mysql étend DB_common.
bcompiler_write_class($fh,"DB_common");
bcompiler_write_class($fh,"DB_mysql");
bcompiler_write_footer($fh);
fclose($fh);

?>

Notes

Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Note:

Cette fonction n'effectue pas de vérification sur les dépendances, assurez-vous donc d'écrire les classes dans l'ordre pour éviter d'avoir une alerte du genre 'undefined class' lorsque vous les chargerez.

Voir aussi



bcompiler_write_constant

(PECL bcompiler >= 0.5)

bcompiler_write_constantÉcrit une constante définie comme bytecode

Description

bool bcompiler_write_constant ( resource $filehandle , string $constantName )

Lit le bytecode depuis PHP pour une constante existante constantName et écrit le bytecode dans le fichier ouvert désigné par filehandle.

Liste de paramètres

filehandle

Une ressource de fichier retournée par la fonction fopen().

constantName

Le nom de la constante définie, sous la forme d'une chaîne de caractères.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec bcompiler_write_constant()

<?php
define
("MODULE_MAX"30);

$fh fopen("/tmp/example","w");
bcompiler_write_header($fh);
bcompiler_write_constant($fh,"MODULE_MAX");
bcompiler_write_footer($fh);
fclose($fh);

?>

Notes

Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Voir aussi




bcompiler_write_file

(PECL bcompiler >= 0.6)

bcompiler_write_fileÉcrit un code source PHP sous forme de bytecode

Description

bool bcompiler_write_file ( resource $filehandle , string $filename )

Cette fonction compile le fichier filename en bytecodes, et écrit le résultat dans le fichier filename.

Liste de paramètres

filehandle

Une ressource de fichier retournée par la fonction fopen().

filename

Le chemin vers le fichier source, sous la forme d'une chaîne de caractères.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec bcompiler_write_file()

<?php
$fh 
fopen("example.phb""w");
bcompiler_write_header($fh);
bcompiler_write_file($fh"example.php");
bcompiler_write_footer($fh);
fclose($fh);
/* Ce qui suit doit être équivalent :
include "example.php";
   et
include "example.phb";
*/
?>

Notes

Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Voir aussi




bcompiler_write_function

(PECL bcompiler >= 0.5)

bcompiler_write_functionÉcrit une fonction définie sous forme de bytecode

Description

bool bcompiler_write_function ( resource $filehandle , string $functionName )

Lit le bytecode d'une fonction existante depuis PHP et l'écrit dans le fichier désigné par la ressource de fichier filehandle. L'ordre n'est pas important (e.g. si la fonction b utilise la fonction a et que vous compilez l'exemple ci-dessous, cela fonctionnera très bien).

Liste de paramètres

filehandle

Une ressource de fichier retournée par la fonction fopen().

functionName

Le nom de la fonction, sous la forme d'une chaîne de caractères.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec bcompiler_write_function()

<?php
$fh 
fopen("/tmp/example","w");
bcompiler_write_header($fh);
bcompiler_write_function($fh,"my_function_a");
bcompiler_write_function($fh,"my_function_b");
bcompiler_write_footer($fh);
fclose($fh);
?>

Notes

Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Voir aussi



bcompiler_write_functions_from_file

(PECL bcompiler >= 0.5)

bcompiler_write_functions_from_fileÉcrit toutes les fonctions définies dans un fichier sous forme de bytecode

Description

bool bcompiler_write_functions_from_file ( resource $filehandle , string $fileName )

Recherche toutes les fonctions déclarées dans le fichier nommé fileName et écrit leurs bytecodes correspondants dans le fichier désigné par la ressource filehandle.

Liste de paramètres

filehandle

Une ressource de fichier retournée par la fonction fopen().

fileName

Le fichier à compiler. Souvenez-vous de toujours inclure ou requérir les fichiers que vous tentez de compiler.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec bcompiler_write_functions_from_file()

<?php
require('module.php');

$fh fopen("/tmp/example","w");
bcompiler_write_header($fh);
bcompiler_write_functions_from_file($fh,'module.php');
bcompiler_write_footer($fh);
fclose($fh);

?>

Notes

Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Voir aussi



bcompiler_write_header

(PECL bcompiler >= 0.3)

bcompiler_write_headerÉcrit l'en-tête bcompiler

Description

bool bcompiler_write_header ( resource $filehandle [, string $write_ver ] )

Écrit l'en-tête bcompiler.

Liste de paramètres

filehandle

Une ressource de fichier retournée par la fonction fopen().

write_ver

Peut être utilisé pour écrire le bytecode dans un format utilisé précédemment, vous pouvez donc l'utiliser avec les anciennes versions de bcompiler.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec bcompiler_write_header()

<?php
$fh 
fopen("/tmp/example","w");
bcompiler_write_header($fh);
bcompiler_write_class($fh,"DB");
bcompiler_write_footer($fh);
fclose($fh);
?>

Notes

Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Voir aussi



bcompiler_write_included_filename

(PECL bcompiler >= 0.5)

bcompiler_write_included_filenameÉcrit un fichier inclus en tant que bytecode

Description

bool bcompiler_write_included_filename ( resource $filehandle , string $filename )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Notes

Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.


Sommaire




Gestion des erreurs et des journaux


Introduction

Voici des fonctions gérant les erreurs et les journaux. Elles vous permettent de définir vos propres règles de gestion des erreurs, mais aussi la façon dont les erreurs sont enregistrées ; ceci afin de répondre à vos besoins particuliers.

Avec les fonctions de journal, vous pouvez envoyer des messages directement à d'autres machines (ou des emails avec une passerelles), vers les logs du système, etc..., ainsi, vous pouvez sélectionner les messages et surveiller les parties les plus importantes de vos applications et de vos sites web.

Les fonctions sur le rapport d'erreurs vous permettent de personnaliser le degré et les erreurs désirées, en les catégorisant comme simple avertissement jusqu'à l'exécution de fonctions personnalisées lorsque des erreurs surviennent.



Installation/Configuration

Sommaire


Pré-requis

Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible.



Installation

Il n'y pas d'installation nécessaire pour utiliser ces fonctions, elles font parties du coeur de PHP.



Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Options de configuration pour la gestion d'erreurs
Nom Défaut Modifiable Historique
error_reporting NULL PHP_INI_ALL  
display_errors "1" PHP_INI_ALL  
display_startup_errors "0" PHP_INI_ALL  
log_errors "0" PHP_INI_ALL  
log_errors_max_len "1024" PHP_INI_ALL Disponible depuis PHP 4.3.0.
ignore_repeated_errors "0" PHP_INI_ALL Disponible depuis PHP 4.3.0.
ignore_repeated_source "0" PHP_INI_ALL Disponible depuis PHP 4.3.0.
report_memleaks "1" PHP_INI_ALL Disponible depuis PHP 4.3.0.
track_errors "0" PHP_INI_ALL  
html_errors "1" PHP_INI_ALL PHP_INI_SYSTEM in PHP <= 4.2.3.
xmlrpc_errors "0" PHP_INI_SYSTEM Disponible depuis PHP 4.1.0.
xmlrpc_error_number "0" PHP_INI_ALL Disponible depuis PHP 4.1.0.
docref_root "" PHP_INI_ALL Disponible depuis PHP 4.3.0.
docref_ext "" PHP_INI_ALL Disponible depuis PHP 4.3.2.
error_prepend_string NULL PHP_INI_ALL  
error_append_string NULL PHP_INI_ALL  
error_log NULL PHP_INI_ALL  
Pour plus de détails sur les modes PHP_INI_*, reportez-vous à Où une directive de configuration peut être modifiée.

Voici un éclaircissement sur l'utilisation des directives de configuration.

error_reporting integer

Fixe le niveau d'erreur. Ce paramètre est un entier, représentant un champ de bits. Ajoutez les valeurs suivantes pour choisir le niveau que vous désirez, telles que décrites dans la section Constantes pré-définies, et dans le fichier php.ini. Pour modifier cette configuration durant l'exécution du script, utilisez la fonction error_reporting(). Voyez aussi la directive display_errors.

En PHP 4 et PHP 5, la configuration par défaut est E_ALL & ~E_NOTICE. Elle montre toutes les erreurs, sauf les E_NOTICE. Il est recommandé de les afficher durant le développement.

Note:

Activer le rapport d'erreur de niveau E_NOTICE durant le développement a des avantages. En terme de déboguage, les message d'alertes vous signalent des bogues potentiels dans votre code. Par exemple, l'utilisation de valeurs non initialisées est signalée. Il est aussi plus pratique pour trouver des coquilles, et, ainsi, gagner du temps. Les messages NOTICE vous signaleront aussi les mauvaises pratiques de codage. Par exemple $arr[item] doit toujours être écrit $arr['item'] car PHP va considérer "item" comme une constante, au premier abord. Si cette constante n'est pas définie, alors il va l'utiliser comme une chaîne.

Note:

En PHP 5, un nouveau niveau d'erreur nommé E_STRICT est disponible. Comme E_STRICT n'est pas inclus dans E_ALL, vous devez explicitement activer ce niveau d'erreur. Activer E_STRICT pendant le développement peut être bénéfique. Les messages STRICT vous aideront à utiliser la dernière et meilleure suggestion de méthode de codage, par exemple, vous alertera de l'utilisation de fonctions non recommandées.

Note: Les constantes PHP en dehors de PHP

L'utilisation des constantes PHP en dehors de PHP, comme dans le fichier httpd.conf, n'a pas de signification utile mise à part dans les cas où des valeurs entières sont nécessaires. Et depuis que les niveaux d'erreurs ont été ajoutés, la valeur maximale (pour E_ALL) devrait changer. Donc, à la place de E_ALL, utilisez plutôt une valeur plus grande pour couvrir tous les octets, une valeur numérique comme 2147483647 (incluant toutes les erreurs, et non juste les erreurs de type E_ALL).

display_errors string

Cette directive détermine si les erreurs doivent être affichées à l'écran ou non.

La valeur "stderr" envoie les erreurs vers stderr plutôt que vers stdout. La valeur est disponible depuis PHP 5.2.4. Dans les anciennes versions, cette directive était du type boolean.

Note:

C'est une directive nécessaire en développement mais qui ne doit jamais être utilisée sur un système en production. (e.g. systèmes connectés à Internet).

Note:

Bien que display_errors peut être défini en cours d'exécution (avec la fonction ini_set()), il n'aura aucun effet si le script a des erreurs fatales, car l'action désirée au moment de l'exécution ne sera pas exécutée.

display_startup_errors boolean

Même si display_errors est activé, des erreurs peuvent survenir lors de la séquence de démarrage de PHP, et ces erreurs sont cachées. Avec cette option, vous pouvez les afficher, ce qui est recommandé pour le déboguage. En dehors de ce cas, il est fortement recommandé de laisser display_startup_errors à off.

log_errors boolean

Indique où les messages d'erreur générés doivent être écrits : dans l'historique du serveur ou dans error_log. Cette fonction est spécifique aux serveurs.

Note:

Il est recommandé d'utiliser l'historique d'erreur, plutôt que d'afficher les erreurs sur les sites de production.

log_errors_max_len integer

Configure la taille maximale des erreurs qui seront enregistrées dans l'historique, en kilo octets. Dans les informations de error_log, l'origine est ajoutée. La valeur par défaut est de 1024. 0 signifie qu'il n'y a pas de limite de taille. Cette longueur est appliquée pour enregistrer dans l'historique les erreurs, afficher les erreurs et également à $php_errormsg.

Lorsqu'un entier est utilisé, sa valeur est mesurée en octets. Vous pouvez également utiliser la notation sténographique comme décrit dans cette entrée de la FAQ..
ignore_repeated_errors boolean

Ne pas enregistrer des messages répétitifs. Les erreurs répétées doivent survenir au même moment, à la même ligne et depuis le même fichier de script, à moins que ignore_repeated_source soit défini à TRUE.

ignore_repeated_source boolean

Ignore la source du message lors des messages répétés. Lorsque vous avez configuré cette option à On, vous n'enregistrerez pas les erreurs répétées provenant de fichiers et lignes de code différents.

report_memleaks boolean

Si ce paramètre est défini à On (par défaut), il affichera un rapport de fuite mémoire détectée par le gestionnaire de mémoire Zend. Ce rapport sera envoyé à stderr sur les plate-formes Posix. Sous Windows, il sera envoyé au débogueur en utilisant OutputDebugString(), et pourra être lu avec des outils comme » DbgView. Ce paramètre n'a d'effet que lors d'une compilation de débogage, et si error_reporting inclut E_WARNING dans sa liste autorisée.

track_errors boolean

Si cette option est activée, le dernier message d'erreur sera placé dans la variable $php_errormsg.

html_errors boolean

Désactive les balises HTML dans les messages d'erreurs. Le nouveau format d'erreurs HTML fournit des messages avec liens hypertexte, qui redirige l'utilisateur vers la documentation de l'erreur ou de la fonction. Ces références sont affectées par docref_root et docref_ext.

xmlrpc_errors boolean

Désactive le rapport normal d'erreur et formate les erreurs comme des messages d'erreur XML-RPC.

xmlrpc_error_number integer

Utilisé comme valeur de l'élément XML-RPC faultcode.

docref_root string

Le nouveau format d'erreur contient une référence à une page décrivant l'erreur, ou la fonction ayant causé l'erreur. Pour le manuel, vous pouvez télécharger ce dernier dans votre langue, et configurer cette option pour qu'elle pointe sur lui. Si votre copie du manuel est accessible à "/manual/", vous pouvez simplement utiliser docref_root=/manual/. De plus, vous devez configurer docref_ext pour qu'elle corresponde aux extensions de votre manuel. docref_ext=.html. Il est possible d'utiliser des références externes. Par exemple, vous pouvez utiliser docref_root=http://manual/en/ ou docref_root="http://landonize.it/?how=url&theme=classic&filter=Landon&url=http%3A%2F%2Fwww.php.net%2F"

La plupart du temps, vous utilisez l'option docref_root avec un slash a la fin ("/"). Mais ce n'est pas obligatoire, comme le montre le second exemple ci-dessus.

Note:

Cette directive est destiné à vous aider dans votre développement en rendant facile la consultation de la description d'une fonction. Ne jamais l'utiliser sur un système de production (e.g. système connecté à Internet).

docref_ext string

Voir aussi docref_root.

Note:

La valeur de docref_ext doit commencer par un point ".".

error_prepend_string string

La chaîne à placer avant les messages d'erreur.

error_append_string string

La chaîne à placer après les messages d'erreur.

error_log string

Nom du fichier où seront enregistrées les erreurs. Le fichier doit être accessible en écriture par l'utilisateur exécutant le serveur web. Si la valeur spéciale syslog est utilisée, les erreurs seront envoyées au système d'historique du serveur. Sous Unix, cela correspond à syslog(3) et sous Windows NT, à l'historique d'événement. L'historique n'est pas supporté sous Windows 95. Voir aussi : syslog(). Si cette directive n'est pas fixée, les erreurs sont envoyées au journal d'erreurs SAPI. Par exemple, s'il s'agit d'une erreur de journal dans Apache ou stderr dans CLI.



Types de ressources

Cette extension ne définit aucune ressource.




Constantes pré-définies

Les constantes listées ici sont toujours disponibles dans PHP.

Note: Vous pouvez utiliser ces constantes dans le fichier php.ini mais pas hors de PHP, comme dans le fichier httpd.conf, où vous devez utiliser les valeurs des champs de bits.

Erreurs et historique
Valeur Constante Description Note
1 E_ERROR (entier) Les erreurs sont aussi affichées par défaut, et l'exécution du script est interrompue. Elles indiquent des erreurs qui ne peuvent pas être ignorées, comme des problèmes d'allocation de mémoire, par exemple.  
2 E_WARNING (entier) Les alertes sont affichées par défaut, mais n'interrompent pas l'exécution du script. Elles indiquent un problème qui doit être intercepté par le script durant l'exécution du script. Par exemple, appeler ereg() avec une expression rationnelle invalide.  
4 E_PARSE (entier) Les erreurs d'analyse ne doivent être générées que par l'analyseur. Elles ne sont citées ici que dans le but d'être exhaustif.  
8 E_NOTICE (entier) Les remarques ne sont pas affichées par défaut, et indiquent que le script a rencontré quelque chose qui peut être une erreur, mais peut aussi être un événement normal dans la vie du script. Par exemple, essayer d'accéder à une valeur qui n'a pas été déclarée, ou appeler stat() sur un fichier qui n'existe pas.  
16 E_CORE_ERROR (entier) Elles sont similaires aux erreurs E_ERROR, mais elles sont générées par le code source de PHP. Les fonctions ne doivent pas générer ce genre d'erreur.  
32 E_CORE_WARNING (entier) Elles sont similaires à E_WARNING, mais elles sont générées par le code source de PHP. Les fonctions ne doivent pas générer ce genre d'erreur.  
64 E_COMPILE_ERROR (entier) Elles sont similaires à E_ERROR, mais elles sont générées par le moteur Zend. Les fonctions ne doivent pas générer ce genre d'erreur.  
128 E_COMPILE_WARNING (entier) Elles sont similaires à E_WARNING, mais elles sont générées par le moteur Zend. Les fonctions ne doivent pas générer ce genre d'erreur.  
256 E_USER_ERROR (entier) Message d'erreur généré par l'utilisateur. Comparable à E_ERROR. Elle est générée par le programmeur en PHP par l'utilisation de la fonction trigger_error(). Les fonctions de PHP ne doivent pas générer ce genre d'erreur.  
512 E_USER_WARNING (entier) Message d'erreur généré par l'utilisateur. Comparable à E_WARNING. Elle est générée par le programmeur en PHP par l'utilisation de la fonction trigger_error(). Les fonctions de PHP ne doivent pas générer ce genre d'erreur.  
1024 E_USER_NOTICE (entier) Message d'erreur généré par l'utilisateur. Comparable à E_NOTICE. Elle est générée par le programmeur en PHP par l'utilisation de la fonction trigger_error(). Les fonctions de PHP ne doivent pas générer ce genre d'erreur.  
2048 E_STRICT (entier) Permet d'obtenir des suggestions de PHP pour modifier votre code, assurant ainsi une meilleure interopérabilité et compatibilité de celui-ci. Depuis PHP 5 mais ne fais pas parti de E_ALL jusqu'à PHP 5.4.0
4096 E_RECOVERABLE_ERROR (entier) Erreur fatale qui peut être captée. Ceci indique qu'une erreur probablement dangereuse s'est produite, mais n'a pas laissé le moteur Zend dans un état instable. Si l'erreur n'est pas attrapée par un gestionnaire d'erreur défini par l'utilisateur (voyez aussi set_error_handler(), l'application arrête prématurément comme si cela était une E_ERROR. Depuis PHP 5.2.0
8192 E_DEPRECATED (entier) Alertes d'exécution. Activer cette option pour recevoir des alertes sur les portions de votre code qui pourraient ne pas fonctionner avec les futures versions. Depuis PHP 5.3.0
16384 E_USER_DEPRECATED (entier) Message d'alerte généré par l'utilisateur. Fonctionne de la même façon que E_DEPRECATED, mise à part que le message est généré par votre code PHP en utilisant la fonction trigger_error(). Depuis PHP 5.3.0
32767 E_ALL (entier) Toutes les erreurs et alertes supportées sauf le niveau E_STRICT avant la version 5.4.0 de PHP. 32767 en PHP 5.4.x, 30719 en PHP 5.3.x, 6143 en PHP 5.2.x, et 2047 auparavant

Les valeurs ci-dessus (numérique ou symbolique) sont utilisées pour constituer des champs de bits, qui spécifient le niveau de rapport d'erreur. Vous pouvez utiliser les opérateurs de bits pour combiner ces valeurs pour en faire des masques qui filtrent certaines erreurs. Notez bien que seuls '|', '~', '!', '^' et '&' seront compris dans le fichier php.ini.



Exemples

Ci-dessous, vous trouverez un exemple de gestion des erreurs par PHP. Il y est défini un gestionnaire d'erreur, qui enregistre les informations dans un fichier (au format XML), et envoie un courriel au développeur si l'erreur est critique.

Exemple #1 Gestion d'erreurs avancées en PHP

<?php
// Nous allons faire notre propre gestion
error_reporting(0);

// Fonction spéciale de gestion des erreurs
function userErrorHandler($errno$errmsg$filename$linenum$vars)
{
    
// Date et heure de l'erreur
    
$dt date("Y-m-d H:i:s (T)");

    
// Définit un tableau associatif avec les chaînes d'erreur
    // En fait, les seuls niveaux qui nous interessent
    // sont E_WARNING, E_NOTICE, E_USER_ERROR,
    // E_USER_WARNING et E_USER_NOTICE
    
$errortype = array (
                
E_ERROR              => 'Erreur',
                
E_WARNING            => 'Alerte',
                
E_PARSE              => 'Erreur d\'analyse',
                
E_NOTICE             => 'Note',
                
E_CORE_ERROR         => 'Core Error',
                
E_CORE_WARNING       => 'Core Warning',
                
E_COMPILE_ERROR      => 'Compile Error',
                
E_COMPILE_WARNING    => 'Compile Warning',
                
E_USER_ERROR         => 'Erreur spécifique',
                
E_USER_WARNING       => 'Alerte spécifique',
                
E_USER_NOTICE        => 'Note spécifique',
                
E_STRICT             => 'Runtime Notice',
                
E_RECOVERABLE_ERROR => 'Catchable Fatal Error'
                
);
    
// Les niveaux qui seront enregistrés
    
$user_errors = array(E_USER_ERRORE_USER_WARNINGE_USER_NOTICE);
    
    
$err "<errorentry>\n";
    
$err .= "\t<datetime>" $dt "</datetime>\n";
    
$err .= "\t<errornum>" $errno "</errornum>\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";
    
    
// sauvegarde de l'erreur, et mail si c'est critique
    
error_log($err3"/usr/local/php4/error.log");
    if (
$errno == E_USER_ERROR) {
        
mail("phpdev@example.com","Critical User Error",$err);
    }
}


function 
distance($vect1$vect2)
{
    if (!
is_array($vect1) || !is_array($vect2)) {
        
trigger_error("Incorrect parameters, arrays expected"E_USER_ERROR);
        return 
NULL;
    }

    if (
count($vect1) != count($vect2)) {
        
trigger_error("Vectors need to be of the same size"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("Coordinate $i in vector 1 is not a number, using zero"
                            
E_USER_WARNING);
            
$c1 0.0;
        }
        if (!
is_numeric($c2)) {
            
trigger_error("Coordinate $i in vector 2 is not a number, using zero"
                            
E_USER_WARNING);
            
$c2 0.0;
        }
        
$d += $c2*$c2 $c1*$c1;
    }
    return 
sqrt($d);
}

$old_error_handler set_error_handler("userErrorHandler");

// constante non définie, qui génère une alerte
$t I_AM_NOT_DEFINED;

// définition de quelques vecteurs
$a = array (23"foo");
$b = array (5.54.3, -1.6);
$c = array (1, -3);

// génère une erreur utilisateur
$t1 distance ($c$b)."\n";

// génère une erreur utilisateur
$t2 distance ($b"i am not an array")."\n";

// Génère une alerte
$t3 distance ($a$b)."\n";

?>



Fonctions sur la gestion des erreurs

Voir aussi

Voir aussi la fonction syslog().


debug_backtrace

(PHP 4 >= 4.3.0, PHP 5)

debug_backtraceGénère le contexte de déboguage

Description

array debug_backtrace ([ int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT [, int $limit = 0 ]] )

debug_backtrace() génère un contexte de déboguage PHP.

Liste de paramètres

options

Depuis PHP 5.3.6, ce paramètre est un masque d'options suivantes :

Options pour la fonction debug_backtrace()
DEBUG_BACKTRACE_PROVIDE_OBJECT Si l'on doit ou non peupler l'index "object".
DEBUG_BACKTRACE_IGNORE_ARGS Si l'on doit ou non omettre l'index "args" et donc tous les arguments de la fonction/méthode pour économiser de la mémoire.
Avant PHP 5.3.6, les seules valeurs reconnues sont TRUE ou FALSE, ce qui revenait à, respectivement, définir ou non l'option DEBUG_BACKTRACE_PROVIDE_OBJECT.

limit

Depuis 5.4.0, ce paramètre peut être utilisé pour limiter le nombre de trames dans la pile retournée. Par défaut (limit=0), la fonction retourne toutes les trames de la pile.

Valeurs de retour

Retourne un tableau de tableaux associatifs. Les éléments de retour possibles sont les suivants :

Éléments possibles de retour de la fonction debug_backtrace()
Nom Type Description
function chaîne de caractères Le nom de la fonction courante. Voir aussi __FUNCTION__.
line entier Le numéro de la ligne courante. Voir aussi __LINE__.
file chaîne de caractères Le nom du fichier courant. Voir aussi __FILE__.
class chaîne de caractères Le nom de la classe courante. Voir aussi __CLASS__.
object objet L'objet courant.
type chaîne de caractères Le type de classe courante. Si une méthode est appelée, "->" est retourné. Si une méthode statique est appelée, "::" est retourné. Si une fonction est appelée, rien ne sera retourné.
args tableau Si à l'intérieur d'une fonction, ceci liste des arguments. Si dans un fichier inclus, ceci liste des fichiers inclus.

Historique

Version Description
5.4.0 Le paramètre optionnel limit a été ajouté.
5.3.6 Le paramètre provide_object a été modifié en options et d'autres options DEBUG_BACKTRACE_IGNORE_ARGS ont été ajoutées.
5.2.5 Ajout du paramètre optionnel provide_object.
5.1.1 Ajout de l'objet courant comme élément de retour possible.

Exemples

Exemple #1 Exemple avec debug_backtrace()

<?php
// filename: /tmp/a.php

function a_test($str)
{
  echo 
"\nHi: $str";
  
var_dump(debug_backtrace());
}

a_test('friend');
?>

<?php
// filename: /tmp/b.php
include_once '/tmp/a.php';
?>

Résultat de l'exécution de /tmp/b.php :

Hi: friend
array(2) {
  [0]=>
    array(4) {
      ["file"] => string(10) "/tmp/a.php"
      ["line"] => int(10)
      ["function"] => string(6) "a_test"
      ["args"]=>
        array(1) {
          [0] => &string(6) "friend"
        }
    }
  [1]=>
    array(4) {
      ["file"] => string(10) "/tmp/b.php"
      ["line"] => int(2)
      ["args"] =>
        array(1) {
          [0] => string(10) "/tmp/a.php"
        }
      ["function"] => string(12) "include_once"
    }
}

Voir aussi



debug_print_backtrace

(PHP 5)

debug_print_backtrace Affiche la pile d'exécution PHP

Description

void debug_print_backtrace ([ int $options = 0 [, int $limit = 0 ]] )

debug_print_backtrace() affiche la pile d'exécution de PHP. Elle affiche les appels aux fonctions, aux fichiers inclus / requis ainsi que les appels à eval().

Liste de paramètres

options

Depuis 5.3.6, ce paramètre est un masque d'options suivantes :

Options pour debug_print_backtrace()
DEBUG_BACKTRACE_IGNORE_ARGS Si l'on doit omettre l'index "args" et ainsi, tous les arguments de la méthode/fonction pour préserver la mémoire.

limit

Depuis 5.4.0, ce paramètre peut être utilisé pour limiter le nombre de trames de la pile à afficher. Par défaut (limit=0), toutes les trames de la pile seront affichées.

Valeurs de retour

Aucune valeur n'est retournée.

Historique

Version Description
5.4.0 Ajout du paramètre optionnel limit.
5.3.6 Ajout du paramètre optionnel options.

Exemples

Exemple #1 Exemple avec debug_print_backtrace()

<?php
// fichier include.php

function a() {
    
b();
}

function 
b() {
    
c();
}

function 
c(){
    
debug_print_backtrace();
}

a();

?>
<?php
// fichier test.php
// C'est le fichier que vous devez exécuter

include 'include.php';
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

#0  c() called at [/tmp/include.php:10]
#1  b() called at [/tmp/include.php:6]
#2  a() called at [/tmp/include.php:17]
#3  include(/tmp/include.php) called at [/tmp/test.php:3]

Voir aussi



error_get_last

(PHP 5 >= 5.2.0)

error_get_lastRécupère la dernière erreur survenue

Description

array error_get_last ( void )

Récupère la dernière erreur survenue.

Valeurs de retour

Retourne un tableau associatif décrivant la dernière erreur avec les clés "type", "message", "file" et "line". Si l'erreur a été causée par une fonctione interne à PHP, le message commencera par le nom de cette fonction. Retourne NULL s'il n'y a actuellement aucune erreur.

Exemples

Exemple #1 Exemple avec error_get_last()

<?php
echo $a;
print_r(error_get_last());
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Array
(
    [type] => 8
    [message] => Undefined variable: a
    [file] => C:\WWW\index.php
    [line] => 2
)



error_log

(PHP 4, PHP 5)

error_logStocke un message d'erreur

Description

bool error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] )

Envoie un message d'erreur à l'historique d'erreur du serveur web ou à un fichier.

Liste de paramètres

message

Le message d'erreur qui doit être stocké.

message_type

Spécifie la destination du message d'erreur. Les types possibles de messages sont :

error_log() log types
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. C'est l'option par défaut.
1 message est envoyé par email à l'adresse destination. C'est le seul type qui utilise le quatrième paramètre extra_headers.
2 N'est plus une option.
3 message est ajouté au fichier destination. Aucune nouvelle ligne (retour chariot) n'est automatiquement ajoutée à la fin de la chaîne message.
4 message est envoyé directement au gestionnaire d'identification SAPI.

destination

La destination. Cela dépend du paramètre message_type décrit ci-dessus.

extra_headers

Les en-têtes supplémentaires. Ils sont utilisés lorsque le paramètre message_type est défini à 1. Ce type de message utilise la même fonction interne que la fonction mail().

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Historique

Version Description
5.2.7 La valeur possible pour 4 a été ajoutée à message_type.

Exemples

Exemple #1 Exemples avec error_log()

<?php
// Envoie une notification par l'historique du serveur web,
// 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@example.com");
}

// D'autres manières d'appeler error_log():
error_log("Grosse bourde !"3"/var/tmp/mes-erreurs.log");
?>



error_reporting

(PHP 4, PHP 5)

error_reportingFixe le niveau de rapport d'erreurs PHP

Description

int error_reporting ([ int $level ] )

error_reporting() modifie la directive error_reporting pendant l'exécution du script. PHP possède plusieurs niveaux d'erreurs, utiliser cette fonction configure ce niveau pendant la durée (d'exécution) de votre script. Si le paramètre optionnel level n'est pas défini, error_reporting() retournera uniquement le niveau de rapport d'erreurs courant.

Liste de paramètres

level

Le nouveau niveau error_reporting. Il peut être un champ de bits ou une combinaison de constantes. L'utilisation des constantes est vivement recommandée pour assurer une compatibilité maximale avec les futures versions. Au fur et à mesure que de nouveaux niveaux d'erreurs sont créés, les valeurs évoluent, c'est pourquoi les anciennes valeurs n'ont plus forcément la même signification.

Les constantes représentant les niveaux d'erreurs disponibles et la signification de ces niveaux d'erreurs est décrite dans le manuel sur les constantes prédéfinies.

Valeurs de retour

Retourne l'ancien niveau d'error_reporting ou le niveau d'erreurs courant si le paramètre level n'est pas fourni.

Historique

Version Description
5.4.0 E_STRICT devient une partie de E_ALL.
5.3.0 E_DEPRECATED et E_USER_DEPRECATED ont été introduits.
5.2.0 E_RECOVERABLE_ERROR est introduit.
5.0.0 E_STRICT est introduit (ne fait plus partie de E_ALL).

Exemples

Exemple #1 Exemple avec error_reporting()

<?php

// Désactiver le rapport d'erreurs
error_reporting(0);

// Rapporte les erreurs d'exécution de script
error_reporting(E_ERROR E_WARNING E_PARSE);

// Rapporter les E_NOTICE peut vous aider à améliorer vos scripts
// (variables non initialisées, variables mal orthographiées..)
error_reporting(E_ERROR E_WARNING E_PARSE E_NOTICE);

// Rapporte toutes les erreurs à part les E_NOTICE
// C'est la configuration par défaut de php.ini
error_reporting(E_ALL E_NOTICE);

// Reporte toutes les erreurs PHP (Voir l'historique des modifications)
error_reporting(E_ALL);

// Reporte toutes les erreurs PHP
error_reporting(-1);

// Même chose que error_reporting(E_ALL);
ini_set('error_reporting'E_ALL);

?>

Notes

Avertissement

La plupart des erreurs E_STRICT sont évaluées au moment de la compilation, comme les erreurs qui ne sont pas reportées dans le fichier lorsque error_reporting est défini pour inclure les erreurs E_STRICT (et vice-versa).

Astuce

En passant la valeur -1, toutes les erreurs possibles seront affichées, même lors de l'ajout d'autres niveaux et constantes dans les futures versions de PHP. La constante E_ALL fonctionne de la même façon depuis PHP 5.4.

Voir aussi



restore_error_handler

(PHP 4 >= 4.0.1, PHP 5)

restore_error_handlerRéactive l'ancienne fonction de gestion des erreurs

Description

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

Valeurs de retour

Cette fonction retourne toujours TRUE.

Exemples

Exemple #1 Exemple avec restore_error_handler()

Si unserialize() cause une erreur, alors le gestionnaire d'erreurs original est restauré.

<?php
function unserialize_handler($errno$errstr)
{
echo 
"Valeur incorrectement linéarisée.\n";
}

$serialized 'foo';
set_error_handler('unserialize_handler');
$original unserialize($serialized);
restore_error_handler();
?>

L'exemple ci-dessus va afficher :

Valeur incorrectement linéarisée.

Notes

Note:

L'appel de la fonction restore_error_handler() depuis la fonction error_handler est ignoré.

Voir aussi



restore_exception_handler

(PHP 5)

restore_exception_handler Réactive l'ancienne fonction de gestion d'exceptions

Description

bool restore_exception_handler ( void )

restore_exception_handler() est utilisé, après le changement de la fonction de gestion d'exceptions avec la fonction set_exception_handler(), pour revenir à l'ancien gestionnaire d'exceptions (qui peut être la fonction interne ou une fonction définie par l'utilisateur).

Valeurs de retour

Cette fonction retourne toujours TRUE.

Exemples

Exemple #1 Exemple avec restore_exception_handler()

<?php
    
function exception_handler_1(Exception $e)
    {
        echo 
'[' __FUNCTION__ '] ' $e->getMessage();
    }

    function 
exception_handler_2(Exception $e)
    {
        echo 
'[' __FUNCTION__ '] ' $e->getMessage();
    }

    
set_exception_handler('exception_handler_1');
    
set_exception_handler('exception_handler_2');

    
restore_exception_handler();

    throw new 
Exception('Ceci utilise le premier gestionnaire d\'exception...');
?>

L'exemple ci-dessus va afficher :

[exception_handler_1] Ceci utilise le premier gestionnaire d'exception...

Voir aussi



set_error_handler

(PHP 4 >= 4.0.1, PHP 5)

set_error_handlerSpécifie une fonction utilisateur comme gestionnaire d'erreurs

Description

mixed set_error_handler ( callable $error_handler [, int $error_types = E_ALL | E_STRICT ] )

set_error_handler() choisit la fonction utilisateur error_handler pour gérer les erreurs dans un script.

set_error_handler() peut être utilisé pour définir votre propre manière de gérer les erreurs durant l'exécution, par exemple pour une application dans laquelle vous devez nettoyer les données/fichiers lorsqu'une erreur survient ou lorsque vous devez déclencher une erreur sous certaines conditions (en utilisant trigger_error()).

Il faut se rappeler que la fonction standard de traitement des erreurs de PHP est alors complètement ignorée pour les erreurs de types spécifiés par error_types à moins que la fonction de rappel retourne FALSE. 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éagir la fonction de gestion des erreurs en fonction. Cette remarque est notamment valable si la commande a été préfixée par @.

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.

Les types d'erreur suivants ne peuvent pas être gérés avec cette fonction : E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING ainsi que la plupart des E_STRICT d'un fichier lorsque set_error_handler() est appelé.

Si une erreur survient avant que le script ne soit exécuté (par exemple un téléchargement de fichier), le gestionnaire d'erreurs personnalisé ne pourra pas être appelé, car il n'est pas encore enregistré.

Liste de paramètres

error_handler

La fonction utilisateur doit accepter deux paramètres : le code d'erreur et une chaîne décrivant le code d'erreur. Depuis, trois paramètres optionnels sont fournis en même temps : le fichier dans lequel l'erreur est survenue, la ligne à laquelle l'erreur est survenue, et le contexte dans lequel l'erreur est survenue (un tableau contenant la liste des symboles lors de l'erreur). La fonction peut être décrite comme ceci :

handler ( int $errno , string $errstr [, string $errfile [, int $errline [, array $errcontext ]]] )
errno
Le premier paramètre errno, contient le niveau d'erreur, sous la forme d'un entier.
errstr
Le second paramètre errstr, contient le message d'erreur, sous forme de chaîne.
errfile
Le troisième paramètre, optionnel, errfile, contient le nom du fichier dans lequel l'erreur a été identifiée.
errline
Le quatrième paramètre, optionnel, errline, contient le numéro de ligne à laquelle l'erreur a été identifiée.
errcontext
Le cinquième paramètre, optionnel, errcontext, est un tableau qui pointe sur la table des symboles actifs lors de l'erreur. En d'autres termes, errcontext contient un tableau avec toutes les variables qui existaient lorsque l'erreur a été déclenchée. La fonction de gestion d'erreurs de l'utilisateur ne doit pas modifier le contexte d'erreur.

Si la fonction retourne FALSE, alors le gestionnaire d'erreurs normal continue.

error_types

Sert de masque pour appeler la fonction error_handler de la même façon que l'option de configuration error_reporting contrôle les erreurs qui sont affichées. Sans le masque, error_handler sera appelé pour toutes les erreurs, quelle que soit la valeur de error_reporting.

Valeurs de retour

Retourne une chaîne contenant le dernier gestionnaire d'erreurs (s'il existe). Si le gestionnaire d'erreurs natif est utilisé, NULL est retourné. NULL est également retourné dans le cas d'une erreur, comme une fonction de rappel incorrecte. Si le gestionnaire d'erreurs précédent est une méthode d'une classe, cette fonction retournera un tableau indexé de la classe et du nom de la méthode.

Historique

Version Description
5.2.0 Le gestionnaire d'erreurs doit retourner FALSE pour peupler la variable $php_errormsg.
5.0.0 Le paramètre error_types a été introduit.
4.3.0 Au lieu d'un nom de fonction, un tableau contenant une référence à un objet ainsi qu'un nom de méthode peut aussi être passé au paramètre error_handler.
4.0.2 Trois paramètres optionnels pour le paramètre error_handler de la fonction utilisateur ont été introduits. C'est le nom du fichier, le numéro de ligne ainsi que le contexte.

Exemples

Exemple #1 Gestionnaire d'erreurs avec set_error_handler() et trigger_error()

L'exemple ci-dessous illustre l'interception d'erreurs internes avec génération d'erreur et son exploitation dans une fonction utilisateur :

<?php
// Gestionnaire d'erreurs
function myErrorHandler($errno$errstr$errfile$errline)
{
   if (!(
error_reporting() & $errno)) {
        
// Ce code d'erreur n'est pas inclus dans error_reporting()
        
return;
    }

    switch (
$errno) {
    case 
E_USER_ERROR:
        echo 
"<b>Mon ERREUR</b> [$errno$errstr<br />\n";
        echo 
"  Erreur fatale sur la ligne $errline dans le fichier $errfile";
        echo 
", PHP " PHP_VERSION " (" PHP_OS ")<br />\n";
        echo 
"Arrêt...<br />\n";
        exit(
1);
        break;

    case 
E_USER_WARNING:
        echo 
"<b>Mon ALERTE</b> [$errno$errstr<br />\n";
        break;

    case 
E_USER_NOTICE:
        echo 
"<b>Mon AVERTISSEMENT</b> [$errno$errstr<br />\n";
        break;

    default:
        echo 
"Type d'erreur inconnu : [$errno$errstr<br />\n";
        break;
    }

    
/* Ne pas exécuter le gestionnaire interne de PHP */
    
return true;
}

// Fonction pour tester la gestion d'erreur
function scale_by_log($vect$scale)
{
    if (!
is_numeric($scale) || $scale <= 0) {
        
trigger_error("log(x) for x <= 0 is undefined, you used: scale = $scale"E_USER_ERROR);
    }

    if (!
is_array($vect)) {
        
trigger_error("Type d'entrée incorrect, tableau de valeurs attendu"E_USER_WARNING);
        return 
null;
    }

    
$temp = array();
    foreach(
$vect as $pos => $value) {
        if (!
is_numeric($value)) {
            
trigger_error("La valeur à la position $pos n'est pas un nombre, utilisation 0 (zéro)"E_USER_NOTICE);
            
$value 0;
        }
        
$temp[$pos] = log($scale) * $value;
    }
    return 
$temp;
  }

// Configuration du gestionnaire d'erreurs
$old_error_handler set_error_handler("myErrorHandler");

// Génération de quelques erreurs. Commençons par créer un tableau
echo "vector a\n";
$a = array(23"foo"5.543.321.11);
print_r($a);

// Générons maintenant un second tableau
echo "----\nvector b - a notice (b = log(PI) * a)\n";
/* Valeur à la position $pos n'est pas un nombre, utilisation de 0 (zéro) */
$b scale_by_log($aM_PI);
print_r($b);

// Ceci est un problème, nous avons utilisé une chaîne au lieu d'un tableau
echo "----\nvector c - a warning\n";
/* Type d'entrée incorrect, tableau de valeurs attendu */
$c scale_by_log("non un tablau"2.3);
var_dump($c); // NULL

// Ceci est une erreur critique : le logarithme de zéro ou d'un nombre négatif est indéfini
echo "----\nvector d - fatal error\n";
/* log(x) pour x <= 0 est indéfini, vous utilisez : scale = $scale" */
$d scale_by_log($a, -2.5);
var_dump($d); // Jamais atteint
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

vector a
Array
(
    [0] => 2
    [1] => 3
    [2] => foo
    [3] => 5.5
    [4] => 43.3
    [5] => 21.11
)
----
vector b - a notice (b = log(PI) * a)
<b>Mon AVERTISSEMENT</b> [1024] La valeur à la position 2 n'est pas un nombre, utilisation de 0 (zéro)<br />
Array
(
    [0] => 2.2894597716988
    [1] => 3.4341896575482
    [2] => 0
    [3] => 6.2960143721717
    [4] => 49.566804057279
    [5] => 24.165247890281
)
----
vector c - an warning
<b>Mon ALERTE</b> [512] Entrée incorrect, tableau de valeurs attendu<br />
NULL
----
vector d - fatal error
<b>Mon ERREUR</b> [256] log(x) for x <= 0 est indéfini, vous utilisez : scale = -2.5<br />
Erreur fatale sur la ligne 36 dans le fichier trigger_error.php, PHP 4.0.2 (Linux)<br />
Abandon...<br />

Voir aussi



set_exception_handler

(PHP 5)

set_exception_handler Définit une fonction utilisateur de gestion d'exceptions

Description

callable set_exception_handler ( callable $exception_handler )

set_exception_handler() définit le gestionnaire d'exceptions par défaut si une exception n'est pas attrapée avec un bloc d'essai/d'attrape. L'exécution sera stoppée après l'appel à la fonction exception_handler.

Liste de paramètres

exception_handler

Nom de la fonction à appeler lorsqu'une exception qui n'a pu être attrapée survient. Cette fonction doit être définie avant l'appel de la fonction set_exception_handler(). Ce gestionnaire doit accepter un paramètre qui sera l'objet représentant l'exception qui vient d'être lancée.

Note:

NULL peut aussi être passé, pour réinitialiser ce gestionnaire en son statut par défaut.

Valeurs de retour

Retourne le nom du gestionnaire précédemment défini ou NULL en cas d'erreur. Si aucun gestionnaire n'a été précédemment défini, NULL est également retourné. Si NULL est passé, le gestionnaire sera réinitialisé dans son état par défaut, et TRUE sera retourné.

Exemples

Exemple #1 Exemple avec set_exception_handler()

<?php
function exception_handler($exception) {
  echo 
"Exception non attrapée : " $exception->getMessage(), "\n";
}

set_exception_handler('exception_handler');

throw new 
Exception('Uncaught Exception');
echo 
"Non exécuté\n";
?>

Voir aussi



trigger_error

(PHP 4 >= 4.0.1, PHP 5)

trigger_errorDéclenche une erreur utilisateur

Description

bool trigger_error ( string $error_msg [, int $error_type = E_USER_NOTICE ] )

trigger_error() est utilisé pour déclencher une erreur utilisateur. Elle peut aussi être utilisée en conjonction avec un gestionnaire d'erreurs interne, ou un gestionnaire d'erreurs utilisateur qui a été choisi comme gestionnaire d'erreurs avec set_error_handler().

trigger_error() est pratique lorsque vous devez générer une réponse particulière lors de l'exécution.

Liste de paramètres

error_msg

Le message d'erreur désigné pour cette erreur. Il est limité en longueur à 1024 caractères. Tous caractères après les 1024 seront ignorés.

error_type

Le type d'erreur désigné pour cette erreur. Cela ne fonctionne qu'avec la famille de constantes E_USER et sera par défaut E_USER_NOTICE.

Valeurs de retour

Cette fonction retourne FALSE si un paramètre incorrect est passé à error_type, TRUE sinon.

Exemples

Exemple #1 Exemple avec trigger_error()

Voir set_error_handler() pour un exemple plus conséquent.

<?php
if ($divisor == 0) {
  
trigger_error("Impossible de diviser par zéro"E_USER_ERROR);
}
?>

Notes

Avertissement

Les entités HTML contenues dans le paramètre error_msg ne sont pas échappées. Utilisez la fonction htmlentities() sur le message si l'erreur doit être affichée dans un navigateur.

Voir aussi



user_error

(PHP 4, PHP 5)

user_errorAlias de trigger_error()

Description

Cette fonction est un alias de : trigger_error().


Sommaire




Support du format .htaccess pour toutes les SAPI


Introduction

L'extension htscanner donne la possibilité d'accéder à des fichiers au format .htaccess pour configurer PHP, dossier par dossier, comme c'est possible avec Apache. Cela est particulièrement utile avec fastcgi (ISS5/6/7, lighttpd, etc.).



Installation/Configuration

Sommaire


Pré-requis

PHP version 5.2.0 ou plus récent.



Installation

Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici : » http://pecl.php.net/package/htscanner



Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Options de configuration htscanner
Nom Défaut Modifiable Historique
htscanner.config_file ".htscanner" PHP_INI_SYSTEM  
htscanner.default_docroot "/" PHP_INI_SYSTEM  
htscanner.default_ttl "300" PHP_INI_SYSTEM  
htscanner.stop_on_error "Off" PHP_INI_SYSTEM  
Pour plus de détails sur les modes PHP_INI_*, reportez-vous à Où une directive de configuration peut être modifiée.

Voici un éclaircissement sur l'utilisation des directives de configuration.

htscanner.config_file string

Nom du fichier qui contient les configurations.

htscanner.default_docroot string

Racine Web par défaut.

htscanner.default_ttl int

Durée de vie des documents mis en cache, exprimé en secondes.

htscanner.stop_on_error int

Arrêt sur erreur (erreur d'analyse, ou d'affectation d'une directive INI).



Types de ressources

Cette extension ne définit aucune ressource.





Arbre d'inclusions


Introduction

Note les inclusions, et produire une arborescence d'inclusions et d'héritage de classes à la volée.

Les fichiers peuvent avoir été inclus avec les fonctions include, include_once, require, ou require_once.

Les héritages de classes sont aussi rapportés.



Installation/Configuration

Sommaire


Pré-requis

PHP version 5.1.0 ou plus récente.

Le fichier inclus gengraph.php utilise la bibliothèque » graphviz, mais elle n'est pas obligatoire.



Installation

Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici : » http://pecl.php.net/package/inclued



Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Options de configuration inclued
Nom Défaut Modifiable Historique
inclued.enabled Off PHP_INI_SYSTEM  
inclued.dumpdir NULL PHP_INI_SYSTEM  
Pour plus de détails sur les modes PHP_INI_*, reportez-vous à Où une directive de configuration peut être modifiée.

Voici un éclaircissement sur l'utilisation des directives de configuration.

inclued.enabled bool

Si oui ou non, inclued est activée.

inclued.dumpdir string

Chemin du dossier qui stocke les fichiers inclued. Si configuré, chaque requête PHP va créer un fichier dans ce dossier. Ces fichiers représentent la version sérialisée de ce qu'aurait produit inclued_get_data(), leur contenu peut donc être désérialisé au moyen de unserialize().

Attention

Comme chaque requête crée un fichier, ce dossier risque de se remplir très vite!



Types de ressources

Cette extension ne définit aucune ressource.




Constantes pré-définies

Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.

Cette extension ne définit aucune constante.



Exemples

Sommaire


Exemple qui implémente inclued dans une application

Cet exemple montre comment implémenter inclued dans une application existante, et afficher les résultats.

Exemple #1 Traitement des informations dans une application PHP

<?php
// Fichier de stockage des informations d'inclusion
$fp fopen('/tmp/wp.ser''w');
if (
$fp) {
    
$clue inclued_get_data();
    if (
$clue) {
        
fwrite($fpserialize($clue));
    }
    
fclose($fp);
}
?>

Maintenant que nous avons des données, il est temps de prendre du recul et d'avoir un graphique. L'extension inclued inclut un fichier PHP appelé gengraph.php qui crée un fichier DOT, qui peut être passé à la bibliothèque » graphviz. Cependant, cette approche n'est pas obligatoire.

Exemple #2 Exemple d'utilisation de gengraph.php

Cet exemple crée une image appelée inclued.png qui montre les fichiers inclus.

# First, create the dot file
$ php graphviz.php -i /tmp/wp.ser -o wp.dot

# Next, create the image
$ dot -Tpng -o inclued.png wp.dot

Exemple #3 Lister les données depuis une capture inclued

En utilisant la directive inclued.dumpdir , des fichiers (les traces include) sont écrits à chaque requête. Voici un moyen de lister ces fichiers et utiliser unserialize() avec.

<?php
$path 
ini_get('inclued.dumpdir');
if (
$path && is_dir($path)) {

    echo 
"Path: $path"PHP_EOL;

    
$inclues = new GlobIterator($path DIRECTORY_SEPARATOR 'inclued*');

    if (
$inclues->count() === 0) {
        echo 
'Pas de traces'PHP_EOL;
        exit;
    }

    foreach (
$inclues as $inclue) {

        echo 
'Fichier Inclus: '$inclue->getFilename(), PHP_EOL;

        
$data file_get_contents($inclue->getPathname());
        if (
$data) {
            
$inc unserialize($data);
            echo 
' -- fichier: '$inc['request']['SCRIPT_FILENAME'], PHP_EOL;
            echo 
' -- nombre d\'inclusions: 'count($inc['includes']), PHP_EOL;
        }
        echo 
PHP_EOL;
    }
} else {
    echo 
'Pas de traces.'PHP_EOL;
}
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

PATH: /tmp/inclued
Fichier Inclus: inclued.56521.1
 -- fichier: /Users/philip/test.php
 -- nombre d'inclusions: 1

Fichier Inclus: inclued.56563.1
 -- fichier: /tmp/none.php
 -- nombre d'inclusions: 0

Fichier Inclus: inclued.56636.1
 -- fichier: /tmp/three.php
 -- nombre d'inclusions: 3




Fonctions inclued


inclued_get_data

(PECL inclued >= 0.1.0)

inclued_get_dataLit les données incluses

Description

array inclued_get_data ( void )

Lit les données incluses.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Les données incluses.

Exemples

Exemple #1 Exemple avec inclued_get_data()

Voyez les exemples avec inclued pour une méthode de représentation de ces données.

<?php 
include 'x.php';

$clue inclued_get_data();

print_r($clue);
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Array
(
  [includes] => Array
    (
      [0] => Array
        (
          [operation] => include
          [op_type] => 2
          [filename] => x.php
          [opened_path] => /tmp/x.php
          [fromfile] => /tmp/z.php
          [fromline] => 2
        )
    )
)

Voir aussi


Sommaire




Memtrack


Introduction

Le but de cette extension est d'identifier les scripts et les fonctions les plus consommateurs de mémoire.

memtrack surveille la consommation de mémoire dans les scripts PHP, et produit un rapport d'alertes lorsque la consommation atteint un certain niveau, défini par l'utilisateur. Ceci est réussi en remplaçant les fonctions standard par une fonction spéciale qui compare l'utilisation de mémoire avant et après le passage par une fonction : de cette manière, on sait de combien la consommation de mémoire a changé.

Le Zend Engine fait fonctionner son exécuteur pour chaque tableau d'opcodes, ce qui représente généralement une fonction ou un script, ce qui fait que memtrack n'a pas d'impact notable sur les performances.

memtrack ne fournit aucune fonction, car il n'y a que des directives d'exécution pour configurer son fonctionnement.

Avertissement

Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez ce module à vos risques et périls.



Installation/Configuration

Sommaire


Pré-requis

Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible.



Installation

Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici : » http://pecl.php.net/package/memtrack



Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Options de configuration Memtrack
Nom Défaut Modifiable
memtrack.enabled "0" PHP_INI_SYSTEM
memtrack.soft_limit "0" PHP_INI_ALL
memtrack.hard_limit "0" PHP_INI_ALL
memtrack.vm_limit "0" PHP_INI_ALL
memtrack.ignore_functions "" PHP_INI_SYSTEM
Pour plus de détails sur les modes PHP_INI_*, reportez-vous à Où une directive de configuration peut être modifiée.

Voici un éclaircissement sur l'utilisation des directives de configuration.

memtrack.enabled boolean

Active ou non l'extension. Par défaut, c'est 0, i.e. désactivé.

memtrack.soft_limit int

Limite mémoire logicielle.

L'extension vérifie la consommation avant et après l'exécution d'un tableau d'opcode, puis produit une alerte si la différence entre les deux valeurs est égale ou supérieure à la limite logicielle, et que la fonction n'est pas ignorée.

En donnant à cette directive la valeur de 0, on désactive les limites logicielle et physique. Par défaut, cette directive vaut 0, ce qui fait qu'aucune alerte n'est produite.

memtrack.hard_limit int

Limite mémoire physique.

L'extension vérifie la consommation avant et après l'exécution d'un tableau d'opcode, puis produit une alerte si la différence entre les deux valeurs est égale ou supérieure à la limite logicielle, même si la fonction est ignorée. En donnant à cette directive la valeur de 0, on désactive les limites physique. Par défaut, cette directive vaut 0, ce qui fait qu'aucune alerte n'est produite.

memtrack.vm_limit int

Limite de mémoire virtuelle (par processus).

Cette limite est vérifiée à l'extinction du script, et une alerte est émise si la consommation de mémoire est plus grande que cette limite.

Cette option est uniquement supportée sur les OS où la fonction mallinfo() est disponible (i.e. Linux).

memtrack.ignore_functions string

Une liste de fonctions qui seront ignorées par la limite logicielle. Les fonctions sont séparées par des virgules ou des espaces. Les valeurs sont insensibles à la casse, et pour les méthodes, il faut utiliser la syntaxe classe::méthode.



Types de ressources

Cette extension ne définit aucune ressource.




Constantes pré-définies

Cette extension ne définit aucune constante.



Exemples

Sommaire


Utilisation simple

Exemple simple d'utilisation de memtrack

Exemple #1 Création d'un grand tableau

<?php

/* /tmp/exemple.php */

function foo() {
    
$a = array();
    for (
$i 0$i 10000$i++) $a[] = "test";
    return 
$a;
}
$arr foo();

?>

Exécution de l'exemple avec la commande suivante :

php -d memtrack.enabled=1 -d memtrack.soft_limit=1M -d memtrack.vm_limit=3M /tmp/exemple.php

L'exemple ci-dessus va afficher quelque chose de similaire à :

Warning: [memtrack] [pid 26177] user function foo() executed in /tmp/example1.php on line 10 allocated 4194304 bytes in /tmp/example1.php on line 0
Warning: [memtrack] [pid 26177] virtual memory usage on shutdown: 32911360 bytes in Unknown on line 0




Bufferisation de sortie


Introduction

Les fonctions de bufferisation de sortie vous permettent de contrôler quand les données ont été envoyées par le script. Cela peut être utile dans certaines situations, notamment si vous devez envoyer des en-têtes au navigateur après avoir envoyé des données. Ces fonctions n'affectent pas les en-têtes envoyés par la fonction header() ou les cookies envoyés par setcookie(). Seules les fonctions telles que echo et les données entre blocs PHP sont affectées.

Note:

Lors de la mise à jour depuis PHP 4.1.x (et 4.2.x) vers 4.3.x, à cause d'un bogue dans les versions précédentes, vous devez vous assurer que implicit_flush vaut OFF dans votre php.ini, sinon, tout affichage avec la fonction ob_start() sera caché.



Installation/Configuration

Sommaire


Pré-requis

Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible.



Installation

Il n'y pas d'installation nécessaire pour utiliser ces fonctions, elles font parties du coeur de PHP.



Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Options de configuration des buffers de sortie
Nom Défaut Modifiable Historique
output_buffering "0" PHP_INI_PERDIR  
output_handler NULL PHP_INI_PERDIR Disponible depuis PHP 4.0.4.
implicit_flush "0" PHP_INI_ALL PHP_INI_PERDIR en PHP <= 4.2.3.
Pour plus de détails sur les modes PHP_INI_*, reportez-vous à Où une directive de configuration peut être modifiée.

Voici un éclaircissement sur l'utilisation des directives de configuration.

output_buffering booléen/entier

Vous pouvez activer la bufferisation de sortie pour tous les fichiers avec cette directive, en lui passant la valeur On. Si vous souhaitez limiter la taille du buffer à une certaine taille, vous pouvez alors indiquer un nombre maximum d'octets à la place de On. Par exemple, output_buffering=4096). Depuis PHP 4.3.5, cette directive est toujours désactivée en ligne de commande.

output_handler string

Vous pouvez rediriger le résultat de tous vos scripts à une fonction avant leur envoi au navigateur. Par exemple, si vous configurez output_handler à mb_output_handler(), l'encodage des caractères sera adapté de manière transparente. Configurer une telle fonction active automatiquement la bufferisation de sortie.

Note:

Vous ne pouvez pas utiliser simultanément mb_output_handler() avec ob_iconv_handler(), non plus que ob_gzhandler() avec zlib.output_compression.

Note:

Seules les fonctions internes peuvent être utilisées avec cette directive. Pour les fonctions utilisateurs, utilisez ob_start().

implicit_flush booléen

FALSE par défaut. En changeant cette valeur pour TRUE vous indiquez à PHP que le buffer de sortie doit être vidé automatiquement après chaque fonction d'affichage. Cela revient à appeler la fonction flush() après chaque appel à print ou echo et pour tous les blocs HTML.

Lorsque vous utilisez PHP en environnement web, activer cette option a de sérieuses implications et généralement, cela n'est conseillé que pour les déboguages. Cette valeur est par défaut à TRUE lorsque PHP fonctionne en mode CLI SAPI.

Voir aussi ob_implicit_flush().



Types de ressources

Cette extension ne définit aucune ressource.




Constantes pré-définies

Cette extension ne définit aucune constante.



Exemples

Sommaire


Utilisation simple

Exemple #1 Exemple de bufferisation de sortie

<?php

ob_start
();
echo 
"Bonjour\n";

setcookie("cookiename""cookiedata");

ob_end_flush();

?>

Dans l'exemple ci-dessus, l'instruction echo est stockée dans un buffer jusqu'à l'appel de la fonction ob_end_flush(). Dans le même temps, l'appel à setcookie() a réussi à créer un cookie, sans générer d'erreur. (D'habitude, vous devez envoyer les en-têtes avant les données).




Fonctions de bufferisation de sortie

Voir aussi

Voir aussi header() et setcookie().


flush

(PHP 4, PHP 5)

flushVide les tampons de sortie

Description

void flush ( void )

Vide les tampons d'écriture de PHP et tous ceux que PHP utilisait (CGI, un serveur web, etc.). Cette fonction tente d'envoyer tout l'affichage courant au navigateur, sous quelques conditions.

flush() peut ne pas être capable d'écraser le schéma du buffer de votre serveur web et ceci n'aura aucun effet sur le buffer du navigateur côté client. De plus, cette fonction n'affecte pas le mécanisme d'affichage du buffer de l'espace utilisateur de PHP. Cela signifie que vous devez appeler à la fois la fonction ob_flush() et la fonction flush() pour vider les tampons de sortie si vous les utilisez.

De nombreux serveurs, essentiellement sous Windows, continueront à tamporiser l'affichage de votre script jusqu'à ce qu'il soit terminé, avant de transmettre les résultats à l'internaute.

Des modules Apache comme mod_gzip utilisent leur propre tamporisation, ce qui fait que flush() n'enverra pas les données jusqu'au navigateur client immédiatement.

Même le navigateur peut réaliser une tamporisation avant de l'afficher. Netscape, par exemple, met en cache le texte jusqu'à ce qu'il reçoive une fin de ligne, ou un début d'une balise et il n'affichera pas les tables tant que la balise </table> la plus externe ne soit vue.

Certaines versions de Microsoft Internet Explorer ne commenceront l'affichage de la page qu'après avoir reçu 256 octets d'affichage. Cela vous obligera à envoyer des espaces supplémentaires pour afficher la page.

Valeurs de retour

Aucune valeur n'est retournée.



ob_clean

(PHP 4 >= 4.2.0, PHP 5)

ob_cleanEfface le tampon de sortie

Description

void ob_clean ( void )

Cette fonction vide le tampon de sortie sans l'envoyer au navigateur.

Cette fonction ne détruit pas le contenu du tampon de sortie comme peut le faire ob_end_clean().

Valeurs de retour

Aucune valeur n'est retournée.

Voir aussi

  • ob_flush() - Envoie le tampon de sortie
  • ob_end_flush() - Envoie les données du tampon de sortie et éteint la tamporisation de sortie
  • ob_end_clean() - Détruit les données du tampon de sortie et éteint la tamporisation de sortie



ob_end_clean

(PHP 4, PHP 5)

ob_end_cleanDétruit les données du tampon de sortie et éteint la tamporisation de sortie

Description

bool ob_end_clean ( void )

Cette fonction vide le contenu du premier tampon de sortie et désactive la tamporisation de sortie. Si vous voulez traiter le contenu du tampon, vous devrez appeler ob_get_contents() avant ob_end_clean(), car le tampon est détruit par ob_end_clean().

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient. Les raisons d'un tel échec sont que la tamporisation de sortie pouvait ne pas être activée, ou que, pour une raison quelconque, le tampon n'a pu être détruit.

Erreurs / Exceptions

Si la fonction échoue, elle génère une note E_NOTICE.

Historique

Version Description
4.2.0 La valeur booléen retournée par la fonction a été ajoutée.

Exemples

L'exemple suivant montre comment se débarrasser de tous les tampons de sortie :

Exemple #1 Exemple avec ob_end_clean()

<?php
ob_start
();
echo 
'Texte qui ne sera pas affiché.';
ob_end_clean();
?>

Voir aussi



ob_end_flush

(PHP 4, PHP 5)

ob_end_flushEnvoie les données du tampon de sortie et éteint la tamporisation de sortie

Description

bool ob_end_flush ( void )

Envoie le contenu du tampon de sortie (s'il existe) et éteint la tamporisation de sortie. Si vous voulez continuer à manipuler la valeur du tampon, vous pouvez appeler ob_get_contents() avant ob_end_flush() car le contenu du tampon est détruit après un appel à ob_end_flush().

Note: Cette fonction est similaire à ob_get_flush(), excepté que ob_get_flush() retourne le tampon comme une chaîne de caractères.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient. Les raisons d'échec sont que vous pourriez avoir appelé la fonction sans avoir de tampon actif, ou que, pour une raison quelconque, le tampon n'a pu être effacé (possible pour un tampon spécial).

Erreurs / Exceptions

Si la fonction échoue, elle émet une alerte de type E_NOTICE.

Historique

Version Description
4.2.0 La fonction retourne une valeur booléenne.

Exemples

Exemple #1 Exemple avec ob_end_flush()

L'exemple ci-dessous montre une méthode simple pour vider tous les tampons :

<?php
while (@ob_end_flush());
?>

Voir aussi

  • ob_start() - Enclenche la tamporisation de sortie
  • ob_get_contents() - Retourne le contenu du tampon de sortie
  • ob_get_flush() - Vide le tampon, le retourne en tant que chaîne et stoppe la tamporisation
  • ob_flush() - Envoie le tampon de sortie
  • ob_end_clean() - Détruit les données du tampon de sortie et éteint la tamporisation de sortie



ob_flush

(PHP 4 >= 4.2.0, PHP 5)

ob_flushEnvoie le tampon de sortie

Description

void ob_flush ( void )

Envoie le contenu du tampon de sortie (s'il y en a un). Si vous voulez contrôler le contenu du tampon, vous devez appeler la fonction ob_get_contents() avant ob_flush() car le contenu du tampon est effacé après l'appel de ob_flush().

ob_flush() ne désactive pas la temporisation de sortie comme peut le faire ob_end_flush().

Valeurs de retour

Aucune valeur n'est retournée.

Voir aussi

  • ob_get_contents() - Retourne le contenu du tampon de sortie
  • ob_clean() - Efface le tampon de sortie
  • ob_end_flush() - Envoie les données du tampon de sortie et éteint la tamporisation de sortie
  • ob_end_clean() - Détruit les données du tampon de sortie et éteint la tamporisation de sortie



ob_get_clean

(PHP 4 >= 4.3.0, PHP 5)

ob_get_cleanLit le contenu courant du tampon de sortie puis l'efface

Description

string ob_get_clean ( void )

Lit le contenu courant du tampon de sortie puis l'efface.

ob_get_clean() exécute successivement ob_get_contents() et ob_end_clean().

Valeurs de retour

Retourne le contenu du tampon de sortie et termine la session de tamporisation. Si la tamporisation n'est pas activée, alors FALSE sera retourné.

Exemples

Exemple #1 Exemple avec ob_get_clean()

<?php

ob_start
();

echo 
"Bonjour le monde !";

$out ob_get_clean();
$out strtolower($out);

var_dump($out);
?>

L'exemple ci-dessus va afficher :


string(18) "bonjour le monde !"

Voir aussi



ob_get_contents

(PHP 4, PHP 5)

ob_get_contentsRetourne le contenu du tampon de sortie

Description

string ob_get_contents ( void )

Retourne le contenu du tampon de sortie sans l'effacer.

Valeurs de retour

Retourne le contenu du tampon de sortie sans l'effacer ou FALSE, si la tamporisation de sortie n'est pas activée.

Exemples

Exemple #1 Exemple avec ob_get_contents()

<?php

ob_start
();

echo 
"Bonjour ";

$out1 ob_get_contents();

echo 
"le monde !";

$out2 ob_get_contents();

ob_end_clean();

var_dump($out1$out2);
?>

L'exemple ci-dessus va afficher :

string(8) "Bonjour "
string(18) "Bonjour le monde !"

Voir aussi



ob_get_flush

(PHP 4 >= 4.3.0, PHP 5)

ob_get_flushVide le tampon, le retourne en tant que chaîne et stoppe la tamporisation

Description

string ob_get_flush ( void )

ob_get_flush() vide le tampon, le retourne en tant que chaîne et stoppe la tamporisation.

Note: ob_get_flush() est similaire à ob_end_flush(), sauf que cette fonction retourne le tampon en tant que chaîne.

Valeurs de retour

Retourne le tampon de sortie ou FALSE s'il n'y en a aucun d'actif.

Exemples

Exemple #1 Exemple avec ob_get_flush()

<?php
//Utilisation de output_buffering=On
print_r(ob_list_handlers());

//Saugarde du tampon dans un fichier
$buffer ob_get_flush();
file_put_contents('buffer.txt'$buffer);

print_r(ob_list_handlers());
?>

L'exemple ci-dessus va afficher :

Array
(
    [0] => default output handler
)
Array
(
)

Voir aussi

  • ob_end_clean() - Détruit les données du tampon de sortie et éteint la tamporisation de sortie
  • ob_end_flush() - Envoie les données du tampon de sortie et éteint la tamporisation de sortie
  • ob_list_handlers() - Liste les gestionnaires d'affichage utilisés



ob_get_length

(PHP 4 >= 4.0.2, PHP 5)

ob_get_lengthRetourne la longueur du contenu du tampon de sortie

Description

int ob_get_length ( void )

Retourne la longueur du contenu du tampon de sortie.

Valeurs de retour

Retourne la longueur du contenu du tampon de sortie si la tamporisation est activée, et FALSE sinon.

Exemples

Exemple #1 Exemple avec ob_get_length()

<?php

ob_start
();

echo 
"Bonjour ";

$len1 ob_get_length();

echo 
"le monde";

$len2 ob_get_length();

ob_end_clean();

echo 
$len1 ", ." $len2;
?>

L'exemple ci-dessus va afficher :

8, 16

Voir aussi



ob_get_level

(PHP 4 >= 4.2.0, PHP 5)

ob_get_levelRetourne le nombre de niveaux d'imbrications du système de tamporisation de sortie

Description

int ob_get_level ( void )

Retourne le nombre de niveaux d'imbrications du système de tamporisation de sortie.

Valeurs de retour

Retourne le nombre de niveaux d'imbrications du système de tamporisation de sortie, et zéro s'il n'est pas actif.

Voir aussi



ob_get_status

(PHP 4 >= 4.2.0, PHP 5)

ob_get_statusLit le statut du tampon de sortie

Description

array ob_get_status ([ bool $full_status = FALSE ] )

ob_get_status() retourne les informations sur le statut du tampon d'affichage de haut niveau ou de tous les tampons d'affichage si full_status est défini à TRUE.

Liste de paramètres

full_status

TRUE pour retourner tous les tampons d'affichage. Si vaut FALSE ou non défini, seul le statut du tampon d'affichage de haut niveau sera retourné.

Valeurs de retour

Si la fonction est appelée sans le paramètre full_status ou avec le paramètre full_status = FALSE, un tableau simple avec les éléments suivants sera retourné :

Array
(
    [level] => 2
    [type] => 0
    [status] => 0
    [name] => URL-Rewriter
    [del] => 1
)
Résultats simples pour la fonction ob_get_status()
Clé:level
Valeur:Niveau de sortie désiré
Clé:type
Valeur:PHP_OUTPUT_HANDLER_INTERNAL (0) ou PHP_OUTPUT_HANDLER_USER (1)
Clé:status
Valeur:Un parmi PHP_OUTPUT_HANDLER_START (0), PHP_OUTPUT_HANDLER_CONT (1) ou PHP_OUTPUT_HANDLER_END (2)
Clé:name
Valeur:Nom du gestionnaire de sortie actif ou ' default output handler' si aucun n'est défini
Clé:del
Valeur:Flag d'effacement tel que défini par ob_start()

Si la fonction est appelée avec le paramètre full_status défini à TRUE, un tableau avec un élément par tampon de sortie actif est retourné. Le niveau de sortie est utilisé en tant que clé du tableau de niveau élevé et chaque élément du tableau est un autre tableau contenant les informations sur le statut du niveau du tampon actif.

Array
(
    [0] => Array
        (
            [chunk_size] => 0
            [size] => 40960
            [block_size] => 10240
            [type] => 1
            [status] => 0
            [name] => default output handler
            [del] => 1
        )

    [1] => Array
        (
            [chunk_size] => 0
            [size] => 40960
            [block_size] => 10240
            [type] => 0
            [buffer_size] => 0
            [status] => 0
            [name] => URL-Rewriter
            [del] => 1
        )

)

La sortie complète contient les éléments suivants :

Résultats complets pour la fonction ob_get_status()
Clé:chunk_size
Valeur:Taille telle que définie par la fonction ob_start()
Clé:size
Valeur:...
Clé:blocksize
Valeur:...

Voir aussi

  • ob_get_level() - Retourne le nombre de niveaux d'imbrications du système de tamporisation de sortie
  • ob_list_handlers() - Liste les gestionnaires d'affichage utilisés



ob_gzhandler

(PHP 4 >= 4.0.4, PHP 5)

ob_gzhandlerFonction de rappel pour la compression automatique des tampons

Description

string ob_gzhandler ( string $buffer , int $mode )

ob_gzhandler() est destinée à être utilisée comme fonction de rappel par ob_start() pour faciliter l'envoi de données compressées aux navigateurs qui supportent les pages compressées. Avant que ob_gzhandler() envoie les données compressées, il détermine les types d'encodage qui sont supportés par le navigateur ("gzip", "deflate" ou aucun) et retourne le contenu des tampons de manière appropriée. Tous les navigateurs sont traités, car c'est aux navigateurs d'envoyer un en-tête indiquant les types de pages supportés. Si le navigateur ne supporte pas les pages compressées, cette fonction retournera FALSE.

Liste de paramètres

buffer

mode

Valeurs de retour

Historique

Version Description
4.0.5 Ajout du paramètre mode.

Exemples

Exemple #1 Exemple avec ob_gzhandler()

<?php

ob_start
("ob_gzhandler");

?>
<html>
<body>
<p>Ceci devrait être une page compressée.</p>
</body>
</html>

Notes

Note:

ob_gzhandler() nécessite l'extension zlib.

Note:

Vous ne pouvez pas utiliser simultanément ob_gzhandler() et zlib.output_compression. De plus, notez bien que zlib.output_compression est préférable à ob_gzhandler().

Voir aussi

  • ob_start() - Enclenche la tamporisation de sortie
  • ob_end_flush() - Envoie les données du tampon de sortie et éteint la tamporisation de sortie



ob_implicit_flush

(PHP 4, PHP 5)

ob_implicit_flushActive/désactive l'envoi implicite

Description

void ob_implicit_flush ([ int $flag = true ] )

ob_implicit_flush() active/désactive l'envoi implicite. L'envoi implicite signifie que toute fonction qui envoie des données au navigateur verra ses données envoyées immédiatement (la fonction flush() est appelée automatiquement).

Liste de paramètres

flag

TRUE pour activer, FALSE sinon.

Valeurs de retour

Aucune valeur n'est retournée.

Voir aussi

  • flush() - Vide les tampons de sortie
  • ob_start() - Enclenche la tamporisation de sortie
  • ob_end_flush() - Envoie les données du tampon de sortie et éteint la tamporisation de sortie



ob_list_handlers

(PHP 4 >= 4.3.0, PHP 5)

ob_list_handlersListe les gestionnaires d'affichage utilisés

Description

array ob_list_handlers ( void )

Liste les gestionnaires d'affichage utilisés.

Valeurs de retour

Retourne un tableau avec le gestionnaire d'affichage en cours d'utilisation (s'il existe). Si output_buffering est activé ou si une fonction anonyme est utilisée avec ob_start(), ob_list_handlers() retournera un tableau avec comme valeur d'entrée : "default output handler".

Exemples

Exemple #1 Exemple avec ob_list_handlers()

<?php
//Utilisation de output_buffering=On
print_r(ob_list_handlers());
ob_end_flush();

ob_start("ob_gzhandler");
print_r(ob_list_handlers());
ob_end_flush();

// Fonctions anonymes
ob_start(create_function('$string''return $string;'));
print_r(ob_list_handlers());
ob_end_flush();
?>

L'exemple ci-dessus va afficher :

Array
(
    [0] => default output handler
)

Array
(
    [0] => ob_gzhandler
)

Array
(
    [0] => default output handler
)

Voir aussi

  • ob_end_clean() - Détruit les données du tampon de sortie et éteint la tamporisation de sortie
  • ob_end_flush() - Envoie les données du tampon de sortie et éteint la tamporisation de sortie
  • ob_get_flush() - Vide le tampon, le retourne en tant que chaîne et stoppe la tamporisation
  • ob_start() - Enclenche la tamporisation de sortie



ob_start

(PHP 4, PHP 5)

ob_startEnclenche la tamporisation de sortie

Description

bool ob_start ([ callable $output_callback [, int $chunk_size = 0 [, bool $erase = true ]]] )

ob_start() démarre la tamporisation de sortie. Tant qu'elle est enclenchée, aucune donnée, hormis les en-têtes, n'est envoyée au navigateur, mais temporairement mise en tampon.

Le contenu de ce tampon peut être copié dans une chaîne avec la fonction ob_get_contents(). Pour afficher le contenu de ce tampon, utilisez ob_end_flush(). Au contraire, ob_end_clean() effacera le contenu de ce tampon.

Avertissement

Quelques serveurs web (par exemple Apache) modifient le dossier de travail d'un script lorsqu'il appelle une fonction de rappel. Vous pouvez revenir à un comportement normal en ajoutant chdir(dirname($_SERVER['SCRIPT_FILENAME'])) dans votre fonction de rappel.

Les tampons de sortie sont gérés par pile, c'est-à-dire que vous pouvez appeler plusieurs fois ob_start() simultanément. Assurez-vous que vous appelez ob_end_flush() suffisamment souvent. Si plusieurs fonctions de rappel sont actives, les contenus seront filtrés séquentiellement, dans l'ordre d'emboîtement.

Liste de paramètres

output_callback

Une fonction optionnelle de rappel peut être spécifiée. Cette fonction prend une chaîne comme paramètre, et retourne une chaîne. Elle sera appelée lorsque le tampon sera envoyé ou supprimé (avec les fonctions ob_flush(), ob_clean() ou des fonctions similaires) ou lorsque le tampon sera envoyé au navigateur à la fin du script et recevra le contenu du tampon de sortie. Lorsque la fonction output_callback est appelée, elle doit retourner un nouveau contenu pour le tampon de sortie : celui-ci sera envoyé au navigateur. Si output_callback n'est pas une fonction accessible, la fonction retournera FALSE.

Si la fonction de rappel a deux paramètres, le second est composé du champ bits constitué par PHP_OUTPUT_HANDLER_START, PHP_OUTPUT_HANDLER_CONT et PHP_OUTPUT_HANDLER_END.

Si output_callback retourne FALSE, l'entrée originale est envoyée au navigateur.

Le paramètre output_callback peut être annulé en y passant la valeur NULL.

ob_end_clean(), ob_end_flush(), ob_clean(), ob_flush() et ob_start() ne doivent pas être appelés depuis une fonction de rappel. Si vous les appelez depuis une fonction de rappel, le comportement ne sera pas défini. Si vous voulez effacer le contenu du tampon, retournez "" (une chaîne vide) comme fonction de rappel. Vous ne pourrez jamais appeler les fonctions utilisant la fonction de tamporisation de sortie comme print_r($expression, true) ou highlight_file($filename, true) depuis une fonction de rappel.

Note:

En PHP 4.0.4, ob_gzhandler() a été introduite pour faciliter l'envoi de fichiers compressés avec gzip aux navigateurs web qui supportent les pages compressées. ob_gzhandler() détermine le type d'encodage accepté par un navigateur, et retourne le contenu le plus adéquat.

chunk_size

Si le paramètre optionnel chunk_size est passé, la fonction de rappel est appelée à chaque nouvelle ligne après chunk_size octets d'affichage. La valeur par défaut 0 (zéro) signifie que l'affichage de la fonction ne sera appelé que lorsque le buffer de sortie est clos.

Avant la version PHP 5.4.0, la valeur 1 était une valeur spéciale qui définissait la taille du morceau à 4096 octets.

erase

Si le paramètre optionnel erase est défini à FALSE, le tampon ne sera pas effacé tant que le script ne sera pas terminé. Ceci aura pour effet d'émettre une notice et de retourner FALSE lors de l'appel aux fonctions d'affichage et de nettoyage.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Historique

Version Description
5.4.0 Une taille de morceau de 1 résulte maintenant en 1 octet envoyé au buffer de sortie.
4.3.2 Cette fonction a été modifiée pour retourner FALSE dans le cas où output_callback ne peut être exécuté.
4.2.0 Ajout du paramètre erase.

Exemples

Exemple #1 Exemple de gestion de sortie avec fonction de rappel

<?php

function rappel($buffer)
{
  
// remplace toutes les pommes par des carottes
  
return (ereg_replace("pommes de terre""carottes"$buffer));
}

ob_start("rappel");

?>
<html>
<body>
<p>C'est comme comparer des carottes et des pommes de terre.</p>
</body>
</html>
<?php

ob_end_flush
();

?>

L'exemple ci-dessus va afficher :

<html>
<body>
<p>C'est comme comparer des carottes et des carottes.</p>
</body>
</html>

Voir aussi



output_add_rewrite_var

(PHP 4 >= 4.3.0, PHP 5)

output_add_rewrite_varAjoute une règle de réécriture d'URL

Description

bool output_add_rewrite_var ( string $name , string $value )

Cette fonction ajoute une nouvelle paire nom/valeur au mécanisme de réécriture d'URL. Le nom et la valeur sera ajouté aux URL (en tant que paramètre GET) et aux formulaires (en tant que champs cachés) de la même façon que pour les identifiants de session lorsque la réécriture d'URL est activée avec session.use_trans_sid. Notez que les URL absolues, telles http://example.com/, ne sont pas réécrites.

Ce comportement est contrôlé par l'option url_rewriter.tags du php.ini.

Note: L'appel à cette fonction démarre implicitement la tamporisation de sortie si elle n'est pas déjà activée.

Liste de paramètres

name

Le nom de la variable.

value

La valeur de la variable.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec output_add_rewrite_var()

<?php
output_add_rewrite_var
('var''value');

// Quelques liens
echo '<a href="file.php">link</a>
<a href="http://example.com">link2</a>'
;

// un formulaire
echo '<form action="script.php" method="post">
<input type="text" name="var2" />
</form>'
;

print_r(ob_list_handlers());
?>

L'exemple ci-dessus va afficher :

<a href="file.php?var=value">link</a>
<a href="http://example.com">link2</a>

<form action="script.php" method="post">
<input type="hidden" name="var" value="value" />
<input type="text" name="var2" />
</form>

Array
(
    [0] => URL-Rewriter
)

Voir aussi



output_reset_rewrite_vars

(PHP 4 >= 4.3.0, PHP 5)

output_reset_rewrite_varsAnnule la réécriture d'URL

Description

bool output_reset_rewrite_vars ( void )

Cette fonction annule la règle de réécriture et efface toutes les variables de réécriture précédemment définies avec la fonction output_add_rewrite_var() ou par le mécanisme de session (si session.use_trans_sid a été défini lors de l'utilisation de la fonction session_start()).

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec output_reset_rewrite_vars()

<?php
session_start
();
output_add_rewrite_var('var''value');

echo 
'<a href="file.php">link</a>';
ob_flush();

output_reset_rewrite_vars();
echo 
'<a href="file.php">link</a>';
?>

L'exemple ci-dessus va afficher :

<a href="file.php?PHPSESSID=xxx&var=value">link</a>
<a href="file.php">link</a>

Voir aussi


Sommaire

  • flush — Vide les tampons de sortie
  • ob_clean — Efface le tampon de sortie
  • ob_end_clean — Détruit les données du tampon de sortie et éteint la tamporisation de sortie
  • ob_end_flush — Envoie les données du tampon de sortie et éteint la tamporisation de sortie
  • ob_flush — Envoie le tampon de sortie
  • ob_get_clean — Lit le contenu courant du tampon de sortie puis l'efface
  • ob_get_contents — Retourne le contenu du tampon de sortie
  • ob_get_flush — Vide le tampon, le retourne en tant que chaîne et stoppe la tamporisation
  • ob_get_length — Retourne la longueur du contenu du tampon de sortie
  • ob_get_level — Retourne le nombre de niveaux d'imbrications du système de tamporisation de sortie
  • ob_get_status — Lit le statut du tampon de sortie
  • ob_gzhandler — Fonction de rappel pour la compression automatique des tampons
  • ob_implicit_flush — Active/désactive l'envoi implicite
  • ob_list_handlers — Liste les gestionnaires d'affichage utilisés
  • ob_start — Enclenche la tamporisation de sortie
  • output_add_rewrite_var — Ajoute une règle de réécriture d'URL
  • output_reset_rewrite_vars — Annule la réécriture d'URL



Surcharge d'objets


Introduction

Le but de cette extension est de permettre de maîtriser les appels aux méthodes et aux membres d'un objet. Seule une fonction est définie dans cette extension, overload() qui demande le nom de la classe qui doit supporter cette fonctionnalité. Cette classe doit être pourvue des méthodes nécessaires au bon fonctionnement de l'extension, c'est-à-dire : __get(), __set() et __call(), qui servent respectivement à lire, à modifier un membre et à appeler une méthode. De cette manière, l'overloading assure un contrôle sur les fonctions appelées. À l'intérieur de ces méthodes, l'overloading est désactivé, pour que vous puissiez accéder à l'objet.

Avertissement

Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez ce module à vos risques et périls.

Avertissement

Cette extension ne fait pas partie de PHP 5. PHP 5 supporte __get(), __set() et __call() nativement. Voir la page traitant de la surcharge en PHP 5 pour plus d'informations.



Installation/Configuration

Sommaire


Pré-requis

Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible.



Installation

Afin d'utiliser ces fonctions, vous devez compiler PHP avec l'option --enable-overload . Depuis PHP 4.3.0, cette extension est activée par défaut. Pour la désactiver, utilisez l'option --disable--overload .

La version Windows de PHP dispose du support automatique de cette extension. Vous n'avez pas à ajouter de bibliothèque supplémentaire pour disposer de ces fonctions.

Note: Le support par défaut de l'extension overload a été ajouté en PHP 4.3.0.



Configuration à l'exécution

Cette extension ne définit aucune directive de configuration.



Types de ressources

Cette extension ne définit aucune ressource.




Constantes pré-définies

Cette extension ne définit aucune constante.



Exemples

Sommaire


Utilisation simple

Voici un exemple simple de fonctions utilisant overload() :

Exemple #1 Overload avec une classe PHP

<?php

class OO {
   var 
$a 111;
   var 
$elem = array('b' => 9'c' => 42);

   
// Fonction de callback pour la lecture de membre
   
function __get($prop_name, &$prop_value
   {
       if (isset(
$this->elem[$prop_name])) {
           
$prop_value $this->elem[$prop_name];
           return 
true;
       } else {
           return 
false;
       }
   }

   
// Fonction de callback pour l'écriture de membre
   
function __set($prop_name$prop_value
   {
       
$this->elem[$prop_name] = $prop_value;
       return 
true;
   }
}

// Ici, l'initiation de l'overload
overload('OO');

$o = new OO;
echo 
"\$o->a: $o->a\n"// print: $o->a: 111
echo "\$o->b: $o->b\n"// print: $o->b: 9
echo "\$o->c: $o->c\n"// print: $o->c: 42
echo "\$o->d: $o->d\n"// print: $o->d:

// ajout d'une nouvelle valeur au membre $elem, en programmation OOP
$o->56

// instantiation de la classe stdclass (elle existe par défaut en PHP 4)
// $val n'est pas surchargée !
$val = new stdclass;
$val->prop 555;

// Forcez "a" à être un tableau avec l'élément $val
// Mais _set() forcera cet élément dans le tableau $elem
$o->= array($val);
var_dump($o->a[0]->prop);

?>




Fonctions sur la surcharge d'objets


overload

(PHP 4 >= 4.3.0)

overloadActive la couche de contrôle des membres et méthodes

Description

void overload ( string $class_name )

overload() active le contrôle des accesseurs et appels de méthodes pour la classe class_name.

Liste de paramètres

class_name

Le nom de la classe surchargée, sous la forme d'une chaîne de caractères

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Voir un exemple dans la section d'introduction de cette partie.


Sommaire

  • overload — Active la couche de contrôle des membres et méthodes



Options PHP et informations PHP


Introduction

Ces fonctions vous donnent accès à de nombreuses informations sur PHP lui-même, comme les configurations d'exécution, les extensions chargées, les versions, etc. Vous trouverez aussi des fonctions pour modifier des options. Ainsi que la star des fonctions PHP phpinfo().



Installation/Configuration

Sommaire


Pré-requis

Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible.



Installation

Il n'y pas d'installation nécessaire pour utiliser ces fonctions, elles font parties du coeur de PHP.



Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Options de configuration
Nom Défaut Modifiable Historique
assert.active "1" PHP_INI_ALL  
assert.bail "0" PHP_INI_ALL  
assert.warning "1" PHP_INI_ALL  
assert.callback NULL PHP_INI_ALL  
assert.quiet_eval "0" PHP_INI_ALL  
enable_dl "1" PHP_INI_SYSTEM Cette fonctionnalité obsolète sera certainement supprimée dans le futur.
max_execution_time "30" PHP_INI_ALL  
max_input_time "-1" PHP_INI_PERDIR Disponible depuis PHP 4.3.0.
max_input_nesting_level "64" PHP_INI_PERDIR Disponible depuis PHP 4.4.8 et PHP 5.2.3.
max_input_vars 1000 PHP_INI_PERDIR Disponible depuis PHP 5.3.9.
magic_quotes_gpc "1" PHP_INI_PERDIR PHP_INI_ALL en PHP <= 4.2.3. Supprimé en PHP 5.4.0.
magic_quotes_runtime "0" PHP_INI_ALL Supprimé en PHP 5.4.0.
zend.enable_gc "1" PHP_INI_ALL Disponible depuis PHP 5.3.0.
Pour plus de détails sur les modes PHP_INI_*, reportez-vous à Où une directive de configuration peut être modifiée.

Voici un éclaircissement sur l'utilisation des directives de configuration.

assert.active boolean

Active les évaluations de type assert().

assert.bail boolean

Termine le script si une assertion échoue.

assert.warning boolean

Émet une alerte PHP pour chaque assertion qui échoue.

assert.callback string

Fonction définie par le programmeur, à appeler pour chaque assertion échouée.

assert.quiet_eval boolean

Utilise la configuration courante de error_reporting() durant les évaluations d'assertions. Si activée, aucune erreur n'est affichée (error_reporting(0) implicite) durant l'évaluation. Si désactivée, les erreurs sont affichées en fonction de la configuration de error_reporting()

enable_dl boolean

Cette directive est réellement utile lorsque PHP est compilé comme module Apache. Vous pouvez activer le chargement dynamique d'extension avec la fonction PHP dl() au cas par cas, pour chaque serveur virtuel.

La raison principale pour désactiver ce système est la sécurité. Avec le chargement dynamique, il est possible de passer outre les configurations de safe mode et open_basedir. Par défaut, le chargement dynamique est autorisé, sauf avec le safe mode. En safe mode, il est toujours impossible d'utiliser la fonction dl().

max_execution_time entier

Fixe le temps maximal d'exécution d'un script, en secondes. Cela permet d'éviter que des scripts en boucles infinies saturent le serveur. La configuration par défaut est de 30 secondes. Lorsque PHP fonctionne depuis la ligne de commande, la valeur par défaut est 0.

Le temps d'exécution maximum n'est pas affecté par des appels systèmes tels que sleep(). Reportez-vous à la fonction set_time_limit() pour plus de détails.

Vous ne pouvez pas modifier la valeur de cette directive avec ini_set() lorsque PHP est configuré en safe mode. Le seul moyen de le faire est de désactiver le safe mode ou de changer la valeur dans php.ini.

Votre serveur web peut avoir d'autres configurations de la durée limite d'exécution qui peuvent également interrompre PHP. Apache a une directive Timeout et IIS a une fonction CGI pour cela. Par défaut, elles valent toutes les deux 300 secondes. Reportez-vous à la documentation de votre serveur web pour plus de détails.

max_input_time entier

Cette option spécifie la durée maximale pour analyser les données d'entrée, via POST et GET. Cette durée est mesurée depuis le moment où toutes les données sont reçues du serveur jusqu'à début de l'exécution du script.

max_input_nesting_level entier

Définit la profondeur maximale des variables d'entrées (i.e. $_GET, $_POST..)

max_input_vars integer

Le nombre de variables d'entrée pouvant être acceptées. L'utilisation de cette directive permet de limiter les possibilités d'attaque par déni de service utilisant des collisions de hashages. S'il y a plusieurs de variables en entrée que le nombre spécifié par cette directive, une alerte de type E_WARNING sera émise, et les variables en trop seront supprimées de la requête. Cette limite ne s'applique qu'à chacun des niveaux imbriqués d'un tableau multi-dimensionnel en entrée.

magic_quotes_gpc boolean
Avertissement

Cette fonctionnalité est devenue OBSOLETE depuis PHP 5.3.0 et a été SUPPRIMEE depuis PHP 5.4.0.

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.

Note:

En PHP 4, la variable $_ENV est également échappée.

Note:

Si la directive magic_quotes_sybase est aussi activée, elle écrasera magic_quotes_gpc. Avec les deux directives activées, seuls les guillemets simples seront protégés avec un autre guillemet simple (''). Les guillemets doubles, les antislashs et les NUL ne seront pas protégés.

Voir aussi get_magic_quotes_gpc().

magic_quotes_runtime boolean
Avertissement

Cette fonctionnalité est devenue OBSOLETE depuis PHP 5.3.0 et a été SUPPRIMEE depuis PHP 5.4.0.

Si magic_quotes_runtime est activé, toutes les fonctions qui obtiennent des données auprès 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.

Fonctions affectées par magic_quotes_runtime (n'incluent pas les fonctions depuis PECL):

zend.enable_gc boolean

Active ou désactive la collecte des références circulaires.



Types de ressources

Cette extension ne définit aucune ressource.




Constantes pré-définies

Les constantes listées ici sont toujours disponibles dans PHP.

Constantes prédéfinies de phpcredits()
Constante Valeur Description
CREDITS_GROUP 1 Une liste des développeurs principaux
CREDITS_GENERAL 2 Crédits généraux. Design du langage, concepts, auteurs de PHP et module SAPI.
CREDITS_SAPI 4 Une liste des API de serveurs, et leurs auteurs.
CREDITS_MODULES 8 Une liste des extensions de PHP, et leurs auteurs
CREDITS_DOCS 16 Les crédits de l'équipe de documentation
CREDITS_FULLPAGE 32 Généralement utilisé combiné avec d'autres options. Cette option indique qu'une page HTML complète doit être générée.
CREDITS_QA 64 Les crédits pour le groupe d'assurance qualité.
CREDITS_ALL -1 Tous les crédits. C'est l'équivalent de : CREDITS_DOCS + CREDITS_GENERAL + CREDITS_GROUP + CREDITS_MODULES + CREDITS_QA CREDITS_FULLPAGE. Elle génère une page HTML complète et autonome. C'est la valeur par défaut.
Constantes de phpinfo()
Constante Valeur Description
INFO_GENERAL 1 La ligne de configuration, le chemin du php.ini, la date de compilation, le système et plus encore.
INFO_CREDITS 2 Crédits de PHP. Voir aussi phpcredits().
INFO_CONFIGURATION 4 Valeurs locales et serveurs des directives PHP. Voir aussi ini_get().
INFO_MODULES 8 Les modules chargés et leurs configurations respectives.
INFO_ENVIRONMENT 16 Les variables d'environnement, qui sont aussi disponibles dans $_ENV.
INFO_VARIABLES 32 Toutes les variables prédéfinies : EGPCS (Environnement, GET, POST, Cookie, Server).
INFO_LICENSE 64 La licence PHP. Voir aussi la » FAQ de la licence.
INFO_ALL -1 Affiche toutes les valeurs citées ci-dessus. C'est la valeur par défaut.
Constantes INI
Constante Valeur Description
INI_USER 1 Inutilisé
INI_PERDIR 2 Inutilisé
INI_SYSTEM 4 Inutilisé
INI_ALL 7 Inutilisé

Les constantes d'assertions servent avec la fonction assert_options().

Constantes d'assert()
Constante Directive de configuration Description
ASSERT_ACTIVE assert.active Active l'évaluation assert().
ASSERT_CALLBACK assert.callback Fonction de rappel des assertions échouées.
ASSERT_BAIL assert.bail Termine l'exécution des assertions échouées.
ASSERT_WARNING assert.warning Émet une alerte PHP pour chaque assertion échouée.
ASSERT_QUIET_EVAL assert.quiet_eval Désactive le error_reporting durant l'évaluation des expressions d'assertion.

Les constantes suivantes ne sont disponibles que si le système d'hébergement est sur Windows, et peut vous donner des informations sur les versions, qui vous permettront de détecter la présence de fonctionnalités. Elles sont disponibles depuis PHP 5.3.0.

Constantes particulières à Windows
Constante Description
PHP_WINDOWS_VERSION_MAJOR La version majeure de Windows, qui peut être 4 (NT4/Me/98/95), 5 (XP/2003 R2/2003/2000) ou 6 (Vista/2008).
PHP_WINDOWS_VERSION_MINOR La version mineure de Windows, qui peut être 0 (Vista/2008/2000/NT4/95), 1 (XP), 2 (2003 R2/2003/XP x64), 10 (98) ou 90 (ME).
PHP_WINDOWS_VERSION_BUILD Le numéro de compilation de Windows (par exemple, Windows Vista avec SP1 a le numéro 6001)
PHP_WINDOWS_VERSION_PLATFORM La plate-forme que PHP utilise actuellement : cette valeur peut être 2 sur Windows Vista/XP/2000/NT4, Server 2008/2003 et sur Windows ME/98/95 cette valeur est 1.
PHP_WINDOWS_VERSION_SP_MAJOR La version majeure du paquet de service installé : cette valeur vaut 0 si aucun paquet de service n'est disponible. Par exemple, Windows XP avec le paquet de service 3 donne la valeur 3 à cette constante.
PHP_WINDOWS_VERSION_SP_MINOR La version mineur du paquet de service installé. Cette valeur est 0 si aucun paquet de service n'est installé.
PHP_WINDOWS_VERSION_SUITEMASK Le masque est un champ de bits qui permet de connaître la présence de différentes fonctionnalités de Windows. Voyez la table ci-dessous pour connaître les différents champs.
PHP_WINDOWS_VERSION_PRODUCTTYPE Cette constante contient la valeur utilisée pour déterminer la valeur des constantes PHP_WINDOWS_NT_*. Cette valeur peut être l'une des constantes PHP_WINDOWS_NT_*, indiquant le type de plate-forme.
PHP_WINDOWS_NT_DOMAIN_CONTROLLER Le contrôleur de domaine.
PHP_WINDOWS_NT_SERVER Un serveur système (eg. Server 2008/2003/2000). Notez que si c'est un contrôleur de domaine, il est indiqué dans PHP_WINDOWS_NT_DOMAIN_CONTROLLER.
PHP_WINDOWS_NT_WORKSTATION Un poste de travail (eg. Vista/XP/2000/NT4)

La table ci-desous présente les fonctionnalités qui peuvent être vérifiées dans le champ de bit de la constante PHP_WINDOWS_VERSION_SUITEMASK.

Champs du masque Windows
Bits Description
0x00000004 Les composants Microsoft BackOffice sont installés.
0x00000400 Windows Server 2003, Web Edition est installé.
0x00004000 Windows Server 2003, Compute Cluster Edition est installé.
0x00000080 Windows Server 2008 Datacenter, Windows Server 2003, Datacenter Edition ou Windows 2000 Datacenter Server est installé.
0x00000002 Windows Server 2008 Enterprise, Windows Server 2003, Enterprise Edition, Windows 2000 Advanced Server, ou Windows NT Server 4.0 Enterprise Edition est installé.
0x00000040 Windows XP Embedded est installé.
0x00000200 Windows Vista Home Premium, Windows Vista Home Basic, ou Windows XP Home Edition est installé.
0x00000100 Remote Desktop est supporté, mais une seule session interactive est supportée. Cette valeur est présente, à moins que le système ne fonctionne en mode serveur d'application.
0x00000001 Microsoft Small Business Server a été installé sur le système, mais a été mis à joru vers une nouvelle version de Windows.
0x00000020 Microsoft Small Business Server est installé avec la licence cliente restreinte.
0x00002000 Windows Storage Server 2003 R2 ou Windows Storage Server 2003 est installé.
0x00000010 Terminal Services est installé. Cette valeur est toujours activée. Si cette valeur est activée, mais 0x00000100 ne l'est pas, alors le système fonctionne en mode de serveur d'application.
0x00008000 Windows Home Server est installé.


Fonctions sur les options et les informations de PHP


assert_options

(PHP 4, PHP 5)

assert_optionsFixe et lit différentes options d'assertions

Description

mixed assert_options ( int $what [, mixed $value ] )

assert_options() permet de modifier les diverses options de la fonction assert(), ou simplement connaître la configuration actuelle.

Liste de paramètres

what

Options d'assertions
Option Directive Valeur par défaut Description
ASSERT_ACTIVE assert.active 1 Active l'évaluation de la fonction assert()
ASSERT_WARNING assert.warning 1 Génère une alerte PHP pour chaque assertion fausse
ASSERT_BAIL assert.bail 0 Termine l'exécution en cas d'assertion fausse
ASSERT_QUIET_EVAL assert.quiet_eval 0 Désactive le rapport d'erreur durant l'évaluation d'une assertion
ASSERT_CALLBACK assert.callback (NULL) Fonction de rappel utilisateur, pour le traitement des assertions fausses

value

Une nouvelle valeur, optionnelle, pour l'option.

Valeurs de retour

Retourne la valeur originale de l'option, ou bien FALSE en cas d'erreur.

Exemples

Exemple #1 Exemple avec assert_options()

<?php
// Ceci est notre fonction pour gérer les
// erreurs d'assertion
function assert_failure()
{
    echo 
'Échec de l\'assertion';
}

// Ceci est notre fonction de test
function test_assert($parameter)
{
    
assert(is_bool($parameter));
}

// Définit nos options d'assertion
assert_options(ASSERT_ACTIVE,   true);
assert_options(ASSERT_BAIL,     true);
assert_options(ASSERT_WARNING,  false);
assert_options(ASSERT_CALLBACK'assert_failure');

// Une assertion qui doit échouée
test_assert(1);

// Ceci n'est jamais atteint, car ASSERT_BAIL
// vaut true
echo 'Jamais atteint';
?>

Voir aussi

  • assert() - Vérifie si une assertion est fausse



assert

(PHP 4, PHP 5)

assertVérifie si une assertion est fausse

Description

bool assert ( mixed $assertion )

assert() va vérifier l'assertion assertion et prendre la mesure appropriée si le résultat est FALSE.

Si assertion est donnée sous la forme d'une chaîne, elle sera évaluée comme un code PHP par la fonction assert(). Les avantages de ce type d'assertion sont d'être moins lourd si la vérification d'assertion est désactivée, et les messages contenant l'assertion lorsque l'assertion échoue. Cela signifie que si vous passez une condition booléenne en tant qu'assertion, cette condition ne sera pas considérée comme un paramètre par la fonction d'assertion que vous avez définie avec la fonction assert_options(), la condition est convertie en chaîne de caractères avant l'appel à ce gestionnaire de fonction, et le booléen FALSE sera converti en chaîne de caractères vide.

Il est recommandé de n'utiliser les assertions que comme outil de déboguage. Vous pouvez les utiliser pour les vérifications d'usage : ces conditions doivent normalement être vraies, et indiquer une erreur de programmation si ce n'est pas le cas. Vous pouvez aussi vérifier la présence de certaines extensions ou limitations du système.

Les assertions ne doivent pas être utilisées pour faire des opérations de vérifications en production, comme des vérifications de valeur d'argument. En conditions normales, votre code doit être en état de fonctionner si la vérification d'assertion est désactivée.

Le comportement de assert() peut être configuré par assert_options() ou par les directives de configuration décrites dans la page de manuel de cette fonction.

La fonction assert_options() et la directive ASSERT_CALLBACK permettent de configurer une fonction qui sera appelée lorsque l'assertion échoue.

Les fonctions de rappel pour assert() sont particulièrement utiles pour bâtir des suites de tests automatiques, car elles vous permettent de capturer facilement le code passé à l'assertion, ainsi que des informations sur le lieu et le moment de l'assertion. Même si ces informations peuvent être appelées par d'autres méthodes, les assertions sont plus rapides et plus faciles.

La fonction de rappel doit accepter trois arguments. Le premier contient le nom du fichier qui a vu l'assertion échouer. Le second contient le numéro de ligne dans le fichier précédent. Le troisième argument contient l'expression qui a échoué (s'il y en a : les valeurs littérales comme 1 ou "deux" ne seront pas passées par cet argument).

Liste de paramètres

assertion

L'assertion.

Valeurs de retour

FALSE si l'assertion est fausse, TRUE sinon.

Exemples

Exemple #1 Gestion des assertions avec un gestionnaire personnalisé

<?php
// Activation des assertions et mise en mode discret
assert_options(ASSERT_ACTIVE1);
assert_options(ASSERT_WARNING0);
assert_options(ASSERT_QUIET_EVAL1);

// Création d'un gestionnaire d'assertions
function my_assert_handler($file$line$code)
{
    echo 
"<hr>Échec de l'assertion :
        File '
$file'<br />
        Line '
$line'<br />
        Code '
$code'<br /><hr />";
}

// Configuration de la méthode de callback
assert_options(ASSERT_CALLBACK'my_assert_handler');

// Utilisation d'une assertion qui va échouer
assert('mysql_query("")');
?>

Voir aussi



dl

(PHP 4, PHP 5)

dlCharge une extension PHP à la volée

Description

bool dl ( string $library )

Charge l'extension PHP library à la volée.

Utilisez la fonction extension_loaded() pour vérifier qu'une extension est chargée ou non. Cette fonction travaille aussi bien avec les extensions natives qu'avec les extensions dynamiquement chargées (via le php.ini ou dl()).

Avertissement

Cette fonction a été supprimée du SAPI en PHP 5.3.

Liste de paramètres

library

Ce paramètre est seulement le nom de fichier de l'extension, qui dépend de votre plate-forme. Par exemple l'extension sockets (si compilée comme module partagé, et non par défaut), sera appelée sockets.so sous Unix, et php_sockets.dll sous Windows.

Le dossier à partir duquel sont chargées vos extensions dépend de votre plate-forme :

Windows - S'il n'est pas explicitement indiqué dans le fichier php.ini, le dossier des extensions est c:\php4\extensions\ (PHP 4) ou C:\php5\ (PHP 5) par défaut.

Unix - S'il n'est pas explicitement indiqué dans le fichier php.ini, le dossier des extensions dépend de

  • Si PHP a été compilé avec l'option --enable-debug ou non
  • Si PHP a été compilé avec le support (expérimental) de ZTS (Zend Thread Safety) ou non
  • de la constante interne ZEND_MODULE_API_NO (version interne de module d'API Zend, qui est en réalité la date à laquelle une modification importante de l'API a été faite, par exemple 20010901)
En prenant ces paramètres en considération, le dossier des extensions vaut alors <install-dir>/lib/php/extensions/ <debug-or-not>-<zts-or-not>-ZEND_MODULE_API_NO, e.g. /usr/local/php/lib/php/extensions/debug-non-zts-20010901 ou /usr/local/php/lib/php/extensions/no-debug-zts-20010901.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient. Si la fonctionnalité de chargement de module n'est pas disponible, ou a été désactivée (soit en désactivant la directive enable_dl ou en activant le safe mode dans le php.ini) une E_ERROR sera émise et l'exécution du script sera stoppée. Si la fonction dl() échoue parce que la bibliothèque n'a pu être trouvée, dl() retournera FALSE et émettra un message d'alerte E_WARNING.

Exemples

Exemple #1 Exemples avec dl()

<?php
// Chargement pour toutes plates-formes
if (!extension_loaded('sqlite')) {
    if (
strtoupper(substr(PHP_OS03)) === 'WIN') {
        
dl('php_sqlite.dll');
    } else {
        
dl('sqlite.so');
    }
}

// Mais la constante PHP_SHLIB_SUFFIX est disponible depuis PHP 4.3.0
if (!extension_loaded('sqlite')) {
    
$prefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' '';
    
dl($prefix 'sqlite.' PHP_SHLIB_SUFFIX);
}
?>

Historique

Version Description
5.3.0 dl() est maintenant désactivé dans quelques SAPIs en raison de son instabilité. Le seul SAPI qui active dl() sont CLI et Embed. Utilisez les directives de chargement d'extension à la place.

Notes

Note:

dl() n'est pas supporté lorsque PHP est compilé avec le support ZTS. Utilisez les directives de chargement d'extension à la place.

Note:

dl() est sensible à la casse sur les plates-formes Unix.

Note: Cette fonction est désactivée par le safe-mode

Voir aussi



extension_loaded

(PHP 4, PHP 5)

extension_loadedDétermine si une extension est chargée ou non

Description

bool extension_loaded ( string $name )

Détermine si une extension est chargée ou non.

Liste de paramètres

name

Le nom de l'extension.

Vous pouvez connaître le nom des différentes extensions PHP en utilisant la fonction phpinfo() ou bien si vous utilisez la version CGI ou CLI de PHP, vous pouvez utiliser l'option de ligne de commande -m pour afficher toutes les extensions disponibles :

$ php -m
[PHP Modules]
xml
tokenizer
standard
sockets
session
posix
pcre
overload
mysql
mbstring
ctype

[Zend Modules]

Valeurs de retour

Retourne TRUE si l'extension name a été chargée, FALSE sinon.

Exemples

Exemple #1 Exemple avec extension_loaded()

<?php
if (!extension_loaded('gd')) {
    if (!
dl('gd.so')) {
        exit;
    }
}
?>

Historique

Version Description
5.0.0 extension_loaded() utilise le nom interne de l'extension pour vérifier si une extension est disponible ou pas. La plupart des extensions ont des noms internes écrits en minuscules, mais il peut arriver que certaines aient des noms en majuscules. Avant PHP 5, cette fonction comparait les noms en ne tenant pas compte de la casse.

Voir aussi



gc_collect_cycles

(PHP 5 >= 5.3.0)

gc_collect_cyclesForce le passage du collecteur de mémoire

Description

int gc_collect_cycles ( void )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Force le passage du collecteur de mémoire.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne le nombre de cycles collectés.

Voir aussi



gc_disable

(PHP 5 >= 5.3.0)

gc_disableDésactive le collecteur de références circulaires

Description

void gc_disable ( void )

Désactive le collecteur de références circulaires, en configuration zend.enable_gc à 0.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Aucune valeur n'est retournée.

Voir aussi



gc_enable

(PHP 5 >= 5.3.0)

gc_enableActive le collecteur de références circulaires

Description

void gc_enable ( void )

Active le collecteur de références circulaires, en définissant zend.enable_gc à 1.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Aucune valeur n'est retournée.

Voir aussi



gc_enabled

(PHP 5 >= 5.3.0)

gc_enabledRetourne le statut du collecteur de références circulaires

Description

bool gc_enabled ( void )

Retourne le statut du collecteur de références circulaires.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne TRUE si le collecteur est actif, et FALSE sinon.

Exemples

Exemple #1 Exemple avec gc_enabled()

<?php
if(gc_enabled()) gc_collect_cycles();
?>

Voir aussi



get_cfg_var

(PHP 4, PHP 5)

get_cfg_varRetourne la valeur d'une option de PHP

Description

string get_cfg_var ( string $option )

Retourne la valeur de l'option option de configuration PHP.

get_cfg_var() ne retourne pas les options qui ont été choisies lors de la compilation de PHP, ni ne lit dans le fichier de configuration d'Apache.

Pour vérifier si le système utilise le fichier de configuration, essayez de lire la valeur de cfg_file_path. Si cette valeur est disponible, alors le fichier de configuration est utilisé.

Liste de paramètres

option

Le nom de l'option de configuration.

Valeurs de retour

Retourne la valeur courante de l'option PHP option ou bien FALSE si une erreur survient.

Historique

Version Description
5.3.0 get_cfg_var() a été modifié afin de permettre de retourner un tableau de directives.

Voir aussi

  • ini_get() - Lit la valeur d'une option de configuration
  • ini_get_all() - Lit toutes les valeurs de configuration



get_current_user

(PHP 4, PHP 5)

get_current_userRetourne le nom du possesseur du script courant

Description

string get_current_user ( void )

Retourne le nom du possesseur du script courant.

Valeurs de retour

Retourne le nom de l'utilisateur, sous la forme d'une chaîne de caractères.

Exemples

Exemple #1 Exemple avec get_current_user()

<?php
echo 'Propriétaire du script courant : ' get_current_user();
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Propriétaire du script courant : SYSTEM

Voir aussi

  • getmyuid() - Retourne l'UID du propriétaire du script actuel
  • getmygid() - Retourne le GID du propriétaire du script
  • getmypid() - Retourne le numéro de processus courant de PHP
  • getmyinode() - Retourne l'inode du script
  • getlastmod() - Retourne la date de dernière modification de la page



get_defined_constants

(PHP 4 >= 4.1.0, PHP 5)

get_defined_constantsRetourne la liste des constantes et leurs valeurs

Description

array get_defined_constants ([ bool $categorize = false ] )

Retourne les noms et valeurs des constantes déjà définies. Cela inclut les constantes créées par les extensions, et celles créées avec la fonction define().

Liste de paramètres

categorize

Permet à cette fonction de retourner un tableau multidimensionnel avec les catégories en tant que clés de la première dimension et les constantes ainsi que leurs valeurs dans la seconde dimension.

<?php
define
("MY_CONSTANT"1);
print_r(get_defined_constants(true));
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Array
(
    [Core] => Array
        (
            [E_ERROR] => 1
            [E_WARNING] => 2
            [E_PARSE] => 4
            [E_NOTICE] => 8
            [E_CORE_ERROR] => 16
            [E_CORE_WARNING] => 32
            [E_COMPILE_ERROR] => 64
            [E_COMPILE_WARNING] => 128
            [E_USER_ERROR] => 256
            [E_USER_WARNING] => 512
            [E_USER_NOTICE] => 1024
            [E_ALL] => 2047
            [TRUE] => 1
        )

    [pcre] => Array
        (
            [PREG_PATTERN_ORDER] => 1
            [PREG_SET_ORDER] => 2
            [PREG_OFFSET_CAPTURE] => 256
            [PREG_SPLIT_NO_EMPTY] => 1
            [PREG_SPLIT_DELIM_CAPTURE] => 2
            [PREG_SPLIT_OFFSET_CAPTURE] => 4
            [PREG_GREP_INVERT] => 1
        )

    [user] => Array
        (
            [MY_CONSTANT] => 1
        )

)

Valeurs de retour

Historique

Version Description
5.3.1 Windows uniquement : Les constantes internes sont catégorisées sous Core, précédemment, elles l'étaient sous mhash.
5.3.0 Les constantes internes sont maintenant catégorisées sous Core alors qu'elles l'étaient sous internal auparavant. Sous WIndows, les constantes internes étaient catégorisées sous mhash.
5.2.11 Le paramètre categorize agit maintenant comme entendu. Avant, le paramètre categorize était interprété comme !is_null($categorize), faisant que n'importe quelle valeur autre que NULL forçait la constante a être catégorisée.
5.0.0 Le paramètre categorize a été ajouté.

Exemples

Exemple #1 Exemple avec get_defined_constants()

<?php
print_r
(get_defined_constants());
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Array
(
    [E_ERROR] => 1
    [E_WARNING] => 2
    [E_PARSE] => 4
    [E_NOTICE] => 8
    [E_CORE_ERROR] => 16
    [E_CORE_WARNING] => 32
    [E_COMPILE_ERROR] => 64
    [E_COMPILE_WARNING] => 128
    [E_USER_ERROR] => 256
    [E_USER_WARNING] => 512
    [E_USER_NOTICE] => 1024
    [E_ALL] => 2047
    [TRUE] => 1
)

Voir aussi



get_extension_funcs

(PHP 4, PHP 5)

get_extension_funcsListe les fonctions d'une extension

Description

array get_extension_funcs ( string $module_name )

Retourne le nom des fonctions définies dans le module module_name.

Liste de paramètres

module_name

Le nom du module.

Note:

Ce paramètre doit être en minuscule.

Valeurs de retour

Retourne un tableau contenant toutes les fonctions, ou FALSE si module_name n'est pas une extension valide.

Exemples

Exemple #1 Affiche toutes les fonctions XML

<?php
print_r
(get_extension_funcs("xml"));
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Array
(
    [0] => xml_parser_create
    [1] => xml_parser_create_ns
    [2] => xml_set_object
    [3] => xml_set_element_handler
    [4] => xml_set_character_data_handler
    [5] => xml_set_processing_instruction_handler
    [6] => xml_set_default_handler
    [7] => xml_set_unparsed_entity_decl_handler
    [8] => xml_set_notation_decl_handler
    [9] => xml_set_external_entity_ref_handler
    [10] => xml_set_start_namespace_decl_handler
    [11] => xml_set_end_namespace_decl_handler
    [12] => xml_parse
    [13] => xml_parse_into_struct
    [14] => xml_get_error_code
    [15] => xml_error_string
    [16] => xml_get_current_line_number
    [17] => xml_get_current_column_number
    [18] => xml_get_current_byte_index
    [19] => xml_parser_free
    [20] => xml_parser_set_option
    [21] => xml_parser_get_option
    [22] => utf8_encode
    [23] => utf8_decode
)

Voir aussi



get_include_path

(PHP 4 >= 4.3.0, PHP 5)

get_include_pathLit la valeur de la directive de configuration include_path

Description

string get_include_path ( void )

Lit la valeur de la directive de configuration include_path.

Valeurs de retour

Retourne le chemin, sous la forme d'une chaîne de caractères.

Exemples

Exemple #1 Exemple avec get_include_path()

<?php
// Fonctionne depuis PHP 4.3.0
echo get_include_path();

// Fonctionne sur toutes les versions
echo ini_get('include_path');
?>

Voir aussi



get_included_files

(PHP 4, PHP 5)

get_included_filesRetourne un tableau avec les noms des fichiers qui sont inclus dans un script

Description

array get_included_files ( void )

Retourne un tableau contenant les noms de tous les fichiers qui ont été ajoutés au script avec les fonctions include, include_once, require ou require_once.

Valeurs de retour

Retourne un tableau contenant les noms de tous les fichiers.

Le script en cours est considéré comme fichier inclus, il sera donc listé avec les autres fichiers dont il est fait référence avec include et les fonctions assimilées.

Les fichiers inclus ou requis plusieurs fois ne s'affichent qu'une fois dans le tableau retourné.

Historique

Version Description
4.0.1 En PHP 4.0.1 et inférieure, cette fonction supposait que les fichiers requis utilisait l'extension .php ; les autres extensions ne fonctionnaient pas. Par ailleurs, dans cette version, le tableau retourné par la fonction get_included_files() était un tableau associatif et ne reprenait que les fichiers ajoutés avec include et include_once.

Exemples

Exemple #1 Exemple avec get_included_files()

<?php
// Ce fichier est abc.php

include 'test1.php';
include_once 
'test2.php';
require 
'test3.php';
require_once 
'test4.php';

$included_files get_included_files();

foreach (
$included_files as $filename) {
    echo 
"$filename\n";
}

?>

L'exemple ci-dessus va afficher :

abc.php
test1.php
test2.php
test3.php
test4.php

Notes

Note:

Les fichiers inclus en utilisant la directive de configuration auto_prepend_file ne sont pas listés.

Voir aussi



get_loaded_extensions

(PHP 4, PHP 5)

get_loaded_extensionsRetourne la liste de tous les modules compilés et chargés

Description

array get_loaded_extensions ([ bool $zend_extensions = false ] )

Retourne un tableau contenant les noms de tous les modules compilés et chargés par l'application PHP courante.

Liste de paramètres

zend_extensions

Retourne uniquement les extensions Zend. Par défaut vaut FALSE et ne liste que les extensions PHP classiques comme mysqli par exemple.

Valeurs de retour

Retourne un tableau indexé des noms de tous les modules.

Historique

Version Description
5.2.4 Le paramètre optionnel zend_extensions a été ajouté

Exemples

Exemple #1 Exemple avec get_loaded_extensions()

<?php
print_r
(get_loaded_extensions());
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Array
(
   [0] => xml
   [1] => wddx
   [2] => standard
   [3] => session
   [4] => posix
   [5] => pgsql
   [6] => pcre
   [7] => gd
   [8] => ftp
   [9] => db
   [10] => calendar
   [11] => bcmath
)

Voir aussi



get_magic_quotes_gpc

(PHP 4, PHP 5)

get_magic_quotes_gpcRetourne la configuration actuelle de l'option magic_quotes_gpc

Description

int get_magic_quotes_gpc ( void )

Retourne la configuration actuelle de l'option magic_quotes_gpc

Gardez en tête que vous ne pouvez pas définir magic_quotes_gpc au moment de l'exécution.

Pour plus d'informations sur magic_quotes, voir la section sur les guillemets magiques.

Valeurs de retour

Retourne 0 si magic_quotes_gpc est désactivée, 1 sinon.

Exemples

Exemple #1 Exemple avec get_magic_quotes_gpc()

<?php
echo get_magic_quotes_gpc();         // 1
echo $_POST['lastname'];             // O\'reilly
echo addslashes($_POST['lastname']); // O\\\'reilly

if (get_magic_quotes_gpc()) {
    
$lastname stripslashes($_POST['lastname']);
}
else {
    
$lastname $_POST['lastname'];
}

// Si vous utilisez MySQL
$lastname mysql_real_escape_string($lastname);

echo 
$lastname// O\'reilly
$sql "INSERT INTO lastnames (lastname) VALUES ('$lastname')";
?>

Notes

Note:

Si la directive magic_quotes_sybase est activée, elle remplacera complètement magic_quotes_gpc. Ce qui fait que même si get_magic_quotes() retourne TRUE les guillemets doubles, les antislashs ou les caractères NULL ne seront pas protégés. Seul les guillemets simples le seront. Dans ce cas, ils ressembleront à ''.

Voir aussi



get_magic_quotes_runtime

(PHP 4, PHP 5)

get_magic_quotes_runtimeRetourne la configuration actuelle de l'option magic_quotes_runtime

Description

int get_magic_quotes_runtime ( void )

Retourne la configuration actuelle de l'option magic_quotes_runtime.

Valeurs de retour

Retourne 0 si magic_quotes_runtime est désactivée, 1 sinon.

Exemples

Exemple #1 Exemple avec get_magic_quotes_runtime()

<?php
// Vérifie si magic_quotes_runtime est activé
if(get_magic_quotes_runtime())
{
    
// Désactivation
    
set_magic_quotes_runtime(false);
}
?>

Voir aussi



get_required_files

(PHP 4, PHP 5)

get_required_filesAlias de get_included_files()

Description

Cette fonction est un alias de : get_included_files().



getenv

(PHP 4, PHP 5)

getenvRetourne la valeur d'une variable d'environnement

Description

string getenv ( string $varname )

Retourne la valeur d'une variable d'environnement.

Vous pouvez voir une liste complète des variables d'environnement en utilisant la fonction phpinfo(). Vous pouvez trouver la signification de chacune d'entre elles en consultant la » RFC 3875, en particulier la section 4.1 "Request Meta-Variables".

Liste de paramètres

varname

Le nom de la variable.

Valeurs de retour

Retourne la valeur de la variable d'environnement varname, ou FALSE si la variable d'environnement varname n'existe pas.

Exemples

Exemple #1 Exemple avec getenv()

<?php
// Exemple d'utilisation de getenv()
$ip getenv('REMOTE_ADDR');

// Ou utilisez simplement une Superglobale ($_SERVER ou $_ENV)
$ip $_SERVER['REMOTE_ADDR'];
?>

Voir aussi



getlastmod

(PHP 4, PHP 5)

getlastmodRetourne la date de dernière modification de la page

Description

int getlastmod ( void )

Retourne la date de dernière modification de la page.

Si vous voulez récupérer la date de la dernière modification d'un fichier différent, utilisez la fonction filemtime().

Valeurs de retour

Retourne la date de dernière modification de la page. La valeur retournée est un timestamp UNIX, utilisable comme paramètre avec la fonction date(). Retourne FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec getlastmod()

<?php
// affiche par exemple 'Dernière modification: April 20 2004 20:43:59.'
echo "Dernière modification : " date ("F d Y H:i:s."getlastmod());
?>

Voir aussi

  • date() - Formate une date/heure locale
  • getmyuid() - Retourne l'UID du propriétaire du script actuel
  • getmygid() - Retourne le GID du propriétaire du script
  • get_current_user() - Retourne le nom du possesseur du script courant
  • getmyinode() - Retourne l'inode du script
  • getmypid() - Retourne le numéro de processus courant de PHP
  • filemtime() - Lit la date de dernière modification du fichier



getmygid

(PHP 4 >= 4.1.0, PHP 5)

getmygidRetourne le GID du propriétaire du script

Description

int getmygid ( void )

Retourne le GID du propriétaire du script.

Valeurs de retour

Retourne le GID du propriétaire du script courant, ou FALSE si une erreur survient.

Voir aussi



getmyinode

(PHP 4, PHP 5)

getmyinodeRetourne l'inode du script

Description

int getmyinode ( void )

Retourne l'inode du script courant.

Valeurs de retour

Retourne l'inode du script courant, sous la forme d'un entier, ou FALSE si une erreur survient.

Voir aussi

  • getmygid() - Retourne le GID du propriétaire du script
  • getmyuid() - Retourne l'UID du propriétaire du script actuel
  • getmypid() - Retourne le numéro de processus courant de PHP
  • get_current_user() - Retourne le nom du possesseur du script courant
  • getlastmod() - Retourne la date de dernière modification de la page



getmypid

(PHP 4, PHP 5)

getmypidRetourne le numéro de processus courant de PHP

Description

int getmypid ( void )

Retourne le numéro de processus courant de PHP.

Valeurs de retour

Retourne le numéro de processus courant de PHP, ou FALSE si une erreur survient.

Notes

Avertissement

Les identifiants de processus ne sont pas uniques, et forment une source d'entropie faible. Nous recommandons de ne pas utiliser les pid pour assurer la sécurité d'un système.

Voir aussi



getmyuid

(PHP 4, PHP 5)

getmyuidRetourne l'UID du propriétaire du script actuel

Description

int getmyuid ( void )

Retourne l'UID du propriétaire du script actuel.

Valeurs de retour

Retourne l'identifiant du propriétaire du script actuel (UID) ou FALSE en cas d'erreur.

Voir aussi



getopt

(PHP 4 >= 4.3.0, PHP 5)

getoptLit des options passées dans la ligne de commande

Description

array getopt ( string $options [, array $longopts ] )

getopt() lit les options passées dans la ligne de commande.

Liste de paramètres

options
Chaque caractère dans cette chaîne sera utilisé en tant que caractères optionnels et devra correspondre aux options passées, commençant par un tiret simple (-). Par exemple, une chaîne optionnelle "x" correspondra à l'option -x. Seuls a-z, A-Z et 0-9 sont autorisés.
longopts
Un tableau d'options. Chaque élément de ce tableau sera utilisé comme option et devra correspondre aux options passées, commençant par un tiret double (--). Par exemple, un élément longopts "opt" correspondra à l'option --opt.

Le paramètre options peut contenir les éléments suivants :

  • Caractères individuels (n'accepte pas de valeur)
  • Caractères suivis par un deux-points (le paramètre nécessite une valeur)
  • Caractères suivis par deux deux-points (valeur optionnelle)
Les valeurs optionnelles sont les premiers arguments après la chaîne. Peut importe que la valeur soit suivie d'un espace ou non.

Note: Les valeurs optionnelles n'acceptent pas l'espace comme séparateur.

Note:

Le format des paramètres options et longopts est identique ; la seule différence est que longopts prend un tableau en option (où chaque élément est une option) alors que options prend une chaîne (où chaque caractère est une option).

Valeurs de retour

Cette fonction retourne un tableau d'options/arguments, ou FALSE si une erreur survient.

Note:

L'analyse des options s'arrêtera lorsque la première mauvaise option sera trouvée, et tout ce qui suivra sera ignoré.

Historique

Version Description
5.3.0 Ajout du support de "=" comme séparateur argument/valeur.
5.3.0 Ajout du support des valeurs optionnelles (spécifié par "::").
5.3.0 Le paramètre longopts est disponible sur tous les systèmes.
5.3.0 Cette fonction n'est plus dépendante du système et fonctionne maintenant également sous Windows.

Exemples

Exemple #1 Exemple avec getopt()

<?php
$options 
getopt("f:hp:");
var_dump($options);
?>

L'exécution du script ci-dessus avec la commande php script.php -fvalue -h affichera :

array(2) {
  ["f"]=>
  string(5) "value"
  ["h"]=>
  bool(false)
}

Exemple #2 Second exemple avec getopt()

<?php
$shortopts  
"";
$shortopts .= "f:";  // Valeur requise
$shortopts .= "v::"// Valeur optionnelle
$shortopts .= "abc"// Ces options n'acceptent pas de valeur

$longopts  = array(
    
"required:",     // Valeur requise
    
"optional::",    // Valeur optionnelle
    
"option",        // Aucune valeur
    
"opt",           // Aucune valeur
);
$options getopt($shortopts$longopts);
var_dump($options);
?>

L'exécution du script ci-dessus avec la commande php script.php -f "value for f" -v -a --required value --optional="optional value" --option affichera :

array(6) {
  ["f"]=>
  string(11) "value for f"
  ["v"]=>
  bool(false)
  ["a"]=>
  bool(false)
  ["required"]=>
  string(5) "value"
  ["optional"]=>
  string(14) "optional value"
  ["option"]=>
  bool(false)
}

Exemple #3 Troisième exemple avec getopt()

Passage de plusieurs options

<?php
$options 
getopt("abc");
var_dump($options);
?>

L'exécution du script ci-dessus avec la commande php script.php -aaac affichera :

array(2) {
  ["a"]=>
  array(3) {
    [0]=>
    bool(false)
    [1]=>
    bool(false)
    [2]=>
    bool(false)
  }
  ["c"]=>
  bool(false)
}

Voir aussi



getrusage

(PHP 4, PHP 5)

getrusageRetourne le niveau d'utilisation des ressources

Description

array getrusage ([ int $who = 0 ] )

C'est une interface à la fonction système getrusage(2). Elle retourne un tableau associatif contenant les informations renvoyées par cet appel système.

Liste de paramètres

who

Si who est égal à 1, getrusage() sera appelé avec le paramètre RUSAGE_CHILDREN.

Valeurs de retour

Retourne un tableau associatif contenant les données retournées depuis l'appel système. Toutes les entrées sont accessibles en utilisant leurs noms de champs documentés.

Exemples

Exemple #1 Exemple avec getrusage()

<?php
$dat 
getrusage();
echo 
$dat["ru_nswap"];         // Taille de la mémoire swap
echo $dat["ru_majflt"];        // Nombre de pages mémoires utilisées
echo $dat["ru_utime.tv_sec"];  // Temps utilisateur (en secondes)
echo $dat["ru_utime.tv_usec"]; // Temps utilisateur (en microsecondes)
?>

Notes

Note: Cette fonction n'est pas implémentée sous Windows.

Voir aussi

  • La page de manuel getrusage(2) de votre système



ini_alter

(PHP 4, PHP 5)

ini_alterAlias de ini_set()

Description

Cette fonction est un alias de : ini_set().



ini_get_all

(PHP 4 >= 4.2.0, PHP 5)

ini_get_allLit toutes les valeurs de configuration

Description

array ini_get_all ([ string $extension [, bool $details = true ]] )

Lit toutes les valeurs de configuration.

Liste de paramètres

extension

Un nom d'extension, optionnel. S'il est défini, la fonction retournera uniquement les options spécifiques à cette extension.

details

Récupère les détails, ou uniquement la valeur courante de chaque configuration. Par défaut, vaut TRUE (récupère les détails).

Valeurs de retour

Retourne un tableau associatif dont les clés sont les noms des directives.

Lorsque le paramètre details vaut TRUE (défaut), le tableau contiendra les valeurs global_value (définies dans le fichier php.ini), local_value (définie éventuellement avec la fonction ini_set() ou via un .htaccess), et access (le degré d'accès).

Lorsque le paramètre details vaut FALSE, la valeur sera la valeur courant de l'option.

Voir le manuel pour plus d'informations sur la signification du degré d'accès.

Note:

Il est possible pour une directive d'avoir plusieurs degrés d'accès, et c'est la raison pour laquelle access montre les valeurs du masque appropriées.

Historique

Version Description
5.3.0 Ajout du paramètre details.

Exemples

Exemple #1 Exemple avec ini_get_all()

<?php
print_r
(ini_get_all("pcre"));
print_r(ini_get_all());
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Array
(
    [pcre.backtrack_limit] => Array
        (
            [global_value] => 100000
            [local_value] => 100000
            [access] => 7
        )

    [pcre.recursion_limit] => Array
        (
            [global_value] => 100000
            [local_value] => 100000
            [access] => 7
        )

)
Array
(
    [allow_call_time_pass_reference] => Array
        (
            [global_value] => 0
            [local_value] => 0
            [access] => 6
        )

    [allow_url_fopen] => Array
        (
            [global_value] => 1
            [local_value] => 1
            [access] => 4
        )

    ...

)

Exemple #2 Désactive le paramètre details

<?php
print_r
(ini_get_all("pcre"false)); // Ajouté en PHP 5.3.0
print_r(ini_get_all(nullfalse)); // Ajouté en PHP 5.3.0
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Array
(
    [pcre.backtrack_limit] => 100000
    [pcre.recursion_limit] => 100000
)
Array
(
    [allow_call_time_pass_reference] => 0
    [allow_url_fopen] => 1
    ...
)

Voir aussi



ini_get

(PHP 4, PHP 5)

ini_getLit la valeur d'une option de configuration

Description

string ini_get ( string $varname )

Retourne la valeur de l'option de configuration varname en cas de succès.

Liste de paramètres

varname

Le nom de l'option de configuration.

Valeurs de retour

Retourne la valeur de l'option de configuration varname en cas de succès, ou une chaîne de caractères vide pour les valeurs NULL. Retourne FALSE si l'option de configuration n'existe pas.

Exemples

Exemple #1 Exemples avec ini_get()

<?php
/*
Notre fichier php.ini contient les directives suivantes :

display_errors = On
register_globals = Off
post_max_size = 8M
*/

echo 'display_errors = ' ini_get('display_errors') . "\n";
echo 
'register_globals = ' ini_get('register_globals') . "\n";
echo 
'post_max_size = ' ini_get('post_max_size') . "\n";
echo 
'post_max_size+1 = ' . (ini_get('post_max_size')+1) . "\n";
echo 
'post_max_size in bytes = ' return_bytes(ini_get('post_max_size'));

function 
return_bytes($val) {
    
$val trim($val);
    
$last strtolower($val[strlen($val)-1]);
    switch(
$last) {
        
// Le modifieur 'G' est disponible depuis PHP 5.1.0
        
case 'g':
            
$val *= 1024;
        case 
'm':
            
$val *= 1024;
        case 
'k':
            
$val *= 1024;
    }

    return 
$val;
}

?>

L'exemple ci-dessus va afficher quelque chose de similaire à :


display_errors = 1
register_globals = 0
post_max_size = 8M
post_max_size+1 = 9
post_max_size in bytes = 8388608

Notes

Note: Lecture de valeurs booléennes

Une directive de configuration ayant la valeur de off sera retourné sous la forme d'une chaîne vide ou "0" alors que la valeur on retournera "1". Cette fonction peut également retourner la valeur littérale du fichier INI.

Note: Lors de la lecture des tailles de mémoire

Plusieurs directives traitant de taille mémoire, comme upload_max_filesize, sont stockées dans le fichier php.ini avec une notation courte. ini_get() retourne la chaîne exacte stockée dans le fichier php.ini et NON PAS son équivalent entier. Appliquer des opérations arithmétiques classiques sur ces valeurs ne conduira à rien de bon. L'exemple ci-dessous montre une façon de convertir la notation sténographique en octets, de la même façon dont le fait le source PHP.

Voir aussi



ini_restore

(PHP 4, PHP 5)

ini_restoreRestaure la valeur de l'option de configuration

Description

void ini_restore ( string $varname )

Restaure la valeur originale de l'option de configuration varname.

Liste de paramètres

varname

Le nom de l'option de configuration.

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Exemple avec ini_restore()

<?php
$setting 
'y2k_compliance';

echo 
'Valeur courante de \'' $setting '\': ' ini_get($setting), PHP_EOL;

ini_set($settingini_get($setting) ? 1);
echo 
'Nouvelle valeur de \'' $setting '\': ' ini_get($setting), PHP_EOL;

ini_restore($setting);
echo 
'Valeur originale de \'' $setting '\': ' ini_get($setting), PHP_EOL;
?>

L'exemple ci-dessus va afficher :

Valeur courante de 'y2k_compliance': 1
Nouvelle valeur de 'y2k_compliance': 0
Valeur originale de 'y2k_compliance': 1

Voir aussi

  • ini_get() - Lit la valeur d'une option de configuration
  • ini_get_all() - Lit toutes les valeurs de configuration
  • ini_set() - Modifie la valeur d'une option de configuration



ini_set

(PHP 4, PHP 5)

ini_setModifie la valeur d'une option de configuration

Description

string ini_set ( string $varname , string $newvalue )

Change la valeur de l'option de configuration varname et lui donne celle de newvalue. La valeur de l'option de configuration sera modifiée durant toute l'exécution du script et pour ce script spécifiquement. Elle reprendra sa valeur par défaut dès la fin du script.

Liste de paramètres

varname

Les options disponibles ne peuvent pas toutes être modifiées avec ini_set(). La liste de toutes les options disponibles se trouve dans l'annexe.

newvalue

La nouvelle valeur pour l'option.

Valeurs de retour

Retourne l'ancienne valeur en cas de succès, FALSE si une erreur survient.

Exemples

Exemple #1 Définit une option de configuration

<?php
echo ini_get('display_errors');

if (!
ini_get('display_errors')) {
    
ini_set('display_errors'1);
}

echo 
ini_get('display_errors');
?>

Voir aussi



magic_quotes_runtime

(PHP 4, PHP 5)

magic_quotes_runtimeAlias de set_magic_quotes_runtime()

Description

Cette fonction est un alias de : set_magic_quotes_runtime()



main

mainFausse documentation pour main()

Description

Il n'y a pas de fonction appelée main(), hormis dans les sources PHP. En PHP 4.3.0, un nouveau type de gestion d'erreur a été introduit dans les sources de PHP : php_error_docref. Une des fonctionnalité était de fournir un lien vers la page de manuel de PHP lorsque les directives html_errors (par défaut) et docref_root (par défaut jusqu'en PHP 4.3.2) sont activées.

Certains messages d'erreur faisaient référence à une page de manuel pour la fonction main() alors que cette page n'existe pas. Ajoutez alors un » rapport de bug, en anglais, où vous mentionnez la fonction PHP vous ayant conduite sur cette page. Cette erreur sera corrigée et documentée.

Erreurs connues pour diriger sur la page main()
Nom de la fonction Ne pointe plus sur cette page depuis la version
include 5.1.0
include_once 5.1.0
require 5.1.0
require_once 5.1.0



memory_get_peak_usage

(PHP 5 >= 5.2.0)

memory_get_peak_usageRetourne la quantité de mémoire maximale allouée par PHP

Description

int memory_get_peak_usage ([ bool $real_usage = false ] )

Retourne la quantité de mémoire maximale, en octets, qui a été allouée à votre script PHP.

Liste de paramètres

real_usage

Définir à TRUE pour récupérer la taille réelle de la mémoire allouée par le système. Si ce paramètre n'est pas défini ou vaut FALSE, seule la mémoire utilisée par emalloc() sera retournée.

Valeurs de retour

Retourne la quantité de mémoire, en octets.

Historique

Version Description
5.2.1 La compilation avec l'option de configuration --enable-memory-limit n'est plus nécessaire pour que cette fonction existe.
5.2.0 Le paramètre real_usage a été ajouté.

Voir aussi



memory_get_usage

(PHP 4 >= 4.3.2, PHP 5)

memory_get_usageIndique la quantité de mémoire utilisée par PHP

Description

int memory_get_usage ([ bool $real_usage = false ] )

Retourne la quantité de mémoire allouée à PHP à cet instant.

Liste de paramètres

real_usage

Définir à TRUE pour récupérer la taille réelle de la mémoire allouée par le système. Si ce paramètre n'est pas défini ou vaut FALSE, seule la mémoire utilisée par emalloc() sera retournée.

Valeurs de retour

Retourne la quantité de mémoire, en octets.

Historique

Version Description
5.2.1 La compilation avec l'option de configuration --enable-memory-limit n'est plus nécessaire pour que cette fonction existe.
5.2.0 Le paramètre real_usage a été ajouté.

Exemples

Exemple #1 Exemple avec memory_get_usage()

<?php
// Ceci n'est qu'un exemple. Les chiffres ci-dessous
// différeront suivant les systèmes et les configurations

echo memory_get_usage() . "\n"// 36640

$a str_repeat("Hello"4242);

echo 
memory_get_usage() . "\n"// 57960

unset($a);

echo 
memory_get_usage() . "\n"// 36744

?>

Voir aussi



php_ini_loaded_file

(PHP 5 >= 5.2.4)

php_ini_loaded_fileRécupère le chemin d'un fichier php.ini chargé

Description

string php_ini_loaded_file ( void )

Vérifie si un fichier php.ini est chargé, et récupère son chemin.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Le chemin du fichier php.ini chargé, ou FALSE si aucun n'a été chargé.

Exemples

Exemple #1 Exemple avec php_ini_loaded_file()

<?php
$inipath 
php_ini_loaded_file();

if (
$inipath) {
    echo 
'php.ini chargé : ' $inipath;
} else {
    echo 
'Aucun fichier php.ini n\'a été chargé';
}
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

php.ini chargé : /usr/local/php/php.ini

Voir aussi



php_ini_scanned_files

(PHP 4 >= 4.3.0, PHP 5)

php_ini_scanned_filesRetourne la liste des fichiers .ini analysés dans les dossiers de configuration supplémentaires

Description

string php_ini_scanned_files ( void )

php_ini_scanned_files() retourne une liste de noms de fichiers de configuration analysés, en plus de php.ini. Cette liste est au format CSV. Ces fichiers sont situés dans un dossier défini par l'option --with-config-file-scan-dir , définie au moment de la compilation.

Les fichiers retournés incluent le chemin, comme déclaré dans la directive --with-config-file-scan-dir . De plus, chaque virgule est suivie d'une nouvelle ligne.

Valeurs de retour

Retourne une chaîne de caractères, où les noms de fichiers sont séparés par des virgules. Si --with-config-file-scan-dir n'était pas configuré, FALSE est retourné. Si cette option était configurée, mais que le dossier était vide, une chaîne vide est retournée. Si un fichier n'est pas lisible, le nom du fichier sera inclus dans la liste, mais une erreur sera générée. Cette erreur sera visible au moment de la compilation, et lorsque vous appellerez la fonction php_ini_scanned_files().

Exemples

Exemple #1 Un exemple de liste retournée par php_ini_scanned_files()

<?php
if ($filelist php_ini_scanned_files()) {
    if (
strlen($filelist) > 0) {
        
$files explode(','$filelist);

        foreach (
$files as $file) {
            echo 
"<li>" trim($file) . "</li>\n";
        }
    }
}
?>

Voir aussi

  • ini_set() - Modifie la valeur d'une option de configuration
  • phpinfo() - Affiche de nombreuses informations sur la configuration de PHP
  • php_ini_loaded_file() - Récupère le chemin d'un fichier php.ini chargé



php_logo_guid

(PHP 4, PHP 5)

php_logo_guidRetourne l'identifiant du logo PHP

Description

string php_logo_guid ( void )

Cette fonction retourne l'identifiant qui peut être utilisé pour afficher le logo PHP en utilisant une image incorporée dans les sources. Le logo est affiché uniquement si expose_php vaut On.

Valeurs de retour

Retourne PHPE9568F34-D428-11d2-A769-00AA001ACF42.

Exemples

Exemple #1 Exemple avec php_logo_guid()

<?php

echo '<img src="' $_SERVER['PHP_SELF'] .
     
'?=' php_logo_guid() . '" alt="Logo PHP !" />';

?>

Voir aussi



php_sapi_name

(PHP 4 >= 4.0.1, PHP 5)

php_sapi_nameRetourne le type d'interface utilisée entre le serveur web et PHP

Description

string php_sapi_name ( void )

Retourne une chaîne en minuscule qui décrit le type d'interface (l'API, SAPI serveur) que PHP utilise. Par exemple, en PHP CLI, cette chaîne sera "cli" tandis qu'avec Apache, elle pourra avoir plusieurs valeurs différentes suivant le SAPI exact utilisé. Les valeurs possibles sont listées ci-dessous.

Valeurs de retour

Retourne le type de l'interface, sous la forme d'une chaîne de caractères en minuscule.

Voici une liste non exhaustive des valeurs possibles : aolserver, apache, apache2filter, apache2handler, caudium, cgi (jusqu'en PHP 5.3), cgi-fcgi, cli, continuity, embed, isapi, litespeed, milter, nsapi, phttpd, pi3web, roxen, thttpd, tux et webjames.

Exemples

Exemple #1 Exemple avec php_sapi_name()

Cet exemple cherche la sous-chaîne cgi car elle peut également valoir cgi-fcgi.

<?php
$sapi_type 
php_sapi_name();
if (
substr($sapi_type03) == 'cgi') {
    echo 
"Vous utilisez CGI PHP\n";
} else {
    echo 
"Vous n'utilisez pas CGI PHP\n";
}
?>

Notes

Note: Une approche alternative

La constante PHP PHP_SAPI a une valeur identique à php_sapi_name().

Astuce

Un comportement inattendu

Le SAPI défini ne doit pas être ambigu, car par exemple, au lieu de apache, il peut être défini à apache2handler ou apache2filter.

Voir aussi



php_uname

(PHP 4 >= 4.0.2, PHP 5)

php_unameRetourne les informations sur le système d'exploitation

Description

string php_uname ([ string $mode = "a" ] )

php_uname() retourne une description sur le système d'exploitation sur lequel tourne PHP. C'est la même chaîne que celle que vous voyez en haut du phpinfo(). Si vous voulez juste savoir le nom du système d'exploitation, utilisez plutôt la constante PHP_OS mais gardez à l'esprit que cette constante contient le nom du système sur lequel PHP a été compilé.

Sur certaines vieilles plate-formes Unix, il n'est pas possible de déterminer les informations courantes de l'OS, auquel cas cette fonction se contente de retourner le nom de l'OS sur lequel PHP a été compilé. Cela n'arrivera que si votre bibliothèque uname() n'existe pas ou ne fonctionne pas.

Liste de paramètres

mode

mode est un seul caractère qui définit quelles seront les informations à retourner :

  • 'a': par défaut, contient tous les modes de la séquence "s n r v m".
  • 's': nom du système d'exploitation. Par exemple, FreeBSD.
  • 'n': nom de l'hôte. Par exemple, localhost.example.com.
  • 'r': nom de la version. Par exemple, 5.1.2-RELEASE.
  • 'v': information sur la version. Varie énormément suivant le système d'exploitation.
  • 'm': type de la machine. Par exemple, i386.

Valeurs de retour

Retourne la description, sous la forme d'une chaîne de caractères.

Exemples

Exemple #1 Exemples avec php_uname()

<?php
echo php_uname();
echo 
PHP_OS;

/* Affichages possibles :
Linux localhost 2.4.21-0.13mdk #1 Fri Mar 14 15:08:06 EST 2003 i686
Linux

FreeBSD localhost 3.2-RELEASE #15: Mon Dec 17 08:46:02 GMT 2001
FreeBSD

Windows NT XN1 5.1 build 2600
WINNT
*/

if (strtoupper(substr(PHP_OS03)) === 'WIN') {
    echo 
'Le serveur tourne sous Windows !';
} else {
    echo 
'Le serveur ne tourne pas sous Windows !';
}

?>

Il existe aussi des constantes PHP pré-définies liées qui peuvent s'avérer utiles, par exemple :

Exemple #2 Exemples avec quelques constantes liées au système

<?php
// *nix
echo DIRECTORY_SEPARATOR// /
echo PHP_SHLIB_SUFFIX;    // so
echo PATH_SEPARATOR;      // :

// Win*
echo DIRECTORY_SEPARATOR// \
echo PHP_SHLIB_SUFFIX;    // dll
echo PATH_SEPARATOR;      // ;
?>

Voir aussi

  • phpversion() - Retourne le numéro de la version courante de PHP
  • php_sapi_name() - Retourne le type d'interface utilisée entre le serveur web et PHP
  • phpinfo() - Affiche de nombreuses informations sur la configuration de PHP



phpcredits

(PHP 4, PHP 5)

phpcreditsAffiche les crédits de PHP

Description

bool phpcredits ([ int $flag = CREDITS_ALL ] )

Affiche la liste des développeurs PHP, des modules, etc. Elle génère le code HTML approprié pour insérer les informations dans une page.

Liste de paramètres

flag

Pour générer une page personnalisée sur les crédits, il faut utiliser le paramètre flag.

Paramètres prédéfinis de phpcredits()
Nom Description
CREDITS_ALL Tous les crédits, équivalent à : CREDITS_DOCS + CREDITS_GENERAL + CREDITS_GROUP + CREDITS_MODULES + CREDITS_FULLPAGE. La fonction génère alors une page HTML complète.
CREDITS_DOCS Les crédits du groupe de documentation
CREDITS_FULLPAGE En général, ce paramètre est utilisé avec d'autres constantes. Il indique que la page ainsi générée doit être une page HTML complète, avec toutes les balises nécessaires.
CREDITS_GENERAL Crédits Généraux : conception et design du langage, auteurs de PHP et du module SAPI.
CREDITS_GROUP Une liste des développeurs principaux
CREDITS_MODULES Une liste des extensions de PHP, et leurs auteurs
CREDITS_SAPI Une liste des API serveur pour PHP et leurs auteurs

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec phpcredits()

<?php
phpcredits
(CREDITS_GENERAL);
?>

Exemple #2 Affiche les développeurs principaux ansi que le groupe de documentation

<?php
phpcredits
(CREDITS_GROUP CREDITS_DOCS CREDITS_FULLPAGE);
?>

Exemple #3 Affiche tous les crédits

<html>
 <head>
  <title>Ma page de crédits</title>
 </head>
 <body>
<?php
// Un peu de votre code
phpcredits(CREDITS_ALL CREDITS_FULLPAGE);
// Encore un peu de votre code
?>
 </body>
</html>

Voir aussi

  • phpversion() - Retourne le numéro de la version courante de PHP
  • php_logo_guid() - Retourne l'identifiant du logo PHP
  • phpinfo() - Affiche de nombreuses informations sur la configuration de PHP



phpinfo

(PHP 4, PHP 5)

phpinfoAffiche de nombreuses informations sur la configuration de PHP

Description

bool phpinfo ([ int $what = INFO_ALL ] )

Affiche de nombreuses informations sur PHP, concernant sa configuration courante : options de compilation, extensions, version, informations sur le serveur, et l'environnement (lorsqu'il est compilé comme module), environnement PHP, informations sur le système, chemins, valeurs générales et locales de configuration, en-têtes HTTP et la licence PHP.

Comme tous les systèmes sont configurés différemment, phpinfo() sert généralement à vérifier la configuration ainsi que les variables prédéfinies, pour une plate-forme donnée.

phpinfo() est un bon outil de débogage, car il affiche le contenu de toutes les variables EGPCS (Environnement, GET, POST, Cookie, Serveur).

Liste de paramètres

what

L'affichage peut être personnalisé en utilisant une ou plusieurs des constantes suivantes. Elles sont combinables avec l'opérateur or, et doivent être passées dans le paramètre what. Vous pouvez aussi additionner ces constantes.

Options de phpinfo()
Nom de la constante Valeur Description
INFO_GENERAL 1 La ligne de configuration, le chemin du php.ini, la date de compilation, le serveur web, le système, etc.
INFO_CREDITS 2 Les crédits de PHP. Voir aussi phpcredits().
INFO_CONFIGURATION 4 Valeurs courantes locales et générales des directives PHP. Voyez aussi la fonction ini_get().
INFO_MODULES 8 Modules chargés et leur configuration spécifique. Voir aussi la fonction get_loaded_extensions().
INFO_ENVIRONMENT 16 Informations sur les variables d'environnement, qui sont disponibles dans la variable $_ENV.
INFO_VARIABLES 32 Affiche toutes les variables prédéfinies, issues de l'environnement, la méthode GET, la méthode POST, les cookies et le serveur.
INFO_LICENSE 64 La licence PHP. Voir aussi » la FAQ de la licence.
INFO_ALL -1 Affiche toutes les informations suscitées.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Historique

Version Description
5.2.2 L'information "Loaded Configuration File" a été ajoutée, alors qu'avant, seule l'information "Configuration File (php.ini) Path" existée.

Exemples

Exemple #1 Exemple avec phpinfo()

<?php

// Affiche toutes les informations, comme le ferait INFO_ALL
phpinfo();

// Affiche uniquement le module d'information.
// phpinfo(8) fournirait les mêmes informations.
phpinfo(INFO_MODULES);

?>

Notes

Note:

Une partie des informations affichées sont désactivées si la directive expose_php est configurée avec la valeur off. Cela inclus les logos PHP et Zend, ainsi que les crédits.

Note:

phpinfo() affiche du texte au lieu de HTML lorsque vous utilisez la version CLI.

Voir aussi



phpversion

(PHP 4, PHP 5)

phpversionRetourne le numéro de la version courante de PHP

Description

string phpversion ([ string $extension ] )

Retourne le numéro de la version courante de PHP.

Liste de paramètres

extension

Un nom d'extension, optionnel.

Valeurs de retour

Si le paramètre optionnel extension est spécifié, la fonction phpversion() retournera la version de cette extension ou FALSE s'il n'y a aucune information sur la version associée ou si cette extension n'est pas disponible.

Exemples

Exemple #1 Exemple avec phpversion()

<?php
// affiche le numéro de version courante du PHP.
echo 'Version PHP courante : ' phpversion();

// affiche e.g. '2.0' ou rien du tout si cette extension n'est pas active
echo phpversion('tidy');
?>

Exemple #2 Exemple avec PHP_VERSION_ID

<?php
// PHP_VERSION_ID est disponible depuis PHP 5.2.7, 
// si votre version est antérieure, émulez-le.
if (!defined('PHP_VERSION_ID')) {
   
$version explode('.',PHP_VERSION);

   
define('PHP_VERSION_ID', ($version[0] * 10000 $version[1] * 100 $version[2]));
}

// PHP_VERSION_ID est défini comme un nombre : plus il est grand, plus
// la version de PHP est récente. Il est défini comme illustré dans 
// le code ci-dessous : 
//
// $version_id = $major_version * 10000 + $minor_version * 100 + $release_version;
//
// Maintenant, avec PHP_VERSION_ID, il est possible de vérifier la disponibilité
// de fonctionnalités de PHP, sans passer par version_compare().
//
// Par exemple, on peut définir les constantes PHP_VERSION_* qui n'étaient pas
// disponibles avant 5.2.7

if (PHP_VERSION_ID 50207) {
    
define('PHP_MAJOR_VERSION',   $version[0]);
    
define('PHP_MINOR_VERSION',   $version[1]);
    
define('PHP_RELEASE_VERSION'$version[2]);

    
// etc.

}
?>

Notes

Note:

Cette information est aussi disponible via la constante prédéfinie PHP_VERSION. Plus d'informations sur les versions, avec les constantes PHP_VERSION_*.

Voir aussi



putenv

(PHP 4, PHP 5)

putenvFixe la valeur d'une variable d'environnement

Description

bool putenv ( string $setting )

Fixe la valeur d'une variable d'environnement. Cette valeur n'existera que durant la vie du script courant, et l'environnement initial sera restauré lorsque le script sera terminé.

Modifier la valeur de certaines variables système peut être un trou de sécurité considérable. La directive de configuration safe_mode_allowed_env_vars contient une liste de préfixes, séparés par des virgules. Lorsque le Safe Mode est actif, l'utilisateur ne peut que modifier les variables dont le nom commence par les préfixes fournis par cette directive. Par défaut, les utilisateurs ne peuvent modifier que les variables qui commencent par PHP_ (i.e. PHP_FOO=BAR). Note : Si cette directive est vide, PHP autorisera la modification de TOUTES les variables d'environnement !

La directive de configuration safe_mode_protected_env_vars contient une liste de variables d'environnement, séparées par des virgules. Les utilisateurs ne pourront pas modifier ces variables avec la fonction putenv(). Ces variables seront protégées même si safe_mode_allowed_env_vars permet leur modification.

Liste de paramètres

setting

La configuration, comme "FOO=BAR"

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Modification d'une variable d'environnement

<?php
putenv
("UNIQID=$uniqid");
?>

Notes

Avertissement

Les directives safe_mode_allowed_env_vars et safe_mode_protected_env_vars ne prennent effets que si le safe_mode est activé.

Voir aussi

  • getenv() - Retourne la valeur d'une variable d'environnement



restore_include_path

(PHP 4 >= 4.3.0, PHP 5)

restore_include_pathRestaure la valeur de la directive de configuration include_path

Description

void restore_include_path ( void )

Restaure la valeur de la directive de configuration include_path à sa valeur originale de début de script, telle qu'inscrite dans le php.ini.

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Exemple avec restore_include_path()

<?php

echo get_include_path();  // .:/usr/local/lib/php

set_include_path('/inc');

echo 
get_include_path();  // /inc

// Fonctionne depuis PHP 4.3.0
restore_include_path();

// Fonctionne sur toutes les versions
ini_restore('include_path');

echo 
get_include_path();  // .:/usr/local/lib/php

?>

Voir aussi



set_include_path

(PHP 4 >= 4.3.0, PHP 5)

set_include_pathModifie la valeur de la directive de configuration include_path

Description

string set_include_path ( string $new_include_path )

Modifie la valeur de la directive de configuration include_path, pour la durée du script en cours.

Liste de paramètres

new_include_path

La nouvelle valeur pour la directive de configuration include_path

Valeurs de retour

Retourne l'ancienne valeur de include_path en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec set_include_path()

<?php
// Fonctionne depuis PHP 4.3.0
set_include_path('/usr/lib/pear');

// Fonctionne sur toutes les versions
ini_set('include_path''/usr/lib/pear');
?>

Exemple #2 Ajout dans le chemin d'inclusion

En utilisant la constante PATH_SEPARATOR, il est possible d'étendre le chemin d'inclusion au vu du système.

Dans cet exemple, nous ajoutons /usr/lib/pear à la fin de l'actuel include_path.

<?php
$path 
'/usr/lib/pear';
set_include_path(get_include_path() . PATH_SEPARATOR $path);
?>

Voir aussi



set_magic_quotes_runtime

(PHP 4, PHP 5)

set_magic_quotes_runtimeActive/désactive l'option magic_quotes_runtime

Description

bool set_magic_quotes_runtime ( bool $new_setting )

Active/désactive l'option magic_quotes_runtime.

Avertissement

Cette fonction est OBSOLETE depuis PHP 5.3.0. Nous vous encourageons vivement à ne plus l'utiliser.

Liste de paramètres

new_setting

0 l'option est désactivée, 1 l'option est activée.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec set_magic_quotes_runtime()

<?php
// Création d'un pointeur de fichier temporaire
$fp tmpfile();

// Écriture de quelques données dans ce pointeur
fwrite($fp'\'PHP\' est un acronyme récursif');

// Sans magic_quotes_runtime
rewind($fp);
set_magic_quotes_runtime(false);

echo 
'Sans magic_quotes_runtime : ' fread($fp64), PHP_EOL;

// Avec magic_quotes_runtime
rewind($fp);
set_magic_quotes_runtime(true);

echo 
'Avec magic_quotes_runtime : ' fread($fp64), PHP_EOL;

// Clean up
fclose($fp);
?>

L'exemple ci-dessus va afficher :

Sans magic_quotes_runtime: 'PHP' est un acronyme récursif
Avec magic_quotes_runtime: \'PHP\' est un acronyme récursif

Voir aussi



set_time_limit

(PHP 4, PHP 5)

set_time_limitFixe le temps maximum d'exécution d'un script

Description

void set_time_limit ( int $seconds )

Fixe le délai d'expiration d'un script, en secondes. Si cette limite est atteinte, le script s'interrompt, et renvoie une erreur fatale. La valeur par défaut est 30 secondes ou, si c'est le cas, la valeur de la directive max_execution_time définie dans le php.ini.

Lorsqu'elle est appelée, set_time_limit() remet le compteur à zéro. En d'autres termes, si la limite par défaut est à 30 secondes, et qu'après 25 secondes d'exécution du script l'appel set_time_limit(20) est fait, alors le script tournera pendant un total de 45 secondes avant de finir.

Liste de paramètres

seconds

Le temps maximal d'exécution, en secondes. S'il vaut 0, aucune limite n'est imposée.

Valeurs de retour

Aucune valeur n'est retournée.

Notes

Avertissement

Notez que set_time_limit() n'a pas d'effet lorsque PHP fonctionne en mode safe mode. Il n'y a pas d'autre solution que de changer de mode, ou de modifier la durée maximale d'exécution dans le php.ini.

Note:

La fonction set_time_limit() et la directive de configuration max_execution_time n'affectent que le temps d'exécution du script lui-même. Tout temps passé en dehors du script, comme un appel système utilisant system(), des opérations sur les flux, les requêtes sur base de données, etc. n'est pas pris en compte lors du calcul de la durée maximale d'exécution du script. Ceci est faux sous Windows où le temps mesuré est le temps réel.



sys_get_temp_dir

(PHP 5 >= 5.2.1)

sys_get_temp_dirRetourne le chemin du répertoire utilisé pour les fichiers temporaires

Description

string sys_get_temp_dir ( void )

Retourne le chemin du répertoire PHP où sont enregistrés les fichiers temporaires par défaut.

Valeurs de retour

Retourne le chemin du répertoire temporaire.

Exemples

Exemple #1 Exemple avec sys_get_temp_dir()

<?php
// Création d'un fichier temporaire dans le dossier
// des fichiers temporaires, en utilisant la fonction sys_get_temp_dir()
$temp_file tempnam(sys_get_temp_dir(), 'Tux');

echo 
$temp_file;
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

C:\Windows\Temp\TuxA318.tmp

Voir aussi



version_compare

(PHP 4 >= 4.1.0, PHP 5)

version_compareCompare deux chaînes de version au format des versions PHP

Description

mixed version_compare ( string $version1 , string $version2 [, string $operator ] )

version_compare() compare les deux versions de PHP standardisées. Cette fonction est pratique pour les programmes qui doivent vérifier la version de PHP qui les fait tourner.

version_compare() remplace dans un premier temps _, - et + par un point (.) dans les chaînes de version et insère aussi des points avant et après tout caractère non-numérique pour que, par exemple, '4.3.5RC1' devienne '4.3.5.RC.1'. Ensuite, elle découpe les résultats, similairement à explode('.', $ver). Puis, elle compare les morceaux en allant de gauche à droite. Si une part contient des caractères alphabétiques, ils sont gérés dans l'ordre suivant : any string not found in this list < dev < alpha = a < beta = b < RC = rc < # < pl = p. De cette façon, il est possible de comparer non seulement des versions de différents niveaux, comme '4.1' et '4.1.2', mais aussi des versions de développement à la mode de PHP, à n'importe quel stade.

Liste de paramètres

version1

Premier numéro de version.

version2

Second numéro de version.

operator

Si troisième argument optionnel operator est spécifié, il est possible de tester une relation particulière. Les opérateurs possibles sont : <, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne.

Ce paramètre est sensible à la casse, aussi les valeurs doivent être en minuscule.

Valeurs de retour

Par défaut, version_compare() retourne -1 si la première version est inférieure à la seconde, 0 si elles sont égales, et 1 si la seconde est inférieure à la première.

Lorsque l'on utilise le paramètre optionnel operator, la fonction retourne TRUE si la relation est celle spécifiée par l'opérateur, FALSE sinon.

Exemples

Les exemples ci-dessous utilisent la constante PHP_VERSION, sachant qu'elle contient la valeur de la version PHP utilisée pour exécuter le code.

Exemple #1 Exemple avec version_compare()

<?php
if (version_compare(PHP_VERSION'6.0.0') >= 0) {
    echo 
'J\'ai au moins la version 6.0.0 de PHP ; ma version : ' PHP_VERSION "\n";
}

if (
version_compare(PHP_VERSION'5.3.0') >= 0) {
    echo 
'J\'ai au moins la version 5.3.0 de PHP ; ma version : ' PHP_VERSION "\n";
}

if (
version_compare(PHP_VERSION'5.0.0''>=')) {
    echo 
'J\'utilise PHP 5 ; ma version : ' PHP_VERSION "\n";
}

if (
version_compare(PHP_VERSION'5.0.0''<')) {
    echo 
'J\'utilise PHP 4 ; ma version : ' PHP_VERSION "\n";
}
?>

Notes

Note:

La constante PHP_VERSION contient la version courante de PHP.

Note:

Notez que les versions intermédiaires, comme 5.3.0-dev, sont considérées comme inférieures à leurs versions finales (telle que 5.3.0).

Voir aussi



zend_logo_guid

(PHP 4, PHP 5)

zend_logo_guidRetourne le logo de Zend

Description

string zend_logo_guid ( void )

zend_logo_guid() retourne l'identifiant pouvant être utilisé pour afficher le logo Zend en utilisant l'image intégrée.

Valeurs de retour

Retourne PHPE9568F35-D428-11d2-A769-00AA001ACF42.

Exemples

Exemple #1 Exemple avec zend_logo_guid()

<?php

echo '<img src="' $_SERVER['PHP_SELF'] .
     
'?=' zend_logo_guid() . '" alt="Zend Logo !" />';

?>

Voir aussi



zend_thread_id

(PHP 5)

zend_thread_idRetourne un identifiant unique du thread courant

Description

int zend_thread_id ( void )

Cette fonction retourne un identifiant unique pour le thread courant.

Valeurs de retour

Retourne l'identifiant du thread, sous la forme d'un entier.

Exemples

Exemple #1 Exemple avec zend_thread_id()

<?php
$thread_id 
zend_thread_id();

echo 
'ID du thread courant : ' $thread_id;
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

ID du thread courant : 7864

Notes

Note:

Cette fonction n'est disponible que si PHP a été compilé avec le support ZTS (Zend Thread Safety) et le mode de débogage (--enable-debug).



zend_version

(PHP 4, PHP 5)

zend_versionLit la version courante du moteur Zend

Description

string zend_version ( void )

Retourne une chaîne contenant le numéro de version du moteur d'analyse Zend actuellement en cours d'utilisation.

Valeurs de retour

Retourne le numéro de la version du moteur Zend, sous la forme d'une chaîne de caractères.

Exemples

Exemple #1 Exemple avec zend_version()

<?php
echo "Version du moteur Zend : " zend_version();
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Version du moteur Zend : 2.2.0

Voir aussi


Sommaire

  • assert_options — Fixe et lit différentes options d'assertions
  • assert — Vérifie si une assertion est fausse
  • dl — Charge une extension PHP à la volée
  • extension_loaded — Détermine si une extension est chargée ou non
  • gc_collect_cycles — Force le passage du collecteur de mémoire
  • gc_disable — Désactive le collecteur de références circulaires
  • gc_enable — Active le collecteur de références circulaires
  • gc_enabled — Retourne le statut du collecteur de références circulaires
  • get_cfg_var — Retourne la valeur d'une option de PHP
  • get_current_user — Retourne le nom du possesseur du script courant
  • get_defined_constants — Retourne la liste des constantes et leurs valeurs
  • get_extension_funcs — Liste les fonctions d'une extension
  • get_include_path — Lit la valeur de la directive de configuration include_path
  • get_included_files — Retourne un tableau avec les noms des fichiers qui sont inclus dans un script
  • get_loaded_extensions — Retourne la liste de tous les modules compilés et chargés
  • get_magic_quotes_gpc — Retourne la configuration actuelle de l'option magic_quotes_gpc
  • get_magic_quotes_runtime — Retourne la configuration actuelle de l'option magic_quotes_runtime
  • get_required_files — Alias de get_included_files
  • getenv — Retourne la valeur d'une variable d'environnement
  • getlastmod — Retourne la date de dernière modification de la page
  • getmygid — Retourne le GID du propriétaire du script
  • getmyinode — Retourne l'inode du script
  • getmypid — Retourne le numéro de processus courant de PHP
  • getmyuid — Retourne l'UID du propriétaire du script actuel
  • getopt — Lit des options passées dans la ligne de commande
  • getrusage — Retourne le niveau d'utilisation des ressources
  • ini_alter — Alias de ini_set
  • ini_get_all — Lit toutes les valeurs de configuration
  • ini_get — Lit la valeur d'une option de configuration
  • ini_restore — Restaure la valeur de l'option de configuration
  • ini_set — Modifie la valeur d'une option de configuration
  • magic_quotes_runtime — Alias de set_magic_quotes_runtime
  • main — Fausse documentation pour main
  • memory_get_peak_usage — Retourne la quantité de mémoire maximale allouée par PHP
  • memory_get_usage — Indique la quantité de mémoire utilisée par PHP
  • php_ini_loaded_file — Récupère le chemin d'un fichier php.ini chargé
  • php_ini_scanned_files — Retourne la liste des fichiers .ini analysés dans les dossiers de configuration supplémentaires
  • php_logo_guid — Retourne l'identifiant du logo PHP
  • php_sapi_name — Retourne le type d'interface utilisée entre le serveur web et PHP
  • php_uname — Retourne les informations sur le système d'exploitation
  • phpcredits — Affiche les crédits de PHP
  • phpinfo — Affiche de nombreuses informations sur la configuration de PHP
  • phpversion — Retourne le numéro de la version courante de PHP
  • putenv — Fixe la valeur d'une variable d'environnement
  • restore_include_path — Restaure la valeur de la directive de configuration include_path
  • set_include_path — Modifie la valeur de la directive de configuration include_path
  • set_magic_quotes_runtime — Active/désactive l'option magic_quotes_runtime
  • set_time_limit — Fixe le temps maximum d'exécution d'un script
  • sys_get_temp_dir — Retourne le chemin du répertoire utilisé pour les fichiers temporaires
  • version_compare — Compare deux chaînes de version au format des versions PHP
  • zend_logo_guid — Retourne le logo de Zend
  • zend_thread_id — Retourne un identifiant unique du thread courant
  • zend_version — Lit la version courante du moteur Zend



runkit


Introduction

L'extension runkit fournit les moyens de modifier les constantes, les fonctions et les classes définies par l'utilisateur. Elle fournit aussi ces moyens pour les variables superglobales et les sous-interpréteurs par sandboxing.

Ce paquetage est signifié en tant que remplacement de fonctionnalités pour le paquetage » classkit. Lorsque compilé avec l'option --enable-runkit=classkit à ./configure, les définitions des fonctions et des constantes de classkit seront exportées.



Constantes pré-définies

Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.

RUNKIT_IMPORT_FUNCTIONS (entier)
runkit_import() marque indiquant que les fonctions normales doivent être importées à partir du fichier spécifié.
RUNKIT_IMPORT_CLASS_METHODS (entier)
runkit_import() marque indiquant que les méthodes de classes doivent être importées à partir du fichier spécifié.
RUNKIT_IMPORT_CLASS_CONSTS (entier)
runkit_import() marque indiquant que les constantes de classes doivent être importées à partir du fichier spécifié. Notez que cette marque est seulement signifiante dans les versions PHP 5.1.0 et supérieures.
RUNKIT_IMPORT_CLASS_PROPS (entier)
runkit_import() marque indiquant que les propriétés standards de classes doivent être importée à partir du fichier spécifié.
RUNKIT_IMPORT_CLASSES (entier)
runkit_import() marque indiquant une opération de bits OU (OR) des constantes RUNKIT_IMPORT_CLASS_*.
RUNKIT_IMPORT_OVERRIDE (entier)
runkit_import() marque indiquant que si n'importe quelles fonctions, méthodes, constantes ou propriétés importées existent, elles doivent être remplacées par leurs nouvelles définitions. Si ce drapeau n'est pas activé, alors toutes définitions importées qui existent déjà seront supprimées.
RUNKIT_ACC_PUBLIC (entier)
Drapeau spécifique à PHP 5 pour runkit_method_add()
RUNKIT_ACC_PROTECTED (entier)
Drapeau spécifique à PHP 5 pour runkit_method_add()
RUNKIT_ACC_PRIVATE (entier)
Drapeau spécifique à PHP 5 pour runkit_method_add()
CLASSKIT_ACC_PUBLIC (entier)
Drapeau spécifique à PHP 5 pour runkit_method_add() Seulement définie lorsque les compatibilités classkit sont activées.
CLASSKIT_ACC_PROTECTED (entier)
Drapeau spécifique à PHP5 pour runkit_method_add() Seulement définie lorsque les compatibilités classkit sont activées.
CLASSKIT_ACC_PRIVATE (entier)
Drapeau spécifique à PHP 5 pour runkit_method_add() Seulement définie lorsque les compatibilités classkit sont activées.
CLASSKIT_AGGREGATE_OVERRIDE (entier)
Drapeau spécifique à PHP 5 pour classkit_import() Seulement définie lorsque les compatibilités classkit sont activées.
RUNKIT_VERSION (chaîne de caractères)
Définie la version courante du paquetage runkit.
CLASSKIT_VERSION (chaîne de caractères)
Définie la version courante du paquetage runkit. Seulement définie lorsque les compatibilités classkit sont activées.


Installation/Configuration

Sommaire


Pré-requis

Modification de Constantes, Fonctions, Classes et Méthodes fonctionne avec toutes les versions de PHP 4 et PHP 5. Aucune condition spéciale n'est nécessaire.

Les Superglobales Personnalisées sont seulement disponibles dans les versions PHP 4.2.0 et supérieures.

Sandboxing nécessite PHP 5.1.0 ou supérieur ou PHP 5.0.0 avec le patch spécial TSRM appliqué. Sans se soucier de quelle version de PHP est utilisé, sandboxing doit être compilé avec l'option --enable-maintainer-zts. Voyez le fichier README dans le paquetage de runkit pour plus d'informations.



Installation

Cette extension » PECL n'est pas intégrée à PHP.

Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici : » http://pecl.php.net/package/runkit.

Aucune bibliothèque DLL pour cette extension PECL n'est actuellement disponible. Reportez-vous à la section Compilation sous Windows.



Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Options de configuration Runkit
Nom Défaut Modifiable Historique
runkit.superglobal "" PHP_INI_PERDIR  
runkit.internal_override "0" PHP_INI_SYSTEM  
Pour plus de détails sur les modes PHP_INI_*, reportez-vous à Où une directive de configuration peut être modifiée.

Voici un éclaircissement sur l'utilisation des directives de configuration.

runkit.superglobal string
Liste de noms de variable séparés par des virgules à être traités comme variables superglobales. Cette valeur devrait être fixée dans le fichier du système php.ini, mais devrait fonctionner dans les contextes de configuration par dossier dépendamment de votre SAPI.

Exemple #1 Superglobales particulières avec runkit.superglobal=_FOO,_BAR dans php.ini

<?php
function montre_valeurs() {
  echo 
"Foo est $_FOO\n";
  echo 
"Bar est $_BAR\n";
  echo 
"Baz est $_BAZ\n";
}

$_FOO 'foo';
$_BAR 'bar';
$_BAZ 'baz';

/* Montre foo et bar mais pas baz */
montre_valeurs();
?>
runkit.internal_override boolean
Active la possibilité de modifier/renommer/supprimer les fonctions internes.



Types de ressources

Cette extension ne définit aucune ressource.




Fonctions runkit


Runkit_Sandbox

(PECL runkit >= 0.7.0)

Runkit_Sandbox Classe Runkit Sandbox -- Machine Virtuelle PHP

Description

L'instanciation de la classe Runkit_Sandbox crée un nouveau thread avec sa propre portée et sa pile de programme. En utilisant les options passées au constructeur, cet environnement peut être restreint à un sous-ensemble pour lequel l'interpréteur primaire peut exécuter et fournir un environnement plus sûr pour l'exécution de code utilisateur.

Note: Support Sandbox (requis pour runkit_lint(), runkit_lint_file() et la classe Runkit_Sandbox) n'est seulement disponible qu'avec PHP 5.1 ou les versions de PHP 5.0 spécialement patché et nécessite que la protection de thread soit activée. Voyez le fichier README inclus dans le paquetage runkit pour plus d'informations.

Constructeur

void Runkit_Sandbox::__construct ([ array $options ] )

options est un tableau associatif contenant n'importe quelle combinaison des options ini listées ci-dessous.

safe_mode

Si un script extérieur qui est instancié avec la classe Runkit_Sandbox est configuré avec safe_mode = off, alors safe_mod devrait être activé pour l'environnement sandbox. Cette configuration ne peut être utilisée pour désactiver safe_mode lorsque safe_mode est déjà activé dans le script extérieur.

safe_mode_gid

Si le script extérieur qui est instancié avec la classe Runkit_Sandbox est configuré avec safe_mode_gid = on, alors safe_mod_gid devrait être désactivé pour l'environnement sandbox. Cette configuration ne peut être utilisée pour activer safe_mode_gid lorsque c'est déjà désactivé dans le script extérieur.

safe_mode_include_dir

Si le script extérieur qui est instancié avec la classe Runkit_Sandbox est configuré avec safe_mode_include_dir, alors un nouveau safe_mode_include_dir devrait être fixé pour les environnements de sandbox sous la valeur actuellement définie. safe_mode_include_dir peut aussi être supprimé pour indiquer que l'évitement de cette fonctionnalité est désactivé. Si safe_mode_include_dir était vide dans le script extérieur, mais safe_mod n'était pas activé, alors n'importe quel safe_mode_include_dir arbitraire peut être fixé en activant le safe_mode.

open_basedir

open_basedir peut être fixé à n'importe quel chemin sous la configuration courante de open_basedir. Si open_basedir n'est pas fixé dans la portée globale, alors il est assumé qu'il est dans le répertoire root et peut être fixé à n'importe quelle autre emplacement.

allow_url_fopen

Comme safe_mode, cette configuration peut seulement être faite plus restrictive, dans ce cas, en mettant FALSE lorsque la valeur était précédemment TRUE.

disable_functions

Liste de fonctions séparées par des virgules à désactiver dans le sous-interpréteur sandbox. Cette liste ne nécessite pas de contenir le nom des fonctions déjà désactivées, elles resteront désactivées même si elles ne sont pas listées.

disable_classes

Liste de classes séparées par des virgules à désactiver dans le sous-interpréteur sandbox. Cette liste ne nécessite pas de contenir le nom des classes déjà désactivées, elles resteront désactivées même si elles ne sont pas listées.

runkit.superglobal

Liste des variables qui seront traitées en tant que superglobales dans le sous-interpréteur sandbox. Ces variables seront utilisées en plus de celles définies à l'interne ou à l'aide de la configuration runkit.superglobal.

runkit.internal_override

L'option ini runkit.internal_override devrait être désactivée (mais non réactivée) à l'intérieur des sandbox.

Exemple #1 Instanciation d'un sandbox restreint

<?php
$options 
= array(
  
'safe_mode'=>true,
  
'open_basedir'=>'/var/www/users/jdoe/',
  
'allow_url_fopen'=>'false',
  
'disable_functions'=>'exec,shell_exec,passthru,system',
  
'disable_classes'=>'myAppClass');
$sandbox = new Runkit_Sandbox($options);
/* Configurations ini non protégées sont fixées normalement */
$sandbox->ini_set('html_errors',true);
?>

Portée des variables

Toutes les variables dans la portée globale de l'environnement sandbox sont accessibles comme étant des propriétés de l'objet sandbox. La première chose à noter, c'est puisque la manière de gestion de la mémoire entre les deux threads est faite que les objets et les variables de ressources ne peuvent pas, jusqu'à présent, être échangées entre les interpréteurs. De plus, tous les tableaux sont copiés au complet et toutes références seront perdues. Cela veut aussi dire que les références entre les interpréteurs ne sont pas possibles.

Exemple #2 Utilisation des variables dans sandbox

<?php
$sandbox 
= new Runkit_Sandbox();

$sandbox->foo 'bar';
$sandbox->eval('echo "$foo\n"; $bar = $foo . "baz";');
echo 
"{$sandbox->bar}\n";
if (isset(
$sandbox->foo)) unset($sandbox->foo);
$sandbox->eval('var_dump(isset($foo));');
?>

L'exemple ci-dessus va afficher :

bar
barbaz
bool(false)

Appel de Fonctions PHP

Toute fonction définie dans le sandbox peut être appelée en tant que méthode sur l'objet sandbox. Ceci inclut aussi quelques constructions de pseudo-fonctions : pseudo-function language constructs: eval(), include, include_once, require, require_once, echo, print, die(), et exit().

Exemple #3 Appel de fonctions sandbox

<?php
$sandbox 
= new Runkit_Sandbox();

echo 
$sandbox->str_replace('a','f','abc');
?>

L'exemple ci-dessus va afficher :

fbc

Lors du passage d'arguments à une fonction sandbox, les arguments sont pris à partir de l'extérieur de l'instance de PHP. Si vous voulez passer les arguments à la portée de sandbox, soyez assuré de les accéder comme étant des propriétés de l'objet sandbox comme montré plus haut.

Exemple #4 Passage d'arguments aux fonctions sandbox

<?php
$sandbox 
= new Runkit_Sandbox();

$foo 'bar';
$sandbox->foo 'baz';
echo 
$sandbox->str_replace('a',$foo,'a');
echo 
$sandbox->str_replace('a',$sandbox->foo,'a');
?>

L'exemple ci-dessus va afficher :

bar
baz

Modification des Configurations de Sandbox

Depuis la version de runkit 0.5, certaines configurations de Sandbox peuvent être modifiées à la volée en utilisant la syntaxe ArrayAccess. Certaines configurations, comme active sont en lecture seule et permettent de fournir des informations de statut. Les autres configurations, comme output_handler peuvent être fixées et lues comme un tableau normal. Les configurations futures devraient être en écriture seule, cependant aucune configuration n'existe présentement.

Configurations Sandbox / Indicateurs de Statut
Configuration Type But Défaut
active booléen (Lecture Seule) TRUE si le Sandbox est toujours dans un état utilisable, FALSE si la requête est en arrêt dû à un appel à die(), exit() ou à cause d'une condition d'erreur fatale. TRUE (Initial)
output_handler Callback Lorsque fixée à une valeur de retour valide, toutes sorties générées par l'instance Sandbox seront traitées à travers la fonction nommée. Les sorties de Sandbox suivent les mêmes conventions d'appel pour les gestionnaires de sortie du système entier. Aucun
parent_access booléen Autorise sandbox à utiliser des instances de la classe Runkit_Sandbox_Parent. Doit être activée pour que les autres configurations reliées à Runkit_Sandbox_Parent fonctionnent. FALSE
parent_read booléen Autorise sandbox à lire des variables dans son contexte parent. FALSE
parent_write booléen Autorise sandbox à modifier des variables dans son contexte parent. FALSE
parent_eval booléen Autorise sandbox à évaluer du code arbitraire dans son contexte parent. (DANGEREUX) FALSE
parent_include booléen Autorise sandbox à inclure des fichiers de code php dans son contexte parent. DANGEREUX FALSE
parent_echo booléen Autorise sandbox à afficher des données dans son contexte parent en court-circuitant efficacement son propre output_handler. FALSE
parent_call booléen Autorise sandbox à appeler des fonctions dans son contexte parent. FALSE
parent_die booléen Autorise sandbox à tuer son propre parent. (Et donc soi-même) FALSE
parent_scope entier Quelle portée la propriété de l'accès parental vérifiera ? 0 == Portée Globale, 1 == Portée Appelante, 2 == Portée précédant la portée appelante, 3 == La porté avant celle-ci, etc., etc. 0 (Global)
parent_scope chaîne de caractères Lorsque parent_scope est fixée à une valeur d'une chaîne de caractères, elle se réfère à une variable tableau nommée dans la portée globale. Si la variable nommée n'existe pas au moment de son accès, elle sera créée comme un tableau vide. Si la variable existe mais n'est pas un tableau, un faux tableau sera créé contenant une référence à la variable globale nommée.  



Runkit_Sandbox_Parent

(PECL runkit >= 0.7.0)

Runkit_Sandbox_Parent Classe Anti-Sandbox Runkit

Description

void Runkit_Sandbox_Parent::__construct ( void )

L'instanciation de la classe Runkit_Sandbox_Parent à l'intérieure d'un environnement sandbox créé à partir de la classe Runkit_Sandbox fournit certains moyens (contrôlés) pour un sandbox fils pour accéder à son parent.

Note: Support Sandbox (requis pour runkit_lint(), runkit_lint_file() et la classe Runkit_Sandbox) n'est seulement disponible qu'avec PHP 5.1 ou les versions de PHP 5.0 spécialement patché et nécessite que la protection de thread soit activée. Voyez le fichier README inclus dans le paquetage runkit pour plus d'informations.

Afin de faire fonctionner une des fonctionnalités de Runkit_Sandbox_Parent, le support doit être activé sur une base de chaque sandbox en activant le drapeau parent_access à partir du contexte parent.

Exemple #1 Travailler avec des variables dans un sandbox

<?php
$sandbox 
= new Runkit_Sandbox();
$sandbox['parent_access'] = true;
?>

Accéder les Variables du Parent

Comme les accès des variables de sandbox, les variables de parent sandbox devraient être lues et écrites à partir des propriétés de la classe Runkit_Sandbox_Parent. L'accès en lecture aux variables parentes devraient être activé avec la configuration parent_read (en plus de la base de configuration parent_access). L'accès en écriture est activé avec la configuration parent_write.

La portée des variables est différente de l'accès aux variables enfants de sandbox; elle n'est pas limitée au variables globales seulement. En configurant la configuration parent_scope pour un entier approprié, les autres portées dans la pile active pourraient être inspectée. Une valeur de 0 (Défaut) autorisera l'accès direct aux variables dans la portée globale. 1 pointera l'accès des variables à n'importe quelles variables dont la portée était active au moment ou le bloc courant du code sandbox était exécuté. Des valeurs plus élevées font reculer à travers les fonctions qui ont appelées d'autres fonctions qui menent au code sandbox en train d'être exécuté et qui essaie d'accéder à ses propres variables parentes.

Exemple #2 Accès aux variables parentes

<?php
$php 
= new Runkit_Sandbox();
$php['parent_access'] = true;
$php['parent_read'] = true;

$test "Global";

$php->eval('$PARENT = new Runkit_Sandbox_Parent;');

$php['parent_scope'] = 0;
one();

$php['parent_scope'] = 1;
one();

$php['parent_scope'] = 2;
one();

$php['parent_scope'] = 3;
one();

$php['parent_scope'] = 4;
one();

$php['parent_scope'] = 5;
one();

function 
un() {
    
$test "un()";
    
two();
}

function 
deux() {
    
$test "deux()";
    
three();
}

function 
trois() {
    
$test "trois()";
    
$GLOBALS['php']->eval('var_dump($PARENT->test);');
}
?>

L'exemple ci-dessus va afficher :

string(6) "Global"
string(7) "trois()"
string(5) "deux()"
string(5) "un()"
string(6) "Global"
string(6) "Global"

Appel de Fonctions Parentes

Comme l'accès avec sandbox, un sandbox peut accéder ses fonctions parentes si les configurations adéquates ont été activées. L'activation de parent_call autorisera le sandbox d'appeler toutes les fonctions disponibles à la portée parente. Les constructions de langage sont chacune contrôlées par ses propres configurations : print et echo sont activées avec parent_echo. die() et exit() sont activées avec parent_die. eval() est activées avec parent_eval tandis que include, include_once, require et require_once sont activées avec parent_include.



runkit_class_adopt

(PECL runkit >= 0.7.0)

runkit_class_adopt Convertit une classe de base à une classe héritée, ajoute une méthode ancestrale lorsque approprié

Description

bool runkit_class_adopt ( string $classname , string $parentname )

Liste de paramètres

classname

Le nom de la classe à adopter

parentname

Classe parente pour laquelle la classe enfant s'étend

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec runkit_class_adopt()

<?php
class myParent {
  function 
parentFunc() {
    echo 
"Sortie Fonction Parente\n";
  }
}

class 
myChild {
}

runkit_class_adopt('myChild','myParent');
myChild::parentFunc();
?>

L'exemple ci-dessus va afficher :

Sortie Fonction Parente

Voir aussi

  • runkit_class_emancipate() - Convertit une classe héritée à une classe de base, supprime toute méthode pour qui la portée est ancestrale



runkit_class_emancipate

(PECL runkit >= 0.7.0)

runkit_class_emancipate Convertit une classe héritée à une classe de base, supprime toute méthode pour qui la portée est ancestrale

Description

bool runkit_class_emancipate ( string $classname )

Liste de paramètres

classname

Nom de la classe à émanciper

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec runkit_class_emancipate()

<?php
class myParent {
  function 
parentFunc () {
    echo 
"Sortie Fonction Parente\n";
  }
}
class 
myChild extends myParent {
}

myChild::parentFunc();
runkit_class_emancipate('myChild');
myChild::parentFunc();
?>

L'exemple ci-dessus va afficher :

Sortie Fonction Parente
Fatal error: Call to undefined function:  parentFunc() in example.php on line 12

Voir aussi

  • runkit_class_adopt() - Convertit une classe de base à une classe héritée, ajoute une méthode ancestrale lorsque approprié



runkit_constant_add

(PECL runkit >= 0.7.0)

runkit_constant_add Similaire à define(), mais permet aussi la définition dans définitions de classe

Description

bool runkit_constant_add ( string $constname , mixed $value )

Liste de paramètres

constname

Nom de la constante à déclarer. Soit une chaîne de caractères pour indiquer une constante globale ou un classname::constname pour indiquer une constante de classe.

value

Valeur NULL, Bool, Long, Double, String ou Resource pour enregistrer la nouvelle constante.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



runkit_constant_redefine

(PECL runkit >= 0.7.0)

runkit_constant_redefine Redéfinit une constante déjà définie

Description

bool runkit_constant_redefine ( string $constname , mixed $newvalue )

Liste de paramètres

constname

Constante à redéfinir. Soit une chaîne de caractères pour indiquer une constante globale ou classname::constname pour indiquer une constante de classe.

newvalue

Nouvelle valeur à assigner à la constante.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



runkit_constant_remove

(PECL runkit >= 0.7.0)

runkit_constant_remove Enlève/Supprime une constante déjà définie

Description

bool runkit_constant_remove ( string $constname )

Liste de paramètres

constname

Nom de la constante à enlever. Soit une chaîne de caractères pour indiquer une constante globale ou classname::constname pour indiquer une constante de classe.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



runkit_function_add

(PECL runkit >= 0.7.0)

runkit_function_add Ajoute une nouvelle fonction, similaire à create_function()

Description

bool runkit_function_add ( string $funcname , string $arglist , string $code )

Liste de paramètres

funcname

Nom de la fonction à être créé

arglist

Liste d'arguments séparés par des virgules

code

Code qui compose la fonction

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec runkit_function_add()

<?php
runkit_function_add
('testme','$a,$b','echo "La valeur de a est $a\n"; echo "La valeur de b est $b\n";');
testme(1,2);
?>

L'exemple ci-dessus va afficher :

La valeur de a est 1
La valeur de b est 2

Voir aussi



runkit_function_copy

(PECL runkit >= 0.7.0)

runkit_function_copy Copie une fonction vers un nom de fonction nouveau

Description

bool runkit_function_copy ( string $funcname , string $targetname )

Liste de paramètres

funcname

Nom de la fonction existante

targetname

Nom de la nouvelle fonction pour copier la définition vers celle-ci

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec runkit_function_copy()

<?php
function original() {
  echo 
"Dans une fonction\n";
}
runkit_function_copy('original','duplicate');
original();
duplicate();
?>

L'exemple ci-dessus va afficher :

Dans une fonction
Dans une fonction

Voir aussi



runkit_function_redefine

(PECL runkit >= 0.7.0)

runkit_function_redefine Remplace une définition de fonction avec une nouvelle implémentation

Description

bool runkit_function_redefine ( string $funcname , string $arglist , string $code )

Note: Par défaut, seulement les fonctions définies par l'utilisateur peuvent être supprimées, renommées ou modifiées. Afin de surcharger des fonctions internes, vous devez activer la configuration runkit.internal_override dans le fichier php.ini du système entier.

Liste de paramètres

funcname

Nom de la fonction à redéfinir

arglist

Nouvelle liste d'arguments à être acceptés par la fonction

code

Nouvelle implémentation du code

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec runkit_function_redefine()

<?php
function testme() {
  echo 
"Implémentation de Testme originale\n";
}
testme();
runkit_function_redefine('testme','','echo "Nouvelle implémentation de Testme\n";');
testme();
?>

L'exemple ci-dessus va afficher :

Implémentation de Testme originale
Nouvelle implémentation de Testme

Voir aussi



runkit_function_remove

(PECL runkit >= 0.7.0)

runkit_function_remove Enlève une définition de fonction

Description

bool runkit_function_remove ( string $funcname )

Note: Par défaut, seulement les fonctions définies par l'utilisateur peuvent être supprimées, renommées ou modifiées. Afin de surcharger des fonctions internes, vous devez activer la configuration runkit.internal_override dans le fichier php.ini du système entier.

Liste de paramètres

funcname

Nom de la fonction à supprimer

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



runkit_function_rename

(PECL runkit >= 0.7.0)

runkit_function_rename Change le nom d'une fonction

Description

bool runkit_function_rename ( string $funcname , string $newname )

Note: Par défaut, seulement les fonctions définies par l'utilisateur peuvent être supprimées, renommées ou modifiées. Afin de surcharger des fonctions internes, vous devez activer la configuration runkit.internal_override dans le fichier php.ini du système entier.

Liste de paramètres

funcname

Nom de la fonction courante

newname

Nouveau nom de fonction

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



runkit_import

(PECL runkit >= 0.7.0)

runkit_import Traite un fichier PHP important fonctions et définitions de classes, écrasement où applicable

Description

bool runkit_import ( string $filename [, int $flags = RUNKIT_IMPORT_CLASS_METHODS ] )

Similaire à include, par contre tout code qui réside à l'extérieur de fonction ou classe est simplement ignoré. De plus, dépendamment de la valeur de flags, toutes fonctions et classes qui existent déjà dans l'environnement en cours d'exécution seront automatiquement écrasées par leurs nouvelles définitions.

Liste de paramètres

filename

Nom du fichier pour importer les définitions de fonctions et de classe

flags

Comparaison de bits OU (OR) de la famille de constantes RUNKIT_IMPORT_*.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.



runkit_lint_file

(PECL runkit >= 0.7.0)

runkit_lint_file Vérifie la syntaxe PHP d'un fichier spécifié

Description

bool runkit_lint_file ( string $filename )

La fonction runkit_lint_file() effectue une vérification de syntaxe (lint) sur le fichier spécifié en testant les erreurs de scripts. Cette fonction est similaire à l'utilisation de php -l à partir de la ligne de commande.

Note: Support Sandbox (requis pour runkit_lint(), runkit_lint_file() et la classe Runkit_Sandbox) n'est seulement disponible qu'avec PHP 5.1 ou les versions de PHP 5.0 spécialement patché et nécessite que la protection de thread soit activée. Voyez le fichier README inclus dans le paquetage runkit pour plus d'informations.

Liste de paramètres

filename

Fichier contenant du code PHP à être vérifié

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



runkit_lint

(PECL runkit >= 0.7.0)

runkit_lint Vérifie la syntaxe PHP de code PHP spécifié

Description

bool runkit_lint ( string $code )

La fonction runkit_lint() effectue une vérification de syntaxe (lint) sur le code PHP spécifié en testant les erreurs de scripts. Cette fonction est similaire à l'utilisation de php -l à partir de la ligne de commande à l'exception que runkit_lint() accepte le code actuel plutôt qu'un fichier.

Note: Support Sandbox (requis pour runkit_lint(), runkit_lint_file() et la classe Runkit_Sandbox) n'est seulement disponible qu'avec PHP 5.1 ou les versions de PHP 5.0 spécialement patché et nécessite que la protection de thread soit activée. Voyez le fichier README inclus dans le paquetage runkit pour plus d'informations.

Liste de paramètres

code

Code PHP à être vérifié

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



runkit_method_add

(PECL runkit >= 0.7.0)

runkit_method_addAjoute dynamiquement une nouvelle méthode à une classe donnée

Description

bool runkit_method_add ( string $classname , string $methodname , string $args , string $code [, int $flags = RUNKIT_ACC_PUBLIC ] )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Liste de paramètres

classname

La classe dans laquelle la méthode sera ajoutée

methodname

Le nom de la méthode à ajouter

args

Liste des arguments séparés par des virgules pour la nouvelle méthode créée

code

Le code à être évalué lors que methodname est appelé

flags

Le type de méthode à créer, peut être RUNKIT_ACC_PUBLIC, RUNKIT_ACC_PROTECTED ou RUNKIT_ACC_PRIVATE

Note:

Ce paramètre est utilisé seulement en PHP 5, parce que, avant cette version, toutes les méthodes étaient publiques.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec runkit_method_add()

<?php
class Example {
    function 
foo() {
        echo 
"foo!\n";
    }
}

// Crée un objet Example
$e = new Example();

// Ajoute une nouvelle méthode publique
runkit_method_add(
    
'Example',
    
'add',
    
'$num1, $num2',
    
'return $num1 + $num2;',
    
RUNKIT_ACC_PUBLIC
);

// ajoute 12 + 4
echo $e->add(124);
?>

L'exemple ci-dessus va afficher :

16

Voir aussi



runkit_method_copy

(PECL runkit >= 0.7.0)

runkit_method_copyCopie une méthode d'une classe à une autre

Description

bool runkit_method_copy ( string $dClass , string $dMethod , string $sClass [, string $sMethod ] )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Liste de paramètres

dClass

Classe destination pour la méthode copiée

dMethod

Nom de la méthode de destination

sClass

Classe source pour la méthode à copier

sMethod

Nom de la méthode à copier à partir de la classe source. Si ce paramètre est omis, la valeur de dMethod est utilisée.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec runkit_method_copy()

<?php
class Foo {
    function 
example() {
        return 
"foo!\n";
    }
}

class 
Bar {
    
// initialement, aucune méthode
}

// Copie la méthode example() de la classe Foo vers la classe Bar, comme étant baz()
runkit_method_copy('Bar''baz''Foo''example');

// sortie de la fonction copiée
echo Bar::baz();
?>

L'exemple ci-dessus va afficher :

foo!

Voir aussi



runkit_method_redefine

(PECL runkit >= 0.7.0)

runkit_method_redefineChange dynamiquement le code de la méthode donnée

Description

bool runkit_method_redefine ( string $classname , string $methodname , string $args , string $code [, int $flags = RUNKIT_ACC_PUBLIC ] )

Note: Cette fonction ne peut être utilisée pour manipuler la méthode en cours d'utilisation (ou chaînée).

Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Liste de paramètres

classname

La classe dans laquelle la méthode sera redéfinie

methodname

Le nom de la méthode à redéfinir

args

Liste d'arguments séparés par des virgules pour la méthode redéfinie

code

Le nouveau code qui sera évalué lorsque methodname sera appelée

flags

La méthode redéfinie peut etre RUNKIT_ACC_PUBLIC, RUNKIT_ACC_PROTECTED ou RUNKIT_ACC_PRIVATE

Note:

Ce paramètre est utilisé seulement en PHP 5, parce que, avant cette version, toutes les méthodes étaient publiques.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec runkit_method_redefine()

<?php
class Example {
    function 
foo() {
        return 
"foo!\n";
    }
}

// Crée un objet Example
$e = new Example();

// Sortie Example::foo() (avant la redéfinition)
echo "Avant : " $e->foo();

// Redéfinition de la méthode 'foo'
runkit_method_redefine(
    
'Example',
    
'foo',
    
'',
    
'return "bar!\n";',
    
RUNKIT_ACC_PUBLIC
);

// Sortie Example::foo() (après la redéfinition)
echo "Après : " $e->foo();
?>

L'exemple ci-dessus va afficher :

Avant : foo!
Après : bar!

Voir aussi



runkit_method_remove

(PECL runkit >= 0.7.0)

runkit_method_removeSupprime dynamiquement la méthode donnée

Description

bool runkit_method_remove ( string $classname , string $methodname )

Note: Cette fonction ne peut être utilisée pour manipuler la méthode en cours d'utilisation (ou chaînée).

Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Liste de paramètres

classname

La classe dans laquelle la méthode sera supprimée

methodname

Le nom de la méthode à supprimer

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec runkit_method_remove()

<?php
class Example {
    function 
foo() {
        return 
"foo!\n";
    }
    
    function 
bar() {
        return 
"bar!\n";
    }
}

// Suppression de la méthode 'foo'
runkit_method_remove(
    
'Example',
    
'foo'
);

echo 
implode(' 'get_class_methods('Example'));

?>

L'exemple ci-dessus va afficher :

bar

Voir aussi



runkit_method_rename

(PECL runkit >= 0.7.0)

runkit_method_renameChange dynamiquement le nom de la méthode donnée

Description

bool runkit_method_rename ( string $classname , string $methodname , string $newname )

Note: Cette fonction ne peut être utilisée pour manipuler la méthode en cours d'utilisation (ou chaînée).

Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Liste de paramètres

classname

La classe dans laquelle la méthode sera renommée

methodname

Le nom de la méthode à renommer

newname

Le nouveau nom à donner à la méthode renommée

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec runkit_method_rename()

<?php
class Example {
    function 
foo() {
        return 
"foo!\n";
    }
}

// Renomme la méthode 'foo' par 'bar'
runkit_method_rename(
    
'Example',
    
'foo',
    
'bar'
);

// output renamed function
echo Example::bar();
?>

L'exemple ci-dessus va afficher :

foo!

Voir aussi



runkit_return_value_used

(PECL runkit >= 0.8.0)

runkit_return_value_usedDétermine si la valeur de retour des fonctions courantes sera utilisée

Description

bool runkit_return_value_used ( void )

Valeurs de retour

Retourne TRUE si la valeur de retour d'une fonction est utilisée par la portée appelante, FALSE autrement.

Exemples

Exemple #1 Exemple avec runkit_return_value_used()

<?php
function foo() {
  
var_dump(runkit_return_value_used());
}

foo();
$f foo();
?>

L'exemple ci-dessus va afficher :

bool(false)
bool(true)



runkit_sandbox_output_handler

(PECL runkit >= 0.7.0)

runkit_sandbox_output_handler Spécifie une fonction à capturer et/ou traiter la sortie à partir d'un runkit sandbox

Description

mixed runkit_sandbox_output_handler ( object $sandbox [, mixed $callback ] )

Normalement, toutes les sorties (comme avec echo ou print) seront écrites comme si elles avaient été écrites à partir de la portée du parent. Cependant, l'utilisation de runkit_sandbox_output_handler(), sorties générées par le sandbox (incluant les erreurs), peuvent être capturées par une fonction extérieure à sandbox.

Note: Support Sandbox (requis pour runkit_lint(), runkit_lint_file() et la classe Runkit_Sandbox) n'est seulement disponible qu'avec PHP 5.1 ou les versions de PHP 5.0 spécialement patché et nécessite que la protection de thread soit activée. Voyez le fichier README inclus dans le paquetage runkit pour plus d'informations.

Note: Obsolète

Depuis la version de runkit 0.5, cette fonction est obsolète et devrait être supprimée de ce paquetage avant la version 1.0. Le gestionnaire de sortie pour une instance donnée de Runkit_Sandbox devrait être lue/fixée en utilisant la syntaxe tableau de décalage montrée sur la page de définition de la classe Runkit_Sandbox.

Liste de paramètres

sandbox

Instance de la classe Runkit_Sandbox sur laquelle spécifier la gestion des sorties.

callback

Nom d'une fonction qui s'attend à un paramètre. La sortie générée par sandbox sera envoyée à cette fonction de rappel. Tout ce qui sera retourné par cette fonction sera affiché normalement. Si ce paramètre n'est pas passé, alors la gestion des sorties ne sera pas changée. Si une valeur incorrecte est passée, la gestion des sorties sera désactivée et sera retournée à l'affichage direct.

Valeurs de retour

Retourne le nom de la fonction de rappel précédemment définie en tant que gestion des sorties, ou FALSE si aucun gestionnaire n'avait été précédemment défini.

Exemples

Exemple #1 Alimentation de sortie vers une variable

<?php
function capture_output($str) {
  
$GLOBALS['sandbox_output'] .= $str;

  return 
'';
}

$sandbox_output '';

$php = new Runkit_Sandbox();
runkit_sandbox_output_handler($php'capture_output');
$php->echo("Bonjour\n");
$php->eval('var_dump("Excusez-moi");');
$php->die("Je me suis perdu.");
unset(
$php);

echo 
"Sandbox Complété\n\n";
echo 
$sandbox_output;
?>

L'exemple ci-dessus va afficher :

Sandbox Complété

Bonjour
string(9) "Excusez-moi"
Je me suis perdu.



runkit_superglobals

(PECL runkit >= 0.7.0)

runkit_superglobals Retourne un tableau indexé numériquement des variables superglobales enregistrées

Description

array runkit_superglobals ( void )

Valeurs de retour

Retourne un tableau indexé numériquement des variables superglobales enregistrée actuellement. C'est-à-dire _GET, _POST, _REQUEST, _COOKIE, _SESSION, _SERVER, _ENV, _FILES


Sommaire




Casse l'opérateur de silence


Introduction

L'extension scream donne la possibilité de désactiver l'opérateur de contrôle d'erreur, de manière à ce que toutes les erreurs soient rapportées. Cette fonctionnalité est désactivée par une directive PHP.



Installation/Configuration

Sommaire


Pré-requis

PHP version 5.2.0 ou plus récent.



Installation

Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici : » http://pecl.php.net/package/scream



Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Options de configuration de scream
Nom Défaut Modifiable Historique
scream.enabled Off PHP_INI_ALL  
Pour plus de détails sur les modes PHP_INI_*, reportez-vous à Où une directive de configuration peut être modifiée.

Voici un éclaircissement sur l'utilisation des directives de configuration.

scream.enabled int

Active ou non le module scream.



Types de ressources

Cette extension ne définit aucune ressource.




Exemples

Sommaire


Exemple d'illustration de scream

Cet exemple montre comment l'extension scream affecte le comportement du gestionnaire d'erreur PHP.

Exemple #1 Activation et désactivation de scream, à l'exécution

<?php
// Affichage des erreurs
ini_set('display_errors'true);
error_reporting(E_ALL);

// Désactivation de scream : le code est silencieux
ini_set('scream.enabled'false);
echo 
"Opening http://example.com/not-existing-file\n";
@
fopen('http://example.com/not-existing-file''r');

// Activation de scream : le code est verbeux
ini_set('scream.enabled'true);
echo 
"Opening http://example.com/not-existing-file\n";
@
fopen('http://example.com/another-not-existing-file''r');
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Opening http://example.com/not-existing-file
Opening http://example.com/not-existing-file

Warning: fopen(http://example.com/another-not-existing-file): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in example.php on line 14

Note: Généralement, on active cette extension avec une directive de configuration php.ini, au lieu de la modifier dans le code PHP.





Références faibles


Introduction

Les références faibles fournissent une façon non-intrusive de gérer les objets éphémères. Contrairement aux références normales (fortes), les références faibles n'alertent pas le gestionnaire de la libération de l'objet. Pour cette raison, un objet peut être détruit même si une référence faible vers cet objet existe toujours. Dans de telles conditions, la référence faible devient invalide de façon transparente.

Exemple #1 Exemple d'utilisation de Weakref

<?php
class MyClass {
    public function 
__destruct() {
        echo 
"Destruction de l'objet !\n";
    }
}

$o1 = new MyClass;

$r1 = new Weakref($o1);

if (
$r1->valid()) {
    echo 
"L'objet existe toujours !\n";
    
var_dump($r1->get());
} else {
    echo 
"L'objet est mort !\n";
}

unset(
$o1);

if (
$r1->valid()) {
    echo 
"L'objet existe toujours !\n";
    
var_dump($r1->get());
} else {
    echo 
"L'objet est mort !\n";
}
?>

L'exemple ci-dessus va afficher :

L'objet existe toujours !
object(MyClass)#1 (0) {
}
L'objet est mort !
Object is dead!



Installation/Configuration

Sommaire


Pré-requis

Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible.



Installation

Cette extension » PECL n'est pas intégrée à PHP.

Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici : » http://pecl.php.net/package/weakref.

Aucune bibliothèque DLL pour cette extension PECL n'est actuellement disponible. Reportez-vous à la section Compilation sous Windows.



Types de ressources

Cette extension ne définit aucune ressource.




La classe WeakRef

(PECL weakref >= 0.1.0)

Introduction

La classe WeakRef fournit une passerelle vers les objets sans prévenir le gestionnaire de collection de la libération de ces derniers. Elle fournit également une façon de passer d'une référence faible à une référence forte.

Synopsis de la classe

WeakRef {
/* Méthodes */
public Weakref::__construct ([ object $object ] )
public bool Weakref::acquire ( void )
public object Weakref::get ( void )
public bool Weakref::release ( void )
public bool Weakref::valid ( void )
}

Exemples

Exemple #1 Exemple d'utilisation de WeakRef

<?php
class MyClass {
    public function 
__destruct() {
        echo 
"Destruction de l'objet !\n";
    }
}

$o1 = new MyClass;

$r1 = new WeakRef($o1);

if (
$r1->valid()) {
    echo 
"L'objet existe toujours !\n";
    
var_dump($r1->get());
} else {
    echo 
"L'objet est mort !\n";
}

unset(
$o1);

if (
$r1->valid()) {
    echo 
"L'objet existe toujours !\n";
    
var_dump($r1->get());
} else {
    echo 
"L'objet est mort !\n";
}
?>

L'exemple ci-dessus va afficher :

L'objet existe toujours !
object(MyClass)#1 (0) {
}
Destruction de l'objet !
L'objet est mort !


Weakref::acquire

(PECL weakref >= 0.1.0)

Weakref::acquireAcquière une forte référence sur un objet

Description

public bool Weakref::acquire ( void )

Acquière une forte référence sur un objet, passant ainsi virtuellement d'une référence faible en une référence forte.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne TRUE si la référence est valide et peut être convertie en une référence forte, FALSE sinon.

Exemples

Exemple #1 Exemple avec Weakref::acquire()

<?php
class MyClass {
    public function 
__destruct() {
        echo 
"Destroying object!\n";
    }
}

$o1 = new MyClass;

$r1 = new Weakref($o1);

$r1->acquire();

echo 
"Unsetting o1...\n";
unset(
$o1);

$o2 $r1->get();

$r1->release();

echo 
"Unsetting o2...\n";
unset(
$o2);
?>

L'exemple ci-dessus va afficher :

Unsetting o1...
Unsetting o2...
Destroying object!

Exemple #2 Exemple d'acquisition / libération

<?php
class MyClass {
    public function 
__destruct() {
        echo 
"Destroying object!\n";
    }
}

$o1 = new MyClass;

$r1 = new Weakref($o1);

echo 
"Acquiring...\n";
$r1->acquire();

echo 
"  Unsetting...\n";
unset(
$o1);

echo 
"  Acquiring...\n";
$r1->acquire();

echo 
"    Acquiring...\n";
$r1->acquire();

echo 
"    Releasing...\n";
$r1->release();

echo 
"  Releasing...\n";
$r1->release();

echo 
"Releasing...\n";
$r1->release();

?>

L'exemple ci-dessus va afficher :

Acquiring...
  Unsetting...
  Acquiring...
    Acquiring...
    Releasing...
  Releasing...
Releasing...
Destroying object!

Voir aussi



Weakref::__construct

(PECL weakref >= 0.1.0)

Weakref::__constructConstruit une nouvelle référence forte

Description

public Weakref::__construct() ([ object $object ] )

Construit une nouvelle référence forte.

Liste de paramètres

object

L'objet à référencer.

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Exemple avec Weakref::__construct()

<?php
class MyClass {
    public function 
__destruct() {
        echo 
"Destruction de l'objet !\n";
    }
}

$o1 = new MyClass;

$r1 = new Weakref($o1);

if (
$r1->valid()) {
    echo 
"L'objet existe toujours !\n";
    
var_dump($r1->get());
} else {
    echo 
"L'objet est mort !\n";
}

unset(
$o1);

if (
$r1->valid()) {
    echo 
"L'objet existe toujours !\n";
    
var_dump($r1->get());
} else {
    echo 
"L'objet est mort !\n";
}
?>

L'exemple ci-dessus va afficher :

L'objet existe toujours !
object(MyClass)#1 (0) {
}
Destruction de l'objet !
L'objet est mort !



Weakref::get

(PECL weakref >= 0.1.0)

Weakref::getRetourne l'objet pointé par sa référence forte

Description

public object Weakref::get ( void )

Retourne l'objet pointé par sa référence forte.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne l'objet si la référence est toujours valide, NULL sinon.

Voir aussi



Weakref::release

(PECL weakref >= 0.1.0)

Weakref::releaseLibère une référence précédemment acquise

Description

public bool Weakref::release ( void )

Libère une référence précédemment acquise. Cela revient à modifier une référence forte en une référence faible.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne TRUE si la référence a été précédemment acquise et ainsi, a pu être libérée, FALSE sinon.

Exemples

Exemple #1 Exemple avec Weakref::release()

<?php
class MyClass {
    public function 
__destruct() {
        echo 
"Destruction de l'objet !\n";
    }
}

$o1 = new MyClass;

$r1 = new Weakref($o1);

$r1->acquire();

echo 
"Libération de o1...\n";
unset(
$o1);

$o2 $r1->get();

$r1->release();

echo 
"Libération de o2...\n";
unset(
$o2);
?>

L'exemple ci-dessus va afficher :

Libération de o1...
Libération de o2...
Destruction de l'objet !

Voir aussi



Weakref::valid

(PECL weakref >= 0.1.0)

Weakref::validVérifie si l'objet référencé existe toujours

Description

public bool Weakref::valid ( void )

Vérifie si l'objet référencé existe toujours.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne TRUE si l'objet existe toujours et ainsi, est toujours accessibe via la méthode Weakref::get(), FALSE sinon.

Voir aussi


Sommaire



La classe WeakMap

(PECL weakref >= 0.2.0)

Introduction

Synopsis de la classe

WeakMap implements Countable , ArrayAccess , Iterator , Traversable {
/* Méthodes */
public __construct ( void )
public int count ( void )
public mixed current ( void )
public object key ( void )
public void next ( void )
public bool offsetExists ( object $object )
public mixed offsetGet ( object $object )
public void offsetSet ( object $object , mixed $value )
public void offsetUnset ( object $object )
public void rewind ( void )
public bool valid ( void )
}

Exemples

Exemple #1 Exemple d'utilisation de Weakmap

<?php
$wm 
= new WeakMap();

$o = new StdClass;

class 
{
    public function 
__destruct() {
        echo 
"Mort !\n";
    }
}

$wm[$o] = new A;

var_dump(count($wm));
echo 
"Effacement..\n";
unset(
$o);
echo 
"Fait\n";
var_dump(count($wm));

L'exemple ci-dessus va afficher :

int(1)
Effacement..
Mort !
Fait
int(0)


WeakMap::__construct

(PECL weakref >= 0.2.0)

WeakMap::__constructConstruit un nouveau map

Description

public WeakMap::__construct ( void )

Construit un nouveau map.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Aucune valeur n'est retournée.



WeakMap::count

(PECL weakref >= 0.2.0)

WeakMap::countCompte le nombre d'entrées du map

Description

public int WeakMap::count ( void )

Compte le nombre d'entrées du map.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne le nombre d'entrées du map.



WeakMap::current

(PECL weakref >= 0.2.0)

WeakMap::currentRetourne la valeur courante de l'itération

Description

public mixed WeakMap::current ( void )

Retourne la valeur courante itérée dans le map.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

La valeur actuellement itérée.



WeakMap::key

(PECL weakref >= 0.2.0)

WeakMap::keyRetourne la clé courante de l'itérateur

Description

public object WeakMap::key ( void )

Retourne l'objet servant comme clé dans le map, à la position courante de l'itérateur.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

L'objet clé actuellement itéré.



WeakMap::next

(PECL weakref >= 0.2.0)

WeakMap::nextAvance jusqu'au prochain élément du map

Description

public void WeakMap::next ( void )

Avance jusqu'au prochain élément du map.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Aucune valeur n'est retournée.



WeakMap::offsetExists

(PECL weakref >= 0.2.0)

WeakMap::offsetExistsVérifie si un objet est dans le map

Description

public bool WeakMap::offsetExists ( object $object )

Vérifie si l'objet passé est référencé dans le map.

Liste de paramètres

object

L'objet à vérifier.

Valeurs de retour

Retourne TRUE si l'objet est contenu dans le map, FALSE sinon.



WeakMap::offsetGet

(PECL weakref >= 0.2.0)

WeakMap::offsetGetRetourne la valeur pointée par un certain objet

Description

public mixed WeakMap::offsetGet ( object $object )

Retourne la valeur pointée par un certain objet.

Liste de paramètres

object

L'objet clé.

Valeurs de retour

Retourne la valeur associée à l'objet clé passé en argument, ou NULL sinon.



WeakMap::offsetSet

(PECL weakref >= 0.2.0)

WeakMap::offsetSetMet à jour le map avec une nouvelle paire clé-valeur

Description

public void WeakMap::offsetSet ( object $object , mixed $value )

Met à jour le map avec une nouvelle paire clé-valeur. Si la clé existe déjà dans le map, l'ancienne valeur est remplacée avec la nouvelle.

Liste de paramètres

object

L'objet servant comme clé de la paire clé-valeur.

value

DOnnées arbitraires servant comme valeur de la paire clé-valeur.

Valeurs de retour

Aucune valeur n'est retournée.



WeakMap::offsetUnset

(PECL weakref >= 0.2.0)

WeakMap::offsetUnsetSupprime une entrée depuis le map

Description

public void WeakMap::offsetUnset ( object $object )

Supprime une entrée depuis le map.

Liste de paramètres

object

L'objet clé à supprimer depuis le map.

Valeurs de retour

Aucune valeur n'est retournée.



WeakMap::rewind

(PECL weakref >= 0.2.0)

WeakMap::rewindRéinitialise l'itérateur au début du map

Description

public void WeakMap::rewind ( void )

Réinitialise l'itérateur au début du map.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Aucune valeur n'est retournée.



WeakMap::valid

(PECL weakref >= 0.2.0)

WeakMap::validVérifie si l'itérateur est toujours sur un élément map valide

Description

public bool WeakMap::valid ( void )

Vérifie si l'itérateur est toujours sur un élément map valide.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne TRUE si l'itérateur est sur un élément valide qui peut être accédé, FALSE sinon.


Sommaire




Windows Cache pour PHP


Introduction

L'extension Windows Cache pour PHP est un accélérateur PHP qui est utilisé pour augmenter la vitesse des applications PHP sous Windows et Windows Server. Une fois l'extension Windows Cache activée et chargée par le moteur PHP, les applications PHP peuvent tirer parti des fonctionnalités sans aucune modification de code.

L'extension Windows Cache comprend 5 types de caches. Ce qui suit décrit le but de chaque type de cache et les avantages qu'il procure.

  • Cache d'Opcode PHP - PHP est un moteur de traitement de script, qui lit un flux d'entrée de données qui contient du texte et / ou des instructions PHP et produit un autre flux de données, le plus souvent au format HTML. Cela signifie que sur un serveur Web le moteur PHP lit, analyse, compile et exécute un script PHP à chaque fois qu'il est demandé par un client Web. Les operations de lecture, d'analyse et de compilation ajoute une charge supplémentaire sur le processeur (CPU) et sur le système de fichiers, ce qui affecte la performance globale d'une application web PHP. Le cache de bytecode PHP (Opcode) est utilisé pour stocker le bytecode du script compilé dans la mémoire partagée pour qu'il puisse être ré-utilisé par le moteur PHP lors des exécutions suivantes du même script.

  • Cache de fichiers - Même avec le cache d'opcode PHP activé, le moteur PHP doit accèder aux fichiers de script sur un système de fichiers. Lorsque les scripts PHP sont stockés sur le système de fichiers d'un ordinateur distant, les opérations sur ces fichiers introduisent une surcharge importante des performances. L'extension de Cache Windows pour PHP inclut un cache de fichier qui est utilisé pour stocker le contenu des fichiers de scripts PHP dans la mémoire partagée, ce qui réduit le nombre d'opérations effectuées par le moteur PHP sur le système de fichiers.

  • Cache de résolution des chemins de fichier - Les scripts PHP incluent ou fonctionnent très souvent avec des fichiers en utilisant des chemins relatifs. Chaque chemin de fichier doit être normalisé en un chemin de fichier absolu par le moteur PHP. Quand une application PHP utilise de nombreux fichiers PHP et y accède par des chemins relatifs, l'opération de résolution des chemins peut impacter négativement les performances de l'application. L'extension de Cache Windows pour PHP fournit un cache de résolution des chemins de fichier, qui est utilisé pour stocker les correspondances entre les chemins de fichier relatifs et absolus, réduisant ainsi le nombre de résolutions que le moteur PHP devra effectuer.

  • Cache utilisateur (disponible depuis la version 1.1.0) - Les scripts PHP peuvent tirer profit du cache de mémoire partagée en utilisant l'API de cache utilisateur. Les objets PHP et les variables peuvent être stockées dans le cache utilisateur et réutilisés lors des requêtes suivantes. Ce cache peut être utilisé pour améliorer les performances des scripts PHP et pour partager les données entre plusieurs processus PHP.

  • Gestionnaire de session (disponible depuis la version 1.1.0) - Le gestionnaire de session WinCache peut être utilisé pour stocker les données de session PHP dans le cache de la mémoire partagée. Cela évite des opérations sur le système de fichiers pour la lecture et l'écriture des données de session, ce qui améliore les performances lorsque un montant important de données est stocké dans la session PHP.



Installation/Configuration

Sommaire


Pré-requis

L'extension est actuellement uniquement supportée sur les configurations suivantes :

Windows OS:

  • Windows XP SP3 avec IIS 5.1 et l'» Extension FastCGI
  • Windows Server 2003 avec IIS 6.0 et l'» Extension FastCGI
  • Windows Vista SP1 avec IIS 7.0 et le module FastCGI
  • Windows Server 2008 avec IIS 7.0 et le module FastCGI
  • Windows 7 avec IIS 7.5 et le module FastCGI
  • Windows Server 2008 R2 avec IIS 7.5 et le module FastCGI

PHP:

  • PHP 5.2.X, Non-thread-safe build
  • PHP 5.3 X86, Non-thread-safe VC9 build

Note: L'extension WinCache peut uniquement être utilisée lorsque IIS est configuré pour exécuter PHP via FastCGI.



Installation

Cette extension » PECL n'est pas intégrée à PHP.

Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici : » http://pecl.php.net/package/wincache.

Il y a deux packages pour cette extension: un package est pour les versions PHP 5.2.X, et l'autre package est pour PHP 5.3.X. Choisissez le package approprié à la version PHP utilisée.

Pour installer et activer l'extension, suivez ces étapes :

  1. Décompressez le package dans un endroit temporaire.

  2. Copiez le fichier php_wincache.dll dans le dossier d'extensions PHP. En général, ce dossier se nomme "ext" et est situé dans le même dossier avec tout les fichiers binaires PHP. Par exemple : C:\Program Files\PHP\ext.

  3. Avec un éditeur de texte, ouvrez le fichier php.ini, qui se trouve généralement dans le même dossier que tout les fichiers binaires PHP. Par exemple : C:\Program Files\PHP\php.ini.

  4. Ajoutez la ligne suivante à la fin du fichier php.ini : extension = php_wincache.dll.

  5. Enregistrez et fermez le fichier php.ini.

  6. Redémarrez le pool d'application IIS pour que PHP récupère les changements de configuration. Pour vérifier que l'extension a été activée, créez un fichier nommé phpinfo.php contenant un appel à la fonction phpinfo.

  7. Sauvez le fichier phpinfo.php dans le répertoire racine d'un site Web IIS qui utilise PHP, puis ouvrez un navigateur et faites une requête sur http://localhost/phpinfo.php. Cherchez une section appelée wincache dans la page retournée. Si l'extension est activée, alors la sortie de phpinfo listera les paramètres de configuration fournis par WinCache.

Note: Ne pas oublier de supprimer le fichier phpinfo.php du répertoire racine après avoir vérifié que l'extension a été activée.



Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Le tableau suivant répertorie et explique les paramètres de configuration fournis par l'extension WinCache :

Options de configuration WinCache
Nom Défaut Minimum Maximum Modifiable Historique
wincache.fcenabled "1" "0" "1" PHP_INI_ALL Disponible depuis WinCache 1.0.0
wincache.fcenabledfilter "NULL" "NULL" "NULL" PHP_INI_SYSTEM Disponible depuis WinCache 1.0.0
wincache.fcachesize "24" "5" "255" PHP_INI_SYSTEM Disponible depuis WinCache 1.0.0
wincache.fcndetect "1" "0" "1" PHP_INI_SYSTEM Disponible depuis WinCache 1.1.0
wincache.maxfilesize "256" "10" "2048" PHP_INI_SYSTEM Disponible depuis WinCache 1.0.0
wincache.ocenabled "1" "0" "1" PHP_INI_ALL Disponible depuis WinCache 1.0.0
wincache.ocenabledfilter "NULL" "NULL" "NULL" PHP_INI_SYSTEM Disponible depuis WinCache 1.0.0
wincache.ocachesize "96" "15" "255" PHP_INI_SYSTEM Disponible depuis WinCache 1.0.0
wincache.filecount "4096" "1024" "16384" PHP_INI_SYSTEM Disponible depuis WinCache 1.0.0
wincache.chkinterval "30" "0" "300" PHP_INI_SYSTEM Disponible depuis WinCache 1.0.0
wincache.ttlmax "1200" "0" "7200" PHP_INI_SYSTEM Disponible depuis WinCache 1.0.0
wincache.enablecli 0 0 1 PHP_INI_SYSTEM Disponible depuis WinCache 1.0.0
wincache.ignorelist NULL NULL NULL PHP_INI_ALL Disponible depuis WinCache 1.0.0
wincache.namesalt NULL NULL NULL PHP_INI_SYSTEM Disponible depuis WinCache 1.0.0
wincache.ucenabled 1 0 1 PHP_INI_SYSTEM Disponible depuis WinCache 1.1.0
wincache.ucachesize 8 5 85 PHP_INI_SYSTEM Disponible depuis WinCache 1.1.0
wincache.scachesize 8 5 85 PHP_INI_SYSTEM Disponible depuis WinCache 1.1.0
wincache.rerouteini NULL NULL NULL PHP_INI_SYSTEM Disponible depuis WinCache 1.2.0
Pour plus de détails sur les modes PHP_INI_*, reportez-vous à Où une directive de configuration peut être modifiée.

Voici un éclaircissement sur l'utilisation des directives de configuration.

wincache.fcenabled boolean
Active ou désactive la fonctionnalité de cache de fichiers.
wincache.fcenabledfilter string
Définit une liste séparée par des virgules, d'identificateurs de site Web IIS où le cache de fichiers doit être activé ou désactivé. Ce paramètre fonctionne en conjonction avec wincache.fcenabled : Si wincache.fcenabled est réglé à 1, alors les sites listés dans wincache.fcenabledfilter auront le cache de fichiers désactivé; si wincache.fcenabled est réglé à 0, alors les sites listés dans wincache.fcenabledfilter auront le cache de fichiers activé.
wincache.fcachesize integer
Définit la taille maximale de mémoire (en mégaoctets) qui est allouée pour le cache de fichiers. Si la taille totale de tous les fichiers en cache dépasse la valeur spécifiée dans ce paramètre, alors la plupart des fichiers périmés seront retirés du cache de fichiers.
wincache.fcndetect boolean
Active ou désactive les notifications de détection de modification de fichier. Si la notification est supporté, alors elle sera utilisé pour rafraîchir l'opcode ainsi que les entrées du fichier présentes dans le cache aussitôt la modification correspondante des fichiers effectuée sur le système de fichiers. Si la notification n'est pas supportée, par exemple lors de l'utilisation de fichiers partagés par le réseau, alors Wincache vérifiera les modifications de fichiers à intervalle régulier spécifié par le paramètre wincache.chkinterval.
wincache.maxfilesize integer
Définit la taille maximale autorisée (en kilo-octets) pour un fichier unique qui sera mis en cache. Si un fichier a une taille supérieure à la valeur spécifiée, le fichier ne sera pas mis en cache. Ce paramètre s'applique à la mémoire cache de fichier seulement.
wincache.ocenabled boolean
Active ou désactive la fonctionnalité de cache opcode
wincache.ocenabledfilter string
Définit une liste séparée par des virgules, d'identificateurs de site Web IIS où le cache opcode doit être activé ou désactivé. Ce paramètre fonctionne en conjonction avec wincache.ocenabled : Si wincache.ocenabled est réglé à 1, alors les sites listés dans wincache.ocenabledfilter auront le cache opcode désactivé; si wincache.ocenabled est réglé à 0, alors les sites listés dans wincache.ocenabledfilter auront le cache opcode activé.
wincache.ocachesize integer
Définit la taille maximum de mémoire (en mégaoctets) qui est allouée pour le cache opcode. Si la taille du cache opcode dépasse la valeur spécifiée, alors l'opcode le plus ancien sera retiré du cache. Notez que la taille du cache d'opcode doit être au moins 3 fois plus grande que la taille du cache de fichiers. Si ce n'est pas le cas la taille du cache opcode sera automatiquement augmentée.
wincache.filecount integer
Définit combien de fichiers sont censés être mis en cache par l'extension, de sorte à ce qu'un montant de mémoire suffisant soit alloué au démarrage. Si le nombre de fichiers excède la valeur spécifiée, WinCache ré-allouera plus de mémoire comme demandé.
wincache.chkinterval integer
Définit la fréquence (en secondes) à laquelle l'extension vérifiera les changements de fichier de façon à rafraîchir le cache. Mettre cette option à 0 permet de désactiver le rafraîchissement du cache. Les changements de fichiers ne seront pas reflétés dans le cache à moins que l'entrée de cache soit supprimée par le récupérateur, que le pool d'applications IIS soit recyclé, ou que la fonction wincache_refresh_if_changed soit appelée.
wincache.ttlmax integer
Définit le temps de vie maximale (en secondes) pour une entrée de cache sans être utilisée. Définir ce paramètre à 0 désactive la récupérateur de cache, de façon à ce que les entrées du cache ne soient jamais supprimées du cache pendant la durée de vie du processus de travail IIS.
wincache.enablecli boolean
Définit si le cache est activé lorsque PHP fonctionne en ligne de commande (CLI) .
wincache.ignorelist string

Définit une liste de fichiers qui ne doivent pas être mis en cache par l'extension. La liste des fichiers est spécifiée en utilisant des noms de fichiers uniquement, séparés par le symbole pipe - "|".

Exemple #1 wincache.ignorelist exemple

wincache.ignorelist = "index.php|misc.php|admin.php"

wincache.namesalt string
Définit une chaîne qui sera utilisée lors du nommage des objets spécifiques à l'extension qui seront stockés dans la mémoire partagée. Ce paramètre est utilisé afin d'éviter les conflits qui peuvent être provoqués si d'autres applications dans un processus de travail IIS tente d'accéder à la mémoire partagée. La longueur de la chaîne namesalt ne peut être supérieure à 8 caractères.
wincache.ucenabled boolean
Active ou désactive la fonctionnalité de cache utilisateur.
wincache.ucachesize integer
Définit la taille maximale de mémoire (en mégaoctets) qui est allouée pour le cache utilisateur. Si la taille totale des variables stockées dans le cache utilisateur dépasse la valeur spécifiée, alors les plus anciennes variables seront retirées du cache.
wincache.scachesize integer
Définie la taille maximale de mémoire, en méga-octets, à allouer pour le cache de la session. Si la taille totale des données stockées dans le cache de la session excède la valeur spécifiée, alors les données les plus anciennes seront supprimées du cache.
wincache.rerouteini string
Indique un chemin absolu ou relatif vers le fichier reroute.ini contenant une liste de fonctions PHP dont les implémentations devraient être remplacées par les équivalents Wincache. Si un chemin relatif est passé, il est supposé relatif au fichier php-cgi.exe.



Script de statistiques WinCache

Le package d'installation pour WinCache inclut un script PHP, wincache.php, qui peut être utilisé pour obtenir des informations et des statistiques sur le cache.

Si l'extension WinCache a été installée via l'installeur de Microsoft Web Platform, alors ce script se trouve dans %SystemDrive%\Program Files\IIS\Windows Cache for PHP\. Sur une version 64 bits du système d'exploitation Windows Server, le script se trouve dans %SystemDrive%\Program Files (x86)\IIS\Windows Cache for PHP. Si l'extension a été installée manuellement, alors le fichier wincache.php sera situé dans le même dossier à partir duquel le contenu du package d'installation a été extrait.

Pour utiliser wincache.php, copiez-le dans le dossier racine d'un site Web ou dans n'importe quel sous-dossier. Pour protéger le script, ouvrez-le dans n'importe quel éditeur et remplacez les valeurs des constantes USERNAME et PASSWORD. Si n'importe quel autre authentification IIS est activée sur le serveur, alors suivez les instructions dans les commentaires :

Exemple #1 Configuration de l'authentification pour wincache.php

<?php
/**
 * ======================== CONFIGURATION SETTINGS ==============================
 * If you do not want to use authentication for this page, set USE_AUTHENTICATION to 0.
 * If you use authentication then replace the default password.
 */
define('USE_AUTHENTICATION'1);
define('USERNAME''wincache');
define('PASSWORD''wincache');

/**
 * The Basic PHP authentication will work only when IIS is configured to support 
 * Anonymous Authentication' and nothing else. If IIS is configured to support/use
 * any other kind of authentication like Basic/Negotiate/Digest etc, this will not work.
 * In that case use the array below to define the names of users in your 
 * domain/network/workgroup which you want to grant access to.
 */
$user_allowed = array('DOMAIN\user1''DOMAIN\user2''DOMAIN\user3');

/**
 * If the array contains string 'all', then all the users authenticated by IIS
 * will have access to the page. Uncomment the below line and comment above line
 * to grant access to all users who gets authenticated by IIS.
 */
/* $user_allowed = array('all'); */

/** ===================== END OF CONFIGURATION SETTINGS ========================== */
?>

Note: Protégez toujours le script wincache.php en utilisant soit le mécanisme d'authentification intégré ou le mécanisme d'authentification du serveur. Laissez ce script non protégé peut compromettre la sécurité de votre application web et du serveur.



WinCache Session Handler

Le gestionnaire de session WinCache (disponible depuis WinCache 1.1.0) peut être utilisé pour configurer PHP pour stocker les données de session dans la mémoire partagée du cache de session. L'utilisation de la mémoire partagée au lieu de la session par défaut aide à améliorer les performances des applications PHP qui stockent de grandes quantités de données dans des objets de session. Le cache de session Wincache utilise des fichiers basés sur la mémoire partagée, ce qui assure que les données de session ne seront pas perdues lors du recyclage de la file d'attente des applications IIS.

Pour configurer PHP pour utiliser le gestionnaire de session WinCache mettez le paramètre session.save_handler du fichier php.ini à wincache. Par défaut, l'endroit où sont stockés les fichiers temporaires sous Windows est utilisé pour stocker les données de session. Pour changer cet endroit, utilisez la directive session.save_path.

Exemple #1 Activer le gestionnaire de session WinCache

session.save_handler = wincache
session.save_path = C:\inetpub\temp\session\



WinCache Functions Reroutes

Les fonctionnalités WinCache de re routages de fonctions (disponibles depuis WinCache 1.2.0) peuvent être utilisées pour remplacer des fonctions PHP natives par leur équivalent optimisé pour des cas particuliers. L'extension Wincache inclut des implémentations de fonctions PHP optimisées pour Windows, notamment dans les cas d'accès réseau ou système de fichiers. Les fonctions suivantes sont concernées :

Pour configurer le re routage de fonctions avec Wincache, utilisez le fichier reroute.ini inclut dans le paquet. Copiez le dans le dossier où se trouve php.ini. Après, ajoutez wincache.rerouteini dans php.ini et précisez le chemin absolu ou relatif vers reroute.ini.

Exemple #1 Activation des fonctionnalités de re routage des fonctions de WinCache

wincache.rerouteini = C:\PHP\reroute.ini

Note: Si activé, il est recommandé d'augmenter la taille du cache des fichiers. Ceci peut être fait en utilisant le paramètre wincache.fcachesize.

Le fichier reroute.ini contient la correspondance entre la fonction PHP native et l'équivalent Wincache. Chaque ligne dans le fichier définit une correspondance. Voici la syntaxe:

<PHP function name>:[<number of function parameters>]=<wincache function name>

Un exemple de fichier est donné plus bas. Dans cet exemple, les appels aux fonctions PHP file_get_contents() seront remplacés par wincache_file_get_contents() seulement si le nombre de paramètres passés à la fonction est inférieur ou égal à deux. C'est utile de préciser le nombre de paramètres lorsque la fonction de remplacement n'est pas conçue pour tous les utiliser.

Exemple #2 Reroute.ini

[FunctionRerouteList]
file_exists=wincache_file_exists
file_get_contents:2=wincache_file_get_contents
readfile:2=wincache_readfile
is_readable=wincache_is_readable
is_writable=wincache_is_writable
is_writeable=wincache_is_writable
is_file=wincache_is_file
is_dir=wincache_is_dir
realpath=wincache_realpath
filesize=wincache_filesize



Types de ressources

Cette extension ne définit aucune ressource.




Constantes pré-définies

Cette extension ne définit aucune constante.



Fonctions WinCache


wincache_fcache_fileinfo

(PECL wincache >= 1.0.0)

wincache_fcache_fileinfo Extrait des informations sur les fichiers mis en cache dans le cache de fichiers

Description

array wincache_fcache_fileinfo ([ bool $summaryonly = false ] )

Extrait des informations sur le contenu du cache de fichiers et son utilisation.

Liste de paramètres

summaryonly

Si le tableau retourné doit contenir des informations sur chaque entrée du cache en plus du résumé sur les fichiers du cache.

Valeurs de retour

Tableau de méta-données sur le cache de fichier ou FALSE si une erreur survient

Le tableau retourné par cette fonction contient les éléments suivants :

  • total_cache_uptime - Temps d'activité total en secondes du cache de fichiers
  • total_file_count - Nombre total de fichiers actuellement dans le cache de fichiers
  • total_hit_count - Nombre de fois où les fichiers ont été servis à partir du cache du fichiers
  • total_miss_count - Nombre de fois que les fichiers n'ont pas été trouvés dans le cache de fichiers
  • file_entries - Tableau contenant les informations sur tous les fichiers mis en cache:

    • file_name - Nom et chemin absolu du fichier en cache
    • add_time - Temps en secondes depuis que le fichier a été ajouté au cache de fichiers
    • use_time - Temps en secondes depuis que le fichier a été consulté dans le cache de fichier
    • last_check - Temps en secondes depuis la dernière vérification de modifications
    • hit_count - Nombre de fois que le fichier a été servis à partir du cache
    • file_size - Taille en bytes du fichier caché

Exemples

Exemple #1 Un exemple de wincache_fcache_fileinfo()

<pre>
<?php
print_r
(wincache_fcache_fileinfo());
?>
</pre>

L'exemple ci-dessus va afficher :

Array
(   [total_cache_uptime] => 3234
    [total_file_count] => 5
    [total_hit_count] => 0
    [total_miss_count] => 1
    [file_entries] => Array
        (
            [1] => Array
                (
                    [file_name] => c:\inetpub\wwwroot\checkcache.php
                    [add_time] => 1
                    [use_time] => 0
                    [last_check] => 1
                    [hit_count] => 1
                    [file_size] => 2435
                )
            [2] => Array (...iterates for each cached file)
        )
)

Voir aussi



wincache_fcache_meminfo

(PECL wincache >= 1.0.0)

wincache_fcache_meminfo Extrait des informations sur l'utilisation de la mémoire du cache de fichiers.

Description

array wincache_fcache_meminfo ( void )

Extrait des informations sur l'utilisation de la mémoire du cache de fichiers.

Valeurs de retour

Tableau de méta-données sur l'utilisation de la mémoire du cache de fichiers ou FALSE si une erreur survient

Le tableau retourné par cette fonction contient les éléments suivants:

  • memory_total - Quantité de mémoire en octets allouée pour le cache de fichiers
  • memory_free - Quantité de mémoire libre en octets disponible pour le cache de fichiers
  • num_used_blks - Nombre de blocs mémoire utilisés par le cache de fichiers
  • num_free_blks - Nombre de blocs mémoire libres disponibles pour le cache de fichiers
  • memory_overhead - Quantité de mémoire en bytes utilisée pour la structure interne du cache de fichiers

Exemples

Exemple #1 Un exemple de wincache_fcache_meminfo()

<pre>
<?php
print_r
(wincache_fcache_meminfo());
?>
</pre>

L'exemple ci-dessus va afficher :

Array
(
    [memory_total] => 134217728
    [memory_free] => 131339120
    [num_used_blks] => 361
    [num_free_blks] => 3
    [memory_overhead] => 5856
)

Voir aussi



wincache_lock

(PECL wincache >= 1.1.0)

wincache_lockAcquière un verrou exclusif sur une clé donnée

Description

bool wincache_lock ( string $key [, bool $isglobal = false ] )

Obtient un verrou exclusif sur une clé donnée. L'exécution du script courant sera bloqué tant que le verrou ne pourra pas être obtenu. Une fois le verrou obtenu, les autres scripts tentant de requérir le verrou en utilisant la même clé seront bloqués, tant que le script courant n'aura pas libéré le verrou en utilisant la fonction wincache_unlock().

Avertissement

L'utilisation de la fonction wincache_lock() et de la fonction wincache_unlock() peut conduire à des verrous morts lors de l'exécution de scripts PHP sur des environnements multi-processus, comme FastCGI. N'utilisez pas ces fonctions tant que vous n'êtes pas absolument certain d'en avoir besoin. Pour la majorité des opérations sur le cache utilisateur, il n'est pas nécessaire de les utiliser.

Liste de paramètres

key

Nom de la clé du cache dont nous souhaitons obtenir un verrou.

isglobal

Contrôle si le contexte du verrou est local ou au niveau système. Les verrous locaux ont un contexte au niveau applicatif dans le cas de l'utilisation sous IIS Fast CGI ou au niveau de tous les processus PHP qui ont le même identifiant parent de processus.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec wincache_lock()

<?php
$fp 
fopen("/tmp/lock.txt""r+");
if (
wincache_lock(“lock_txt_lock”)) { // obtient un verrou exclusif
    
ftruncate($fp0); // tronque le fichier
    
fwrite($fp"On écrit quelque chose ici\n");
    
wincache_unlock(“lock_txt_lock”); // libère le verrou
} else {
    echo 
"Impossible d'obtenir le verrou !";
}
fclose($fp);
?>

Voir aussi



wincache_ocache_fileinfo

(PECL wincache >= 1.0.0)

wincache_ocache_fileinfo Extrait des informations sur les fichiers mis en cache dans le cache opcode

Description

array wincache_ocache_fileinfo ([ bool $summaryonly = false ] )

Extrait des informations sur le contenu du cache opcode et son utilisation.

Liste de paramètres

summaryonly

Contrôle si le tableau retourné doit contenir des informations sur les entrées individuelles du cache en plus du résumé sur le cache opcode.

Valeurs de retour

Tableau de méta-données sur le cache opcode ou FALSE si une erreur survient

Le tableau retourné par cette fonction contient les éléments suivants:

  • total_cache_uptime - Temps d'activité total en secondes du cache opcode
  • total_file_count - Nombre total de fichiers actuellement dans le cache opcode
  • total_hit_count - Nombre total de fois où l'opcode compilé a été servis par le cache
  • total_miss_count - Nombre de fois où l'opcode compilé n'a pas été trouvé dans le cache
  • is_local_cache - true si les méta-données du cache sont pour une instance de cache local, false si les méta-données sont pour le cache global.
  • file_entries - Tableau contenant les informations sur tous les fichiers mis en cache:

    • file_name - Nom de fichier absolu du fichier en cache
    • add_time - Temps en secondes depuis l'ajout du fichier dans le cache opcode
    • use_time - Temps en secondes depuis la consultation du fichier dans le cache opcode
    • last_check - Temps en secondes depuis où le fichier a été vérifié pour les modifications
    • hit_count - Nombre de fois où le fichier a été servis par le cache
    • function_count - Nombre de fonctions dans le cache
    • class_count - Nombre de classes dans le cache

Exemples

Exemple #1 Un exemple de wincache_ocache_fileinfo()

<pre>
<?php
print_r
(wincache_ocache_fileinfo());
?>
</pre>

L'exemple ci-dessus va afficher :

Array
(
    [total_cache_uptime] => 17357
    [total_file_count] => 121
    [total_hit_count] => 36562
    [total_miss_count] => 201
    [file_entries] => Array
        (
            [1] => Array
                (
                    [file_name] => c:\inetpub\wwwroot\checkcache.php
                    [add_time] => 17356
                    [use_time] => 7
                    [last_check] => 10
                    [hit_count] => 454
                    [function_count] => 0
                    [class_count] => 1
                )
            [2] => Array (...iterates for each cached file)
        )
)

Voir aussi



wincache_ocache_meminfo

(PECL wincache >= 1.0.0)

wincache_ocache_meminfo Extrait des informations sur l'utilisation du cache opcode

Description

array wincache_ocache_meminfo ( void )

Extrait des informations sur l'utilisation de la mémoire par le cache opcode.

Valeurs de retour

Tableau de méta-données sur l'utilisation de la mémoire cache opcode ou FALSE si une erreur survient

Le tableau retourné par cette fonction contient les éléments suivants :

  • memory_total - Quantité de mémoire en octets, allouée pour le cache opcode
  • memory_free - Quantité de mémoire libre en octets, disponible pour le cache opcode
  • num_used_blks - Nombre de blocs mémoire utilisés par le cache opcode
  • num_free_blks - Nombre de blocs mémoire libres disponibles pour le cache opcode
  • memory_overhead - Quantité de mémoire en octets utilisée pour la structure interne du cache opcode

Exemples

Exemple #1 Un exemple de wincache_ocache_meminfo()

<pre>
<?php
print_r
(wincache_ocache_meminfo());
?>
</pre>

L'exemple ci-dessus va afficher :

Array
(
    [memory_total] => 134217728
    [memory_free] => 112106972
    [num_used_blks] => 15469
    [num_free_blks] => 4
    [memory_overhead] => 247600
)

Voir aussi



wincache_refresh_if_changed

(PECL wincache >= 1.0.0)

wincache_refresh_if_changed Actualise les entrées du cache pour les fichiers mis en cache

Description

bool wincache_refresh_if_changed ([ array $files ] )

Actualise les entrées du cache pour les fichiers dont les noms ont été passés dans les arguments d'entrée. Si aucun argument n'est précisé, alors, actualise toutes les entrées du cache.

Liste de paramètres

files

Tableau de noms de fichiers pour les fichiers qui ont besoin d'être actualisés. Un chemin de fichier absolu ou relatif peut être utilisé.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

WinCache effectue des contrôles réguliers sur les fichiers mis en cache pour veiller à ce que, si un fichier ai changé, l'entrée correspondante dans la mémoire cache sois mis à jour. Par défaut, cette vérification est effectuée toutes les 30 secondes. Si par exemple un script PHP met à jour un autre script PHP où les configurations de l'application son stockés, alors il peu arriver que après les changement de configuration soient sauvés, l'application utilise toujours les anciens paramètres pour quelque temps jusqu'à ce que le cache sois actualisé. Dans ce cas, il est préférable d'actualiser le cache juste après que le fichier ai été modifié. L'exemple qui suis montre comment cela peut être effectué.

Exemple #1 Un exemple de wincache_refresh_if_changed()

<?php 
$filename 
'C:\inetpub\wwwroot\config.php';
$handle fopen($filename'w+');
if (
$handle === FALSE) die('Failed to open file '.$filename.' for writing');
fwrite($handle'<?php $setting=something; ?>');
fclose($handle);
wincache_refresh_if_changed(array($filename));
?>

Voir aussi



wincache_rplist_fileinfo

(PECL wincache >= 1.0.0)

wincache_rplist_fileinfoRécupère des informations du cache sur un chemin de fichier résolu

Description

array wincache_rplist_fileinfo ([ bool $summaryonly = false ] )

Récupère des informations sur une cartographie en cache entre des chemins relatifs de fichiers et leurs correspondances en chemins absolus.

Valeurs de retour

Un tableau de données méta contenant le contenu du cache d'un chemin de fichier résolu ou FALSE si une erreur survient

Le tableau retourné par cette fonction contient les éléments suivants :

  • total_file_count - nombre total de chemins de fichiers stockés dans le cache
  • rplist_entries - un tableau contenant les informations sur les chemins de fichier présents en cache :

    • resolve_path - chemin vers le fichier
    • subkey_data - chemin absolu correspondant

Exemples

Exemple #1 Exemple avec wincache_rplist_fileinfo()

<pre>
<?php
print_r
(wincache_rplist_fileinfo());
?>
</pre>

L'exemple ci-dessus va afficher :

Array
(
    [total_file_count] => 5
    [rplist_entries] => Array
        (
            [1] => Array
                (
                    [resolve_path] => checkcache.php
                    [subkey_data] => c:\inetpub\wwwroot|c:\inetpub\wwwroot\checkcache.php
                )

            [2] => Array (...iterates for each cached file)
        )
)

Voir aussi



wincache_rplist_meminfo

(PECL wincache >= 1.0.0)

wincache_rplist_meminfoRécupère des informations sur l'utilisation de la mémoire par le cache de chemin de fichier résolu

Description

array wincache_rplist_meminfo ( void )

Récupère des informations sur l'utilisation de la mémoire par le cache de chemin de fichier résolu.

Valeurs de retour

Un tableau de données méta qui décrit l'utilisation de la mémoire par le cache de chemin de fichier résolu. ou FALSE si une erreur survient

Le tableau retourné par cette fonction contient les éléments suivants :

  • memory_total - nombre total de mémoire, en octets, alouée au cache de chemins de fichiers résolus
  • memory_free - mémoire libre, en octets, disponible pour le cache de chemins de fichiers résolus
  • num_used_blks - blocs mémoires utilisés par le cache de chemins de fichiers résolus
  • num_free_blks - nombre de blocs mémoires de libre pour le cache des chemins de fichiers résolus
  • memory_overhead - mémoire, en octets, utilisée pour la structure interne du cache des chemins de fichiers résolus

Exemples

Exemple #1 Exemple avec wincache_rplist_meminfo()

<pre>
<?php
print_r
(wincache_rplist_meminfo());
?>
</pre>

L'exemple ci-dessus va afficher :

Array
(
    [memory_total] => 9437184
    [memory_free] => 9416744
    [num_used_blks] => 23
    [num_free_blks] => 1
    [memory_overhead] => 416
)

Voir aussi



wincache_scache_info

(PECL wincache >= 1.1.0)

wincache_scache_infoRécupère des informations sur des fichiers mis en cache

Description

array wincache_scache_info ([ bool $summaryonly = false ] )

Récupère des informations sur le contenu du cache et son utilisation.

Liste de paramètres

summaryonly

Contrôle si le tableau retourné doit contenir des informations sur des entrées individuelles du cache en plus du résumé du cache.

Valeurs de retour

Un tableau de données méta sur le cache pour cette session ou FALSE si une erreur survient

Le tableau retourné par cette fonction contient les éléments suivants :

  • total_cache_uptime - durée total (en secondes) d'activation du cache
  • total_item_count - nombre total d'éléments contenus actuellement dans le cache
  • is_local_cache - TRUE si les méta-données du cache sont pour une instance de cache locale, FALSE si elles sont pour un cache global
  • total_hit_count - nombre total de fois que les données ont été servis depuis le cache
  • total_miss_count - nombre total de fois que les données ont été trouvées dans le cache
  • scache_entries - un tableau contenant les informations sur les éléments mis en cache :

    • key_name - nom de la clé utilisé pour stocker les données
    • value_type - type de la valeur stockée
    • use_time - durée, en secondes, depuis le dernier accès du fichier depuis le cache opcode
    • last_check - durée, en secondes, depuis la dernière fois où le fichier a été vérifié afin de détection des modifications
    • ttl_seconds - durée restante avant suppression des données du cache, 0 signifiant qu'elles ne seront jamais supprimées
    • age_seconds - l'âge des données dans le cache (i.e. depuis leurs insertions)
    • hitcount - nombre de fois que les données ont été servies depuis le cache

Exemples

Exemple #1 Exemple avec wincache_scache_info()

<pre>
<?php
print_r
(wincache_scache_info());
?>
</pre>

L'exemple ci-dessus va afficher :

Array
(
    [total_cache_uptime] => 17357
    [total_file_count] => 121
    [total_hit_count] => 36562
    [total_miss_count] => 201
    [scache_entries] => Array
        (
            [1] => Array
                (
                    [file_name] => c:\inetpub\wwwroot\checkcache.php
                    [add_time] => 17356
                    [use_time] => 7
                    [last_check] => 10
                    [hit_count] => 454
                    [function_count] => 0
                    [class_count] => 1
                )
            [2] => Array (...iterates for each cached file)
        )
)

Voir aussi



wincache_scache_meminfo

(PECL wincache >= 1.1.0)

wincache_scache_meminfoRécupère des informations sur l'utilisation de la mémoire du cache

Description

array wincache_scache_meminfo ( void )

Récupère des informations sur l'utilisation mémoire du cache.

Valeurs de retour

Un tableau de données méta sur l'utilisation de la mémoire du cache ou FALSE si une erreur survient

Le tableau retourné par cette fonction contient les éléments suivants :

  • memory_total - mémoire, en octets, allouée au cache
  • memory_free - mémoire disponible, en octets, pour le cache
  • num_used_blks - nombre de blocs mémoires utilisés par le cache
  • num_free_blks - nombre de blocs mémoires disponibles pour le cache
  • memory_overhead - mémoire, en octets, utilisé par les structures internes du cache

Exemples

Exemple #1 Exemple avec wincache_scache_meminfo()

<pre>
<?php
print_r
(wincache_scache_meminfo());
?>
</pre>

L'exemple ci-dessus va afficher :

Array 
( 
    [memory_total] => 5242880 
    [memory_free] => 5215056 
    [num_used_blks] => 6 
    [num_free_blks] => 3 
    [memory_overhead] => 176
) 

Voir aussi



wincache_ucache_add

(PECL wincache >= 1.1.0)

wincache_ucache_add Ajoute une nouvelle variable au cache utilisateur

Description

bool wincache_ucache_add ( string $key , mixed $value [, int $ttl = 0 ] )
bool wincache_ucache_add ( array $values [, mixed $unused [, int $ttl = 0 ]] )

Ajoute une variable au cache utilisateur, uniquement si elle n'existe pas déjà dans le cache. La variable restera dans le cache tant que le délai d'expiration n'est pas atteint ou qu'elle n'est effacée par la fonction wincache_ucache_delete() ou la fonction wincache_ucache_clear().

Liste de paramètres

key

Stocke la variable en utilisant le nom key. Si une variable correspondant à la même clé est déjà présente dans le cache, la fonction échouera et retournera FALSE. Le paramètre key est sensible à la casse. Pour écraser cette valeur, si key est présent, utilisez plutôt la fonction wincache_ucache_set(). key peut également être un tableau de paires nom => valeur où les noms seront utilisés comme clés. Ce format peut être utilisé pour ajouter de multiples valeurs dans le cache en une seule opération.

value

La valeur de la variable à stocker. Le paramètre Value supporte tous les types de données, sauf les ressources, comme des pointeurs de fichiers. Ce paramètre sera ignoré si le premier argument est un tableau. De façon général, il convient de passer la valeur NULL au paramètre value lors de l'utilisation d'un tableau pour le paramètre key. Si le paramètre value est un objet, ou un tableau contenant des objets, alors les objets seront linéarisés. Reportez-vous à la fonction __sleep() pour plus de détails sur la linéarisation d'objets.

values

Tableau associatif de clés et de valeurs.

ttl

Durée de vie de la variable dans le cache, en secondes. Après la durée spécifiée par le paramètre ttl, la variable stockée sera supprimée du cache. Ce paramètre prend, comme valeur par défaut, zéro (0), ce qui signifie que la variable restera dans le cache tant qu'elle n'est pas explicitement effacée en utilisant la fonction wincache_ucache_delete() ou la fonction wincache_ucache_clear().

Valeurs de retour

Si le paramètre key est une chaîne de caractères, la fonction retourne TRUE en cas de succès, FALSE si une erreur survient.

Si le paramètre key est un tableau, la fonction retourne :

  • Si toutes les paires nom => valeur du tableau peuvent être définies, la fonction retournera un tableau vide ;
  • Si toutes les paires nom => valeur du tableau ne peuvent être définies, la fonction retournera FALSE ;
  • Si certaines peuvent être définies, et d'autres non, la fonction retournera un tableau de paires nom => valeur n'ayant pû être définies dans le cache utilisateur.

Exemples

Exemple #1 Exemple avec wincache_ucache_add() et le paramètre key sous forme de chaîne de caractères

<?php
$bar 
'BAR';
var_dump(wincache_ucache_add('foo'$bar));
var_dump(wincache_ucache_add('foo'$bar));
var_dump(wincache_ucache_get('foo'));
?>

L'exemple ci-dessus va afficher :

bool(true)
bool(false)
string(3) "BAR" 

Exemple #2 Exemple avec wincache_ucache_add() et le paramètre key sous forme d'un tableau

<?php
$colors_array 
= array('green' => '5''Blue' => '6''yellow' => '7''cyan' => '8');
var_dump(wincache_ucache_add($colors_array));
var_dump(wincache_ucache_add($colors_array));
var_dump(wincache_ucache_get('Blue'));
?>

L'exemple ci-dessus va afficher :

array(0) { } 
array(4) { 
  ["green"]=> int(-1) 
  ["Blue"]=> int(-1) 
  ["yellow"]=> int(-1) 
  ["cyan"]=> int(-1) 
} 
string(1) "6"

Voir aussi



wincache_ucache_cas

(PECL wincache >= 1.1.0)

wincache_ucache_casCompare la variable avec son ancienne valeur et lui assigne une nouvelle valeur

Description

bool wincache_ucache_cas ( string $key , int $old_value , int $new_value )

Compare la variable associée avec la clé key avec la valeur old_value et si elle correspond, lui assigne la nouvelle valeur new_value.

Liste de paramètres

key

La clé key utilisé pour stocker la variable dans le cache. key est sensible à la casse.

old_value

L'ancienne valeur de la variable pointée par le paramètre key dans le cache utilisateur. La valeur doit être de type long, sinon, la fonction retournera FALSE.

new_value

La nouvelle valeur qui sera assignée à la variable pointée par la clé key si la correspondance a été trouvée. La valeur doit être de type long, sinon, la fonction retournera FALSE.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec wincache_ucache_cas()

<?php
wincache_ucache_set
('counter'2922);
var_dump(wincache_ucache_cas('counter'29221));
var_dump(wincache_ucache_get('counter'));
?>

L'exemple ci-dessus va afficher :

bool(true) 
int(1)

Voir aussi



wincache_ucache_clear

(PECL wincache >= 1.1.0)

wincache_ucache_clearSupprime le contenu d'une entrée du cache utilisateur

Description

bool wincache_ucache_clear ( void )

Supprime toutes les valeurs stockées dans le cache utilisateur.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec wincache_ucache_clear()

<?php
wincache_ucache_set
('green'1);
wincache_ucache_set('red'2);
wincache_ucache_set('orange'4);
wincache_ucache_set('blue'8);
wincache_ucache_set('cyan'16);
$array1 = array('green''red''orange''blue''cyan');
var_dump(wincache_ucache_get($array1));
var_dump(wincache_ucache_clear());
var_dump(wincache_ucache_get($array1));
?>

L'exemple ci-dessus va afficher :

array(5) { ["green"]=> int(1) 
           ["red"]=> int(2) 
           ["orange"]=> int(4) 
           ["blue"]=> int(8) 
           ["cyan"]=> int(16) } 
bool(true) 
bool(false) 

Voir aussi



wincache_ucache_dec

(PECL wincache >= 1.1.0)

wincache_ucache_decDécrémente la valeur associée à une clé

Description

mixed wincache_ucache_dec ( string $key [, int $dec_by = 1 [, bool &$success ]] )

Décrémente de 1 ou dec_by de la valeur associée avec la clé key.

Liste de paramètres

key

La clé key utilisée pour stoker la variable dans le cache. Le paramètre key est sensible à la casse.

dec_by

La valeur utilisée pour décrémenter la variable associée à la clé key. Si l'argument est un nombre à virgule flottante, il sera arrondi à l'entier le plus proche. La variable associée avec la clé key doit être de type long, sinon, la fonction retournera FALSE.

success

Sera définie à TRUE en cas de succès, FALSE si une erreur survient.

Valeurs de retour

Retourne la valeur décrémentée en cas de succès, FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec wincache_ucache_dec()

<?php
wincache_ucache_set
('counter'1);
var_dump(wincache_ucache_dec('counter'2923$success));
var_dump($success);
?>

L'exemple ci-dessus va afficher :

int(2922) 
bool(true)

Voir aussi



wincache_ucache_delete

(PECL wincache >= 1.1.0)

wincache_ucache_deleteSupprime les variables du cache utilisateur

Description

bool wincache_ucache_delete ( mixed $key )

Supprime les éléments pointés par la clé key du cache utilisateur.

Liste de paramètres

key

La clé key utilisée pour stoker la variable dans le cache. Le paramètre key est sensible à la casse. key peut être un tableau de clés.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Si le paramètre key est un tableau, alors la fonction retournera FALSE si un des éléments du tableau n'a pu être supprimé du cache utilisateur, sinon, elle retournera un tableau contenant toutes les clés ayant été supprimées avec succès.

Exemples

Exemple #1 Exemple avec wincache_ucache_delete() et le paramètre key sous forme de chaîne de caractères

<?php
wincache_ucache_set
('foo''bar');
var_dump(wincache_ucache_delete('foo'));
var_dump(wincache_ucache_exists('foo'));
?>

L'exemple ci-dessus va afficher :

bool(true)
bool(false)

Exemple #2 Exemple avec wincache_ucache_delete() et le paramètre key sous forme d'un tableau

<?php
$array1 
= array('green' => '5''blue' => '6''yellow' => '7''cyan' => '8');
wincache_ucache_set($array1);
$array2 = array('green''blue''yellow''cyan');
var_dump(wincache_ucache_delete($array2));
?>

L'exemple ci-dessus va afficher :

array(4) { [0]=> string(5) "green" 
           [1]=> string(4) "Blue" 
           [2]=> string(6) "yellow" 
           [3]=> string(4) "cyan" } 

Exemple #3 Exemple avec wincache_ucache_delete() et le paramètre key sous la forme d'un tableau où quelques éléments n'ont pas pu être supprimés

<?php
$array1 
= array('green' => '5''blue' => '6''yellow' => '7''cyan' => '8');
wincache_ucache_set($array1);
$array2 = array('orange''red''yellow''cyan');
var_dump(wincache_ucache_delete($array2));
?>

L'exemple ci-dessus va afficher :

array(2) { [0]=> string(6) "yellow" 
           [1]=> string(4) "cyan" }

Voir aussi



wincache_ucache_exists

(PECL wincache >= 1.1.0)

wincache_ucache_existsVérifie si une variable existe dans le cache utilisateur

Description

bool wincache_ucache_exists ( string $key )

Vérifie si une variable dont la clé est key existe ou non dans le cache utilisateur.

Liste de paramètres

key

La clé key utilisée pour stoker la variable dans le cache. Le paramètre key est sensible à la casse.

Valeurs de retour

Retourne TRUE si la variable dont la clé est key existe, FALSE sinon.

Exemples

Exemple #1 Exemple avec wincache_ucache_exists()

<?php
if (!wincache_ucache_exists('green'))
    
wincache_ucache_set('green'1);
var_dump(wincache_ucache_exists('green'));
?>

L'exemple ci-dessus va afficher :

bool(true)

Voir aussi



wincache_ucache_get

(PECL wincache >= 1.1.0)

wincache_ucache_getRécupère une variable stokée dans le cache utilisateur

Description

mixed wincache_ucache_get ( mixed $key [, bool &$success ] )

Récupère une variable stokée dans le cache utilisateur.

Liste de paramètres

key

La clé key utilisée pour stoker la variable dans le cache. Le paramètre key est sensible à la casse. key peut être un tableau de clés. Dans ce cas, la valeur retournée sera un tableau de valeurs de chaque éléments du tableau key. Si un objet ou un tableau contenant des objets est retourné, alors les objets seront délinéarisés. Reportez-vous à la fonction __wakeup() pour plus de détails sur les délinéarisations des objets.

success

Sera définie à TRUE en cas de succès, FALSE si une erreur survient.

Valeurs de retour

Si le paramètre key est une chaîne de caractères, la fonction retournera la valeur de la variable stokée avec cette clé. Le paramètre success sera défini à TRUE en cas de succès, et à FALSE si une erreur survient.

Si le paramètre key est un tableau, le paramètre success sera toujours défini à TRUE. Le tableau retourné (paires de nom => valeur) contiendra uniquement les paires nom => valeur pour lesquelles la récupération depuis le cache utilisateur a été un succès. Si aucune des clés du tableau ne correspond à des entrées du cache utilisateur, un tableau vide sera retourné.

Exemples

Exemple #1 Exemple avec wincache_ucache_get() et le paramètre key sous forme de chaîne de caractères

<?php
wincache_ucache_add
('color''blue');
var_dump(wincache_ucache_get('color'$success));
var_dump($success);
?>

L'exemple ci-dessus va afficher :

string(4) "blue"
bool(true)

Exemple #2 Exemple avec wincache_ucache_get() et le paramètre key sous forme d'un tableau

<?php
$array1 
= array('green' => '5''Blue' => '6''yellow' => '7''cyan' => '8');
wincache_ucache_set($array1);
$array2 = array('green''Blue''yellow''cyan');
var_dump(wincache_ucache_get($array2$success));
var_dump($success);
?>

L'exemple ci-dessus va afficher :

array(4) { ["green"]=> string(1) "5" 
           ["Blue"]=> string(1) "6" 
           ["yellow"]=> string(1) "7" 
           ["cyan"]=> string(1) "8" } 
bool(true) 

Voir aussi



wincache_ucache_inc

(PECL wincache >= 1.1.0)

wincache_ucache_incIncrémente la valeur associée à une clé

Description

mixed wincache_ucache_inc ( string $key [, int $inc_by = 1 [, bool &$success ]] )

Incrémente, de 1 ou de la valeur du paramètre inc_by, la valeur associée avec la clé key.

Liste de paramètres

key

La clé key utilisée pour stoker la variable dans le cache. Le paramètre key est sensible à la casse.

inc_by

La valeur utilisée pour incrémenter la variable associée à la clé key. Si l'argument est un nombre à virgule flottante, elle sera arrondie à l'entier le plus proche. La variable associée à la clé key doit être de type long, sinon la fonction échouera et retournera FALSE.

success

Sera défini à TRUE en cas de succès, FALSE si une erreur survient.

Valeurs de retour

Retourne la valeur incrémentée en cas de succès, FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec wincache_ucache_inc()

<?php
wincache_ucache_set
('counter'1);
var_dump(wincache_ucache_inc('counter'2921$success));
var_dump($success);
?>

L'exemple ci-dessus va afficher :

int(2922) 
bool(true)

Voir aussi



wincache_ucache_info

(PECL wincache >= 1.1.0)

wincache_ucache_infoRécupère des informations sur des données stokées dans le cache utilisateur

Description

array wincache_ucache_info ([ bool $summaryonly = false [, string $key ]] )

Récupère des informations sur des données stokées dans le cache utilisateur.

Liste de paramètres

summaryonly

Contrôle si le tableau résultant doit contenir les informations sur des entrées individuelles en plus du résumé du cache utilisateur.

key

La clé de l'entrée du cache utilisateur. Si spécifiée, alors le tableau résultant contiendra des informations uniquement sur cette entrée du cache. Si non spécifiée, et le paramètre summaryonly est défini à FALSE, alors le tableau résultant contiendra des informations sur toutes les entrées du cache.

Valeurs de retour

Un tableau de données méta sur le cache utilisateur ou FALSE si une erreur survient

Le tableau retourné par cette fonction contient les éléments suivants :

  • total_cache_uptime - durée, en secondes, depuis l'activation de ce cache utilisateur
  • total_item_count - nombre total d'éléments contenus dans le cache utilisateur
  • is_local_cache - TRUE si les données méta du cache sont pour une instance locale du cache, FALSE si elles sont pour le cache global
  • total_hit_count - durée depuis laquelle les données ont été servies depuis le cache
  • total_miss_count - durée depuis laquelle les données n'ont pu être trouvée dans le cache
  • ucache_entries - un tableau contenant les informations sur les éléments mis en cache :

    • key_name - nom de la clé utilisée pour stoker les données
    • value_type - type de valeur stokée pour cette clé
    • use_time - durée, en secondes, depuis laquelle le fichier a été accédé dans le cache opcode
    • last_check - durée, en secondes, depuis laquelle le fichier a été vérifié pour y détecter les modifications
    • is_session - indique si la donnée est une variable de session
    • ttl_seconds - durée de vie de la donnée dans le cache ; 0 signifie indéfiniment
    • age_seconds - durée depuis laquelle la donné a été ajoutée dans le cache
    • hitcount - nombre de fois que la donnée a été servie depuis le cache

Exemples

Exemple #1 Exemple avec wincache_ucache_info()

<?php
wincache_ucache_get
('green');
wincache_ucache_set('green'2922);
wincache_ucache_get('green');
wincache_ucache_get('green');
wincache_ucache_get('green');
print_r(wincache_ucache_info());
?>

L'exemple ci-dessus va afficher :

Array 
( ["total_cache_uptime"] => int(0)
  ["is_local_cache"] => bool(false)
  ["total_item_count"] => int(1) 
  ["total_hit_count"] => int(3) 
  ["total_miss_count"] => int(1) 
  ["ucache_entries"] => Array(1) 
    ( [1] => Array(6)
      ( 
        ["key_name"] => string(5) "green"
        ["value_type"] => string(4) "long" 
        ["is_session"] => int(0) 
        ["ttl_seconds"] => int(0)
        ["age_seconds"] => int(0)
        ["hitcount"] => int(3) 
       ) 
    ) 
)

Voir aussi



wincache_ucache_meminfo

(PECL wincache >= 1.1.0)

wincache_ucache_meminfoRécupère des informations sur l'utilisation mémoire du cache utilisateur

Description

array wincache_ucache_meminfo ( void )

Récupère des informations sur l'utilisation mémoire du cache utilisateur.

Valeurs de retour

Tableau de données méta sur l'utilisation mémoire du cache utilisateur ou FALSE si une erreur survient

Le tableau retourné par cette fonction contient les éléments suivants :

  • memory_total - quantité de mémoire, en octets, allouée au cache utilisateur
  • memory_free - quantité de mémoire libre, en octets, disponible pour le cache utilisateur
  • num_used_blks - nombre de blocs mémoire utilisés par le cache utilisateur
  • num_free_blks - nombre de blocs mémoire libres disponible depuis le cache utilisateur
  • memory_overhead - quantité de mémoire, en octets, utilisé pour la structure interne du cache utilisateur

Exemples

Exemple #1 Exemple avec wincache_ucache_meminfo()

<pre>
<?php
print_r
(wincache_ucache_meminfo());
?>
</pre>

L'exemple ci-dessus va afficher :

Array 
( 
    [memory_total] => 5242880 
    [memory_free] => 5215056 
    [num_used_blks] => 6 
    [num_free_blks] => 3 
    [memory_overhead] => 176
) 

Voir aussi



wincache_ucache_set

(PECL wincache >= 1.1.0)

wincache_ucache_setAjoute une variable au cache utilisateur et écrase la variable si elle existe déjà dans le cache

Description

bool wincache_ucache_set ( mixed $key , mixed $value [, int $ttl = 0 ] )
bool wincache_ucache_set ( array $values [, mixed $unused [, int $ttl = 0 ]] )

Ajoute une variable au cache utilisateur. Écrase une variable si elle existe déjà dans le cache. La variable ainsi créée ou mise à jour restera dans le cache utilisateur tant que le délai d'expiration n'est pas atteint ou tant qu'elle n'est pas supprimée avec la fonction wincache_ucache_delete() ou la fonction wincache_ucache_clear().

Liste de paramètres

key

Stocke la variable en utilisant la clé key. Si une variable utilisant la même clé key est déjà présente, la fonction écrasera la précédente valeur avec la nouvelle. Le paramètre key est sensible à la casse. key peut également être un tableau de paires nom => valeur où les noms seront utilisés comme clés. Ceci peut être utile pour ajouter plusieurs valeurs dans le cache en une seule opération.

value

Valeur de la variable à stocker. Le paramètre Value supporte tous les types de données, sauf les ressources, comme les pointeurs de fichiers. Ce paramètre est ignoré si le premier argument est un tableau. Il est de convention de passer la valeur NULL comme valeur du paramètre value lors de l'utilisation d'un tableau dans le paramètre key. Si le paramètre value est un objet, ou un tableau contenant des objets, alors tous les objets seront linéarisés. Reportez-vous à la fonction __sleep() pour plus de détails sur la linéarisation d'objets.

values

Tableau associatif de clés et de valeurs.

ttl

Durée de vie de la variable dans le cache, en secondes. Après la durée spécifiée par le paramètre ttl, la variable stockée sera effacée du cache utilisateur. Ce paramètre prend par défaut la valeur zéro (0), ce qui signifie que la variable restera dans le cache tant qu'elle ne sera pas explicitement supprimée en appelant la fonction wincache_ucache_delete() ou la fonction wincache_ucache_clear().

Valeurs de retour

Si key est une chaîne de caractères, la fonction retournera TRUE en cas de succès, FALSE si une erreur survient.

Si key est un tableau, la fonction retournera :

  • Si toutes les paires nom => valeur du tableau ont pu être définies, la fonction retournera un tableau vide.
  • Si toutes les paires nom => valeur du tableau n'ont pu être définies, la fonction retournera FALSE.
  • Si quelques paires ont été définies, et d'autres non, la fonction retournera un tableau de paires nom => valeur qui n'ont pas pu être définies dans le cache utilisateur.

Exemples

Exemple #1 Exemple avec wincache_ucache_set() et le paramètre key sous forme de chaîne de caractères

<?php
$bar 
'BAR';
var_dump(wincache_ucache_set('foo'$bar));
var_dump(wincache_ucache_get('foo'));
$bar1 'BAR1';
var_dump(wincache_ucache_set('foo'$bar1));
var_dump(wincache_ucache_get('foo'));
?>

L'exemple ci-dessus va afficher :

bool(true)
string(3) "BAR"
bool(true)
string(3) "BAR1"

Exemple #2 Exemple avec wincache_ucache_set() et le paramètre key sous forme de tableau

<?php
$colors_array 
= array('green' => '5''Blue' => '6''yellow' => '7''cyan' => '8');
var_dump(wincache_ucache_set($colors_array));
var_dump(wincache_ucache_set($colors_array));
var_dump(wincache_ucache_get('Blue'));
?>

L'exemple ci-dessus va afficher :

array(0) {}
array(0) {}
string(1) "6"

Voir aussi



wincache_unlock

(PECL wincache >= 1.1.0)

wincache_unlockLibère un verrou exclusif sur une clé donnée

Description

bool wincache_unlock ( string $key )

Libère un verrou exclusif qui a été obtenu sur une clé donnée en utilisant la fonction wincache_lock(). Si un autre processus est en attente de ce verrou, pour cette clé, il obtiendra le verrou.

Avertissement

L'utilisation des fonctions wincache_lock() et wincache_unlock() peut provoquer des verrous morts lors de l'exécution de scripts PHP dans un environnement multi-processus comme FastCGI. N'utilisez pas ces fonctions tant que vous n'êtes pas sûr d'en avoir besoin. Pour la majorité des opérations sur le cache utilisateur, il n'est pas nécessaire de les utiliser.

Liste de paramètres

key

Nom de la clé du cache pour laquelle le verrou doit être libéré.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec wincache_unlock()

<?php
$fp 
fopen("/tmp/lock.txt""r+");
if (
wincache_lock(“lock_txt_lock”)) { // Pose d'un verrou exclusif
    
ftruncate($fp0); // on vide le fichier
    
fwrite($fp"On écrit quelque chose ici\n");
    
wincache_unlock(“lock_txt_lock”); // On libère le verrou
} else {
    echo 
"Impossible d'obtenir le verrou !";
}
fclose($fp);
?>

Voir aussi


Sommaire



Compilation sous Windows

Sommaire


Prérequis

Pour compiler l'extension WinCache, il faudra:

  1. le code source de PHP
  2. un environnement de compilation PHP
  3. le code source de WinCache

Pour compléter les deux premières étapes, suivez le guide étape par étape » Compiler PHP sous Windows.

Pour obtenir le code source de WinCache, suivez les instructions décrites dans Télécharger des extensions PECL.



Compiler et construire

Les étapes suivantes décrivent comment compiler et construire WinCache sous Windows:

  1. Ouvrez une invite de commande utilisée pour compiler PHP

  2. Allez dans le dossier racine où les sources de PHP sont présentes

  3. Lancez la commande :

    cscript.exe win32\build\buildconf.js

  4. Lancez la commande :

    configure.bat --help
    La sortie contiendra une nouvelle option --enable-wincache.

  5. Lancez la commande :

    configure.js [all options used to build PHP] --enable-wincache
    --enable-wincache est la seule option supplémentaire requise pour s'assurer que l'extension WinCache se compile correctement. Cette option permet de construire WinCache et le lier statiquement avec la DLL de PHP. Pour construire l'extension comme une DLL externe, utilisez l'option --enable-wincache=shared.

  6. Lancez la commande :

    nmake



Verifying the build

Les étapes suivantes décrivent comment vérifier que WinCache a été construit correctement :

  1. Allez dans le dossier où les fichiers PHP sont construits.

  2. Lancez la commande :

    php.exe -n -d extension=php_wincache.dll -re wincache
    Si WinCache a été construit correctement, la sortie de cette commande listera les directives INI et les fonctions supportées par WinCache.





Profilage hiérarchique


Introduction

XHProf est un profileur hiérarchique et instrumental léger. Lors de la phase de collecte des données, il conserve une trace du nombre d'appels et le métrique inclusif pour les arcs dans le graphique d'appel dynamique d'un programme. Il calcule le métrique exclusif lors de la phase de rapport/envoi, comme la durée, le temps CPU, ainsi que l'utilisation de mémoire. Un profil de fonction peut être décomposé par une fonction appelante ou l'appelée. XHProf gère les fonctions récursives en détectant les cycles dans le graphique d'appel lors de la collecte des données, et stoppe les cycles en donnant des noms uniques de profondeur lors de l'invocation de la récursivité.

XHProf inclut une interface utilisateur HTML (écrite en PHP). Le navigateur web permet ainsi de consulter le résultat du profilage de façon simple mais aussi pour partager les résultats. Une image de graphique d'appel est également fournie.

Les rapports XHProf peuvent être très utiles pour comprendre la structure du code qui vient d'être exécuté. La nature hiérarchique des rapports peut être utilisée pour déterminer, par exemple, la chaîne d'appels ayant conduit à l'appel d'une fonction particulière.

XHProf supporte la possibilité de comparer deux exécutions (i.e. rapports différentiels) ou agréger des données issues de plusieurs exécutions. Les rapports différentiels et agrégés, tout comme les rapports d'exécution unique) offre une vue plate mais aussi hiérarchique du profilage.

Vous pouvez trouver plus d'informations directement sur la page » facebook de xhprof.



Installation/Configuration

Sommaire


Pré-requis

Bien que non requise, xhprof inclut une interface écrite en PHP. Elle est utilisée pour sauvegarder et afficher les données de profilage de façon simple, où la lecture s'effectue directement via un navigateur web. Aussi, un serveur web PHP peut rendre l'utilisation de xhprof plus conviviale.

Il y a également un fork de l'interface GUI sur » http://github.com/preinheimer/xhprof



Installation

Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici : » http://pecl.php.net/package/xhprof



Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Options de configuration Xhprof
Nom Défaut Modifiable Historique
xhprof.output_dir "" PHP_INI_ALL  

Voici un éclaircissement sur l'utilisation des directives de configuration.

xhprof.output_dir string

Dossier utilisé par l'implémentation par défaut de l'interface iXHProfRuns (nommément, la classe XHProfRuns_Default) pour stocker les exécutions de XHProf.



Types de ressources

Cette extension ne définit aucune ressource.




Constantes pré-définies

Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.

XHPROF_FLAGS_NO_BUILTINS (integer)
Utilisé pour ne pas tenir compte de toutes les fonctions internes.
XHPROF_FLAGS_CPU (integer)
Utilisé pour ajouter les informations de profilage CPU dans la sortie.
XHPROF_FLAGS_MEMORY (integer)
Utilisé pour ajouter les informations de profilage de la mémoire dans la sortie.


Exemples

Exemple #1 Exemple avec Xhprof et le GUI optionnel

Cet exemple démarre et stoppe le profilage, puis utilise l'interface GUI fourni pour sauvegarder et analyser les résultats. En d'autres termes, le code de l'extension en tant que tel s'arrête après l'appel à la fonction xhprof_disable().

<?php
xhprof_enable
(XHPROF_FLAGS_CPU XHPROF_FLAGS_MEMORY);

for (
$i 0$i <= 1000$i++) {
    
$a $i $i;
}

$xhprof_data xhprof_disable();

$XHPROF_ROOT "/tools/xhprof/";
include_once 
$XHPROF_ROOT "/xhprof_lib/utils/xhprof_lib.php";
include_once 
$XHPROF_ROOT "/xhprof_lib/utils/xhprof_runs.php";

$xhprof_runs = new XHProfRuns_Default();
$run_id $xhprof_runs->save_run($xhprof_data"xhprof_testing");

echo 
"http://localhost/xhprof/xhprof_html/index.php?run={$run_id}&source=xhprof_testing\n";

?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

http://localhost/xhprof/xhprof_html/index.php?run=t11_4bdf44d21121f&source=xhprof_testing


Xhprof Fonctions


xhprof_disable

(PECL xhprof >= 0.9.0)

xhprof_disableStoppe le profilage xhprof

Description

array xhprof_disable ( void )

Stoppe le profilage, et retourne les données xhprof depuis son exécution.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Un tableau de données xhprof issues de son exécution.

Exemples

Exemple #1 Exemple avec xhprof_disable()

<?php
xhprof_enable
();

$foo strlen("foo bar");

$xhprof_data xhprof_disable();

print_r($xhprof_data);
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Array
(
    [main()==>strlen] => Array
        (
            [ct] => 1
            [wt] => 279
        )

    [main()==>xhprof_disable] => Array
        (
            [ct] => 1
            [wt] => 9
        )

    [main()] => Array
        (
            [ct] => 1
            [wt] => 610
        )

)


xhprof_enable

(PECL xhprof >= 0.9.0)

xhprof_enableDémarre un profilage xhprof

Description

void xhprof_enable ([ int $flags = 0 [, array $options ]] )

Démarre un profilage xhprof.

Liste de paramètres

flags

Drapeaux optionnels pour ajouter des informations additionnelles au profilage. Voir les constantes XHprof pour plus d'informations sur ces drapeaux, i.e., XHPROF_FLAGS_MEMORY pour activer le profilage de la mémoire.

options

Un tableau d'options optionnelles, par exemple, l'option 'ignored_functions' pour ignorer certaines fonctions durant le profilage.

Valeurs de retour

NULL

Historique

Version Description
0.9.2 Le paramètre options optionnel a été ajouté.

Exemples

Exemple #1 Exemple avec xhprof_enable()

<?php
// 1. profilage de la durée time + memory + CPU ; on ignore les fonctions internes
xhprof_enable(XHPROF_FLAGS_NO_BUILTINS XHPROF_FLAGS_CPU XHPROF_FLAGS_MEMORY);

// 2. profilage du temps écoulé ; on ignore les fonctions call_user_func* lors du profilage
xhprof_enable(
    
0,
    array(
'ignored_functions' =>  array('call_user_func',
                                        
'call_user_func_array')));
                                       
// 3. profilage du temps écoulés ainsi que de la mémoire ; on ignore les fonctions call_user_func* lors du profilage
xhprof_enable(
    
XHPROF_FLAGS_MEMORY,
    array(
'ignored_functions' =>  array('call_user_func',
                                        
'call_user_func_array')));
?>

Voir aussi



xhprof_sample_disable

(PECL xhprof >= 0.9.0)

xhprof_sample_disableStoppe un profilage xhprof sur échantillon

Description

array xhprof_sample_disable ( void )

Stoppe un profilage xhprof sur échantillon.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Un tableau de données de l'échantillon xhprof, depuis l'exécution.

Exemples

Exemple #1 Exemple avec xhprof_sample_disable()

<?php
xhprof_sample_enable
();

for (
$i 0$i <= 10000$i++) {
    
$a strlen($i);
    
$b $i $a;
    
$c rand();
}

$xhprof_data xhprof_sample_disable();

print_r($xhprof_data);
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Array
(
    [1272935300.800000] => main()
    [1272935300.900000] => main()
)


xhprof_sample_enable

(PECL xhprof >= 0.9.0)

xhprof_sample_enableDescription

Description

void xhprof_sample_enable ( void )

Démarre le profilage en mode échantillonnage, ce qui correspond à une version légère de la fonction xhprof_enable(). L'intervalle d'échantillonnage est de 0.1 secondes, et les échantillons enregistrent la pile complète des fonctions appelées. La principale utilisation de cette fonction est lorsque l'on souhaite diagnostiquer et surveiller les performances sans pour autant prendre trop de ressource.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

NULL

Voir aussi


Sommaire





Manipulation audio


Balises ID3


Introduction

Ces fonctions vous permettent de lire et de manipuler les tags ID3. Les tags ID3 sont utilisés dans les fichiers MP3 pour stocker le titre d'une chanson, tout comme des informations sur l'artiste, l'album, le genre, l'année et le numéro de la piste.

Depuis la version 0.2, il est également possible d'extraire des champs texte depuis des tags ID3 v2.2+.



Installation/Configuration

Sommaire


Pré-requis

Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible.



Installation

Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici : » http://pecl.php.net/package/id3.

Aucune bibliothèque DLL pour cette extension PECL n'est actuellement disponible. Reportez-vous à la section Compilation sous Windows.



Configuration à l'exécution

Cette extension ne définit aucune directive de configuration.



Types de ressources

Cette extension ne définit aucune ressource.




Constantes prédéfinies

La plupart des fonctions ID3 vous permettent soit de spécifier, soit de retourner un tag. Pour spécifier la version, utilisez une de ces constantes :

ID3_V1_0 (entier)
ID3_V1_0 est utilisé si vous travaillez avec des tags ID3 V1.0. Ces tags peuvent contenir les champs title, artist, album, genre, year et comment.
ID3_V1_1 (entier)
ID3_V1_1 est utilisé si vous travaillez avec des tags ID3 V1.1. Ces tags peuvent contenir tous les champs de la version 1.0 ainsi qu'un champ représentant le numéro de la piste.
ID3_V2_1 (entier)
ID3_V2_1 est utilisé si vous travaillez avec des tags ID3 V2.1.
ID3_V2_2 (entier)
ID3_V2_2 est utilisé si vous travaillez avec des tags ID3 V2.2 tags.
ID3_V2_3 (entier)
ID3_V2_3 est utilisé si vous travaillez avec des tags ID3 V2.3 tags.
ID3_V2_4 (entier)
ID3_V2_4 est utilisé si vous travaillez avec des tags ID3 V2.4 tags.
ID3_BEST (entier)
ID3_BEST est utilisé si vous voulez laisser les fonctions id3 déterminer quelle version de tags doit être utilisée.



Fonctions ID3


id3_get_frame_long_name

(PECL id3 >= 0.2)

id3_get_frame_long_nameRécupère le nom long d'un champs ID3v2

Description

string id3_get_frame_long_name ( string $frameId )

id3_get_frame_long_name() retourne le nom long d'un champs ID3v2.

Liste de paramètres

frameId

Une frame ID3v2

Valeurs de retour

Retourne le nom long d'un champs ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec id3_get_frame_long_name()

<?php
$longName 
id3_get_frame_long_name("TOLY");
echo 
$longName;
?>

L'exemple ci-dessus va afficher :

Original lyricist(s)/text writer(s)

Voir aussi



id3_get_frame_short_name

(PECL id3 >= 0.2)

id3_get_frame_short_nameRécupère le nom court d'un champs ID3v2

Description

string id3_get_frame_short_name ( string $frameId )

id3_get_frame_short_name() retourne le nom court d'un champs ID3v2.

Liste de paramètres

frameId

Une frame ID3v2

Valeurs de retour

Retourne le nom court d'un champs ou FALSE si une erreur survient.

Les valeurs retournées par id3_get_frame_short_name() sont utilisées dans le tableau retourné par id3_get_tag().

Exemples

Exemple #1 Exemple avec id3_get_frame_short_name()

<?php
$shortName 
id3_get_frame_short_name("TOLY");
echo 
$shortName;
?>

L'exemple ci-dessus va afficher :

originalLyricist

Voir aussi



id3_get_genre_id

(PECL id3 >= 0.1)

id3_get_genre_idRécupération d'un id pour un genre

Description

int id3_get_genre_id ( string $genre )

id3_get_genre_id() retourne l'id pour un genre.

Liste de paramètres

genre

Nom du genre, sous la forme d'une chaîne de caractères.

Valeurs de retour

L'id du genre ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec id3_get_genre_id()

<?php
$id 
id3_get_genre_id("Alternative");
echo 
$id;
?>

L'exemple ci-dessus va afficher :

20

Voir aussi



id3_get_genre_list

(PECL id3 >= 0.1)

id3_get_genre_listRécupère toutes les valeurs possibles du genre

Description

array id3_get_genre_list ( void )

id3_get_genre_list() retourne un tableau contenant tous les genres possibles pouvant être stockés dans un tag ID3. La liste a été créée par Eric Kemp et, plus tard, complétée par WinAmp.

Cette fonction est pratique pour fournir à vos utilisateurs une liste de genres depuis laquelle ils peuvent en choisir un. Lorsque vous mettez à jour vos tags ID3, vous devez également spécifier un genre sous forme d'entier entre 0-147.

Valeurs de retour

Retourne un tableau contenant tous les genres possibles qui peuvent être stockés dans une balise ID3.

Exemples

Exemple #1 Exemple avec id3_get_genre_list()

<?php
$genres 
id3_get_genre_list();
print_r($genres);
?>

L'exemple ci-dessus va afficher :

Array
(
    [0] => Blues
    [1] => Classic Rock
    [2] => Country
    [3] => Dance
    [4] => Disco
    [5] => Funk
    [6] => Grunge
    [7] => Hip-Hop
    [8] => Jazz
    [9] => Metal
    [10] => New Age
    [11] => Oldies
    [12] => Other
    [13] => Pop
    [14] => R&B
    [15] => Rap
    [16] => Reggae
    [17] => Rock
    [18] => Techno
    [19] => Industrial
    [20] => Alternative
    [21] => Ska
    [22] => Death Metal
    [23] => Pranks
    [24] => Soundtrack
    [25] => Euro-Techno
    [26] => Ambient
    [27] => Trip-Hop
    [28] => Vocal
    [29] => Jazz+Funk
    [30] => Fusion
    [31] => Trance
    [32] => Classical
    [33] => Instrumental
    [34] => Acid
    [35] => House
    [36] => Game
    [37] => Sound Clip
    [38] => Gospel
    [39] => Noise
    [40] => Alternative Rock
    [41] => Bass
    [42] => Soul
    [43] => Punk
    [44] => Space
    [45] => Meditative
    [46] => Instrumental Pop
    [47] => Instrumental Rock
    [48] => Ethnic
    [49] => Gothic
    [50] => Darkwave
    [51] => Techno-Industrial
    [52] => Electronic
    [53] => Pop-Folk
    [54] => Eurodance
    [55] => Dream
    [56] => Southern Rock
    [57] => Comedy
    [58] => Cult
    [59] => Gangsta
    [60] => Top 40
    [61] => Christian Rap
    [62] => Pop/Funk
    [63] => Jungle
    [64] => Native US
    [65] => Cabaret
    [66] => New Wave
    [67] => Psychadelic
    [68] => Rave
    [69] => Showtunes
    [70] => Trailer
    [71] => Lo-Fi
    [72] => Tribal
    [73] => Acid Punk
    [74] => Acid Jazz
    [75] => Polka
    [76] => Retro
    [77] => Musical
    [78] => Rock & Roll
    [79] => Hard Rock
    [80] => Folk
    [81] => Folk-Rock
    [82] => National Folk
    [83] => Swing
    [84] => Fast Fusion
    [85] => Bebob
    [86] => Latin
    [87] => Revival
    [88] => Celtic
    [89] => Bluegrass
    [90] => Avantgarde
    [91] => Gothic Rock
    [92] => Progressive Rock
    [93] => Psychedelic Rock
    [94] => Symphonic Rock
    [95] => Slow Rock
    [96] => Big Band
    [97] => Chorus
    [98] => Easy Listening
    [99] => Acoustic
    [100] => Humour
    [101] => Speech
    [102] => Chanson
    [103] => Opera
    [104] => Chamber Music
    [105] => Sonata
    [106] => Symphony
    [107] => Booty Bass
    [108] => Primus
    [109] => Porn Groove
    [110] => Satire
    [111] => Slow Jam
    [112] => Club
    [113] => Tango
    [114] => Samba
    [115] => Folklore
    [116] => Ballad
    [117] => Power Ballad
    [118] => Rhytmic Soul
    [119] => Freestyle
    [120] => Duet
    [121] => Punk Rock
    [122] => Drum Solo
    [123] => Acapella
    [124] => Euro-House
    [125] => Dance Hall
    [126] => Goa
    [127] => Drum & Bass
    [128] => Club-House
    [129] => Hardcore
    [130] => Terror
    [131] => Indie
    [132] => BritPop
    [133] => Negerpunk
    [134] => Polsk Punk
    [135] => Beat
    [136] => Christian Gangsta
    [137] => Heavy Metal
    [138] => Black Metal
    [139] => Crossover
    [140] => Contemporary C
    [141] => Christian Rock
    [142] => Merengue
    [143] => Salsa
    [144] => Thrash Metal
    [145] => Anime
    [146] => JPop
    [147] => SynthPop
)

Voir aussi



id3_get_genre_name

(PECL id3 >= 0.1)

id3_get_genre_nameRécupère le nom pour un id de genre

Description

string id3_get_genre_name ( int $genre_id )

id3_get_genre_name() retourne le nom pour un id de genre spécifié.

Liste de paramètres

genre_id

Un entier, compris entre 0 et 147

Valeurs de retour

Retourne le nom sous la forme d'une chaîne de caractères.

Exemples

Exemple #1 Exemple avec id3_get_genre_name()

<?php
$genre 
id3_get_genre_name(20);
echo 
$genre;
?>

L'exemple ci-dessus va afficher :

Alternative

Voir aussi



id3_get_tag

(PECL id3 >= 0.1)

id3_get_tagRécupère toutes les informations stockées dans un tag ID3

Description

array id3_get_tag ( string $filename [, int $version = ID3_BEST ] )

id3_get_tag() est utilisée pour récupérer toutes les informations stockées dans un tag ID3 d'un fichier spécifique.

Liste de paramètres

filename

Le chemin vers le fichier MP3

Au lieu de passer un nom de fichier, vous pouvez aussi passer un flux de ressource valide.

version

Vous permet de spécifier la version du tag, bien que les fichiers MP3 doivent contenir à la fois les versions 1.x et les versions 2.x.

Depuis la version 0.2, id3_get_tag() supporte également les tags ID3 version 2.2, 2.3 et 2.4. Pour extraire les informations de ces tags, passez une des constantes ID3_V2_2, ID3_V2_3 ou ID3_V2_4 en tant que second paramètre. Les tags ID3 v2.x peuvent contenir beaucoup plus d'informations sur le fichier MP3 que les versions ID3 v1.x.

Valeurs de retour

Retourne un tableau associatif avec diverses clés, comme : title, artist, ..

La clé genre doit contenir un entier compris entre 0 et 147. Vous pouvez utiliser la fonction id3_get_genre_name() pour convertir ce nombre en une chaîne lisible humainement.

Exemples

Exemple #1 Exemple avec id3_get_tag()

<?php
$tag 
id3_get_tag"path/to/example.mp3" );
print_r($tag);
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Array
(
    [title] => DN-38416
    [artist] => Re:\Legion
    [album] => Reflections
    [year] => 2004
    [genre] => 19
)

Exemple #2 Exemple avec id3_get_tag()

<?php
$tag 
id3_get_tag"path/to/example2.mp3"ID3_V2_3 );
print_r($tag);
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Array
(
    [copyright] => Dirty Mac
    [originalArtist] => Dirty Mac
    [composer] => Marcus Götze
    [artist] => Dirty Mac
    [title] => Little Big Man
    [album] => Demo-Tape
    [track] => 5/12
    [genre] => (17)Rock
    [year] => 2001
)

Voir aussi



id3_get_version

(PECL id3 >= 0.1)

id3_get_versionRécupère la version d'un tag ID3

Description

int id3_get_version ( string $filename )

id3_get_version() récupère la(les) version(s) de la(des) balise(s) ID3 d'un fichier MP3.

Si un fichier contient une balise ID3 v1.1, il contiendra toujours aussi une balise 1.0, vu que 1.1 est uniquement une extension de 1.0.

Liste de paramètres

filename

Le chemin vers le fichier MP3

Au lieu de passer un nom de fichier, vous pouvez aussi passer un flux de ressource valide.

Valeurs de retour

Retourne la(les) version(s) du(des) tag(s) ID3 d'un fichier MP3. Sachant qu'un tag peut contenir des tags ID3 de version v1.x et v2.x, la valeur retournée par cette fonction doit être comparée au niveau binaire avec les constantes prédéfinies ID3_V1_0, ID3_V1_1 et ID3_V2.

Exemples

Exemple #1 Exemple avec id3_get_version()

<?php
$version 
id3_get_version"path/to/example.mp3" );
if (
$version ID3_V1_0) {
    echo 
"Contains a 1.x tag\n";
}
if (
$version ID3_V1_1) {
    echo 
"Contains a 1.1 tag\n";
}
if (
$version ID3_V2) {
    echo 
"Contains a 2.x tag\n";
}
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Contains a 1.x tag
Contains a 1.1 tag

Voir aussi



id3_remove_tag

(PECL id3 >= 0.1)

id3_remove_tagEfface un tag ID3

Description

bool id3_remove_tag ( string $filename [, int $version = ID3_V1_0 ] )

id3_remove_tag() est utilisé pour effacer les informations stockées dans un tag ID3.

Liste de paramètres

filename

Le chemin vers le fichier MP3

Au lieu d'un nom de fichier, vous pouvez également passer une ressource valide.

version

Vous permet de spécifier la version du tag, bien que les fichiers MP3 doivent contenir à la fois les versions 1.x et les versions 2.x.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec id3_remove_tag()

<?php
$result 
id3_remove_tag"path/to/example.mp3"ID3_V1_0 );
if (
$result === true) {
    echo 
"Le tag a été effacé avec succès\n";
}
?>

Si le fichier est accessible en écriture et qu'il contient un tag 1.0, l'exemple affichera :

Le tag a été effacé avec succès

Notes

Note: Actuellement, id3_remove_tag() supporte uniquement les tags version 1.0 et 1.1. Si vous tentez d'effacer un tag 1.0 et que le fichier contient un tag 1.1, le tag sera effacé car la version 1.1 n'est qu'une extension de la version 1.0.

Voir aussi



id3_set_tag

(PECL id3 >= 0.1)

id3_set_tagMet à jour les informations stockées dans un tag ID3

Description

bool id3_set_tag ( string $filename , array $tag [, int $version = ID3_V1_0 ] )

id3_set_tag() est utilisé pour changer les informations stockées dans un tag ID3. Si aucun tag n'est présent, le tag sera ajouté au fichier.

Liste de paramètres

filename

Le chemin vers le fichier MP3

Au lieu d'un nom de fichier, vous pouvez également passer une ressource valide.

tag

Un tableau associatif de clés et de valeurs de tags

Les clés suivantes peuvent être utilisées dans le tableau associatif :

Clés dans le tableau associatif
Clé Valeur possible Disponible dans la version
"title" chaîne de caractères avec un maximum de 30 caractères v1.0, v1.1
"artist" chaîne de caractères avec un maximum de 30 caractères v1.0, v1.1
"album" chaîne de caractères avec un maximum de 30 caractères v1.0, v1.1
"year" 4 digits v1.0, v1.1
"genre" valeur entière comprise entre 0 et 147 v1.0, v1.1
"comment" chaîne de caractères avec un maximum de 30 caractères (28 en v1.1) v1.0, v1.1
"track" entier compris entre 0 et 255 v1.1

version

Vous permet de spécifier la version du tag, bien que les fichiers MP3 doivent contenir à la fois les versions 1.x et les versions 2.x.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec id3_set_tag()

<?php
$data 
= array(
              
"title" => "Re:Start",
              
"artist" => "Re:\Legion",
              
"comment" => "A nice track"
             
);
$result id3_set_tag"path/to/example.mp3"$dataID3_V1_0 );
if (
$result === true) {
    echo 
"Le tag a été mis à jour avec succès\n";
}
?>

Si le fichier est accessible en écriture, l'exemple affichera :

Le tag a été mis à jour avec succès

Notes

Note: Actuellement, id3_set_tag() supporte uniquement les versions 1.0 et 1.1.

Voir aussi


Sommaire




KTaglib


Introduction

KTaglib est une approche orientée objet de la bibliothèque taglib du projet KDE utilisée dans des projets comme Amarok, permettant de lire et d'écrire les tags ID3 et Ogg. La bibliothèque permet également d'accéder aux informations audio. Cette approche suit l'API C++ de base, mais a été modifiée légèrement afin d'être plus orientée PHP.

Note:

Pour le moment, ktaglib est capable de lire et d'écrire les tags ID3v1 et ID3v2.



Installation/Configuration

Sommaire


Pré-requis

Si vous voulez compiler ktaglib, vous devez avoir installé la bibliothèque taglib version 1.5. Pour obtenir cette bibliothèque, reportez-vous à la » page du projet taglib. Les bibliothèque DLL Windows sont compilés statiquement sur taglib, aussi, vous n'avez pas besoin d'installer la bibliothèque taglib.



Installation

Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici : » http://pecl.php.net/package/ktaglib.

Aucune bibliothèque DLL pour cette extension PECL n'est actuellement disponible. Reportez-vous à la section Compilation sous Windows.




Constantes pré-définies

Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.

KTaglib utilise des constantes. La plupart de ces constantes est identique à celle de la bibliothèque Taglib.

KTaglib_MPEG_Header::Version1 (integer)
La version ID3 est 1.0
KTaglib_MPEG_Header::Version2 (integer)
La version ID3 est 2.0
KTaglib_MPEG_Header::Version2_5 (integer)
La version ID3 est 2.5
KTaglib_ID3v2_AttachedPictureFrame::Other (integer)
Autre type d'image
KTaglib_ID3v2_AttachedPictureFrame::FileIcon (integer)
Image de type "FileIcon"
KTaglib_ID3v2_AttachedPictureFrame::OtherFileIcon (integer)
Image de type "OtherFileIcon"
KTaglib_ID3v2_AttachedPictureFrame::FrontCover (integer)
Image de type "FrontCover"
KTaglib_ID3v2_AttachedPictureFrame::BackCover (integer)
Image de type "BackCover"
KTaglib_ID3v2_AttachedPictureFrame::LeafletPage (integer)
Image de type "LeafletPage"
KTaglib_ID3v2_AttachedPictureFrame::Media (integer)
Image de type "Media"
KTaglib_ID3v2_AttachedPictureFrame::LeadArtist (integer)
Image de type "LeadArtist"
KTaglib_ID3v2_AttachedPictureFrame::Artist (integer)
Image de type "Artist"
KTaglib_ID3v2_AttachedPictureFrame::Conductor (integer)
Image de type "Condutor"
KTaglib_ID3v2_AttachedPictureFrame::Band (integer)
Image de type "Band"
KTaglib_ID3v2_AttachedPictureFrame::Composer (integer)
Image de type "Composer"
KTaglib_ID3v2_AttachedPictureFrame::Lyricist (integer)
Image de type "Lyricist"
KTaglib_ID3v2_AttachedPictureFrame::RecordingLocation (integer)
Image de type "RecordingLocation"
KTaglib_ID3v2_AttachedPictureFrame::DuringRecording (integer)
Image de type "DuringRecording"
KTaglib_ID3v2_AttachedPictureFrame::DuringPerformance (integer)
Image de type "DuringPerformance"
KTaglib_ID3v2_AttachedPictureFrame::MovieScreenCapture (integer)
Image de type "MovieScreenCapture"
KTaglib_ID3v2_AttachedPictureFrame::ColouredFish (integer)
Image de type "ColouredFish"
KTaglib_ID3v2_AttachedPictureFrame::Illustration (integer)
Image de type "Illustration"
Image de type "BandLogo"


La classe KTaglib_MPEG_File

(No version information available, might only be in SVN)

Introduction

Représente un fichier MPEG. Les fichiers MPEG peuvent avoir des tags ID3v1, ID3v2 et des propriétés audio.

Class synopsis

KTaglib_MPEG_File {
/* Méthodes */
public KTaglib_MPEG_File getAudioProperties ( void )
public KTaglib_ID3v1_Tag getID3v1Tag ([ bool $create = false ] )
public KTaglib_ID3v2_Tag getID3v2Tag ([ bool $create = false ] )
}

KTaglib_MPEG_File::__construct

(0.0.1)

KTaglib_MPEG_File::__constructOuvre un nouveau fichier

Description

public KTaglib_MPEG_File::__construct() ( string $filename )

Ouvre un nouveau fichier MPEG.

Liste de paramètres

filename

Le fichier à lire.

Exemples

Exemple #1 Ouvre un nouveau fichier MP3 et lit le titre

<?php
$mpeg 
= new KTaglib_MPEG_File('example.mp3');
echo 
$mpeg->getID3v1Tag()->getTitle();
?>



KTaglib_MPEG_File::getAudioProperties

(0.0.1)

KTaglib_MPEG_File::getAudioPropertiesRetourne un objet qui permet l'accès aux propriétés audio

Description

public KTaglib_MPEG_File KTaglib_MPEG_File::getAudioProperties ( void )

Retourne un objet qui permet l'accès aux propriétés audio d'un fichier MPEG.

Valeurs de retour

Retourne un objet KTaglib_MPEG_AudioProperties ou FALSE si une erreur survient.



KTaglib_MPEG_File::getID3v1Tag

(0.0.1)

KTaglib_MPEG_File::getID3v1TagRetourne un objet représentant un tag ID3v1

Description

public KTaglib_ID3v1_Tag KTaglib_MPEG_File::getID3v1Tag ([ bool $create = false ] )

Retourne un objet représentant un tag ID3v1, qui pourra être utilisé pour récupérer les informations s'y trouvant.

Valeurs de retour

Retourne un objet KTaglib_MPEG_ID3v1Tag ou FALSE s'il n'y a pas de tag ID3v1.



KTaglib_MPEG_File::getID3v2Tag

(0.0.1)

KTaglib_MPEG_File::getID3v2TagRetourne un objet ID3v2

Description

public KTaglib_ID3v2_Tag KTaglib_MPEG_File::getID3v2Tag ([ bool $create = false ] )

Retourne un objet ID3v2 pour le fichier MPEG. S'il n'y a aucun tag ID3v2, une exception KTaglib_TagNotFoundException sera lancée.

Valeurs de retour

Retourne un objet KTaglib_ID3v2_Tag pour un fichier MPEG s'il possède un tag ID3v2, ou FALSE s'il n'en possède pas.


Sommaire



La classe KTaglib_MPEG_AudioProperties

(No version information available, might only be in SVN)

Introduction

Représente les propriétés audio d'un fichier MPEG, comme la longueur, le débit ou encore la fréquence.


KTaglib_MPEG_AudioProperties::getBitrate

(0.0.1)

KTaglib_MPEG_AudioProperties::getBitrateRetourne le débit binaire d'un fichier MPEG

Description

public int KTaglib_MPEG_AudioProperties::getBitrate ( void )

Retourne le débit binaire d'un fichier MPEG.

Valeurs de retour

Retourne le débit binaire, sous la forme d'un entier.



KTaglib_MPEG_AudioProperties::getChannels

(0.0.1)

KTaglib_MPEG_AudioProperties::getChannelsRetourne le nombre de canaux d'un fichier MPEG

Description

public int KTaglib_MPEG_AudioProperties::getChannels ( void )

Retourne le nombre de canaux d'un fichier MPEG.

Valeurs de retour

Retourne le nombre de canaux, sous la forme d'un entier.



KTaglib_MPEG_AudioProperties::getLayer

(0.0.1)

KTaglib_MPEG_AudioProperties::getLayerRetourne la couche d'un fichier MPEG

Description

public int KTaglib_MPEG_AudioProperties::getLayer ( void )

Retourne la couche d'un fichier MPEG (habituellement 2 pour un MP3).

Valeurs de retour

Retourne la couche, sous la forme d'un entier.



KTaglib_MPEG_AudioProperties::getLength

(0.0.1)

KTaglib_MPEG_AudioProperties::getLengthRetourne la taille d'un fichier MPEG

Description

public int KTaglib_MPEG_AudioProperties::getLength ( void )

Retourne la taille d'un fichier MPEG.

Valeurs de retour

Retourne la taille, sous la forme d'un entier.



KTaglib_MPEG_AudioProperties::getSampleBitrate

(0.0.1)

KTaglib_MPEG_AudioProperties::getSampleBitrateRetourne l'échantillonnage d'un fichier MPEG

Description

public int KTaglib_MPEG_AudioProperties::getSampleBitrate ( void )

Retourne l'échantillonnage d'un fichier MPEG.

Valeurs de retour

Retourne l'échantillonnage, sous la forme d'un entier.



KTaglib_MPEG_AudioProperties::getVersion

(0.0.1)

KTaglib_MPEG_AudioProperties::getVersionRetourne la version d'un fichier MPEG

Description

public int KTaglib_MPEG_AudioProperties::getVersion ( void )

Retourne la version de l'en-tête d'un fichier MPEG. Les versions possibles sont définies dans Tag_MPEG_Header (Version1, Version2, Version2.5).

Valeurs de retour

Retourne la version.



KTaglib_MPEG_AudioProperties::isCopyrighted

(0.0.1)

KTaglib_MPEG_AudioProperties::isCopyrightedRetourne le statut du copyright d'un fichier MPEG

Description

public bool KTaglib_MPEG_AudioProperties::isCopyrighted ( void )

Retourne true si le fichier MPEG est sous copyright.

Valeurs de retour

Retourne true si le fichier MPEG est sous copyright.



KTaglib_MPEG_AudioProperties::isOriginal

(0.0.1)

KTaglib_MPEG_AudioProperties::isOriginalVérifie si le fichier MPEG est marqué comme un fichier original

Description

public bool KTaglib_MPEG_AudioProperties::isOriginal ( void )

Retourne true si le fichier MPEG est marqué comme original.

Valeurs de retour

Retourne true si le fichier MPEG est marqué comme original.



KTaglib_MPEG_AudioProperties::isProtectionEnabled

(0.0.1)

KTaglib_MPEG_AudioProperties::isProtectionEnabledVérifie si un mécanisme de protection d'un fichier MPEG est actif

Description

public bool KTaglib_MPEG_AudioProperties::isProtectionEnabled ( void )

Retourne true si un mécanisme de protection tel que le DRM est actif pour ce fichier.

Valeurs de retour

Retourne true si un mécanisme de protection tel que le DRM est actif pour ce fichier.


Sommaire



La classe KTaglib_Tag

(No version information available, might only be in SVN)

Introduction

Classe de base pour les tags ID3v1 ou ID3v2.

Class synopsis

KTaglib_Tag {
/* Méthodes */
public string getAlbum ( void )
public string getArtist ( void )
public string getComment ( void )
public string getGenre ( void )
public string getTitle ( void )
public int getTrack ( void )
public int getYear ( void )
public bool isEmpty ( void )
}

KTaglib_Tag::getAlbum

(0.0.1)

KTaglib_Tag::getAlbumRetourne le nom de l'album d'un tag ID3

Description

public string KTaglib_Tag::getAlbum ( void )

Retourne le nom de l'album d'un tag ID3. Cette méthode est implémentée pour les tags ID3v1 et ID3v2.

Valeurs de retour

Retourne le nom de l'album.



KTaglib_Tag::getArtist

(0.0.1)

KTaglib_Tag::getArtistRetourne le nom de l'artiste d'un tag ID3

Description

public string KTaglib_Tag::getArtist ( void )

Retourne le nom de l'artiste d'un tag ID3. Cette méthode est implémentée pour les tags ID3v1 et ID3v2.

Valeurs de retour

Retourne le nom de l'artiste.



KTaglib_Tag::getComment

(0.0.1)

KTaglib_Tag::getCommentRetourne le commentaire d'un tag ID3

Description

public string KTaglib_Tag::getComment ( void )

Retourne le commentaire d'un tag ID3. Cette méthode est implémentée pour les tags ID3v1 et ID3v2.

Valeurs de retour

Retourne le commentaire.



KTaglib_Tag::getGenre

(0.0.1)

KTaglib_Tag::getGenreRetourne le genre d'un tag ID3

Description

public string KTaglib_Tag::getGenre ( void )

Retourne le genre d'un tag ID3. Cette méthode est implémentée pour les tags ID3v1 et ID3v2.

Valeurs de retour

Retourne le genre.



KTaglib_Tag::getTitle

(0.0.1)

KTaglib_Tag::getTitleRetourne le titre d'un tag ID3

Description

public string KTaglib_Tag::getTitle ( void )

Retourne le titre d'un tag ID3. Cette méthode est implémentée pour les tags ID3v1 et ID3v2.

Valeurs de retour

Retourne le titre.



KTaglib_Tag::getTrack

(0.0.1)

KTaglib_Tag::getTrackRetourne le numéro de la piste d'un tag ID3

Description

public int KTaglib_Tag::getTrack ( void )

Retourne le numéro de la piste d'un tag ID3. Cette méthode est implémentée pour les tags ID3v1 et ID3v2.

Valeurs de retour

Retourne le numéro de la piste, sous la forme d'un entier.



KTaglib_Tag::getYear

(0.0.1)

KTaglib_Tag::getYearRetourne l'année d'un tag ID3

Description

public int KTaglib_Tag::getYear ( void )

Retourne l'année d'un tag ID3. Cette méthode est implémentée pour les tags ID3v1 et ID3v2.

Valeurs de retour

Retourne l'année, sous la forme d'un entier.



KTaglib_Tag::isEmpty

(0.0.1)

KTaglib_Tag::isEmptyRetourne TRUE si le tag est vide

Description

public bool KTaglib_Tag::isEmpty ( void )

Retourne TRUE si le tag existe mais qu'il est vide. Cette méthode est implémentée pour les tags ID3v1 et ID3v2.

Valeurs de retour

Retourne TRUE si le tag est vide, FALSE sinon.


Sommaire



La classe KTaglib_ID3v2_Tag

(No version information available, might only be in SVN)

Introduction

Représente un tag ID3v2. Elle fournit une liste des frames ID3v2 et peut être utilisée pour ajouter ou effacer des frames.

Classe

étend KTaglib_Tag {
/* Méthodes */
public bool addFrame ( KTaglib_ID3v2_Frame $frame )
public array getFrameList ( void )
/* Méthodes héritées */
public string KTaglib_Tag::getAlbum ( void )
public string KTaglib_Tag::getArtist ( void )
public string KTaglib_Tag::getComment ( void )
public string KTaglib_Tag::getGenre ( void )
public string KTaglib_Tag::getTitle ( void )
public int KTaglib_Tag::getTrack ( void )
public int KTaglib_Tag::getYear ( void )
public bool KTaglib_Tag::isEmpty ( void )
}

KTaglib_ID3v2_Tag::addFrame

(0.0.1)

KTaglib_ID3v2_Tag::addFrameAjoute une frame à un tag ID3v2

Description

public bool KTaglib_ID3v2_Tag::addFrame ( KTaglib_ID3v2_Frame $frame )

Ajoute une frame à un tag ID3v2. La frame doit être un objet KTaglib_ID3v2_Frame valide. Pour sauvegarder la frame, la fonction de sauvegarde doit être appelée.

Valeurs de retour

Retourne TRUE en cas de succès, FALSE sinon.



KTaglib_ID3v2_Tag::getFrameList

(0.0.1)

KTaglib_ID3v2_Tag::getFrameListRetourne un tableau de frames ID3v2, associées avec un tag ID3v2

Description

public array KTaglib_ID3v2_Tag::getFrameList ( void )

Retourne un tableau de frames ID3v2, associées au tag ID3v2.

Valeurs de retour

Retourne un tableau d'objets KTaglib_ID3v2_Frame.


Sommaire



La classe KTaglib_ID3v2_Frame

(No version information available, might only be in SVN)

Introduction

La classe de base pour les frames ID3v2. Les tags ID3v2 sont séparés en plusieurs frames spécialisés. Quelques frames peuvent être présents plusieurs fois.

Classe

étend KTaglib_Tag {
/* Méthodes */
public int getSize ( void )
public string __toString ( void )
/* Méthodes héritées */
public string KTaglib_Tag::getAlbum ( void )
public string KTaglib_Tag::getArtist ( void )
public string KTaglib_Tag::getComment ( void )
public string KTaglib_Tag::getGenre ( void )
public string KTaglib_Tag::getTitle ( void )
public int KTaglib_Tag::getTrack ( void )
public int KTaglib_Tag::getYear ( void )
public bool KTaglib_Tag::isEmpty ( void )
}

KTaglib_ID3v2_Frame::getSize

(0.0.1)

KTaglib_ID3v2_Frame::getSizeRetourne la taille de la frame, en octets

Description

public int KTaglib_ID3v2_Frame::getSize ( void )

Retourne la taille de la frame, en octets. Reportez-vous au site id3.org pour savoir comment sont les frames et comment elles sont définies.

Valeurs de retour

Retourne la taille de la frame, en octets.



KTaglib_ID3v2_Frame::__toString

(0.0.1)

KTaglib_ID3v2_Frame::__toStringRetourne une chaîne représentant la frame

Description

public string KTaglib_ID3v2_Frame::__toString ( void )

Retourne une chaîne représentant la frame. Ce peut être uniquement l'identifiant de la frame, mais cette chaîne peut également contenir d'autres informations. Reportez-vous à la documentation de ktaglib pour plus d'informations.

Valeurs de retour

Retourne une chaîne représentant la frame.


Sommaire



La classe KTaglib_ID3v2_AttachedPictureFrame

(No version information available, might only be in SVN)

Introduction

Représente une frame ID3v2 qui peut contenir une image.

Classe

/* Méthodes */
public string getDescription ( void )
public string getMimeType ( void )
public int getType ( void )
public bool savePicture ( string $filename )
public string getMimeType ( string $type )
public void setPicture ( string $filename )
public void setType ( int $type )
/* Méthodes héritées */
public int KTaglib_ID3v2_Frame::getSize ( void )
public string KTaglib_ID3v2_Frame::__toString ( void )
public string KTaglib_Tag::getAlbum ( void )
public string KTaglib_Tag::getArtist ( void )
public string KTaglib_Tag::getComment ( void )
public string KTaglib_Tag::getGenre ( void )
public string KTaglib_Tag::getTitle ( void )
public int KTaglib_Tag::getTrack ( void )
public int KTaglib_Tag::getYear ( void )
public bool KTaglib_Tag::isEmpty ( void )
}

KTaglib_ID3v2_AttachedPictureFrame::getDescription

(0.0.1)

KTaglib_ID3v2_AttachedPictureFrame::getDescriptionRetourne une description de l'image contenu dans la frame spécialisée

Description

public string KTaglib_ID3v2_AttachedPictureFrame::getDescription ( void )

Retourne la description attachée à une frame contenant une image, dans une frame ID3v2.x.

Valeurs de retour

Retourne une description de l'image.



KTaglib_ID3v2_AttachedPictureFrame::getMimeType

(0.2.0)

KTaglib_ID3v2_AttachedPictureFrame::getMimeTypeRetourne le type MIME de l'image

Description

public string KTaglib_ID3v2_AttachedPictureFrame::getMimeType ( void )

Retourne le type MIME de l'image présente dans la frame spécialisée.

Notez que cette méthode peut retourner différents types. Alors que les tags ID3v2.2 contiennent un type MIME qui ne commencent pas par "image/", les tags ID3v2.3 et v2.4 commencent eux par "image/". Aussi, cette méthode peut retourner "image/png" pour les tags IDv2.3 et uniquement "PNG" pour les tags ID3v2.2.

Notez également que, malgré le fait qu'une image soit attachée, le type MIME peut ne pas avoir été défini, et ainsi, une chaîne vide peut être retournée.

Valeurs de retour

Retourne le type MIME de l'image.



KTaglib_ID3v2_AttachedPictureFrame::getType

(0.2.0)

KTaglib_ID3v2_AttachedPictureFrame::getTypeRetourne le type d'une image

Description

public int KTaglib_ID3v2_AttachedPictureFrame::getType ( void )

Retourne le type d'une image.

La spécification ID3v2 autorise un AttachedPictureFrame à définir une image. Cela peut être, i.e. FrontCover ou FileIcon. Reportez-vous à la description de la classe KTaglib_ID3v2_AttachedPictureFrame pour une liste des types disponibles.

Valeurs de retour

Retourne un entier représentant le type de l'image.



KTaglib_ID3v2_AttachedPictureFrame::savePicture

(0.0.1)

KTaglib_ID3v2_AttachedPictureFrame::savePictureSauvegarde une image dans un fichier

Description

public bool KTaglib_ID3v2_AttachedPictureFrame::savePicture ( string $filename )

Sauvegarde l'image attachée dans un fichier donné.

Valeurs de retour

Retourne TRUE en cas de succès, FALSE sinon.



KTaglib_ID3v2_AttachedPictureFrame::setMimeType

(0.2.0)

KTaglib_ID3v2_AttachedPictureFrame::setMimeTypeDéfinit le type MIME d'une image

Description

public string KTaglib_ID3v2_AttachedPictureFrame::getMimeType ( string $type )

Définit le type MIME d'une image. C'est, en général, "image/png" ou "image/jpeg".



KTaglib_ID3v2_AttachedPictureFrame::setPicture

(0.0.1)

KTaglib_ID3v2_AttachedPictureFrame::setPictureDéfinit le tag image en une image donnée

Description

public void KTaglib_ID3v2_AttachedPictureFrame::setPicture ( string $filename )

Définit le tag image en une image donnée. L'image est chargée depuis le fichier fourni. Notez que l'image n'est sauvegardée que lors de l'appel à la méthode de sauvegarde de l'objet fichier correspondant.

Valeurs de retour

Retourne TRUE en cas de succès, FALSE si une erreur survient.



KTaglib_ID3v2_AttachedPictureFrame::setType

(0.2.0)

KTaglib_ID3v2_AttachedPictureFrame::setTypeDéfinit le type de l'image

Description

public void KTaglib_ID3v2_AttachedPictureFrame::setType ( int $type )

Définit le type de l'image. Ce peut être FrontCover ou FileIcon. Reportez-vous à la description de la classe KTaglib_ID3v2_AttachedPictureFrame pour une liste de types disponibles ainsi que leurs constantes correspondantes.


Sommaire




OGG/Vorbis


Introduction

Le format de fichier OGG/Vorbis, comme définit par » http://www.vorbis.com/, est un schéma pour la compression de flux audio par de multiples facteurs avec un minimum de perte de qualité. Cette extension ajoute le support Ogg Vorbis aux gestionnaires d'URL de PHP. Lorsqu'utilisé en mode lecture, les données compressées OGG/Vorbis sont déployées en audio PCM brute en un des six formats d'encodage PCM listés ci-dessous.



Installation/Configuration

Sommaire


Pré-requis

Cette extension nécessite PHP >= 4.3.0, » libogg >= 1.0, et » libvorbis >= 1.0.



Installation

Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici : » http://pecl.php.net/package/oggvorbis



Configuration à l'exécution

Cette extension ne définit aucune directive de configuration.



Types de ressources

Cette extension ne définit aucune ressource.




Constantes pré-définies

Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.

OGG/Vorbis supporte l'encodage PCM dans les formats suivants :
Constante Définition
OGGVORBIS_PCM_U8 PCM 8-bit non-signé.
OGGVORBIS_PCM_S8 PCM 8-bit signé.
OGGVORBIS_PCM_U16_LE PCM 16-bit non-signé. Arrangements normaux Little Endian.
OGGVORBIS_PCM_U16_BE PCM 16-bit non-signé. Arrangements normaux Big Endian.
OGGVORBIS_PCM_S16_LE PCM 16-bit signé. Arrangements normaux Little Endian.
OGGVORBIS_PCM_S16_BE PCM 16-bit signé. Arrangements normaux Big Endian.


Options de contexte

Options personnalisées OGG/Vorbis
Option Définition Pertinence Défaut
pcm_mode Encodage PCM utilisé. Voir les constantes ci-dessous. Lecture / Écriture OGGVORBIS_PCM_S16_LE
rate Taux d'échantillonnage PCM. Mesuré en Hz. Écriture uniquement 44100
bitrate Débit d'encodage moyen Vorbis / Débit d'encodage variable. Mesuré en bps (ABR) ou en niveau de qualité (VBR : 0.0 à 1.0). 128000 ABR équivaut à 0.4 VBR. Écriture uniquement 128000
channels Nombre de canaux PCM. 1 == Mono, 2 == Stéréo. Écriture uniquement 2
serialno Numéro de série du flux dans un fichier. Doit être unique dans un fichier. Parce qu'il est potentiellement possible de sélectionner plusieurs numéros de série dans un fichier chaîné, faites l'effort d'assigner manuellement des numéros uniques lors de l'encodage. Écriture uniquement Random
comments Tableau associatif de commentaires de fichier. Peut être traduit par strtoupper($name) . "=$value". Note : cette option de contexte n'est pas disponible en oggvorbis 0.1 Écriture uniquement array('ENCODER' => 'PHP/OggVorbis, http://pear.php.net/oggvorbis')


Exemples

Sommaire


Exemples d'utilisation du gestionnaire ogg://

Exemple #1 Lecture d'un fichier OGG/Vorbis

<?php
dl
("oggvorbis.so");

/* Par défaut, ogg:// décodera en 16-bit signé, en mode Little Endian */
$fp fopen('ogg://monaudio.ogg''r');

/* Collecte quelques informations sur le fichier. */
$metadata stream_get_meta_data($fp);

/* Inspection de la première chanson (habituellement la seule chanson
   mais les fichiers OGG/Vorbis peuvent être chaînés) */
$songdata $metadata['wrapper_data'][0];

echo 
"Fichier OGG/Vorbis encodé par : {$songdata['vendor']}\n.";
echo 
"  {$songdata['channels']} canaux de {$songdata['rate']}Hz encodé à {$songdata['bitrate_nominal']}bps.\n";
foreach(
$songdata['comments'] as $comment) {
    echo 
"  $comment\n";
}

while (
$audio_data fread($fp8192)) {
  
/* Faire quelque chose avec l'audio PCM extrait depuis le OGG.
     Copier vers /dev/dsp est une bonne chose sur les systèmes linux,
     souvenez-vous juste de définir le périphérique pour votre mode d'échantillonage d'abord. */
}

fclose($fp);

?>

Exemple #2 Encoder un fichier audio en OGG/Vorbis

<?php
dl
('oggvorbis.so');

$context stream_context_create(array('ogg'=>array(
             
'pcm_mode' => OGGVORBIS_PCM_S8,  /* audio 8bit signé */
             
'rate' => 44100,                 /* Qualité CD 44kHz */
             
'bitrate' => 0.5,                /* Qualité moyenne VBR */
             
'channels' => 1,                 /* Mono */
             
'serialno' => 12345)));          /* Unique dans notre flux */

/* Ouverture d'un fichier pour un ajout. Ceci permet de "chaîner" un deuxième flux OGG à la fin du premier. */
$ogg fopen('ogg://machanson.ogg''a'false$context);

$pcm fopen('mysample.pcm''r');

/* Compression de l'audio brute PCM depuis mysample.pcm vers machanson.ogg */
stream_copy_to_stream($pcm$ogg);

fclose($pcm);
fclose($ogg);
?>





Gestion Audio OpenAL


Introduction

Plate-forme indépendante pour la gestion de l'audio. Requiert la bibliothèque » OpenAL.



Installation/Configuration

Sommaire


Pré-requis

Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible.



Installation

Cette extension » PECL n'est pas intégrée à PHP.

Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici : » http://pecl.php.net/package/openal.

Aucune bibliothèque DLL pour cette extension PECL n'est actuellement disponible. Reportez-vous à la section Compilation sous Windows.



Configuration à l'exécution

Cette extension ne définit aucune directive de configuration.



Types de ressources

Cette extension définie quatre types de ressource : Open AL(Device) - Retournée par openal_device_open(), Open AL(Context) - Retournée par openal_context_create(), Open AL(Buffer) - Retournée par openal_buffer_create(), et Open AL(Source) - Retournée par openal_source_create().




Constantes pré-définies

Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.

ALC_FREQUENCY (entier)
Attribut de contexte
ALC_REFRESH (entier)
Attribut de contexte
ALC_SYNC (entier)
Attribut de contexte
AL_FREQUENCY (entier)
Configuration du buffer
AL_BITS (entier)
Configuration du buffer
AL_CHANNELS (entier)
Configuration du buffer
AL_SIZE (entier)
Configuration du buffer
AL_BUFFER (entier)
Configuration de la source/de l'écoute (Entier)
AL_SOURCE_RELATIVE (entier)
Configuration de la source/de l'écoute (Entier)
AL_SOURCE_STATE (entier)
Configuration de la source/de l'écoute (Entier)
AL_PITCH (entier)
Configuration de la source/de l'écoute (Nombre à virgule flottante)
AL_GAIN (entier)
Configuration de la source/de l'écoute (Nombre à virgule flottante)
AL_MIN_GAIN (entier)
Configuration de la source/de l'écoute (Nombre à virgule flottante)
AL_MAX_GAIN (entier)
Configuration de la source/de l'écoute (Nombre à virgule flottante)
AL_MAX_DISTANCE (entier)
Configuration de la source/de l'écoute (Nombre à virgule flottante)
AL_ROLLOFF_FACTOR (entier)
Configuration de la source/de l'écoute (Nombre à virgule flottante)
AL_CONE_OUTER_GAIN (entier)
Configuration de la source/de l'écoute (Nombre à virgule flottante)
AL_CONE_INNER_ANGLE (entier)
Configuration de la source/de l'écoute (Nombre à virgule flottante)
AL_CONE_OUTER_ANGLE (entier)
Configuration de la source/de l'écoute (Nombre à virgule flottante)
AL_REFERENCE_DISTANCE (entier)
Configuration de la source/de l'écoute (Nombre à virgule flottante)
AL_POSITION (entier)
Configuration de la source/de l'écoute (Nombre vectoriel à virgule flottante)
AL_VELOCITY (entier)
Configuration de la source/de l'écoute (Nombre vectoriel à virgule flottante)
AL_DIRECTION (entier)
Configuration de la source/de l'écoute (Nombre vectoriel à virgule flottante)
AL_ORIENTATION (entier)
Configuration de la source/de l'écoute (Nombre vectoriel à virgule flottante)
AL_FORMAT_MONO8 (entier)
Format PCM
AL_FORMAT_MONO16 (entier)
Format PCM
AL_FORMAT_STEREO8 (entier)
Format PCM
AL_FORMAT_STEREO16 (entier)
Format PCM
AL_INITIAL (entier)
État de la Source
AL_PLAYING (entier)
État de la Source
AL_PAUSED (entier)
État de la Source
AL_STOPPED (entier)
État de la Source
AL_LOOPING (entier)
État de la Source
AL_TRUE (entier)
Valeur booléen reconnue par OpenAL
AL_FALSE (entier)
Valeur booléen reconnue par OpenAL


Fonctions OpenAL


openal_buffer_create

(PECL openal >= 0.1.0)

openal_buffer_createGénère un buffer OpenAL

Description

resource openal_buffer_create ( void )

Valeurs de retour

openal_buffer_create() retourne une ressource Open AL(Buffer) ou FALSE en cas d'erreur.

Voir aussi



openal_buffer_data

(PECL openal >= 0.1.0)

openal_buffer_dataCharge un buffer avec des données

Description

bool openal_buffer_data ( resource $buffer , int $format , string $data , int $freq )

Liste de paramètres

buffer

Une ressource Open AL(Buffer) (précédemment créée par openal_buffer_create()).

format

Format du paramètre data, un parmi ceux-là : AL_FORMAT_MONO8, AL_FORMAT_MONO16, AL_FORMAT_STEREO8 et AL_FORMAT_STEREO16.

data

Bloc de données binaires audio dans le format spécifié format et freq.

freq

Fréquence des données data, en Hz.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



openal_buffer_destroy

(PECL openal >= 0.1.0)

openal_buffer_destroyDétruit un buffer OpenAL

Description

bool openal_buffer_destroy ( resource $buffer )

Liste de paramètres

buffer

Une ressource Open AL(Buffer) (précédemment créée par openal_buffer_create()).

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



openal_buffer_get

(PECL openal >= 0.1.0)

openal_buffer_getRécupère les propriétés du buffer OpenAL

Description

int openal_buffer_get ( resource $buffer , int $property )

Liste de paramètres

buffer

Une ressource Open AL(Buffer) (précédemment créée par openal_buffer_create()).

property

Une propriété spécifique, une parmi celles-ci : AL_FREQUENCY, AL_BITS, AL_CHANNELS et AL_SIZE.

Valeurs de retour

Retourne une valeur entière appropriée à la demande property ou FALSE si une erreur survient.

Voir aussi



openal_buffer_loadwav

(PECL openal >= 0.1.0)

openal_buffer_loadwavCharge un fichier .wav dans le buffer

Description

bool openal_buffer_loadwav ( resource $buffer , string $wavfile )

Liste de paramètres

buffer

Une ressource Open AL(Buffer) (précédemment créée par openal_buffer_create()).

wavfile

Chemin vers le fichier .wav sur le système de fichiers local.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



openal_context_create

(PECL openal >= 0.1.0)

openal_context_createCrée un contexte de traitement audio

Description

resource openal_context_create ( resource $device )

Liste de paramètres

device

Une ressource Open AL(Device) (précédemment créée par openal_device_open()).

Valeurs de retour

Retourne une ressource Open AL(Context) ou FALSE en cas d'erreur.

Voir aussi



openal_context_current

(PECL openal >= 0.1.0)

openal_context_currentRend courant le contexte spécifié

Description

bool openal_context_current ( resource $context )

Liste de paramètres

context

Une ressource Open AL(Context) (précédemment créée par openal_context_create()).

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



openal_context_destroy

(PECL openal >= 0.1.0)

openal_context_destroyDétruit un contexte

Description

bool openal_context_destroy ( resource $context )

Liste de paramètres

context

Une ressource Open AL(Context) (précédemment créée par openal_context_create()).

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



openal_context_process

(PECL openal >= 0.1.0)

openal_context_processTraite le contexte spécifié

Description

bool openal_context_process ( resource $context )

Liste de paramètres

context

Une ressource Open AL(Context) (précédemment créée par openal_context_create()).

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



openal_context_suspend

(PECL openal >= 0.1.0)

openal_context_suspendSuspend le contexte spécifié

Description

bool openal_context_suspend ( resource $context )

Liste de paramètres

context

Une ressource Open AL(Context) (précédemment créée par openal_context_create()).

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



openal_device_close

(PECL openal >= 0.1.0)

openal_device_closeFerme un périphérique OpenAL

Description

bool openal_device_close ( resource $device )

Liste de paramètres

device

Une ressource Open AL(Device) (précédemment créée par openal_device_open()) à fermer.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



openal_device_open

(PECL openal >= 0.1.0)

openal_device_openInitialise une interface audio OpenAL

Description

resource openal_device_open ([ string $device_desc ] )

Liste de paramètres

device_desc

openal_device_open() ouvre un périphérique audio optionnellement spécifié par le paramètre device_desc. Si le paramètre device_desc n'est pas spécifié, le premier périphérique audio disponible sera utilisé.

Valeurs de retour

Retourne une ressource Open AL(Device) ou FALSE en cas d'erreur.

Voir aussi



openal_listener_get

(PECL openal >= 0.1.0)

openal_listener_getRécupère une propriété d'auditeur

Description

mixed openal_listener_get ( int $property )

Liste de paramètres

property

La propriété à récupérer, une parmi celles-ci : AL_GAIN (float), AL_POSITION (array(float,float,float)), AL_VELOCITY (array(float,float,float)) et AL_ORIENTATION (array(float,float,float)).

Valeurs de retour

Retourne un nombre décimal ou un tableau de nombres à virgule flottante ou FALSE si une erreur survient.

Voir aussi



openal_listener_set

(PECL openal >= 0.1.0)

openal_listener_setDéfinie une propriété d'auditeur

Description

bool openal_listener_set ( int $property , mixed $setting )

Liste de paramètres

property

La propriété à définir, une parmi celles-ci : AL_GAIN (float), AL_POSITION (array(float,float,float)), AL_VELOCITY (array(float,float,float)) et AL_ORIENTATION (array(float,float,float)).

setting

La valeur à définir, soit un nombre décimal, soit un tableau de nombres à virgule flottante appropriés.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



openal_source_create

(PECL openal >= 0.1.0)

openal_source_createGénère une ressource de source

Description

resource openal_source_create ( void )

Valeurs de retour

Retourne une ressource Open AL(Source) ou FALSE en cas d'erreur.

Voir aussi



openal_source_destroy

(PECL openal >= 0.1.0)

openal_source_destroyDétruit une ressource de source

Description

bool openal_source_destroy ( resource $source )

Liste de paramètres

source

Une ressource Open AL(Source) (précédemment créée par openal_source_create()).

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



openal_source_get

(PECL openal >= 0.1.0)

openal_source_getRécupère une propriété de source OpenAL

Description

mixed openal_source_get ( resource $source , int $property )

Liste de paramètres

source

Une ressource Open AL(Source) (précédemment créée par openal_source_create()).

property

Propriété à récupérer, une parmi celles-ci : AL_SOURCE_RELATIVE (entier), AL_SOURCE_STATE (entier), AL_PITCH (float), AL_GAIN (float), AL_MIN_GAIN (float), AL_MAX_GAIN (float), AL_MAX_DISTANCE (float), AL_ROLLOFF_FACTOR (float), AL_CONE_OUTER_GAIN (float), AL_CONE_INNER_ANGLE (float), AL_CONE_OUTER_ANGLE (float), AL_REFERENCE_DISTANCE (float), AL_POSITION (array(float,float,float)), AL_VELOCITY (array(float,float,float)), AL_DIRECTION (array(float,float,float)).

Valeurs de retour

Retourne le type associé avec la propriété récupérée ou FALSE si une erreur survient.

Voir aussi



openal_source_pause

(PECL openal >= 0.1.0)

openal_source_pauseMarque une pause dans la source

Description

bool openal_source_pause ( resource $source )

Liste de paramètres

source

Une ressource Open AL(Source) (précédemment créée avec openal_source_create()).

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



openal_source_play

(PECL openal >= 0.1.0)

openal_source_playDémarre la lecture de la source

Description

bool openal_source_play ( resource $source )

Liste de paramètres

source

Une ressource Open AL(Source) (précédemment créée par openal_source_create()).

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



openal_source_rewind

(PECL openal >= 0.1.0)

openal_source_rewindRevient en arrière dans la source

Description

bool openal_source_rewind ( resource $source )

Liste de paramètres

source

Une ressource Open AL(Source) (précédemment créée par openal_source_create()).

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



openal_source_set

(PECL openal >= 0.1.0)

openal_source_setDéfinie une propriété de la source

Description

bool openal_source_set ( resource $source , int $property , mixed $setting )

Liste de paramètres

source

Une ressource Open AL(Source) (précédemment créée par openal_source_create()).

property

La propriété à définir, une parmi celles-ci : AL_BUFFER (OpenAL(Source)), AL_LOOPING (boolean), AL_SOURCE_RELATIVE (int), AL_SOURCE_STATE (int), AL_PITCH (float), AL_GAIN (float), AL_MIN_GAIN (float), AL_MAX_GAIN (float), AL_MAX_DISTANCE (float), AL_ROLLOFF_FACTOR (float), AL_CONE_OUTER_GAIN (float), AL_CONE_INNER_ANGLE (float), AL_CONE_OUTER_ANGLE (float), AL_REFERENCE_DISTANCE (float), AL_POSITION (array(float,float,float)), AL_VELOCITY (array(float,float,float)), AL_DIRECTION (array(float,float,float)).

setting

La valeur à assigner à la propriété spécifiée par le paramètre property. Référez-vous à la description de la propriété property pour une description des valeurs attendues.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



openal_source_stop

(PECL openal >= 0.1.0)

openal_source_stopArrête la lecture de la source

Description

bool openal_source_stop ( resource $source )

Liste de paramètres

source

Une ressource Open AL(Source) (précédemment créée par openal_source_create()).

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



openal_stream

(PECL openal >= 0.1.0)

openal_streamDémarre le streaming d'une source

Description

resource openal_stream ( resource $source , int $format , int $rate )

Liste de paramètres

source

Une ressource Open AL(Source) (précédemment créée par openal_source_create()).

format

Le format du paramètre data, un parmi ceux-là : AL_FORMAT_MONO8, AL_FORMAT_MONO16, AL_FORMAT_STEREO8 et AL_FORMAT_STEREO16.

rate

La fréquence des données à streamer, en Hz.

Valeurs de retour

Retourne une ressource de streaming ou FALSE si une erreur survient.

Voir aussi


Sommaire





Services d'identification


Kerberos V


Introduction

Ce paquet vous permet d'accéder à l'administration des serveurs Kerberos V. Vous pourrez créer, modifier et effacer les directives et les éléments principaux Kerberos V.

Plus d'informations à propos de Kerberos peuvent être trouvées sur » http://web.mit.edu/kerberos/www/.

La documentation sur Kerberos et KADM5 peut être trouvée sur » http://web.mit.edu/kerberos/www/krb5-1.2/krb5-1.2.8/doc/admin_toc.html.



Installation/Configuration

Sommaire


Pré-requis

Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible.



Installation

Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici : » http://pecl.php.net/package/kadm5.

Note:

Si vous utilisez cette option sans spécifier le chemin vers KADM5, PHP utilisera les bibliothèques clientes internes de KADM5. Les utilisateurs qui exécutent d'autres applications qui utilisent également KADM5 (par exemple, l'exécution de PHP 4 et PHP 5 comme modules apache concurrent, ou auth-kadm5), doivent également spécifier le chemin vers KADM5 : --with-kadm5=/path/to/kadm5. Ceci forcera PHP à utiliser les bibliothèques clientes installées par KADM5, évitant ainsi les conflits.

Aucune bibliothèque DLL pour cette extension PECL n'est actuellement disponible. Reportez-vous à la section Compilation sous Windows.



Configuration à l'exécution

Cette extension ne définit aucune directive de configuration.



Types de ressources

Cette extension définit un gestionnaire KADM5 retourné par la fonction kadm5_init_with_password().




Constantes pré-définies

Sommaire

Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.


Constantes pour les attributs des balises

Les fonctions kadm5_create_principal(), kadm5_modify_principal() et kadm5_modify_principal() vous permettent de spécifier des attributs spéciaux utilisant un champ de bits. Les symboles sont définis ci-dessous :

Attributs à utiliser par KDC
constante
KRB5_KDB_DISALLOW_POSTDATED
KRB5_KDB_DISALLOW_FORWARDABLE
KRB5_KDB_DISALLOW_TGT_BASED
KRB5_KDB_DISALLOW_RENEWABLE
KRB5_KDB_DISALLOW_PROXIABLE
KRB5_KDB_DISALLOW_DUP_SKEY
KRB5_KDB_DISALLOW_ALL_TIX
KRB5_KDB_REQUIRES_PRE_AUTH
KRB5_KDB_REQUIRES_HW_AUTH
KRB5_KDB_REQUIRES_PWCHANGE
KRB5_KDB_DISALLOW_SVR
KRB5_KDB_PWCHANGE_SERVER
KRB5_KDB_SUPPORT_DESMD5
KRB5_KDB_NEW_PRINC



Constantes pour les options

Les fonctions kadm5_create_principal(), kadm5_modify_principal() et kadm5_get_principal() permettent de spécifier ou retourner les options des éléments principaux en tant que tableaux associatifs. Les clés pour le tableau associatif sont définies en tant que constantes ci-dessous :

Options pour créer/modifier/récupérer des éléments principaux
constante type description
KADM5_PRINCIPAL long Le délai d'expiration des éléments principaux en tant que timestamp Kerberos.
KADM5_PRINC_EXPIRE_TIME long Le délai d'expiration des éléments principaux en tant que timestamp Kerberos.
KADM5_LAST_PW_CHANGE long Le délai pendant lequel le mot de passe du principal a été changé pour la dernière fois.
KADM5_PW_EXPIRATION long Le délai d'expiration du mot de passe du principal courant, en tant que timestamp Kerberos.
KADM5_MAX_LIFE long La durée de vie maximale de tous les tickets Kerberos issus de ce principal.
KADM5_MAX_RLIFE long La durée maximale renouvelable de tous les tickets Kerberos issus de ce principal.
KADM5_MOD_NAME string Le nom du principal Kerberos qui a modifié ce principal le plus récemment.
KADM5_MOD_TIME long L'heure à laquelle ce principal a été modifié pour la dernière fois, en tant que timestamp Kerberos.
KADM5_KVNO long La version de la clé courante du principal.
KADM5_POLICY string Le nom de la directive contrôlant ce principal.
KADM5_CLEARPOLICY long La procédure standard servant à assigner la directive par défaut pour créer des éléments principaux. KADM5_CLEARPOLICY supprime ce comportement.
KADM5_LAST_SUCCESS long L'heure KDC de la dernière AS_REQ qui a réussi.
KADM5_LAST_FAILED long L'heure KDC de la dernière AS_REQ qui a échoué.
KADM5_FAIL_AUTH_COUNT long Le nombre d'échec récursif AS_REQs.
KADM5_RANDKEY long Génère un mot de passe aléatoire pour le principal. Le paramètre password sera ignoré.
KADM5_ATTRIBUTES long Un champ de bits d'attributs à utiliser par KDC.




Exemples

Sommaire


Utilisation simple

Cet exemple simple montre comment se connecter, interroger, imprimer les éléments principaux et se déconnecter depuis une base de données KADM5.

Exemple #1 Exemple général de l'extension KADM5

<?php

  $handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

  print 
"<h1>get_principals</h1>\n";
  
$principals kadm5_get_principals($handle);
  for( 
$i=0$i<count($principals); $i++)
      print 
"$principals[$i]<br>\n";

  print 
"<h1>get_policies</h1>\n";
  
$policies kadm5_get_policies($handle);
  for( 
$i=0$i<count($policies); $i++)
      print 
"$policies[$i]<br>\n";

  print 
"<h1>get_principal burbach@GONICUS.LOCAL</h1>\n";

  
$options kadm5_get_principal($handle"burbach@GONICUS.LOCAL" );
  
$keys array_keys($options);
  for( 
$i=0$i<count($keys); $i++) {
    
$value $options[$keys[$i]];
    print 
"$keys[$i]$value<br>\n";
  }

  
$options = array(KADM5_PRINC_EXPIRE_TIME => 0);
  
kadm5_modify_principal($handle"burbach@GONICUS.LOCAL"$options);

  
kadm5_destroy($handle);
?>




Fonctions KADM5


kadm5_chpass_principal

(PECL kadm5 >= 0.2.3)

kadm5_chpass_principalModifie le mot de passe du principal

Description

bool kadm5_chpass_principal ( resource $handle , string $principal , string $password )

kadm5_chpass_principal() définit un nouveau mot de passe password pour le principal.

Liste de paramètres

handle

Un gestionnaire KADM5.

principal

Le principal.

password

Le nouveau mot de passe.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple de modification du mot de passe du principal

<?php

$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

kadm5_chpass_principal($handle"burbach@GONICUS.LOCAL""newpassword");

kadm5_destroy($handle);
?>



kadm5_create_principal

(PECL kadm5 >= 0.2.3)

kadm5_create_principalCrée un principal kerberos avec les paramètres donnés

Description

bool kadm5_create_principal ( resource $handle , string $principal [, string $password [, array $options ]] )

kadm5_create_principal() crée un principal avec le mot de passe password donné.

Liste de paramètres

handle

Un gestionnaire KADM5.

principal

Le principal.

password

Si password n'est pas spécifié ou s'il vaut NULL, une clé aléatoire sera générée.

options

Il est possible de spécifier plusieurs paramètres optionnels avec le tableau options. Les options suivantes sont autorisées : KADM5_PRINC_EXPIRE_TIME, KADM5_PW_EXPIRATION, KADM5_ATTRIBUTES, KADM5_MAX_LIFE, KADM5_KVNO, KADM5_POLICY, KADM5_CLEARPOLICY, KADM5_MAX_RLIFE.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple de création d'un principal

<?php

$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

$attributes KRB5_KDB_REQUIRES_PRE_AUTH KRB5_KDB_DISALLOW_PROXIABLE;
$options = array(KADM5_PRINC_EXPIRE_TIME => 0,
                 
KADM5_POLICY => "default",
                 
KADM5_ATTRIBUTES => $attributes);

kadm5_create_principal($handle"burbach@GONICUS.LOCAL""password"$options);

kadm5_destroy($handle);
?>

Voir aussi



kadm5_delete_principal

(PECL kadm5 >= 0.2.3)

kadm5_delete_principalEfface un principal kerberos

Description

bool kadm5_delete_principal ( resource $handle , string $principal )

Efface un principal depuis la base de données Kerberos.

Liste de paramètres

handle

Un gestionnaire KADM5.

principal

Le principal à effacer.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec kadm5_delete_principal()

<?php

$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

kadm5_delete_principal($handle"burbach@GONICUS.LOCAL");

kadm5_destroy($handle);
?>

Voir aussi



kadm5_destroy

(PECL kadm5 >= 0.2.3)

kadm5_destroyFerme la connexion avec le serveur d'administration et libère toutes les ressources associées

Description

bool kadm5_destroy ( resource $handle )

Ferme la connexion avec le serveur d'administration et libère toutes les ressources associées.

Liste de paramètres

handle

Un gestionnaire KADM5.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



kadm5_flush

(PECL kadm5 >= 0.2.3)

kadm5_flushValide toutes les modifications de la base de données Kerberos

Description

bool kadm5_flush ( resource $handle )

Valide toutes les modifications de la base de données Kerberos, et quitte la connexion ouverte du serveur d'administration Kerberos

Liste de paramètres

handle

Un gestionnaire KADM5.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.



kadm5_get_policies

(PECL kadm5 >= 0.2.3)

kadm5_get_policiesRécupère toutes les directives depuis la base de données Kerberos

Description

array kadm5_get_policies ( resource $handle )

Récupère un tableau contenant tous les noms des directives.

Liste de paramètres

handle

Un gestionnaire KADM5.

Valeurs de retour

Retourne un tableau de directives en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec kadm5_get_policies()

<?php
$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

print 
"<h1>get_policies</h1>\n";
foreach (
kadm5_get_policies($handle) as $policy) {
    echo 
"$policy<br />\n";
}

kadm5_destroy($handle);
?>



kadm5_get_principal

(PECL kadm5 >= 0.2.3)

kadm5_get_principalRécupère les entrées des éléments principaux depuis la base de données Kerberos

Description

array kadm5_get_principal ( resource $handle , string $principal )

Récupère les entrées des éléments principaux depuis la base de données Kerberos.

Liste de paramètres

handle

Un gestionnaire KADM5.

principal

Le principal.

Valeurs de retour

kadm5_get_principal() retourne un tableau associatif contenant les clés suivantes : KADM5_PRINCIPAL, KADM5_PRINC_EXPIRE_TIME, KADM5_PW_EXPIRATION, KADM5_ATTRIBUTES, KADM5_MAX_LIFE, KADM5_MOD_NAME, KADM5_MOD_TIME, KADM5_KVNO, KADM5_POLICY, KADM5_MAX_RLIFE, KADM5_LAST_SUCCESS, KADM5_LAST_FAILED, KADM5_FAIL_AUTH_COUNT. en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec kadm5_get_principal()

<?php
$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

print 
"<h1>get_principal burbach@GONICUS.LOCAL</h1>\n";

$options kadm5_get_principal($handle"burbach@GONICUS.LOCAL" );

foreach (
$options as $key => $value) {
    echo 
"$key$value<br />\n";
}

kadm5_destroy($handle);
?>

Voir aussi



kadm5_get_principals

(PECL kadm5 >= 0.2.3)

kadm5_get_principalsRécupère tous les éléments principaux depuis la base de données Kerberos

Description

array kadm5_get_principals ( resource $handle )

kadm5_get_principals() retourne un tableau contenant tous les noms des éléments principaux.

Liste de paramètres

handle

A KADM5 handle.

Valeurs de retour

Retourne un tableau d'éléments principaux en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec kadm5_get_principals()

<?php
$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

print 
"<h1>get_principals</h1>\n";
foreach (
kadm5_get_principals($handle) as $principal) {
    echo 
"$principal<br />\n";
}

kadm5_destroy($handle);
?>

Voir aussi

  • kadm5_get_principal() - Récupère les entrées des éléments principaux depuis la base de données Kerberos



kadm5_init_with_password

(PECL kadm5 >= 0.2.3)

kadm5_init_with_passwordOuvre une connexion à la bibliothèque KADM5

Description

resource kadm5_init_with_password ( string $admin_server , string $realm , string $principal , string $password )

Ouvre une connexion avec la bibliothèque KADM5 en utilisant le principal et le mot de passe password pour obtenir les créances initiales depuis le serveur d'administration admin_server.

Liste de paramètres

admin_server

Le serveur.

realm

Définit le domaine d'identification pour la connexion.

principal

Le principal.

password

Si password est omis ou s'il vaut NULL, une clé aléatoire sera générée.

Valeurs de retour

Retourne un gestionnaire KADM5 en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple d'initialisation KADM5

<?php

$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

$attributes KRB5_KDB_REQUIRES_PRE_AUTH KRB5_KDB_DISALLOW_PROXIABLE;
$options = array(KADM5_PRINC_EXPIRE_TIME => 0,
                 
KADM5_POLICY => "default",
                 
KADM5_ATTRIBUTES => $attributes);

kadm5_create_principal($handle"burbach@GONICUS.LOCAL""password"$options);

kadm5_destroy($handle);
?>

Notes

Note:

La connexion doit être close après l'avoir utilisée avec la fonction kadm5_destroy().

Voir aussi

  • kadm5_destroy() - Ferme la connexion avec le serveur d'administration et libère toutes les ressources associées



kadm5_modify_principal

(PECL kadm5 >= 0.2.3)

kadm5_modify_principalModifie un principal Kerberos avec les paramètres donnés

Description

bool kadm5_modify_principal ( resource $handle , string $principal , array $options )

Modifie un principal Kerberos avec les paramètres donnés

Liste de paramètres

handle

Un gestionnaire KADM5.

principal

Le principal.

options

Il est possible de spécifier plusieurs paramètres optionnels avec un tableau d'options. Les options suivantes sont autorisées : KADM5_PRINC_EXPIRE_TIME, KADM5_PW_EXPIRATION, KADM5_ATTRIBUTES, KADM5_MAX_LIFE, KADM5_KVNO, KADM5_POLICY, KADM5_CLEARPOLICY, KADM5_MAX_RLIFE. KADM5_FAIL_AUTH_COUNT.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple de modification d'un principal

<?php

$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

$attributes KRB5_KDB_REQUIRES_PRE_AUTH;
$options = array(KADM5_PRINC_EXPIRE_TIME => 3451234,
KADM5_POLICY => "gonicus",
KADM5_ATTRIBUTES => $attributes);

kadm5_modify_principal($handle"burbach@GONICUS.LOCAL"$options);

kadm5_destroy($handle);
?>

Voir aussi


Sommaire




Radius


Introduction

Ce paquet est basé sur la bibliothèque libradius (Remote Authentication Dial In User Service) de FreeBSD. Il permet aux clients d'effectuer des identification et représentations par le biais de requêtes réseau sur des serveurs distants.

Cette extension PECL supporte tout le protocole Radius Authentication complet pour les identifications (» RFC 2865) et Radius Accounting (» RFC 2866). Ce paquet est disponible pour Unix (testé sous FreeBSD et Linux) mais aussi pour Windows.

Note:

Une description de libradius peut être trouvée » ici. Une description détaillée du fichier de configuration peut être trouvée » ici.



Installation/Configuration

Sommaire


Pré-requis

Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible.



Installation

Cette extension » PECL n'est pas intégrée à PHP.

Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici : » http://pecl.php.net/package/radius.

Aucune bibliothèque DLL pour cette extension PECL n'est actuellement disponible. Reportez-vous à la section Compilation sous Windows.



Configuration à l'exécution

Cette extension ne définit aucune directive de configuration.



Types de ressources

Cette extension ne définit aucune ressource.




Constantes pré-définies

Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.

RADIUS_ACCESS_REQUEST ()
Demande d'identification
RADIUS_ACCESS_ACCEPT ()
Accès accepté
RADIUS_ACCESS_REJECT ()
Accès rejeté
RADIUS_ACCOUNTING_REQUEST ()
Demande de compte
RADIUS_ACCOUNTING_RESPONSE ()
Réponse du compte
RADIUS_ACCESS_CHALLENGE ()
Défi d'accès
RADIUS_USER_NAME (chaîne de caractères)
Nom d'utilisateur
RADIUS_USER_PASSWORD (chaîne de caractères)
Mot de passe
RADIUS_CHAP_PASSWORD (chaîne de caractères)
Chap Password: chappass = md5(ident + plaintextpass + challenge)
RADIUS_NAS_IP_ADDRESS (chaîne de caractères)
Adresse IP NAS
RADIUS_NAS_PORT (entier)
Port NAS
RADIUS_SERVICE_TYPE (entier)

Type de service :

  • RADIUS_LOGIN
  • RADIUS_FRAMED
  • RADIUS_CALLBACK_LOGIN
  • RADIUS_CALLBACK_FRAMED
  • RADIUS_OUTBOUND
  • RADIUS_ADMINISTRATIVE
  • RADIUS_NAS_PROMPT
  • RADIUS_AUTHENTICATE_ONLY
  • RADIUS_CALLBACK_NAS_PROMPT

RADIUS_FRAMED_PROTOCOL (entier)

Protocole encadré :

  • RADIUS_PPP
  • RADIUS_SLIP
  • RADIUS_ARAP
  • RADIUS_GANDALF
  • RADIUS_XYLOGICS

RADIUS_FRAMED_IP_ADDRESS (int)
Adresse réseau IPv4
RADIUS_FRAMED_IP_NETMASK (chaîne de caractères)
Netmasque
RADIUS_FRAMED_ROUTING (entier)
Routing
RADIUS_FILTER_ID (chaîne de caractères)
Identifiant de filtre
RADIUS_FRAMED_MTU (entier)
MTU
RADIUS_FRAMED_COMPRESSION (entier)

Compression :

  • RADIUS_COMP_NONE
  • RADIUS_COMP_VJ
  • RADIUS_COMP_IPXHDR

RADIUS_LOGIN_IP_HOST (chaîne de caractères)
Login IP Host
RADIUS_LOGIN_SERVICE (entier)
Login Service
RADIUS_LOGIN_TCP_PORT (entier)
Login TCP Port
RADIUS_REPLY_MESSAGE (chaîne de caractères)
Message de réponse
RADIUS_CALLBACK_NUMBER (chaîne de caractères)
Numéro de Callback
RADIUS_CALLBACK_ID (chaîne de caractères)
ID de Callback
RADIUS_FRAMED_ROUTE (chaîne de caractères)
Framed Route
RADIUS_FRAMED_IPX_NETWORK (chaîne de caractères)
Framed IPX Network
RADIUS_STATE (chaîne de caractères)
Statut
RADIUS_CLASS (entier)
Classe
RADIUS_VENDOR_SPECIFIC (entier)
Attribut spécifique au vendeur
RADIUS_SESSION_TIMEOUT (entier)
Timeout de la session
RADIUS_IDLE_TIMEOUT (entier)
Durée d'expiration
RADIUS_TERMINATION_ACTION (entier)
Action de termination
RADIUS_CALLED_STATION_ID (entier)
Called Station Id
RADIUS_CALLING_STATION_ID (chaîne de caractères)
Calling Station Id
RADIUS_NAS_IDENTIFIER (entier)
NAS ID
RADIUS_PROXY_STATE (entier)
Proxy State
RADIUS_LOGIN_LAT_SERVICE (entier)
Login LAT Service
RADIUS_LOGIN_LAT_NODE (entier)
Login LAT Node
RADIUS_LOGIN_LAT_GROUP (entier)
Login LAT Group
Framed Appletalk Link
RADIUS_FRAMED_APPLETALK_NETWORK (entier)
Framed Appletalk Network
RADIUS_FRAMED_APPLETALK_ZONE (entier)
Framed Appletalk Zone
RADIUS_CHAP_CHALLENGE (chaîne de caractères)
Challenge
RADIUS_NAS_PORT_TYPE (entier)

Type du port NAS :

  • RADIUS_ASYNC
  • RADIUS_SYNC
  • RADIUS_ISDN_SYNC
  • RADIUS_ISDN_ASYNC_V120
  • RADIUS_ISDN_ASYNC_V110
  • RADIUS_VIRTUAL
  • RADIUS_PIAFS
  • RADIUS_HDLC_CLEAR_CHANNEL
  • RADIUS_X_25
  • RADIUS_X_75
  • RADIUS_G_3_FAX
  • RADIUS_SDSL
  • RADIUS_ADSL_CAP
  • RADIUS_ADSL_DMT
  • RADIUS_IDSL
  • RADIUS_ETHERNET
  • RADIUS_XDSL
  • RADIUS_CABLE
  • RADIUS_WIRELESS_OTHER
  • RADIUS_WIRELESS_IEEE_802_11

RADIUS_PORT_LIMIT (entier)
Port Limit
RADIUS_LOGIN_LAT_PORT (entier)
Login LAT Port
RADIUS_CONNECT_INFO (chaîne de caractères)
Connect info
RADIUS_ACCT_STATUS_TYPE (entier)

Type de statut du compte :

  • RADIUS_START
  • RADIUS_STOP
  • RADIUS_ACCOUNTING_ON
  • RADIUS_ACCOUNTING_OFF

RADIUS_ACCT_DELAY_TIME (entier)
Accounting delay time
RADIUS_ACCT_INPUT_OCTETS (entier)
Accounting input bytes
RADIUS_ACCT_OUTPUT_OCTETS (entier)
Accounting output bytes
RADIUS_ACCT_SESSION_ID (entier)
Accounting session ID
RADIUS_ACCT_AUTHENTIC (entier)

Accounting authentic, un parmi :

  • RADIUS_AUTH_RADIUS
  • RADIUS_AUTH_LOCAL
  • RADIUS_AUTH_REMOTE

RADIUS_ACCT_SESSION_TIME (entier)
Accounting session time
RADIUS_ACCT_INPUT_PACKETS (entier)
Accounting input packets
RADIUS_ACCT_OUTPUT_PACKETS (entier)
Accounting output packets
RADIUS_ACCT_TERMINATE_CAUSE (entier)

Accounting terminate cause, un parmi :

  • RADIUS_TERM_USER_REQUEST
  • RADIUS_TERM_LOST_CARRIER
  • RADIUS_TERM_LOST_SERVICE
  • RADIUS_TERM_IDLE_TIMEOUT
  • RADIUS_TERM_SESSION_TIMEOUT
  • RADIUS_TERM_ADMIN_RESET
  • RADIUS_TERM_ADMIN_REBOOT
  • RADIUS_TERM_PORT_ERROR
  • RADIUS_TERM_NAS_ERROR
  • RADIUS_TERM_NAS_REQUEST
  • RADIUS_TERM_NAS_REBOOT
  • RADIUS_TERM_PORT_UNNEEDED
  • RADIUS_TERM_PORT_PREEMPTED
  • RADIUS_TERM_PORT_SUSPENDED
  • RADIUS_TERM_SERVICE_UNAVAILABLE
  • RADIUS_TERM_CALLBACK
  • RADIUS_TERM_USER_ERROR
  • RADIUS_TERM_HOST_REQUEST

RADIUS_ACCT_MULTI_SESSION_ID (chaîne de caractères)
Accounting multisession ID
Accounting link count
RADIUS_VENDOR_MICROSOFT (entier)

Attributs spécifiques à Microsoft (» RFC 2548) :

  • RADIUS_MICROSOFT_MS_CHAP_RESPONSE
  • RADIUS_MICROSOFT_MS_CHAP_ERROR
  • RADIUS_MICROSOFT_MS_CHAP_PW_1
  • RADIUS_MICROSOFT_MS_CHAP_PW_2
  • RADIUS_MICROSOFT_MS_CHAP_LM_ENC_PW
  • RADIUS_MICROSOFT_MS_CHAP_NT_ENC_PW
  • RADIUS_MICROSOFT_MS_MPPE_ENCRYPTION_POLICY
  • RADIUS_MICROSOFT_MS_MPPE_ENCRYPTION_TYPES
  • RADIUS_MICROSOFT_MS_RAS_VENDOR
  • RADIUS_MICROSOFT_MS_CHAP_DOMAIN
  • RADIUS_MICROSOFT_MS_CHAP_CHALLENGE
  • RADIUS_MICROSOFT_MS_CHAP_MPPE_KEYS
  • RADIUS_MICROSOFT_MS_BAP_USAGE
  • RADIUS_MICROSOFT_MS_LINK_UTILIZATION_THRESHOLD
  • RADIUS_MICROSOFT_MS_LINK_DROP_TIME_LIMIT
  • RADIUS_MICROSOFT_MS_MPPE_SEND_KEY
  • RADIUS_MICROSOFT_MS_MPPE_RECV_KEY
  • RADIUS_MICROSOFT_MS_RAS_VERSION
  • RADIUS_MICROSOFT_MS_OLD_ARAP_PASSWORD
  • RADIUS_MICROSOFT_MS_NEW_ARAP_PASSWORD
  • RADIUS_MICROSOFT_MS_ARAP_PASSWORD_CHANGE_REASON
  • RADIUS_MICROSOFT_MS_FILTER
  • RADIUS_MICROSOFT_MS_ACCT_AUTH_TYPE
  • RADIUS_MICROSOFT_MS_ACCT_EAP_TYPE
  • RADIUS_MICROSOFT_MS_CHAP2_RESPONSE
  • RADIUS_MICROSOFT_MS_CHAP2_SUCCESS
  • RADIUS_MICROSOFT_MS_CHAP2_PW
  • RADIUS_MICROSOFT_MS_PRIMARY_DNS_SERVER
  • RADIUS_MICROSOFT_MS_SECONDARY_DNS_SERVER
  • RADIUS_MICROSOFT_MS_PRIMARY_NBNS_SERVER
  • RADIUS_MICROSOFT_MS_SECONDARY_NBNS_SERVER
  • RADIUS_MICROSOFT_MS_ARAP_CHALLENGE



Exemples

Comment commencer ?

  • récupérez une ressource radius
  • configurez la bibliothèque
  • créez la requête
  • ajoutez les attributs
  • envoyez la requête
  • récupérer les attributs
  • fermez la ressource radius (optionnel)
Regardez également aux exemples fournis avec ce paquet.

Le paquet contient un exemple de script PHP. Ce script montre une identification avec radius, en utilisant PAP ou CHAP (md5). Si vous effectuer une identification via Microsoft Radius servers, alors il est possible d'utiliser CHAP (md5). Si vous voulez vous identifier avec Microsoft Servers, vous devez utiliser MS-CHAPv1 ou MS-CHAPv2, mais c'est plus compliqué, car vous devez avoir md4, sha1 et des pour générer les bonnes données. L'exemple fourni montre toutes les méthodes d'identification, incluant MS-CHAPv1 et MS-CHAPv2. Pour faire en sorte que MS-CHAP fonctionne, vous devez activer les extensions mcrypt et mhash, à partir de la version 1.2 de ce paquet, l'extension mcrypt n'est plus nécessaire.



Fonctions Radius

Contact

Si vous avez des commentaires, des corrections de bogues, des améliorations ou si vous voulez aider dans le développement, vous pouvez envoyer un email à » mbretter@php.net.


radius_acct_open

(PECL radius >= 1.1.0)

radius_acct_openCrée une ressource Radius pour les comptes

Description

resource radius_acct_open ( void )

Valeurs de retour

Retourne une ressource en cas de succès ou FALSE si une erreur survient. Cette fonction n'échoue que s'il y a un manque de mémoire.

Exemples

Exemple #1 Exemple avec radius_acct_open()

<?php
$res 
radius_acct_open ()
    or die (
"Impossible de créer la ressource");
print(
"La ressource a été créée avec succès");
?>



radius_add_server

(PECL radius >= 1.1.0)

radius_add_serverAjoute un serveur

Description

bool radius_add_server ( resource $radius_handle , string $hostname , int $port , string $secret , int $timeout , int $max_tries )

radius_add_server() peut être utilisé plusieurs fois, et il peut être utilisé avec la fonction radius_config(). Tout au plus, 10 serveurs peuvent être spécifiés. Lorsque plusieurs serveurs sont fournis, ils sont essayés à la façon round-robin tant qu'une réponse valide n'est pas reçue, ou tant que la limite max_tries de chaque serveur n'est pas atteinte.

Liste de paramètres

radius_handle

hostname

Le paramètre hostname spécifie l'hôte serveur, soit en tant que nom de domaine qualifié, soit en tant qu'adresse IP.

port

Le port spécifie le port UDP à contacter sur le serveur. Si le port donné vaut 0, la bibliothèque recherchera le service radius/udp ou radacct/udp dans la base de données des services du réseau et utilisera le port s'y trouvant. Si aucune entrée n'est trouvée, la bibliothèque utilisera les ports Radius standards, 1812 pour l'identification et 1813 pour les comptes.

secret

Le secret partagé pour l'hôte serveur est passé au paramètre secret. Le protocole Radius ignore tout mais garde les 128 premiers octets du secret partagé.

timeout

Le délai limite pour recevoir les réponses du serveur est passé au paramètre timeout, sous la forme de seconde.

max_tries

Le nombre maximal de requêtes répétées à faire avant d'échouer.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec radius_add_server()

<?php
if (!radius_add_server($res'radius.example.com'1812'testing123'33)) {
    echo 
'Erreur Radius :' radius_strerror($res). "\n<br>";
    exit;
}
?>

Voir aussi

  • radius_config() - Demande à la bibliothèque de lire un fichier de configuration donné



radius_auth_open

(PECL radius >= 1.1.0)

radius_auth_openCrée une ressource Radius pour l'identification

Description

resource radius_auth_open ( void )

Valeurs de retour

Retourne une ressource en cas de succès ou FALSE si une erreur survient. Cette fonction n'échoue que s'il y a un manque de mémoire.

Exemples

Exemple #1 Exemple avec radius_auth_open()

<?php
$radh 
radius_auth_open()
    or die (
"Impossible de créer la ressource");
echo 
"La ressource a été créée avec succès";
?>



radius_close

(PECL radius >= 1.1.0)

radius_closeLibère toutes les ressources Radius

Description

bool radius_close ( resource $radius_handle )

Il n'est pas nécessaire d'appeler cette fonction car PHP libère toutes les ressources à la fin de chaque demande.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.



radius_config

(PECL radius >= 1.1.0)

radius_configDemande à la bibliothèque de lire un fichier de configuration donné

Description

bool radius_config ( resource $radius_handle , string $file )

Avant toute demande Radius, la bibliothèque doit connaître le serveur à contacter. La manière simple de configurer la bibliothèque est d'appeler la fonction radius_config(). radius_config() demande à la bibliothèque de lire un fichier de configuration dont le format est décrit sur la page » radius.conf.

Liste de paramètres

radius_handle

file

Le chemin vers le fichier de configuration est passé en tant qu'argument à la fonction radius_config(). La bibliothèque peut également être configurée en appelant la fonction radius_add_server().

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



radius_create_request

(PECL radius >= 1.1.0)

radius_create_requestCrée une demande de compte ou d'identification

Description

bool radius_create_request ( resource $radius_handle , int $type )

Une demande Radius consiste en du code spécifiant une demande spécifique, ainsi que zéro ou plusieurs attributs qui fournissent des informations supplémentaires. Pour commencer à construire une nouvelle demande, appelez la fonction radius_create_request().

Note: Attention : Vous devez appeler cette fonction avant de passer n'importe quel argument !

Liste de paramètres

radius_handle

type

Le type est RADIUS_ACCESS_REQUEST ou RADIUS_ACCOUNTING_REQUEST.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec radius_create_request()

<?php
if (!radius_create_request($resRADIUS_ACCESS_REQUEST)) {
    echo 
'Erreur Radius :' radius_strerror($res). "\n<br />";
    exit;
}
?>

Voir aussi



radius_cvt_addr

(PECL radius >= 1.1.0)

radius_cvt_addrConvertit des données brutes en adresse IP

Description

string radius_cvt_addr ( string $data )

Exemples

Exemple #1 Exemple avec radius_cvt_addr()

<?php
while ($resa radius_get_attr($res)) {

    if (!
is_array($resa)) {
        
printf ("Erreur lors de la récupération des attributs : %s\n",  radius_strerror($res));
        exit;
    }

    
$attr $resa['attr'];
    
$data $resa['data'];

    switch (
$attr) {

    case 
RADIUS_FRAMED_IP_ADDRESS:
        
$ip radius_cvt_addr($data);
        echo 
"IP : $ip<br>\n";
        break;

    case 
RADIUS_FRAMED_IP_NETMASK:
        
$mask radius_cvt_addr($data);
        echo 
"MASQUE : $mask<br>\n";
        break;
    }
}
?>

Voir aussi



radius_cvt_int

(PECL radius >= 1.1.0)

radius_cvt_intConvertit des données brutes en entier

Description

int radius_cvt_int ( string $data )

Exemples

Exemple #1 Exemple avec radius_cvt_int()

<?php
while ($resa radius_get_attr($res)) {

    if (!
is_array($resa)) {
        
printf ("Erreur lors de la récupération des attributs : %s\n",  radius_strerror($res));
        exit;
    }

    
$attr $resa['attr'];
    
$data $resa['data'];

    switch (
$attr) {

    case 
RADIUS_FRAMED_MTU:
        
$mtu radius_cvt_int($data);
        echo 
"MTU : $mtu<br>\n";
        break;
    }
}
?>

Voir aussi



radius_cvt_string

(PECL radius >= 1.1.0)

radius_cvt_stringConvertit des données brutes en chaîne de caractères

Description

string radius_cvt_string ( string $data )

Exemples

Exemple #1 Exemple avec radius_cvt_string()

<?php
while ($resa radius_get_attr($res)) {

    if (!
is_array($resa)) {
        
printf ("Erreur lors de la récupération des attributs : %s\n",  radius_strerror($res));
        exit;
    }

    
$attr $resa['attr'];
    
$data $resa['data'];

    switch (
$attr) {

    case 
RADIUS_FILTER_ID:
        
$id radius_cvt_string($data);
        echo 
"Filtre ID : $id<br>\n";
        break;
    }
}
?>

Voir aussi



radius_demangle_mppe_key

(PECL radius >= 1.2.0)

radius_demangle_mppe_keyDérive les clés mppe depuis des données

Description

string radius_demangle_mppe_key ( resource $radius_handle , string $mangled )

Lors de l'utilisation de MPPE avec MS-CHAPv2, les clés reçues et envoyées sont "séchées" (voir la » RFC 2548), cependant, cette fonction est utile, car je ne sais pas s'il y a ou pas une implémentation de PPTP-MPPE dans PHP.

Valeurs de retour

Retourne la chaîne ou FALSE si une erreur survient.



radius_demangle

(PECL radius >= 1.2.0)

radius_demangleAssèche des données

Description

string radius_demangle ( resource $radius_handle , string $mangled )

Quelques données (mots de passe, clés MS-CHAPv1 MPPE) sont "séchées" pour des raisons de sécurité et doivent être "asséchées" avant de pouvoir les utiliser.

Valeurs de retour

Retourne la chaîne "asséchées" ou FALSE si une erreur survient.



radius_get_attr

(PECL radius >= 1.1.0)

radius_get_attrExtrait un attribut

Description

mixed radius_get_attr ( resource $radius_handle )

Comme les demandes Radius, chaque réponse doit contenir zéro ou plusieurs attributs. Après la réception d'une réponse avec succès par la fonction radius_send_request(), ces attributs peuvent être extraits un par un en utilisant la fonction radius_get_attr(). À chaque appel de radius_get_attr(), le prochain attribut est récupéré depuis la réponse courante.

Valeurs de retour

Retourne un tableau associatif contenant le type de l'attribut ainsi que les données ou un numéro d'erreur <= 0.

Exemples

Exemple #1 Exemple avec radius_get_attr()

<?php
while ($resa radius_get_attr($res)) {

    if (!
is_array($resa)) {
        
printf("Erreur lors de la récupération de l'attribut : %s\n",  radius_strerror($res));
        exit;
    }

    
$attr $resa['attr'];
    
$data $resa['data'];
    
printf("Attribut récupéré :%d %d octets %s\n"$attrstrlen($data), bin2hex($data));
}
?>

Voir aussi



radius_get_vendor_attr

(PECL radius >= 1.1.0)

radius_get_vendor_attrExtrait un attribut spécifique au vendeur

Description

array radius_get_vendor_attr ( string $data )

Si radius_get_attr() retourne RADIUS_VENDOR_SPECIFIC, radius_get_vendor_attr() peut être appelé pour déterminer le vendeur.

Valeurs de retour

Retourne un tableau associatif contenant le type de l'attribut, le vendeur ainsi que les données, ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec radius_get_vendor_attr()

<?php
while ($resa radius_get_attr($res)) {

    if (!
is_array($resa)) {
        
printf ("Erreur lors de la récupération de l'attribut : %s\n",  radius_strerror($res));
        exit;
    }

    
$attr $resa['attr'];
    
$data $resa['data'];
    
printf("Attribut récupéré :%d %d octets %s\n"$attrstrlen($data), bin2hex($data));
    if (
$attr == RADIUS_VENDOR_SPECIFIC) {

        
$resv radius_get_vendor_attr($data);
        if (
is_array($resv)) {
            
$vendor $resv['vendor'];
            
$attrv $resv['attr'];
            
$datav $resv['data'];
            
printf("Récupération du vendeur de l'attribut :%d %d octets %s\n"$attrvstrlen($datav), bin2hex($datav));
        }

    }
}
?>

Voir aussi



radius_put_addr

(PECL radius >= 1.1.0)

radius_put_addrAttache une adresse IP en tant qu'attribut

Description

bool radius_put_addr ( resource $radius_handle , int $type , string $addr )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.



radius_put_attr

(PECL radius >= 1.1.0)

radius_put_attrAttache un attribut binaire

Description

bool radius_put_attr ( resource $radius_handle , int $type , string $value )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec radius_put_attr()

<?php
mt_srand
(time());
$chall mt_rand();
$chapval md5(pack('Ca*','sepp' $chall));
$pass pack('CH*'1$chapval);
if (!
radius_put_attr($resRADIUS_CHAP_PASSWORD$pass)) {
    echo 
'Erreur Radius :' radius_strerror($res). "\n<br />";
    exit;
}
?>

Voir aussi



radius_put_int

(PECL radius >= 1.1.0)

radius_put_intAttache un attribut entier

Description

bool radius_put_int ( resource $radius_handle , int $type , int $value )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec radius_put_int()

<?php
if (!radius_put_int($resRAD_FRAMED_PROTOCOLRAD_PPP)) {
   echo 
'Erreur Radius :' radius_strerror($res). "\n<br />";
   exit;
}
?>

Voir aussi



radius_put_string

(PECL radius >= 1.1.0)

radius_put_stringAttache un attribut chaîne de caractères

Description

bool radius_put_string ( resource $radius_handle , int $type , string $value )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec radius_put_string()

<?php
if (!radius_put_string($resRADIUS_USER_NAME'billy')) {
    echo 
'Erreur Radius :' radius_strerror($res). "\n<br />";
    exit;
}
?>

Voir aussi



radius_put_vendor_addr

(PECL radius >= 1.1.0)

radius_put_vendor_addrAttache un attribut IP-Address spécifique à un vendeur

Description

bool radius_put_vendor_addr ( resource $radius_handle , int $vendor , int $type , string $addr )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.



radius_put_vendor_attr

(PECL radius >= 1.1.0)

radius_put_vendor_attrAttache un attribut binaire à un vendeur spécifique

Description

bool radius_put_vendor_attr ( resource $radius_handle , int $vendor , int $type , string $value )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec radius_put_vendor_attr()

<?php
if (!radius_put_vendor_attr($resRADIUS_VENDOR_MICROSOFTRAD_MICROSOFT_MS_CHAP_CHALLENGE$challenge)) {
    echo 
'Erreur Radius :' radius_strerror($res). "\n<br />";
    exit;
}
?>

Voir aussi



radius_put_vendor_int

(PECL radius >= 1.1.0)

radius_put_vendor_intAttache un attribut entier à un vendeur spécifique

Description

bool radius_put_vendor_int ( resource $radius_handle , int $vendor , int $type , int $value )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



radius_put_vendor_string

(PECL radius >= 1.1.0)

radius_put_vendor_stringAttache un attribut sous la forme d'une chaîne à un vendeur spécifique

Description

bool radius_put_vendor_string ( resource $radius_handle , int $vendor , int $type , string $value )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



radius_request_authenticator

(PECL radius >= 1.1.0)

radius_request_authenticatorRetourne l'identifiant demandé

Description

string radius_request_authenticator ( resource $radius_handle )

L'identifiant demandé est nécessaire pour le rétablissement des données comme les mots de passe et les clés de chiffrement.

Valeurs de retour

Retourne l'identificateur demandé en tant que chaîne de caractères ou FALSE si une erreur survient.

Voir aussi



radius_send_request

(PECL radius >= 1.1.0)

radius_send_requestEnvoie la demande et attente une réponse

Description

int radius_send_request ( resource $radius_handle )

Après qu'une demande Radius ait été construite, elle est envoyé grâce à la fonction radius_send_request().

La fonction radius_send_request() envoie la requête et attend une réponse valide, essayant à nouveau, suivant la méthode round-robin autant que nécessaire.

Valeurs de retour

Si une réponse valide est reçue, radius_send_request() retourne le code Radius qui spécifie le type de réponse. C'est, typiquement, RADIUS_ACCESS_ACCEPT, RADIUS_ACCESS_REJECT ou RADIUS_ACCESS_CHALLENGE. Si aucune réponse valide n'est reçue, radius_send_request() retournera FALSE.

Voir aussi



radius_server_secret

(PECL radius >= 1.1.0)

radius_server_secretRetourne le secret partagé

Description

string radius_server_secret ( resource $radius_handle )

Le secret partagé est nécessaire pour le rétablissement des données comme les mots de passe et les clés de chiffrement.

Valeurs de retour

Retourne le secret partagé du serveur en tant que chaîne de caractères ou FALSE si une erreur survient.



radius_strerror

(PECL radius >= 1.1.0)

radius_strerrorRetourne un message d'erreur

Description

string radius_strerror ( resource $radius_handle )

Si une fonction Radius échoue, alors, elle enregistre un message d'erreur. Ce message d'erreur peut être récupéré avec cette fonction.

Valeurs de retour

Retourne un message d'erreur en tant que chaîne de caractères.


Sommaire





Extensions relatives aux dates et aux heures


Calendar


Introduction

L'extension Calendar contient une série de fonctions afin de convertir simplement les différents formats de calendrier. Elles sont basées sur un comptage de jour Julien. Le comptage Julien est un comptage commençant le 1er Janvier 4713 A.J. Pour convertir les différents calendriers, vous devez tout d'abord convertir en nombre de jours Julien, puis, dans le type de calendrier de votre choix. Le comptage de jours Julien est très différent du calendrier Julien ! Pour plus d'informations sur le comptage en jours Julien, visitez cette page : » http://www.hermetic.ch/cal_stud/jdn.htm. Pour plus d'informations sur les différents calendriers, visitez cette page : » http://www.fourmilab.ch/documents/calendar/.



Installation/Configuration

Sommaire


Pré-requis

Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible.



Installation

Pour faire fonctionner ces fonctions avec PHP, vous devez le compiler avec l'option --enable-calendar .

La version Windows de PHP dispose du support automatique de cette extension. Vous n'avez pas à ajouter de bibliothèque supplémentaire pour disposer de ces fonctions.



Configuration à l'exécution

Cette extension ne définit aucune directive de configuration.



Types de ressources

Cette extension ne définit aucune ressource.




Constantes pré-définies

Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.

CAL_GREGORIAN (entier)
CAL_JULIAN (entier)
CAL_JEWISH (entier)
CAL_FRENCH (entier)
CAL_NUM_CALS (integer)
CAL_DOW_DAYNO (entier)
CAL_DOW_SHORT (integer)
CAL_DOW_LONG (integer)
CAL_MONTH_GREGORIAN_SHORT (entier)
CAL_MONTH_GREGORIAN_LONG (integer)
CAL_MONTH_JULIAN_SHORT (integer)
CAL_MONTH_JULIAN_LONG (integer)
CAL_MONTH_JEWISH (entier)
CAL_MONTH_FRENCH (entier)

Les constantes suivantes sont disponibles depuis PHP 4.3.0 :

CAL_EASTER_DEFAULT (integer)
CAL_EASTER_ROMAN (integer)
CAL_EASTER_ALWAYS_GREGORIAN (integer)
CAL_EASTER_ALWAYS_JULIAN (entier)

Les constantes suivantes sont disponibles depuis PHP 5.0.0 :

CAL_JEWISH_ADD_ALAFIM_GERESH (integer)
CAL_JEWISH_ADD_ALAFIM (integer)
CAL_JEWISH_ADD_GERESHAYIM (entier)


Calendar Fonctions


cal_days_in_month

(PHP 4 >= 4.1.0, PHP 5)

cal_days_in_monthRetourne le nombre de jours dans un mois, pour une année et un calendrier donné

Description

int cal_days_in_month ( int $calendar , int $month , int $year )

Retourne le nombre de jours dans le mois month de l'année year, pour le calendrier calendar.

Liste de paramètres

calendar

Calendrier à utiliser pour le calcul

month

Mois dans le calendrier sélectionné

year

Année dans le calendrier sélectionné

Valeurs de retour

Le nombre de jours dans le mois sélectionné, dans le calendrier fourni.

Exemples

Exemple #1 Exemple avec cal_days_in_month()

<?php
$num 
cal_days_in_month(CAL_GREGORIAN82003); // 31
echo "Il y a $num jours en Août 2003";
?>



cal_from_jd

(PHP 4 >= 4.1.0, PHP 5)

cal_from_jdConvertit le nombre de jours Julien en un calendrier spécifique

Description

array cal_from_jd ( int $jd , int $calendar )

cal_from_jd() convertit le nombre de jours Julien jd en une date du calendrier calendar. Les valeurs possibles pour calendar sont CAL_GREGORIAN, CAL_JULIAN, CAL_JEWISH et CAL_FRENCH.

Liste de paramètres

jd

Jour Julien, sous la forme d'un entier

calendar

Calendrier à utiliser

Valeurs de retour

Retourne un tableau contenant des informations sur le calendrier, comme le mois, le jour, l'année, le jour de la semaine, les noms abrégés et complets des jours de la semaine et du mois, et la date, sous la forme d'une chaîne de caractères "mois/jour/année".

Exemples

Exemple #1 Exemple avec cal_from_jd()

<?php
$today 
unixtojd(mktime(0008162003));
print_r(cal_from_jd($todayCAL_GREGORIAN));
?>

L'exemple ci-dessus va afficher :

Array
(
   [date] => 8/16/2003
   [month] => 8
   [day] => 16
   [year] => 2003
   [dow] => 6
   [abbrevdayname] => Sat
   [dayname] => Saturday
   [abbrevmonth] => Aug
   [monthname] => August
)

Voir aussi

  • cal_to_jd() - Convertit un calendrier en nombre de jours Julien
  • jdtofrench() - Convertit le nombre de jours du calendrier Julien en date du calendrier français républicain
  • jdtogregorian() - Convertit le nombre de jours du calendrier Julien en date grégorienne
  • jdtojewish() - Convertit le nombre de jours du calendrier Julien en date du calendrier juif
  • jdtojulian() - Convertit le nombre de jours du calendrier Julien en date du calendrier Julien
  • jdtounix() - Convertit un jour Julien en timestamp UNIX



cal_info

(PHP 4 >= 4.1.0, PHP 5)

cal_infoRetourne des détails sur un calendrier

Description

array cal_info ([ int $calendar = -1 ] )

cal_info() retourne des informations sur le calendrier calendar spécifié.

Les informations de calendriers sont retournées dans un tableau qui contient les éléments calname, calsymbol, month, abbrevmonth et maxdaysinmonth. Les noms des différents calendriers qui peuvent être utilisés dans le paramètre calendar sont les suivants :

  • 0 ou CAL_GREGORIAN - Calendrier Grégorien
  • 1 ou CAL_JULIAN - Calendrier Julien
  • 2 ou CAL_JEWISH - Calendrier juif
  • 3 ou CAL_FRENCH - Calendrier révolutionnaire français

Si le paramètre calendar n'est pas spécifié, un tableau représentant tous les calendriers est retourné.

Liste de paramètres

calendar

Calendrier dont on souhaite des informations. Si aucun calendrier n'est spécifié, des informations sur tous les calendriers seront retournées.

Valeurs de retour

Historique

Version Description
5.0 Le paramètre calendar devient optionnel et vaut par défaut "tous calendriers" s'il n'est pas spécifié.

Exemples

Exemple #1 Exemple avec cal_info()

<?php
$info 
cal_info(0);
print_r($info);
?>

L'exemple ci-dessus va afficher :

Array
(
    [months] => Array
        (
            [1] => January
            [2] => February
            [3] => March
            [4] => April
            [5] => May
            [6] => June
            [7] => July
            [8] => August
            [9] => September
            [10] => October
            [11] => November
            [12] => December
        )

    [abbrevmonths] => Array
        (
            [1] => Jan
            [2] => Feb
            [3] => Mar
            [4] => Apr
            [5] => May
            [6] => Jun
            [7] => Jul
            [8] => Aug
            [9] => Sep
            [10] => Oct
            [11] => Nov
            [12] => Dec
        )

    [maxdaysinmonth] => 31
    [calname] => Gregorian
    [calsymbol] => CAL_GREGORIAN
)



cal_to_jd

(PHP 4 >= 4.1.0, PHP 5)

cal_to_jdConvertit un calendrier en nombre de jours Julien

Description

int cal_to_jd ( int $calendar , int $month , int $day , int $year )

cal_to_jd() calcule le nombre de jours Julien pour une date, dans le calendrier calendar. Les valeurs possibles pour calendar sont CAL_GREGORIAN, CAL_JULIAN, CAL_JEWISH et CAL_FRENCH.

Liste de paramètres

calendar

Calendrier à convertir. Un parmi CAL_GREGORIAN, CAL_JULIAN, CAL_JEWISH ou CAL_FRENCH.

month

Le mois, sous la forme d'un nombre. L'intervalle valide dépend du calendrier calendar

day

Le jour, sous la forme d'un nombre. L'intervalle valide dépend du calendrier calendar

year

L'année, sous la forme d'un nombre. L'intervalle valide dépend du calendrier calendar

Valeurs de retour

Le nombre de jour Julien.

Voir aussi

  • cal_from_jd() - Convertit le nombre de jours Julien en un calendrier spécifique
  • frenchtojd() - Convertit une date du calendrier français républicain en nombre de jours du calendrier Julien
  • gregoriantojd() - Convertit une date grégorienne en nombre de jours du calendrier Julien
  • jewishtojd() - Convertit une date du calendrier Juif en nombre de jours du calendrier Julien
  • juliantojd() - Convertit un jours du calendrier Julien en un nombre de jours du calendrier Julien
  • unixtojd() - Convertit un timestamp UNIX en un jour Julien



easter_date

(PHP 4, PHP 5)

easter_dateRetourne un timestamp UNIX pour Pâques, à minuit pour une année donnée

Description

int easter_date ([ int $year ] )

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

Avertissement

Cette fonction génère une alerte si la date tombe hors de la zone de validité des timestamp UNIX (i.e. avant 1970 ou après 2037).

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 pleine lune 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 dates des phases de la lune. Avec le calendrier grégorien, (à partir des années 1753, conçu par Clavius et Lilius, puis introduit par le pape Grégoire 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.

Liste de paramètres

year

L'année, sous la forme d'un nombre compris entre 1970 et 2037

Valeurs de retour

La date pour Pâques, sous la forme d'un timestamp unix.

Historique

Version Description
Depuis la version 4.3.0 Le paramètre year est optionnel et vaut par défaut l'année courante vis à vis de l'heure locale.

Exemples

Exemple #1 Exemple avec easter_date()

<?php

echo date("M-d-Y"easter_date(1999));        // Apr-04-1999
echo date("M-d-Y"easter_date(2000));        // Apr-23-2000
echo date("M-d-Y"easter_date(2001));        // Apr-15-2001

?>

Voir aussi

  • easter_days() - Retourne le nombre de jours entre le 21 Mars et Pâques, pour une année donnée pour le calcul de Pâques avant 1970 et après 2037



easter_days

(PHP 4, PHP 5)

easter_daysRetourne le nombre de jours entre le 21 Mars et Pâques, pour une année donnée

Description

int easter_days ([ int $year [, int $method = CAL_EASTER_DEFAULT ]] )

Retourne le nombre de jours 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 courante sera utilisée.

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

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 pleine lune 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, conçu par Clavius et Lilius, puis introduit par le pape Grégoire 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.

Liste de paramètres

year

L'année, sous la forme d'un nombre positif

method

Permet le calcul des dates de Pâques en se basant sur le calendrier Grégorien pour les années entre 1582 et 1752 lorsque définit à CAL_EASTER_ROMAN. Voir les constantes des calendriers pour plus de constantes valides.

Valeurs de retour

Le nombre de jours entre le 21 Mars et Pâques, pour l'année year fournie.

Historique

Version Description
Depuis la version 4.3.0 Le paramètre year est optionnel et vaut par défaut, l'année courante du temps local.
Depuis la version 4.3.0 Le paramètre method a été introduit.

Exemples

Exemple #1 Exemple avec easter_days()

<?php

echo easter_days(1999);        // 14, i.e. April 4
echo easter_days(1492);        // 32, i.e. April 22
echo easter_days(1913);        //  2, i.e. March 23

?>

Voir aussi

  • easter_date() - Retourne un timestamp UNIX pour Pâques, à minuit pour une année donnée



FrenchToJD

(PHP 4, PHP 5)

FrenchToJDConvertit 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 jours du calendrier Julien.

Ces fonctions convertissent les dates comprises entre l'an 1 et l'an 14 (22 Septembre 1792 à 22 Septembre 1806 en calendrier grégorien). Cela couvre plus que la durée d'existence de ce calendrier.

Liste de paramètres

month

Le mois, sous la forme d'un nombre entre 1 (pour Vendémiaire) à 13 (pour la période de 5-6 jours en à la fin de chaque année)

day

Le jour, sous la forme d'un nombre compris entre 1 et 30

year

L'année, sous la forme d'un nombre compris entre 1 et 14

Valeurs de retour

Le jour Julien pour la date fournie du calendrier français républicain, sous la forme d'un entier.

Voir aussi

  • jdtofrench() - Convertit le nombre de jours du calendrier Julien en date du calendrier français républicain
  • cal_to_jd() - Convertit un calendrier en nombre de jours Julien



GregorianToJD

(PHP 4, PHP 5)

GregorianToJDConvertit 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 qu'en 1752, les Russes en 1918 et les Grecs en 1923. La plupart des pays européens utilisaient le calendrier Julien avant le Grégorien.

Liste de paramètres

month

Le mois, sous la forme d'un nombre compris entre 1 (pour Janvier) et 12 (pour Décembre)

day

Le jour, sous la forme d'un nombre compris entre 1 et 31

year

L'année, sous la forme d'un nombre compris entre -4714 et 9999

Valeurs de retour

Le jour Julien pour la date fournie du calendrier Grégorien, sous la forme d'un entier.

Exemples

Exemple #1 Fonctions calendrier

<?php
$jd 
GregorianToJD(10111970);
echo 
"$jd\n";
$gregorian JDToGregorian($jd);
echo 
"$gregorian\n";
?>

Voir aussi

  • jdtogregorian() - Convertit le nombre de jours du calendrier Julien en date grégorienne
  • cal_to_jd() - Convertit un calendrier en nombre de jours Julien



JDDayOfWeek

(PHP 4, PHP 5)

JDDayOfWeekRetourne le numéro du jour de la semaine

Description

mixed jddayofweek ( int $julianday [, int $mode = CAL_DOW_DAYNO ] )

Retourne le numéro du jour de la semaine. Peut retourner une chaîne ou un entier, en fonction du mode.

Liste de paramètres

julianday

Le numéro du jour Julien, sous la forme d'un entier

mode
Modes pour la semaine du calendrier
Mode Signification
0 (défaut) Retourne le numéro du jour comme un entier (0=dimanche, 1=lundi, etc.)
1 Retourne une chaîne contenant le nom du jour (anglais grégorien)
2 Retourne une chaîne contenant le nom abrégé du jour de la semaine (anglais grégorien)

Valeurs de retour

Le jour de la semaine Grégorien, sous la forme d'un entier ou d'une chaîne de caractères.



JDMonthName

(PHP 4, PHP 5)

JDMonthNameRetourne le nom du mois

Description

string jdmonthname ( int $julianday , int $mode )

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

Modes de calendrier
Mode Signification Valeurs
0 Grégorien - abrégé Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
1 Grégorien January, February, March, April, May, June, July, August, September, October, November, December
2 Julien - abrégé Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
3 Julien January, February, March, April, May, June, July, August, September, October, November, December
4 Juif Tishri, Heshvan, Kislev, Tevet, Shevat, AdarI, AdarII, Nisan, Iyyar, Sivan, Tammuz, Av, Elul
5 Républicain français Vendemiaire, Brumaire, Frimaire, Nivose, Pluviose, Ventose, Germinal, Floreal, Prairial, Messidor, Thermidor, Fructidor, Extra

Liste de paramètres

jday

Le jour Julien à analyser

calendar

Le calendrier dans lequel on récupère le nom du mois

Valeurs de retour

Le nom du mois pour le jour Julien donné, pour le calendrier calendar.



JDToFrench

(PHP 4, PHP 5)

JDToFrenchConvertit le nombre de jours du calendrier Julien en date du calendrier français républicain

Description

string jdtofrench ( int $juliandaycount )

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

Liste de paramètres

julianday

Le numéro du jour Julien, sous la forme d'un entier

Valeurs de retour

La date française républicaine, sous la forme d'une chaîne de caractères "mois/jour/année".

Voir aussi

  • frenchtojd() - Convertit une date du calendrier français républicain en nombre de jours du calendrier Julien
  • cal_from_jd() - Convertit le nombre de jours Julien en un calendrier spécifique



JDToGregorian

(PHP 4, PHP 5)

JDToGregorianConvertit le nombre de jours du calendrier Julien en date grégorienne

Description

string jdtogregorian ( int $julianday )

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

Liste de paramètres

julianday

Le numéro du jour Julien, sous la forme d'un entier

Valeurs de retour

La date grégorienne, sous la forme d'une chaîne de caractères "mois/jour/année".

Voir aussi

  • gregoriantojd() - Convertit une date grégorienne en nombre de jours du calendrier Julien
  • cal_from_jd() - Convertit le nombre de jours Julien en un calendrier spécifique



jdtojewish

(PHP 4, PHP 5)

jdtojewishConvertit le nombre de jours du calendrier Julien en date du calendrier juif

Description

string jdtojewish ( int $juliandaycount [, bool $hebrew = false [, int $fl = 0 ]] )

Convertit le nombre de jours du calendrier Julien en date du calendrier juif.

Les paramètres optionnels hebrew et fl sont disponibles depuis PHP 5.0.0.

Si le paramètre hebrew vaut TRUE, le paramètre fl sera utilisé pour générer une chaîne au format hébreux. Les formats disponibles sont : CAL_JEWISH_ADD_ALAFIM_GERESH, CAL_JEWISH_ADD_ALAFIM et CAL_JEWISH_ADD_GERESHAYIM.

Liste de paramètres

julianday

Le nombre de jours Julien, sous la forme d'un entier

Valeurs de retour

La date Juive, sous la forme d'une chaîne de caractères "mois/jour/année".

Historique

Version Description
5.0.0 Les paramètres hebrew et fl ont été ajoutés. Le paramètre fl a été ajouté.
4.3.0 Le paramètre hebrew a été ajouté.

Exemples

Exemple #1 Exemple avec jdtojewish()

<?php
echo jdtojewish(gregoriantojd(1082002), true,
       
CAL_JEWISH_ADD_GERESHAYIM CAL_JEWISH_ADD_ALAFIM CAL_JEWISH_ADD_ALAFIM_GERESH); 
?>

Voir aussi

  • jewishtojd() - Convertit une date du calendrier Juif en nombre de jours du calendrier Julien
  • cal_from_jd() - Convertit le nombre de jours Julien en un calendrier spécifique



JDToJulian

(PHP 4, PHP 5)

JDToJulianConvertit le nombre de jours du calendrier Julien en date du calendrier Julien

Description

string jdtojulian ( int $julianday )

Convertit le nombre de jours du calendrier Julien en une chaîne contenant la date du calendrier Julien, au format "mois/jour/année".

Liste de paramètres

julianday

Le nombre de jours Julien, sous la forme d'un entier

Valeurs de retour

La date Julien, sous la forme d'une chaîne de caractères "mois/jour/année".

Voir aussi

  • juliantojd() - Convertit un jours du calendrier Julien en un nombre de jours du calendrier Julien
  • cal_from_jd() - Convertit le nombre de jours Julien en un calendrier spécifique



jdtounix

(PHP 4, PHP 5)

jdtounixConvertit un jour Julien en timestamp UNIX

Description

int jdtounix ( int $jday )

Retourne un timestamp UNIX correspondant au jour Julien jday ou FALSE si jday n'est pas dans l'intervalle de validité de l'époque UNIX. (années grégoriennes entre 1970 et 2037 ou 2440588 <= jday <= 2465342 .) Le temps retourné est un temps local (et non GMT).

Liste de paramètres

jday

Le nombre de jours Julien, compris entre 2440588 et 2465342.

Valeurs de retour

Le timestamp unix pour le début du jour Julien donné.

Voir aussi

  • unixtojd() - Convertit un timestamp UNIX en un jour Julien



JewishToJD

(PHP 4, PHP 5)

JewishToJDConvertit 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 J.C.), 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 commençait quand une nouvelle lune était observée.

Liste de paramètres

month

Le mois, sous la forme d'un nombre entre 1 et 13

day

Le jour, sous la forme d'un nombre entre 1 et 30

year

L'année, sous la forme d'un nombre entre 1 et 9999

Valeurs de retour

Le jour Julien pour la date Juive donnée, sous la forme d'un entier.

Voir aussi

  • jdtojewish() - Convertit le nombre de jours du calendrier Julien en date du calendrier juif
  • cal_to_jd() - Convertit un calendrier en nombre de jours Julien



JulianToJD

(PHP 4, PHP 5)

JulianToJDConvertit un jours du calendrier Julien en un nombre de jours 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 J.C., et ses détails ne furent finalisés qu'au plus tôt en 8 après JC, et probablement pas avant le quatriè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.

Attention

Souvenez-vous, le calendrier courant du système utilisé sur le Web est un calendrier Grégorien. gregoriantojd() peut être utilisé pour convertir ce genre de dates en un nombre de jours du calendrier Julien.

Liste de paramètres

month

Le mois, sous la forme d'un nombre entre 1 (pour Janvier) et 12 (pour Décembre)

day

Le jour, sous la forme d'un nombre entre 1 et 31

year

L'année, sous la forme d'un nombre entre -4713 et 9999

Valeurs de retour

Le jour Julien pour la date Julienne donnée, sous la forme d'un entier.

Voir aussi

  • jdtojulian() - Convertit le nombre de jours du calendrier Julien en date du calendrier Julien
  • cal_to_jd() - Convertit un calendrier en nombre de jours Julien



unixtojd

(PHP 4, PHP 5)

unixtojdConvertit un timestamp UNIX en un jour Julien

Description

int unixtojd ([ int $timestamp = time() ] )

Retourne le jour Julien du timestamp UNIX timestamp (nombre de secondes depuis le 1/1/1970), ou pour le jour courant si timestamp est omis.

Liste de paramètres

timestamp

Un timestamp unix à convertir.

Valeurs de retour

Un nombre de jours Julien, sous la forme d'un entier.

Voir aussi

  • jdtounix() - Convertit un jour Julien en timestamp UNIX


Sommaire

  • cal_days_in_month — Retourne le nombre de jours dans un mois, pour une année et un calendrier donné
  • cal_from_jd — Convertit le nombre de jours Julien en un calendrier spécifique
  • cal_info — Retourne des détails sur un calendrier
  • cal_to_jd — Convertit un calendrier en nombre de jours Julien
  • easter_date — Retourne un timestamp UNIX pour Pâques, à minuit pour une année donnée
  • easter_days — Retourne le nombre de jours entre le 21 Mars et Pâques, pour une année donnée
  • FrenchToJD — Convertit une date du calendrier français républicain en nombre de jours du calendrier Julien
  • GregorianToJD — Convertit une date grégorienne en nombre de jours du calendrier Julien
  • JDDayOfWeek — Retourne le numéro du jour de la semaine
  • JDMonthName — Retourne le nom du mois
  • JDToFrench — Convertit le nombre de jours du calendrier Julien en date du calendrier français républicain
  • JDToGregorian — Convertit le nombre de jours du calendrier Julien en date grégorienne
  • jdtojewish — Convertit le nombre de jours du calendrier Julien en date du calendrier juif
  • JDToJulian — Convertit le nombre de jours du calendrier Julien en date du calendrier Julien
  • jdtounix — Convertit un jour Julien en timestamp UNIX
  • JewishToJD — Convertit une date du calendrier Juif en nombre de jours du calendrier Julien
  • JulianToJD — Convertit un jours du calendrier Julien en un nombre de jours du calendrier Julien
  • unixtojd — Convertit un timestamp UNIX en un jour Julien



Date et Heure


Introduction

Ces fonctions vous permettent de récupérer la date et l'heure depuis le serveur où le script PHP s'exécute. Vous pouvez utiliser ces fonctions pour formater la date et l'heure de différentes façons.

Les informations quant à la date et l'heure sont stockées en interne comme nombre sur 64 bits, aussi, toutes les dates imaginables (y compris les dates négatives) sont supportées. L'intervalle va de 292 billions d'années dans le passé, et la même valeur dans le futur.

Note: Gardez à l'esprit que ces fonctions sont indépendantes de la configuration locale de votre système. Assurez-vous donc de prendre en considération l'heure d'été (en utilisant e.g. $date = strtotime('+7 days', $date) et non $date += 7*24*60*60) ainsi que les années bissextiles lorsque vous utilisez ces fonctions.

Note: Les fuseaux horaires référencés dans cette section peuvent être trouvés dans la section Liste des Fuseaux Horaires Supportés.



Installation/Configuration

Sommaire


Pré-requis

Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible.



Installation

Il n'y pas d'installation nécessaire pour utiliser ces fonctions, elles font parties du coeur de PHP.

Note: Récupération de la dernière base de données des fuseaux horaires

La dernière version de la base de données des fuseaux horaires peut être installée via le paquet PECL » timezonedb.

Note: Support DateTime expérimental en PHP 5.1.x

Bien que la classe DateTime (et les fonctions connexes) soit activée par défaut depuis PHP 5.2.0, il est possible d'ajouter un support expérimental dans PHP 5.1.x en utilisant le drapeau suivant lors de la compilation : CFLAGS=-DEXPERIMENTAL_DATE_SUPPORT=1



Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Options de configuration pour les dates et heures
Nom Défaut Modifiable Historique
date.default_latitude "31.7667" PHP_INI_ALL Disponible depuis PHP 5.0.0.
date.default_longitude "35.2333" PHP_INI_ALL Disponible depuis PHP 5.0.0.
date.sunrise_zenith "90.583333" PHP_INI_ALL Disponible depuis PHP 5.0.0.
date.sunset_zenith "90.583333" PHP_INI_ALL Disponible depuis PHP 5.0.0.
date.timezone "" PHP_INI_ALL Disponible depuis PHP 5.1.0.
Pour plus de détails sur les modes PHP_INI_*, reportez-vous à Où une directive de configuration peut être modifiée.

Voici un éclaircissement sur l'utilisation des directives de configuration.

date.default_latitude float

La latitude par défaut.

date.default_longitude float

La longitude par défaut.

date.sunrise_zenith float

L'heure de lever du soleil par défaut.

date.sunset_zenith float

L'heure du coucher du soleil par défaut.

date.timezone string

Le décalage horaire par défaut utilisé par toutes les fonctions date/heure. Avant PHP 5.3.0, ceci ne fonctionnait que si la variable d'environnement TZ n'est pas définie. L'ordre des décalages horaires utilisés si aucun n'est spécifié est explicitement décrit dans la page de documentation sur la fonction date_default_timezone_get(). Voir Liste des Fuseaux Horaires Supportés pour une liste complète des décalages horaires supportés.

Note: Les quatre premières options de configuration sont actuellement utilisées uniquement par les fonctions date_sunrise() et date_sunset().



Types de ressources

Cette extension ne définit aucune ressource.




Constantes pré-définies

Les constantes DATE_ sont définies depuis PHP 5.1.1 et offrent une représentation standard des dates, qui peut être utilisée avec toutes les fonctions de formatage de date (comme date()).

Les constantes suivantes existent depuis PHP 5.1.2 et spécifient un format retourné par les fonctions date_sunrise() et date_sunset().

SUNFUNCS_RET_TIMESTAMP (entier)
Timestamp
SUNFUNCS_RET_STRING (entier)
Heures:minutes (exemple: 08:02)
SUNFUNCS_RET_DOUBLE (entier)
Heures en tant que nombre à point flottant (exemple 8.75)


La classe DateTime

(PHP 5 >= 5.2.0)

Introduction

Représentation d'une date et heure.

Synopsis de la classe

DateTime {
/* Constantes */
const string ATOM = "Y-m-d\TH:i:sP" ;
const string COOKIE = "l, d-M-y H:i:s T" ;
const string ISO8601 = "Y-m-d\TH:i:sO" ;
const string RFC822 = "D, d M y H:i:s O" ;
const string RFC850 = "l, d-M-y H:i:s T" ;
const string RFC1036 = "D, d M y H:i:s O" ;
const string RFC1123 = "D, d M Y H:i:s O" ;
const string RFC2822 = "D, d M Y H:i:s O" ;
const string RFC3339 = "Y-m-d\TH:i:sP" ;
const string RSS = "D, d M Y H:i:s O" ;
const string W3C = "Y-m-d\TH:i:sP" ;
/* Méthodes */
public __construct ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )
public DateTime add ( DateInterval $interval )
public static DateTime createFromFormat ( string $format , string $time [, DateTimeZone $timezone ] )
public DateInterval diff ( DateTime $datetime2 [, bool $absolute = false ] )
public string format ( string $format )
public static array getLastErrors ( void )
public int getOffset ( void )
public int getTimestamp ( void )
public DateTimeZone getTimezone ( void )
public DateTime modify ( string $modify )
public static DateTime __set_state ( array $array )
public DateTime setDate ( int $year , int $month , int $day )
public DateTime setISODate ( int $year , int $week [, int $day = 1 ] )
public DateTime setTime ( int $hour , int $minute [, int $second = 0 ] )
public DateTime setTimestamp ( int $unixtimestamp )
public DateTime setTimezone ( DateTimeZone $timezone )
public DateTime sub ( DateInterval $interval )
public DateTime __wakeup ( void )
}

Constantes pré-définies

DateTime::ATOM
DATE_ATOM
Atom (exemple : 2005-08-15T15:52:01+00:00)
DateTime::COOKIE
DATE_COOKIE
Cookies HTTP (exemple : Monday, 15-Aug-05 15:52:01 UTC)
DateTime::ISO8601
DATE_ISO8601
ISO-8601 (exemple : 2005-08-15T15:52:01+0000)
DateTime::RFC822
DATE_RFC822
RFC 822 (exemple : Mon, 15 Aug 05 15:52:01 +0000)
DateTime::RFC850
DATE_RFC850
RFC 850 (exemple : Monday, 15-Aug-05 15:52:01 UTC)
DateTime::RFC1036
DATE_RFC1036
RFC 1036 (exemple : Mon, 15 Aug 05 15:52:01 +0000)
DateTime::RFC1123
DATE_RFC1123
RFC 1123 (exemple : Mon, 15 Aug 2005 15:52:01 +0000)
DateTime::RFC2822
DATE_RFC2822
RFC 2822 (exemple : Mon, 15 Aug 2005 15:52:01 +0000)
DateTime::RFC3339
DATE_RFC3339
Identique à DATE_ATOM (Depuis PHP 5.1.3)
DateTime::RSS
DATE_RSS
RSS (exemple : Mon, 15 Aug 2005 15:52:01 +0000)
DateTime::W3C
DATE_W3C
World Wide Web Consortium (exemple : 2005-08-15T15:52:01+00:00)

Historique

Version Description
5.2.2 La comparaison d'objet DateTime avec les opérateurs de comparaison fonctionne maintenant normalement. Dans les versions antérieures, tous les objets DateTime étaient considérés comme égaux (en utilisant ==).


DateTime::add

date_add

(PHP 5 >= 5.3.0)

DateTime::add -- date_add Ajoute une durée à un objet DateTime

Description

Style orienté objet

public DateTime DateTime::add ( DateInterval $interval )

Style procédural

DateTime date_add ( DateTime $object , DateInterval $interval )

Ajoute la durée de l'objet DateInterval à l'objet DateTime.

Liste de paramètres

object

Style procédural uniquement : Un objet DateTime retourné par la fonction date_create(). Cette fonction modifie cet objet.

interval

Un objet DateInterval

Valeurs de retour

Retourne l'objet DateTime pour chainer les méthodes ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec DateTime::add()

Style orienté objet

<?php
$date 
= new DateTime('2000-01-01');
$date->add(new DateInterval('P10D'));
echo 
$date->format('Y-m-d') . "\n";
?>

Style procédural

<?php
$date 
date_create('2000-01-01');
date_add($datedate_interval_create_from_date_string('10 days'));
echo 
date_format($date'Y-m-d');
?>

L'exemple ci-dessus va afficher :

2000-01-11

Exemple #2 Autres exemples avec DateTime::add()

<?php
$date 
= new DateTime('2000-01-01');
$date->add(new DateInterval('PT10H30S'));
echo 
$date->format('Y-m-d H:i:s') . "\n";

$date = new DateTime('2000-01-01');
$date->add(new DateInterval('P7Y5M4DT4H3M2S'));
echo 
$date->format('Y-m-d H:i:s') . "\n";
?>

L'exemple ci-dessus va afficher :

2000-01-01 10:00:30
2007-06-05 04:03:02

Exemple #3 Attention à l'ajout de mois

<?php
$date 
= new DateTime('2000-12-31');
$interval = new DateInterval('P1M');

$date->add($interval);
echo 
$date->format('Y-m-d') . "\n";

$date->add($interval);
echo 
$date->format('Y-m-d') . "\n";
?>

L'exemple ci-dessus va afficher :

2001-01-31
2001-03-03

Notes

DateTime::modify() est une alternative pouvant être utilisée avec PHP 5.2.

Voir aussi



DateTime::__construct

date_create

(PHP 5 >= 5.2.0)

DateTime::__construct -- date_createRetourne un nouvel objet DateTime

Description

Style orienté objet

public DateTime::__construct() ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )

Style procédural

DateTime date_create ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )

Retourne un nouvel objet DateTime.

Liste de paramètres

time

Une chaîne date/heure. Les formats valides sont expliqués dans la documentation sur les formats Date et Heure.

Passez NULL ici pour obtenir le temps courant en utilisant le paramètre $timezone.

timezone

Un objet DateTimeZone object representant le fuseau horaire.

Si$timezone est omis, le fuseau horaire actuel sera utilisé.

Note:

Le paramètre $timezone et le fuseau horaire actuels sont ignorés lorsque paramètre $time est un timestamp UNIX (e.g. @946684800) ou précise un fuseau (e.g. 2010-01-28T15:00:00+02:00).

Valeurs de retour

Retourne une nouvelle instance DateTime. Style procédural retourne FALSE en cas d'erreur.

Erreurs / Exceptions

Émet un Exception en cas d'erreur.

Historique

Version Description
5.3.0 Si une date invalide est précisée, une exception est maintenant levée. Auparavant, une erreur était émise.

Exemples

Exemple #1 Exemple avec DateTime::__construct()

Style orienté objet

<?php
try {
    
$date = new DateTime('2000-01-01');
} catch (
Exception $e) {
    echo 
$e->getMessage();
    exit(
1);
}

echo 
$date->format('Y-m-d');
?>

Style procédural

<?php
$date 
date_create('2000-01-01');
if (!
$date) {
    
$e date_get_last_errors();
    foreach (
$e['errors'] as $error) {
        echo 
"$error\n";
    }
    exit(
1);
}

echo 
date_format($date'Y-m-d');
?>

Les exemples ci-dessus vont afficher :

2000-01-01

Exemple #2 Autres exemples avec DateTime::__construct()

<?php
// date/time spécifiés dans le fuseau de votre machine
$date = new DateTime('2000-01-01');
echo 
$date->format('Y-m-d H:i:sP') . "\n";

// date/time dans un fuseau précis.
$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo 
$date->format('Y-m-d H:i:sP') . "\n";

// date/time courants dans le fuseau de votre machine
$date = new DateTime();
echo 
$date->format('Y-m-d H:i:sP') . "\n";

// date/time courants dans un fuseau précis.
$date = new DateTime(null, new DateTimeZone('Pacific/Nauru'));
echo 
$date->format('Y-m-d H:i:sP') . "\n";

// Utilisation d'un timestamp Unix. Notez que le résultat est dans le fuseau UTC.
$date = new DateTime('@946684800');
echo 
$date->format('Y-m-d H:i:sP') . "\n";

// Valeur non existante
$date = new DateTime('2000-02-30');
echo 
$date->format('Y-m-d H:i:sP') . "\n";
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

2000-01-01 00:00:00-05:00
2000-01-01 00:00:00+12:00
2010-04-24 10:24:16-04:00
2010-04-25 02:24:16+12:00
2000-01-01 00:00:00+00:00
2000-03-01 00:00:00-05:00

Voir aussi



DateTime::createFromFormat

date_create_from_format

(PHP 5 >= 5.3.0)

DateTime::createFromFormat -- date_create_from_formatRetourne un nouvel objet DateTime formaté

Description

Style orienté objet

public static DateTime DateTime::createFromFormat ( string $format , string $time [, DateTimeZone $timezone ] )

Style procédural

DateTime date_create_from_format ( string $format , string $time [, DateTimeZone $timezone ] )

Retourne un nouvel objet DateTime formaté.

Liste de paramètres

format

Le format à utiliser. Voir les options de formattage ci-dessous. Dans le plus part des cas, les mêmes lettres que pour la fonction date() peuvent être utilisées.

Les caractères suivants sont reconnus pour le paramètre format
format character Description Exemple de valeurs analysées
Jour --- ---
d et j Jour du mois, sur 2 chiffres, avec ou sans le zéro initial 01 à 31 ou 1 à 31
D and l Une représentation textuelle du jour De Mon jusqu'à Sun ou de Sunday jusqu'à Saturday
S Préfixe anglais du jour du mois, sur 2 caractères. Il sera ignoré lors de l'analyse. st, nd, rd ou th.
z Le jour de l'année (en commençant à 0) 0 through 365
Mois --- ---
F et M Une représentation textuelle du mois, comme January ou Sept De January à December ou de Jan à Dec
m et n Une représentation numérique du mois, avec ou sans zéro initial De 01 à 12 ou de 1 à 12
Année --- ---
Y Une représentation complète de l'année, sur 4 chiffres Exemples : 1999 ou 2003
y Une reprensation partielle de l'année, sur 2 chiffres Exemples : 99 ou 03
Heure --- ---
a et A Ante meridiem et Post meridiem am ou pm
g et h L'heure au format 12-heures, avec ou sans zéro initial De 1 à 12 ou de 01 à 12
G et H L'heure au format 24-heures, avec ou sans zéro initial De 0 à 23 ou de 00 à 23
i Les minutes, avec un zéro initial De 00 à 59
s Les secondes, avec un zéro initial De 00 à 59
u Les microsecondes (jusqu'à 6 chiffres) Exemple : 45, 654321
Fuseau horaire --- ---
e, O, P et T L'identifiant du fuseau horaire, ou la différence en heures avec UTC, ou la différence avec UTC avec deux points (:) entre les heures et les minutes, ou l'abbréviation du fuseau horaire Exemples : UTC, GMT, Atlantic/Azores ou +0200 ou +02:00 ou EST, MDT
Date/heure complète --- ---
U Le nombre de secondes depuis l'époque Unix (January 1 1970 00:00:00 GMT) Exemple : 1292177455
Espace et séparateurs --- ---
(espace) Un espace ou une tabulation Exemple :
# Un des symboles de séparation suivants : ;, :, /, ., ,, -, ( ou ) Exemple : /
;, :, /, ., ,, -, ( ou ) Le caractère spécifié. Exemple : -
? Un octet aléatoire Exemple : ^ (Be aware that for UTF-8 characracters you might need more than one ?. In this case, using * is probably what you want instead)
* Octets aléatoires jusqu'au prochain séparateur ou chiffre Exemple : * dans Y-*-d avec la chaîne 2009-aWord-08 trouvera la chaîne aWord
! Réinitialise tous les champs (année, mois, jour, heure, minute, seconde ainsi que les informations quant au fuseau horaire) à l'heure de l'époque Unix Sans le caractère !, tous les champs seront définis à la date et heure courante.
| Réinitialise tous les champs (année, mois, jour, heure, minute, seconde ainsi que les informations quant au fuseau horaire) à l'heure de l'époque Unix s'ils n'ont pas encore été analysés Y-m-d| définira l'année, le mois et le jour avec les informations trouvées dans la chaîne analysée, mais aussi l'heure, les minutes et les secondes à 0.
+ Si le spécifieur de format est présent, les données restantes de la chaîne ne causeront pas une erreur, mais une alerte Utilisez la méthode DateTime::getLastErrors() pour identifier la présence de données restantes.

Les caractères non reconnus dans le format feront échoués l'analyse et un message d'erreur sera ajouté à la structure retournée. Vous pouvez utiliser la méthode DateTime::getLastErrors() pour récupérer les messages d'erreur.

Si format n'est pas composé du caractère ! alors les valeurs de temps générées qui sont absentes de format prendront comme valeur le temps système.

Si format contient le caractère !, alors les valeurs de temps générées qui sont absentes de format ainsi que les valeurs situées à gauche de ! prendront des valeurs mesurées depuis Unix epoch.

Le début de l'époque Unix est le 01/01/1970 à 00:00:00 UTC.

time

Chaîne représentant l'heure.

timezone

Un objet DateTimeZone représentant le fuseau horaire désiré.

Si timezone est omis et time ne contient pas de fuseau, le fuseau courant sera utilisé.

Note:

Le paramètre timezone et le fuseau courant sont ignorés lorsque le paramètre time contient un timestamp (par ex 946684800) ou précise un fuseau (par ex 2010-01-28T15:00:00+02:00).

Valeurs de retour

Retourne un nouvel objet DateTime ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec DateTime::createFromFormat()

Style orienté objet

<?php
$date 
DateTime::createFromFormat('j-M-Y''15-Feb-2009');
echo 
$date->format('Y-m-d');
?>

Style procédural

<?php
$date 
date_create_from_format('j-M-Y''15-Feb-2009');
echo 
date_format($date'Y-m-d');
?>

Les exemples ci-dessus vont afficher :

2009-02-15

Exemple #2 Autres exemples avec DateTime::createFromFormat()

<?php
echo 'Date courante: ' date('Y-m-d H:i:s') . "\n";

$format 'Y-m-d';
$date DateTime::createFromFormat($format'2009-02-15');
echo 
"Format: $format; " $date->format('Y-m-d H:i:s') . "\n";

$format 'Y-m-d H:i:s';
$date DateTime::createFromFormat($format'2009-02-15 15:16:17');
echo 
"Format: $format; " $date->format('Y-m-d H:i:s') . "\n";

$format 'Y-m-!d H:i:s';
$date DateTime::createFromFormat($format'2009-02-15 15:16:17');
echo 
"Format: $format; " $date->format('Y-m-d H:i:s') . "\n";

$format '!d';
$date DateTime::createFromFormat($format'15');
echo 
"Format: $format; " $date->format('Y-m-d H:i:s') . "\n";
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Date courante: 2010-04-23 10:29:35
Format: Y-m-d; 2009-02-15 10:29:35
Format: Y-m-d H:i:s; 2009-02-15 15:16:17
Format: Y-m-!d H:i:s; 1970-01-15 15:16:17
Format: !d; 1970-01-15 00:00:00

Voir aussi



DateTime::diff

date_diff

(PHP 5 >= 5.3.0)

DateTime::diff -- date_diffRetourne la différence entre deux objets DateTime

Description

Style orienté objet

public DateInterval DateTime::diff ( DateTime $datetime2 [, bool $absolute = false ] )

Style procédural

DateInterval date_diff ( DateTime $datetime1 , DateTime $datetime2 [, bool $absolute = false ] )

Retourne la différence entre deux objets DateTime.

Liste de paramètres

datetime

La date à comparer.

absolute

Retourner la différence absolue ou non.

Valeurs de retour

L'objet DateInterval représentant la différence entre les 2 dates ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec DateTime::diff()

Style orienté objet

<?php
$datetime1 
= new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval $datetime1->diff($datetime2);
echo 
$interval->format('%R%a days');
?>

Style procédural

<?php
$datetime1 
date_create('2009-10-11');
$datetime2 date_create('2009-10-13');
$interval date_diff($datetime1$datetime2);
echo 
$interval->format('%R%a days');
?>

L'exemple ci-dessus va afficher :

+2 days

Exemple #2 Comparaison de dates DateTime

Note:

Depuis PHP 5.2.2, les objets DateTime peuvent être comparés grâce aux opérateurs de comparaison.

<?php
$date1 
= new DateTime("now");
$date2 = new DateTime("tomorrow");

var_dump($date1 == $date2);
var_dump($date1 $date2);
var_dump($date1 $date2);
?>

L'exemple ci-dessus va afficher :

bool(false)
bool(true)
bool(false)

Voir aussi



DateTime::format

date_format

(PHP 5 >= 5.2.0)

DateTime::format -- date_formatRetourne la date au format demandé

Description

Style orienté objet

public string DateTime::format ( string $format )

Style procédural

string date_format ( DateTime $object , string $format )

Retourne une date formattée selon un format donné.

Liste de paramètres

object

Seulement en style procédural : un objet DateTime retourné par date_create()

format

Format accepté par date().

Valeurs de retour

Retourne la date formatée, en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec DateTime::format()

Style orienté objet

<?php
$date 
= new DateTime('2000-01-01');
echo 
$date->format('Y-m-d H:i:s');
?>

Style procédural

<?php
$date 
date_create('2000-01-01');
echo 
date_format($date'Y-m-d H:i:s');
?>
?>

L'exemple ci-dessus va afficher :

2000-01-01 00:00:00

Notes

Cette méthode n'utilise pas les locales. Toute sortie est en anglais.

Voir aussi

  • date() - Formate une date/heure locale


DateTime::getLastErrors

date_get_last_errors

(PHP 5 >= 5.3.0)

DateTime::getLastErrors -- date_get_last_errorsRetourne les dernières erreurs et alertes

Description

Style orienté objet

public static array DateTime::getLastErrors ( void )

Style procédural

array date_get_last_errors ( void )

Retourne un tableau contenant les dernières erreurs et alertes obtenues lors de l'analyse de la chaîne de date.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne un tableau contenant les erreurs et alertes.

Exemples

Exemple #1 Exemple avec DateTime::getLastErrors()

Style orienté objet

<?php
try {
    
$date = new DateTime('asdfasdf');
} catch (
Exception $e) {
    
// Juste pour l'exemple...
    
print_r(DateTime::getLastErrors());

    
// Manière orientée objets de gérer les erreurs (exceptions)
    // echo $e->getMessage();
}
?>

Style procédural

<?php
$date 
date_create('asdfasdf');
print_r(date_get_last_errors());
?>

Les exemples ci-dessus vont afficher :

Array
(
    [warning_count] => 1
    [warnings] => Array
        (
            [6] => Double timezone specification
        )

    [error_count] => 1
    [errors] => Array
        (
            [0] => The timezone could not be found in the database
        )

)


DateTime::getOffset

date_offset_get

(PHP 5 >= 5.2.0)

DateTime::getOffset -- date_offset_getRetourne le décalage horaire

Description

Style orienté objet

public int DateTime::getOffset ( void )

Style procédural

int date_offset_get ( DateTime $object )

Retourne le décalage horaire.

Liste de paramètres

object

Seulement en style procédural : un objet DateTime retourné par date_create()

Valeurs de retour

Retourne le décalage horaire en secondes depuis UTC en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec DateTime::getOffset()

Style orienté objet

<?php
$winter 
= new DateTime('2010-12-21', new DateTimeZone('America/New_York'));
$summer = new DateTime('2008-06-21', new DateTimeZone('America/New_York'));

echo 
$winter->getOffset() . "\n";
echo 
$summer->getOffset() . "\n";
?>

Style procédural

<?php
$winter 
date_create('2010-12-21'timezone_open('America/New_York'));
$summer date_create('2008-06-21'timezone_open('America/New_York'));

echo 
date_offset_get($winter) . "\n";
echo 
date_offset_get($summer) . "\n";
?>

Les exemples ci-dessus vont afficher :

-18000
-14400

Note: -18000 = -5 heures, -14400 = -4 heures.



DateTime::getTimestamp

date_timestamp_get

(PHP 5 >= 5.3.0)

DateTime::getTimestamp -- date_timestamp_getLit le timestamp Unix

Description

Style orienté objet

public int DateTime::getTimestamp ( void )

Style procédural

int date_timestamp_get ( DateTime $object )

Lit le timestamp Unix.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne le timestamp Unix représentant la date.

Exemples

Exemple #1 Exemple avec DateTime::getTimestamp()

Style orienté objet

<?php
$date 
= new DateTime();
echo 
$date->getTimestamp();
?>

Style procédural

<?php
$date 
date_create();
echo 
date_timestamp_get($date);
?>

Les exemples ci-dessus vont afficher quelque chose de similaire à :

1272509157

Notes

Utiliser U comme paramètre de DateTime::format() est une alternative proposée pour PHP 5.2.

Voir aussi



DateTime::getTimezone

date_timezone_get

(PHP 5 >= 5.2.0)

DateTime::getTimezone -- date_timezone_getLit le fuseau horaire d'un objet DateTime

Description

Style orienté objet

public DateTimeZone DateTime::getTimezone ( void )

Style procédural

Retourne le fuseau relatif à un DateTime donné.

Liste de paramètres

object

Seulement en style procédural : un objet DateTime retourné par date_create()

Valeurs de retour

Retourne l'objet DateTimeZone en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec DateTime::getTimezone()

Style orienté objet

<?php
$date 
= new DateTime(null, new DateTimeZone('Europe/London'));
$tz $date->getTimezone();
echo 
$tz->getName();
?>

Style procédural

<?php
$date 
date_create(nulltimezone_open('Europe/London'));
$tz date_timezone_get($date);
echo 
timezone_name_get($tz);
?>

L'exemple ci-dessus va afficher :

Europe/London

Voir aussi



DateTime::modify

date_modify

(PHP 5 >= 5.2.0)

DateTime::modify -- date_modifyModifie le timestamp

Description

Style orienté objet

public DateTime DateTime::modify ( string $modify )

Style procédural

DateTime date_modify ( DateTime $object , string $modify )

Modifie le timestamp d'un objet DateTime en l'incrémentant ou le décrémentant dans un format acceptable par strtotime().

Liste de paramètres

object

Style procédural uniquement : Un objet DateTime retourné par la fonction date_create(). Cette fonction modifie cet objet.

modify

Une chaîne date/heure. Les formats valides sont expliqués dans la documentation sur les formats Date et Heure.

Valeurs de retour

Retourne l'objet DateTime pour chainer les méthodes ou FALSE si une erreur survient.

Historique

Version Description
5.3.6 Les requêtes date/heure absolues prennent maintenant effets. Auparavant, seules les parties relatives étaient utilisées.
5.3.0Changement de valeur de retour de NULL à DateTime en cas de succès.

Exemples

Exemple #1 Exemple avec DateTime::modify()

Style orienté objet

<?php
$date 
= new DateTime('2006-12-12');
$date->modify('+1 day');
echo 
$date->format('Y-m-d');
?>

Style procédural

<?php
$date 
date_create('2006-12-12');
date_modify($date'+1 day');
echo 
date_format($date'Y-m-d');
?>

Les exemples ci-dessus vont afficher :

2006-12-13

Exemple #2 Méfiez-vous lors de l'ajout ou la soustraction de mois

<?php
$date 
= new DateTime('2000-12-31');

$date->modify('+1 month');
echo 
$date->format('Y-m-d') . "\n";

$date->modify('+1 month');
echo 
$date->format('Y-m-d') . "\n";
?>

L'exemple ci-dessus va afficher :

2001-01-31
2001-03-03

Voir aussi



DateTime::__set_state

(PHP 5 >= 5.2.0)

DateTime::__set_stateLe gestionnaire __set_state

Description

public static DateTime DateTime::__set_state ( array $array )

Le gestionnaire __set_state().

Liste de paramètres

array

Le tableau d'initialisation.

Valeurs de retour

Retourne une nouvelle instance de l'objet DateTime.



DateTime::setDate

date_date_set

(PHP 5 >= 5.2.0)

DateTime::setDate -- date_date_setAssigne la date

Description

Style orienté objet

public DateTime DateTime::setDate ( int $year , int $month , int $day )

Style procédural

DateTime date_date_set ( DateTime $object , int $year , int $month , int $day )

Assigne la date courante de l'objet DateTime à une nouvelle date.

Liste de paramètres

object

Style procédural uniquement : Un objet DateTime retourné par la fonction date_create(). Cette fonction modifie cet objet.

year

Année de la date.

month

Mois de la date.

day

Jour de la date.

Valeurs de retour

Retourne l'objet DateTime pour chainer les méthodes ou FALSE si une erreur survient.

Historique

Version Description
5.3.0Changement de valeur de retour de NULL à DateTime en cas de succès.

Exemples

Exemple #1 Exemple avec DateTime::setDate()

Style orienté objet

<?php
$date 
= new DateTime();
$date->setDate(200123);
echo 
$date->format('Y-m-d');
?>

Style procédural

<?php
$date 
date_create();
date_date_set($date200123);
echo 
date_format($date'Y-m-d');
?>

Les exemples ci-dessus vont afficher :

2001-02-03

Exemple #2 Les valeurs qui dépassent leurs bornes sont ajoutées à leur parent

<?php
$date 
= new DateTime();

$date->setDate(2001228);
echo 
$date->format('Y-m-d') . "\n";

$date->setDate(2001229);
echo 
$date->format('Y-m-d') . "\n";

$date->setDate(2001143);
echo 
$date->format('Y-m-d') . "\n";
?>

L'exemple ci-dessus va afficher :

2001-02-28
2001-03-01
2002-02-03

Voir aussi



DateTime::setISODate

date_isodate_set

(PHP 5 >= 5.2.0)

DateTime::setISODate -- date_isodate_setConfigure une date ISO

Description

Style orienté objet

public DateTime DateTime::setISODate ( int $year , int $week [, int $day = 1 ] )

Style procédural

DateTime date_isodate_set ( DateTime $object , int $year , int $week [, int $day = 1 ] )

Configure une date au format ISO 8601 : en utilisant des décalages de semaines et de jours, au lieu de dates spécifiques.

Liste de paramètres

object

Style procédural uniquement : Un objet DateTime retourné par la fonction date_create(). Cette fonction modifie cet objet.

year

L'année de la date.

week

Le numéro de la semaine.

day

Décalage par rapport au premier jour de la semaine.

Valeurs de retour

Retourne l'objet DateTime pour chainer les méthodes ou FALSE si une erreur survient.

Historique

Version Description
5.3.0Changement de valeur de retour de NULL à DateTime en cas de succès.

Exemples

Exemple #1 Exemple avec DateTime::setISODate()

Style orienté objet

<?php
$date 
= new DateTime();

$date->setISODate(20082);
echo 
$date->format('Y-m-d') . "\n";

$date->setISODate(200827);
echo 
$date->format('Y-m-d') . "\n";
?>

Style procédural

<?php
$date 
date_create();

date_isodate_set($date20082);
echo 
date_format($date'Y-m-d') . "\n";

date_isodate_set($date200827);
echo 
date_format($date'Y-m-d') . "\n";
?>

Les exemples ci-dessus vont afficher :

2008-01-07
2008-01-13

Exemple #2 Les valeurs qui excèdent leur bornes s'ajoutent à leur parent

<?php
$date 
= new DateTime();

$date->setISODate(200827);
echo 
$date->format('Y-m-d') . "\n";

$date->setISODate(200828);
echo 
$date->format('Y-m-d') . "\n";

$date->setISODate(2008537);
echo 
$date->format('Y-m-d') . "\n";
?>

L'exemple ci-dessus va afficher :

2008-01-13
2008-01-14
2009-01-04

Exemple #3 Calcul du mois dans lequel est une semaine

<?php
$date 
= new DateTime();
$date->setISODate(200814);
echo 
$date->format('n');
?>

Les exemples ci-dessus vont afficher :

3

Voir aussi



DateTime::setTime

date_time_set

(PHP 5 >= 5.2.0)

DateTime::setTime -- date_time_setAssigne l'heure

Description

Style orienté objet

public DateTime DateTime::setTime ( int $hour , int $minute [, int $second = 0 ] )

Style procédural

DateTime date_time_set ( DateTime $object , int $hour , int $minute [, int $second = 0 ] )

Change le temps dans l'objet DateTime.

Liste de paramètres

object

Style procédural uniquement : Un objet DateTime retourné par la fonction date_create(). Cette fonction modifie cet objet.

hour

Heure du moment.

minute

Minute du moment.

second

Seconde du moment.

Valeurs de retour

Retourne l'objet DateTime pour chainer les méthodes ou FALSE si une erreur survient.

Historique

Version Description
5.3.0Changement de valeur de retour de NULL à DateTime en cas de succès.

Exemples

Exemple #1 Exemple avec DateTime::setTime()

Style orienté objet

<?php
$date 
= new DateTime('2000-01-01');

$date->setTime(1455);
echo 
$date->format('Y-m-d H:i:s') . "\n";

$date->setTime(145524);
echo 
$date->format('Y-m-d H:i:s') . "\n";

?>

Style procédural

<?php
$date 
date_create('2001-01-01');

date_time_set($date1455);
echo 
date_format($date'Y-m-d H:i:s') . "\n";

date_time_set($date145524);
echo 
date_format($date'Y-m-d H:i:s') . "\n";
?>

Les exemples ci-dessus vont afficher quelque chose de similaire à :

2000-01-01 14:55:00
2000-01-01 14:55:24

Exemple #2 Les valeurs qui dépassent leur borne sont ajoutées à leur parent

<?php
$date 
= new DateTime('2001-01-01');

$date->setTime(145524);
echo 
$date->format('Y-m-d H:i:s') . "\n";

$date->setTime(145565);
echo 
$date->format('Y-m-d H:i:s') . "\n";

$date->setTime(146524);
echo 
$date->format('Y-m-d H:i:s') . "\n";

$date->setTime(255524);
echo 
$date->format('Y-m-d H:i:s') . "\n";
?>

L'exemple ci-dessus va afficher :

2001-01-01 14:55:24
2001-01-01 14:56:05
2001-01-01 15:05:24
2001-01-02 01:55:24

Voir aussi



DateTime::setTimestamp

date_timestamp_set

(PHP 5 >= 5.3.0)

DateTime::setTimestamp -- date_timestamp_setAssigne la date et l'heure à l'aide d'un timestamp Unix

Description

Style orienté objet

public DateTime DateTime::setTimestamp ( int $unixtimestamp )

Style procédural

DateTime date_timestamp_set ( DateTime $object , int $unixtimestamp )

Assigne la date et l'heure à l'aide d'un timestamp Unix.

Liste de paramètres

object

Style procédural uniquement : Un objet DateTime retourné par la fonction date_create(). Cette fonction modifie cet objet.

unixtimestamp

Timestamp Unix représentant la date et l'heure.

Valeurs de retour

Retourne l'objet DateTime pour chainer les méthodes ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec DateTime::setTimestamp()

Style orienté objet

<?php
$date 
= new DateTime();
echo 
$date->format('U = Y-m-d H:i:s') . "\n";

$date->setTimestamp(1171502725);
echo 
$date->format('U = Y-m-d H:i:s') . "\n";
?>

Style procédural

<?php
$date 
date_create();
echo 
date_format($date'U = Y-m-d H:i:s') . "\n";

date_timestamp_set($date1171502725);
echo 
date_format($date'U = Y-m-d H:i:s') . "\n";
?>

Les exemples ci-dessus vont afficher quelque chose de similaire à :

1272508903 = 2010-04-28 22:41:43
1171502725 = 2007-02-14 20:25:25

Notes

Pour PHP 5.2, une alternative est de passer un timestamp Unix à DateTime::__construct() comme montré dans l'exemple suivant.

Exemple #2 DateTime::setTimestamp() alternative pour PHP 5.2

<?php
$ts 
1171502725;
$date = new DateTime("@$ts");
echo 
$date->format('U = Y-m-d H:i:s') . "\n";
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

1171502725 = 2007-02-14 20:25:25

Voir aussi



DateTime::setTimezone

date_timezone_set

(PHP 5 >= 5.2.0)

DateTime::setTimezone -- date_timezone_setConfigure le fuseau horaire de l'objet DateTime

Description

Style orienté objet

public DateTime DateTime::setTimezone ( DateTimeZone $timezone )

Style procédural

Liste de paramètres

object

Style procédural uniquement : Un objet DateTime retourné par la fonction date_create(). Cette fonction modifie cet objet.

timezone

Un objet DateTimeZone représentant le fuseau horaire désiré.

Valeurs de retour

Retourne l'objet DateTime pour chainer les méthodes ou FALSE si une erreur survient.

Historique

Version Description
5.3.0Changement de valeur de retour de NULL à DateTime en cas de succès.

Exemples

Exemple #1 Exemple avec DateTime::setTimeZone()

Style orienté objet

<?php
$date 
= new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo 
$date->format('Y-m-d H:i:sP') . "\n";

$date->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo 
$date->format('Y-m-d H:i:sP') . "\n";
?>

Style procédural

<?php
$date 
date_create('2000-01-01'timezone_open('Pacific/Nauru'));
echo 
date_format($date'Y-m-d H:i:sP') . "\n";

date_timezone_set($datetimezone_open('Pacific/Chatham'));
echo 
date_format($date'Y-m-d H:i:sP') . "\n";
?>

L'exemple ci-dessus va afficher :

2000-01-01 00:00:00+12:00
2000-01-01 01:45:00+13:45

Voir aussi



DateTime::sub

date_sub

(PHP 5 >= 5.3.0)

DateTime::sub -- date_sub Soustrait une durée à un objet DateTime

Description

Style orienté objet

public DateTime DateTime::sub ( DateInterval $interval )

Style procédural

DateTime date_sub ( DateTime $object , DateInterval $interval )

Soustrait la durée spécifiée par l'objet DateInterval de l'objet DateTime.

Liste de paramètres

object

Style procédural uniquement : Un objet DateTime retourné par la fonction date_create(). Cette fonction modifie cet objet.

interval

Un objet DateInterval

Valeurs de retour

Retourne l'objet DateTime pour chainer les méthodes ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec DateTime::sub()

Style orienté objet

<?php
$date 
= new DateTime('2000-01-20');
$date->sub(new DateInterval('P10D'));
echo 
$date->format('Y-m-d') . "\n";
?>

Style procédural

<?php
$date 
date_create('2000-01-20');
date_sub($datedate_interval_create_from_date_string('10 days'));
echo 
date_format($date'Y-m-d');
?>

Les exemples ci-dessus vont afficher :

2000-01-10

Exemple #2 Autres exemples avec DateTime::sub()

<?php
$date 
= new DateTime('2000-01-20');
$date->sub(new DateInterval('PT10H30S'));
echo 
$date->format('Y-m-d H:i:s') . "\n";

$date = new DateTime('2000-01-20');
$date->sub(new DateInterval('P7Y5M4DT4H3M2S'));
echo 
$date->format('Y-m-d H:i:s') . "\n";
?>

L'exemple ci-dessus va afficher :

2000-01-19 13:59:30
1992-08-15 19:56:58

Exemple #3 Attention à la soustraction de mois

<?php
$date 
= new DateTime('2001-04-30');
$interval = new DateInterval('P1M');

$date->sub($interval);
echo 
$date->format('Y-m-d') . "\n";

$date->sub($interval);
echo 
$date->format('Y-m-d') . "\n";
?>

L'exemple ci-dessus va afficher :

2001-03-30
2001-03-02

Notes

DateTime::modify() est une alternative à utiliser avec PHP 5.2.

Voir aussi



DateTime::__wakeup

(PHP 5 >= 5.2.0)

DateTime::__wakeupLe gestionnaire de __wakeup

Description

public DateTime DateTime::__wakeup ( void )

Le gestionnaire de __wakeup().

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Initialise un objet DateTime.


Sommaire



La classe DateTimeZone

(PHP 5 >= 5.2.0)

Introduction

Représentation d'un fuseau horaire.

Synopsis de la classe

DateTimeZone {
/* Constantes */
const integer AFRICA = 1 ;
const integer AMERICA = 2 ;
const integer ANTARCTICA = 4 ;
const integer ARCTIC = 8 ;
const integer ASIA = 16 ;
const integer ATLANTIC = 32 ;
const integer AUSTRALIA = 64 ;
const integer EUROPE = 128 ;
const integer INDIAN = 256 ;
const integer PACIFIC = 512 ;
const integer UTC = 1024 ;
const integer ALL = 2047 ;
const integer ALL_WITH_BC = 4095 ;
const integer PER_COUNTRY = 4096 ;
/* Méthodes */
public __construct ( string $timezone )
public array getLocation ( void )
public string getName ( void )
public int getOffset ( DateTime $datetime )
public array getTransitions ([ int $timestamp_begin [, int $timestamp_end ]] )
public static array listAbbreviations ( void )
public static array listIdentifiers ([ int $what = DateTimeZone::ALL [, string $country = NULL ]] )
}

Constantes pré-définies

DateTimeZone::AFRICA

Fuseau africain.

DateTimeZone::AMERICA

Fuseau américain.

DateTimeZone::ANTARCTICA

Fuseau antarctique.

DateTimeZone::ARCTIC

Fuseau arctique.

DateTimeZone::ASIA

Fuseau asiatique.

DateTimeZone::ATLANTIC

Fuseau atlantique.

DateTimeZone::AUSTRALIA

Fuseau australien.

DateTimeZone::EUROPE

Fuseau européen.

DateTimeZone::INDIAN

Fuseau indien.

DateTimeZone::PACIFIC

Fuseau pacifique.

DateTimeZone::UTC

Fuseau UTC.

DateTimeZone::ALL

Tous les fuseaux.

DateTimeZone::ALL_WITH_BC

Tous les fuseaux, y compris les anciens.

DateTimeZone::PER_COUNTRY

Fuseaux horaires par pays.


DateTimeZone::__construct

timezone_open

(PHP 5 >= 5.2.0)

DateTimeZone::__construct -- timezone_openCrée un nouvel objet DateTimeZone

Description

Style orienté objet

public DateTimeZone::__construct() ( string $timezone )

Style procédural

DateTimeZone timezone_open ( string $timezone )

Crée un nouvel objet DateTimeZone.

Liste de paramètres

timezone

Un des fuseaux horaires.

Valeurs de retour

Retourne un objet DateTimeZone, en cas de succès. Style procédural retourne FALSE en cas d'erreur..

Erreurs / Exceptions

Cette méthode émet une exception Exception, si le fuseau horaire fourni n'est pas reconnu.

Exemples

Exemple #1 Interception des erreurs avec DateTimeZone

<?php
// Gestion des erreurs par interception des exceptions
$timezones = array('Europe/London''Mars/Phobos''Jupiter/Europa');

foreach (
$timezones as $tz) {
    try {
        
$mars = new DateTimeZone($tz);
    } catch(
Exception $e) {
        echo 
$e->getMessage() . '<br />';
    }
}
?>

L'exemple ci-dessus va afficher :

DateTimeZone::__construct() [datetimezone.--construct]: Unknown or bad timezone (Mars/Phobos)
DateTimeZone::__construct() [datetimezone.--construct]: Unknown or bad timezone (Jupiter/Europa)



DateTimeZone::getLocation

timezone_location_get

(PHP 5 >= 5.3.0)

DateTimeZone::getLocation -- timezone_location_getRetourne les informations géographiques d'un fuseau horaire

Description

Style orienté objet

public array DateTimeZone::getLocation ( void )

Style procédural

Retourne les informations géographiques d'un fuseau horaire, comprenant le code du pays, la latitude et la longitude, et commentaires.

Liste de paramètres

object

Seulement en style procédural : un DateTimeZone objet retourné par timezone_open()

Valeurs de retour

Tableau contenant les informations de localisation du fuseau horaire.

Exemples

Exemple #1 Exemple avec DateTimeZone::getLocation()

<?php
$tz 
= new DateTimeZone("Europe/Prague");
print_r($tz->getLocation());
print_r(timezone_location_get($tz));
?>

L'exemple ci-dessus va afficher :

Array
(
    [country_code] => CZ
    [latitude] => 50.08333
    [longitude] => 14.43333
    [comments] => 
)
Array
(
    [country_code] => CZ
    [latitude] => 50.08333
    [longitude] => 14.43333
    [comments] => 
)



DateTimeZone::getName

timezone_name_get

(PHP 5 >= 5.2.0)

DateTimeZone::getName -- timezone_name_getRetourne le nom du fuseau horaire

Description

Style orienté objet

public string DateTimeZone::getName ( void )

Style procédural

string timezone_name_get ( DateTimeZone $object )

Retourne le nom du fuseau horaire.

Liste de paramètres

object

L'objet DateTimeZone utilisé pour retourner le nom du fuseau.

Valeurs de retour

Un des fuseaux horaires de la liste des fuseaux horaires.



DateTimeZone::getOffset

timezone_offset_get

(PHP 5 >= 5.2.0)

DateTimeZone::getOffset -- timezone_offset_getRetourne le décalage GMT d'un fuseau horaire

Description

Style orienté objet

public int DateTimeZone::getOffset ( DateTime $datetime )

Style procédural

int timezone_offset_get ( DateTimeZone $object , DateTime $datetime )

timezone_offset_get() retourne le décalage horaire par rapport au GMT pour le paramètre datetime. Le décalage GMT est calculé à partir des informations de fuseau horaire contenu dans l'objet DateTime.

Liste de paramètres

object

Seulement en style procédural : un DateTimeZone objet retourné par timezone_open()

datetime

Objet DateTime qui contient la date dont il faut calculer le décalage.

Valeurs de retour

Retourne le décalage horaire, exprimé en secondes, en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec DateTimeZone::getOffset()

<?php
// Crée deux objets fuseau horaire, un pour Taipei (Taiwan) et un pour 
// Tokyo (Japon)
$dateTimeZoneTaipei = new DateTimeZone("Asia/Taipei");
$dateTimeZoneJapan = new DateTimeZone("Asia/Tokyo");

// Crée deux objets DateTime qui contiennent le même timestampe Unix,
// mais sont situés dans deux fuseaux horaires différents.
$dateTimeTaipei = new DateTime("now"$dateTimeZoneTaipei);
$dateTimeJapan = new DateTime("now"$dateTimeZoneJapan);

// Calcule le décalage horaire GMT pour l'objet $dateTimeTaipei
// mais en utilisant le fuseau horaire de Tokyo
// ($dateTimeZoneJapan).
$timeOffset $dateTimeZoneJapan->getOffset($dateTimeTaipei);

// Devrait afficher int(32400) (pour les dates après le Sat Sep 8 01:00:00 1951 JST).
var_dump($timeOffset);
?>



DateTimeZone::getTransitions

timezone_transitions_get

(PHP 5 >= 5.2.0)

DateTimeZone::getTransitions -- timezone_transitions_getRetourne toutes les transitions d'un fuseau horaire

Description

Style orienté objet

public array DateTimeZone::getTransitions ([ int $timestamp_begin [, int $timestamp_end ]] )

Style procédural

array timezone_transitions_get ( DateTimeZone $object [, int $timestamp_begin [, int $timestamp_end ]] )

Liste de paramètres

object

Seulement en style procédural : un DateTimeZone objet retourné par timezone_open()

timestamp_begin

Début du timestamp.

timestamp_end

Fin du timestamp.

Valeurs de retour

Retourne un tableau numérique, contenant des tableaux associatifs avec toutes les transitions, en cas de succès ou FALSE si une erreur survient.

Historique

Version Description
5.3.0 Les paramètres optionnels timestamp_begin et timestamp_end ont été ajouté.

Exemples

Exemple #1 Exemple avec timezone_transitions_get()

<?php
$timezone 
= new DateTimeZone("Europe/London");
$transitions $timezone->getTransitions();
print_r(array_slice($transitions03));
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Array
(
    [0] => Array
        (
            [ts]  => -9223372036854775808
             [time] =>  -292277022657-01-27T08:29:52+0000
             [offset] => 3600
            [isdst]  => 1
            [abbr] => BST
         )

    [1] => Array
        (
            [ts]  => -1691964000
            [time] => 1916-05-21T02:00:00+0000
            [offset]  => 3600
            [isdst] => 1
             [abbr] => BST
        )

    [2] => Array
        (
            [ts]  => -1680472800
            [time] => 1916-10-01T02:00:00+0000
            [offset]  => 0
            [isdst] => 
             [abbr] => GMT
        )

)



DateTimeZone::listAbbreviations

timezone_abbreviations_list

(PHP 5 >= 5.2.0)

DateTimeZone::listAbbreviations -- timezone_abbreviations_listRetourne un tableau associatif, décrivant un fuseau horaire

Description

Style orienté objet

public static array DateTimeZone::listAbbreviations ( void )

Style procédural

Valeurs de retour

Retourne un tableau en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec timezone_abbreviations_list()

<?php
$timezone_abbreviations 
DateTimeZone::listAbbreviations();
print_r($timezone_abbreviations["acst"]);
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Array
(
    [0] => Array
        (
            [dst] => 1
            [offset] => -14400
            [timezone_id] => America/Porto_Acre
        )

    [1] => Array
        (
            [dst] => 1
            [offset] => -14400
            [timezone_id] => America/Eirunepe
        )

    [2] => Array
        (
            [dst] => 1
            [offset] => -14400
            [timezone_id] => America/Rio_Branco
        )

    [3] => Array
        (
            [dst] => 1
            [offset] => -14400
            [timezone_id] => Brazil/Acre
        )

)

Voir aussi



DateTimeZone::listIdentifiers

timezone_identifiers_list

(PHP 5 >= 5.2.0)

DateTimeZone::listIdentifiers -- timezone_identifiers_listRetourne un tableau numérique de tous les fuseaux horaires

Description

Style orienté objet

public static array DateTimeZone::listIdentifiers ([ int $what = DateTimeZone::ALL [, string $country = NULL ]] )

Style procédural

array timezone_identifiers_list ([ int $what = DateTimeZone::ALL [, string $country = NULL ]] )

Liste de paramètres

what

Une des constantes de classe DateTimeZone.

country

Un code de pays en deux lettres, compatible ISO 3166-1.

Note: Cette option n'est dispoinble que lorsque le paramètre what prend la valeur de DateTimeZone::PER_COUNTRY.

Valeurs de retour

Retourne un tableau en cas de succès ou FALSE si une erreur survient.

Historique

Version Description
5.3.0 Ajout des paramètres optionnels what et country.

Exemples

Exemple #1 Exemple avec timezone_identifiers_list()

<?php
$timezone_identifiers 
DateTimeZone::listIdentifiers();
for (
$i=0$i 5$i++) {
    echo 
"$timezone_identifiers[$i]\n";
}
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara

Voir aussi


Sommaire



La classe DateInterval

(PHP 5 >= 5.3.0)

Introduction

Représentation d'un intervalle de dates. Un intervalle stocke un nombre fixe de durées (en années, mois, jours, heures, etc.) ou une chaîne relative à une durée dans un format compréhensible par le constructeur de la classe DateTime.

Synopsis de la classe

DateInterval {
/* Propriétés */
public integer $y ;
public integer $m ;
public integer $d ;
public integer $h ;
public integer $i ;
public integer $s ;
public integer $invert ;
public mixed $days ;
/* Méthodes */
public __construct ( string $interval_spec )
public static DateInterval createFromDateString ( string $time )
public string format ( string $format )
}

Propriétés

y

Année.

m

Numéro du mois.

d

Numéro du jour.

h

L'heure.

i

Les minutes.

s

Les secondes.

invert

Vaut 1 si l'intervalle est inversée et 0 sinon. Voir la méthode DateInterval::format().

days

Nombre total de jours entre la date de début et la date de fin lors d'un calcul DateTime::diff(). days vaudra NULL dans les autres cas.


DateInterval::__construct

(PHP 5 >= 5.3.0)

DateInterval::__constructCrée un nouvel objet DateInterval

Description

public DateInterval::__construct() ( string $interval_spec )

Crée un nouvel objet DateInterval.

Liste de paramètres

interval_spec

Spécification d'intervalle.

Le format commence avec la lettre P, pour "period". Chaque durée de la période est représentée par une valeur entière suivie par une désignation de période. Si la durée contient des éléments de temps, cette portion de la spécification est précédée par la lettre T.

Désignation de période interval_spec
Désignation de période Description
Y Années
M Mois
D Jours
W Semaine. Sera converti en jours, aussi, vous ne pouvez pas le combiner avec D.
H Heures
M Minutes
S Secondes

Voici quelques exemples simples. 2 jours sera P2D. 2 secondes sera PT2S. 6 années et 5 minutes sera P6YT5M.

Note:

Les types d'unité doivent être entrés des plus grands aux plus petits. Ainsi, les années doivent être présentes avant les mois, les mois avant les jours, les jours avant les minutes, etc. Aussi, une année et 4 jours doit être représenté comme P1Y4D, et non P4D1Y.

Cette spécification peut également être représentée sous la forme d'une durée. Aussi, une année et 4 jours peut être P0001-00-04T00:00:00. Mais les valeurs de ce format ne peuvent pas exécéder une période donnée (i.e. 25 heures est invalide).

Ces formats sont basés sur la » spécification de durée ISO 8601.

Exemples

Exemple #1 Exemple avec DateInterval

<?php

$interval 
= new DateInterval('P2Y4DT6H8M');
var_dump($interval);

?>

L'exemple ci-dessus va afficher :

object(DateInterval)#1 (8) {
  ["y"]=>
  int(2)
  ["m"]=>
  int(0)
  ["d"]=>
  int(4)
  ["h"]=>
  int(6)
  ["i"]=>
  int(8)
  ["s"]=>
  int(0)
  ["invert"]=>
  int(0)
  ["days"]=>
  bool(false)
}

Voir aussi



DateInterval::createFromDateString

(PHP 5 >= 5.3.0)

DateInterval::createFromDateStringConfigure un objet DateInterval à partir des parties d'une chaîne

Description

public static DateInterval DateInterval::createFromDateString ( string $time )

Utilise les analyseurs de dates natifs et configure un objet DateInterval à partir d'une chaîne de caractères.

Liste de paramètres

time

Une date, avec des portions relatives.

Valeurs de retour

Retourne un nouvel objet DateInterval, en cas de succès.



DateInterval::format

(PHP 5 >= 5.3.0)

DateInterval::formatFormate l'intervalle

Description

public string DateInterval::format ( string $format )

Formate l'intervalle.

Liste de paramètres

format

Les caractères suivants sont reconnus dans la chaîne format. Chaque caractère utilisé pour le format doit être préfixé par un signe de pourcentage (%).
Caractère de format Description Valeur d'exemple
% Caractère % littéral %
Y Années, numérique, au moins 2 chiffres avec zéros initiaux 01, 03
y Années, numérique 1, 3
M Mois, numérique, au moins 2 chiffres avec zéros initiaux 01, 03, 12
m Mois, numérique 1, 3, 12
D Jours, numérique, au moins 2 chiffres avec zéros initiaux 01, 03, 31
d Jours, numérique 1, 3, 31
a Nombre total de jours 4, 18, 8123
H Heures, numérique, au moins 2 chiffres avec zéros initiaux 01, 03, 23
h Heures, numérique 1, 3, 23
I Minutes, numérique, au moins 2 chiffres avec zéros initiaux 01, 03, 59
i Minutes, numérique 1, 3, 59
S Secondes, numérique, au moins 2 chiffres avec zéros initiaux 01, 03, 57
s Secondes, numérique 1, 3, 57
R Signe "-" lorsque négatif, "+" si positif -, +
r Signe "-" lorsque négatif, vide si positif -,

Valeurs de retour

Retourne l'intervalle formaté.

Notes

Note:

La méthode DateInterval::format() ne recalcule pas la retenue dans les chaines de temps ni dans les segments de date. Ce comportement est attendu car il n'est pas possible de dépasser des valeurs comme "32 days" qui pourrait être interprété comme "1 mois et 4 jours" ou "1 mois et 1 jour".

Exemples

Exemple #1 Exemple avec DateInterval

<?php

$interval 
= new DateInterval('P2Y4DT6H8M');
echo 
$interval->format('%d jours');

?>

L'exemple ci-dessus va afficher :

4 jours

Exemple #2 DateInterval et retenue

<?php

$interval 
= new DateInterval('P32D');
echo 
$interval->format('%d jours');

?>

L'exemple ci-dessus va afficher :

32 jours

Exemple #3 DateInterval et DateTime::diff() avec les modificateurs %a et %d

<?php

$january 
= new DateTime('2010-01-01');
$february = new DateTime('2010-02-01');
$interval $february->diff($january);

// %a affichera le nombre total de jours...
echo $interval->format('%a jours au total')."\n";

// ...alors que %d n'affichera que le nombre de jours non encore couverts
// dans le mois.
echo $interval->format('%m mois, %d jour');

?>

L'exemple ci-dessus va afficher :

31 jours au total
1 mois, 0 jour


Sommaire



La classe DatePeriod

(PHP 5 >= 5.3.0)

Introduction

Représentation d'une période de dates.

Synopsis de la classe

DatePeriod implements Traversable {
/* Constantes */
const integer EXCLUDE_START_DATE = 1 ;
/* Méthodes */
public __construct ( DateTime $start , DateInterval $interval , int $recurrences [, int $options ] )
public __construct ( DateTime $start , DateInterval $interval , DateTime $end [, int $options ] )
public __construct ( string $isostr [, int $options ] )
}

Constantes pré-définies

DatePeriod::EXCLUDE_START_DATE

Exclut la date de début, utilisé par DatePeriod::__construct().


DatePeriod::__construct

(PHP 5 >= 5.3.0)

DatePeriod::__constructCrée un nouvel objet DatePeriod

Description

public DatePeriod::__construct() ( DateTime $start , DateInterval $interval , int $recurrences [, int $options ] )
public DatePeriod::__construct() ( DateTime $start , DateInterval $interval , DateTime $end [, int $options ] )
public DatePeriod::__construct() ( string $isostr [, int $options ] )

Crée un nouvel objet DatePeriod.

Liste de paramètres

start

Date de début.

interval

Intervalle.

recurrences

Nombre de récurrences.

end

Date de fin.

isostr

Chaîne contenant l'intervalle ISO.

options

Peut être configuré à DatePeriod::EXCLUDE_START_DATE.


Sommaire



Fonctions Date/Heure


checkdate

(PHP 4, PHP 5)

checkdateValide une date grégorienne

Description

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

Vérifie la validité d'une date formée par les arguments. Une date est considérée comme valide si chaque paramètre est défini correctement.

Liste de paramètres

month

Le mois doit être compris entre 1 et 12.

day

Le jour doit être un jour autorisé par le mois donné. Les années bissextiles sont prises en comptes.

year

L'année est comprise entre 1 et 32767 inclus.

Valeurs de retour

Retourne TRUE si la date fournie est valide, sinon FALSE.

Exemples

Exemple #1 Exemple avec checkdate()

<?php
var_dump
(checkdate(12312000));
var_dump(checkdate(2292001));
?>

L'exemple ci-dessus va afficher :

bool(true)
bool(false)

Voir aussi

  • mktime() - Retourne le timestamp UNIX d'une date
  • strtotime() - Transforme un texte anglais en timestamp



date_add

(PHP 5 >= 5.3.0)

date_addAlias de DateTime::add()

Description

Cette fonction est un alias de : DateTime::add()



date_create_from_format

(PHP 5 >= 5.3.0)

date_create_from_formatAlias de DateTime::createFromFormat()

Description

Cette fonction est un alias de : DateTime::createFromFormat()



date_create

(PHP 5 >= 5.2.0)

date_createAlias de DateTime::__construct()

Description

Cette fonction est un alias de : DateTime::__construct()



date_date_set

(PHP 5 >= 5.2.0)

date_date_setAlias de DateTime::setDate()

Description

Cette fonction est un alias de : DateTime::setDate()



date_default_timezone_get

(PHP 5 >= 5.1.0)

date_default_timezone_get Récupère le décalage horaire par défaut utilisé par toutes les fonctions date/heure dans un script

Description

string date_default_timezone_get ( void )

Cette fonction retourne le décalage horaire en suivant l'ordre de préférences suivant :

  • Lecture du décalage horaire définie en utilisant la fonction date_default_timezone_set() (si elle existe)

  • Avant PHP 5.4.0 uniquement : Lecture de la variable d'environnement TZ (si elle n'est pas vide)

  • Lecture de la valeur de l'option de configuration date.timezone (si elle est définie)

  • Avant PHP 5.4.0 uniquement : Interrogation du système d'exploitation (si le système le supporte et l'autorise). Cette interrogation utilise un algorithme qui tente de deviner le décalage horaire. Aussi, le résultat peut ne pas être attendu dans certaine situation. Une alerte est affichée lorsque cette étape est atteinte. Inutile de la rapporter afin qu'elle soit corrigée, mais définissez plutôt date.timezone de façon plus correcte.

Si tout ce qui précède échoue, date_default_timezone_get() retournera le décalage horaire par défaut de UTC.

Valeurs de retour

Retourne une chaîne de caractères.

Historique

Version Description
5.4.0 La variable d'environnement TZ n'est plus utilisée pour deviner le décalage horaire.
5.4.0 Le décalage horaire n'est plus deviné depuis les informations disponibles via le système d'exploitation.

Exemples

Exemple #1 Récupération du décalage horaire par défaut

<?php
date_default_timezone_set
('Europe/London');

if (
date_default_timezone_get()) {
    echo 
'date_default_timezone_set : ' date_default_timezone_get() . '<br />';
}

if (
ini_get('date.timezone')) {
    echo 
'date.timezone : ' ini_get('date.timezone');
}

?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

date_default_timezone_set : Europe/London
date.timezone : Europe/London

Exemple #2 Récupération de l'abréviation d'un décalage horaire

<?php
date_default_timezone_set
('America/Los_Angeles');
echo 
date_default_timezone_get() . ' => ' date('e') . ' => ' date('T');
?>

L'exemple ci-dessus va afficher :

America/Los_Angeles => America/Los_Angeles => PST

Voir aussi



date_default_timezone_set

(PHP 5 >= 5.1.0)

date_default_timezone_set Définit le décalage horaire par défaut de toutes les fonctions date/heure

Description

bool date_default_timezone_set ( string $timezone_identifier )

date_default_timezone_set() définit le décalage horaire par défaut utilisé par toutes les fonctions date/heure.

Note:

Depuis PHP 5.1.0 (lorsque les fonctions date/heure ont été écrites), chaque appel à une fonction date/heure génère une E_NOTICE si le décalage horaire n'est pas valide et/ou un message E_WARNING si vous utilisez des configurations système ou la variable d'environnement TZ.

Au lieu d'utiliser cette fonction pour définir le décalage horaire par défaut dans votre script, vous pouvez également utiliser la configuration INI date.timezone.

Liste de paramètres

timezone_identifier

L'identifiant de décalage horaire, comme UTC ou Europe/Lisbon. La liste des identifiants valides est disponible dans le Liste des Fuseaux Horaires Supportés.

Valeurs de retour

Cette fonction retourne FALSE si timezone_identifier n'est pas valide, TRUE sinon.

Exemples

Exemple #1 Récupération du décalage horaire par défaut

<?php
date_default_timezone_set
('America/Los_Angeles');

$script_tz date_default_timezone_get();

if (
strcmp($script_tzini_get('date.timezone'))){
    echo 
'Le décalage horaire du script diffère du décalage horaire défini dans le fichier ini.';
} else {
    echo 
'Le décalage horaire du script est équivalent à celui défini dans le fichier ini.';
}
?>

Historique

Version Description
5.3.0 Émet maintenant une alerte de type E_WARNING plutôt qu'une alerte de type E_STRICT.
5.1.2 La fonction commence à valider le paramètre timezone_identifier.

Voir aussi



date_diff

(PHP 5 >= 5.3.0)

date_diffAlias de DateTime::diff()

Description

Cette fonction est un alias de : DateTime::diff()



date_format

(PHP 5 >= 5.2.0)

date_formatAlias de DateTime::format()

Description

Cette fonction est un alias de : DateTime::format()



date_get_last_errors

(PHP 5 >= 5.3.0)

date_get_last_errorsAlias de DateTime::getLastErrors()

Description

Cette fonction est un alias de : DateTime::getLastErrors()



date_interval_create_from_date_string

(PHP 5 >= 5.3.0)

date_interval_create_from_date_stringAlias de DateInterval::createFromDateString()

Description

Cette fonction est un alias de : DateInterval::createFromDateString()



date_interval_format

(PHP 5 >= 5.3.0)

date_interval_formatAlias de DateInterval::format()

Description

Cette fonction est un alias de : DateInterval::format()



date_isodate_set

(PHP 5 >= 5.2.0)

date_isodate_setAlias de DateTime::setISODate()

Description

Cette fonction est un alias de : DateTime::setISODate()



date_modify

(PHP 5 >= 5.2.0)

date_modifyAlias de DateTime::modify()

Description

Cette fonction est un alias de : DateTime::modify()



date_offset_get

(PHP 5 >= 5.2.0)

date_offset_getAlias de DateTime::getOffset()

Description

Cette fonction est un alias de : DateTime::getOffset()



date_parse_from_format

(PHP 5 >= 5.3.0)

date_parse_from_formatRécupère les informations d'une date donnée suivant un format spécifique

Description

array date_parse_from_format ( string $format , string $date )

Retourne un tableau associatif contenant des informations détaillées sur une date donnée.

Liste de paramètres

format

Format accepté par la fonction DateTime::createFromFormat().

date

Chaîne représentant la date.

Valeurs de retour

Retourne un tableau associatif avec des informations détaillées sur la date donnée.

Exemples

Exemple #1 Exemple avec date_parse_from_format()

<?php
$date 
"6.1.2009 13:00+01:00";
print_r(date_parse_from_format("j.n.Y H:iP"$date));
?>

L'exemple ci-dessus va afficher :

Array
(
    [year] => 2009
    [month] => 1
    [day] => 6
    [hour] => 13
    [minute] => 0
    [second] => 0
    [fraction] => 
    [warning_count] => 0
    [warnings] => Array
        (
        )

    [error_count] => 0
    [errors] => Array
        (
        )

    [is_localtime] => 1
    [zone_type] => 1
    [zone] => -60
    [is_dst] => 
)

Voir aussi



date_parse

(PHP 5 >= 5.2.0)

date_parseRetourne un tableau associatif avec des informations détaillées sur une date donnée

Description

array date_parse ( string $date )

Liste de paramètres

date

Date mise en forme acceptée par strtotime().

Valeurs de retour

Retourne un tableau contenant des informations sur la date analysée en cas de succès ou FALSE si une erreur survient.

Erreurs / Exceptions

Dans le cas où la fonction retourne une erreur, l'élément "errors" contiendra les messages d'erreur.

Exemples

Exemple #1 Exemple avec date_parse()

<?php
print_r
(date_parse("2006-12-12 10:00:00.5"));
?>

L'exemple ci-dessus va afficher :

Array
(
    [year] => 2006
    [month] => 12
    [day] => 12
    [hour] => 10
    [minute] => 0
    [second] => 0
    [fraction] => 0.5
    [warning_count] => 0
    [warnings] => Array()
    [error_count] => 0
    [errors] => Array()
    [is_localtime] => 
)

Voir aussi



date_sub

(PHP 5 >= 5.3.0)

date_subAlias de DateTime::sub()

Description

Cette fonction est un alias de : DateTime::sub()



date_sun_info

(PHP 5 >= 5.1.2)

date_sun_infoRetourne un tableau avec les informations sur lever/coucher du soleil ainsi que le début et la fin de l'aube

Description

array date_sun_info ( int $time , float $latitude , float $longitude )

Liste de paramètres

time

Timestamp.

latitude

Latitude en degrés.

longitude

Longitude en degrés.

Valeurs de retour

Retourne un tableau en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec date_sun_info()

<?php
$sun_info 
date_sun_info(strtotime("2006-12-12"), 31.766735.2333);
foreach (
$sun_info as $key => $val) {
  echo 
"$key: " date("H:i:s"$val) . "\n";
}
?>

L'exemple ci-dessus va afficher :

sunrise: 05:52:11
sunset: 15:41:21
transit: 10:46:46
civil_twilight_begin: 05:24:08
civil_twilight_end: 16:09:24
nautical_twilight_begin: 04:52:25
nautical_twilight_end: 16:41:06
astronomical_twilight_begin: 04:21:32
astronomical_twilight_end: 17:12:00

Voir aussi

  • date_sunrise() - Retourne l'heure de levé du soleil pour un jour et un endroit donnés
  • date_sunset() - Retourne l'heure de coucher du soleil pour un jour et un endroit donnés



date_sunrise

(PHP 5)

date_sunriseRetourne l'heure de levé du soleil pour un jour et un endroit donnés

Description

mixed date_sunrise ( int $timestamp [, int $format = SUNFUNCS_RET_STRING [, float $latitude = ini_get("date.default_latitude") [, float $longitude = ini_get("date.default_longitude") [, float $zenith = ini_get("date.sunrise_zenith") [, float $gmt_offset = 0 ]]]]] )

date_sunrise() retourne l'heure de levé du soleil pour un jour (spécifié par le paramètre timestamp) et un endroit donnés.

Liste de paramètres

timestamp

Le timestamp Unix du jour pour lequel l'heure de levé du soleil est donné.

format

Constantes pour le paramètre format
Constante Description Exemple
SUNFUNCS_RET_STRING Retourne le résultat en tant que chaîne de caractères 16:46
SUNFUNCS_RET_DOUBLE Retourne le résultat en tant que nombre décimal 16.78243132
SUNFUNCS_RET_TIMESTAMP Retourne le résultat en tant qu'entier (timestamp) 1095034606

latitude

Par défaut, c'est le Nord. Passez une valeur négative pour le Sud. Voir aussi date.default_latitude.

longitude

Par défaut, c'est l'Est. Passez une valeur négative pour l'Ouest. Voir aussi date.default_longitude.

zenith

Par défaut : date.sunrise_zenith

gmtoffset

Spécifié en heures.

Valeurs de retour

Retourne l'heure de levé du soleil dans un format spécifié en cas de succès ou FALSE si une erreur survient.

Erreurs / Exceptions

Chaque appel à une fonction date/heure générera un message de type E_NOTICE si le fuseau horaire n'est pas valide, et/ou un message de type E_STRICT ou E_WARNING si vous utilisez la configuration du système ou la variable d'environnement TZ. Voir aussi date_default_timezone_set()

Historique

Version Description
5.1.0

Émet un message de type E_STRICT et E_NOTICE lors d'erreurs de fuseaux horaires.

Exemples

Exemple #1 Exemple avec date_sunrise()

<?php

/* Calcul l'heure du levé du soleil pour Lisbonne, Portugal
Latitude: 38.4 North
Longitude: 9 West
Zenith ~= 90
offset: +1 GMT
*/

echo date("D M d Y"). ', sunrise time : ' .date_sunrise(time(), SUNFUNCS_RET_STRING38.4, -9901);

?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Mon Dec 20 2004, sunrise time : 08:54

Voir aussi

  • date_sunset() - Retourne l'heure de coucher du soleil pour un jour et un endroit donnés



date_sunset

(PHP 5)

date_sunset Retourne l'heure de coucher du soleil pour un jour et un endroit donnés

Description

mixed date_sunset ( int $timestamp [, int $format = SUNFUNCS_RET_STRING [, float $latitude = ini_get("date.default_latitude") [, float $longitude = ini_get("date.default_longitude") [, float $zenith = ini_get("date.sunset_zenith") [, float $gmt_offset = 0 ]]]]] )

date_sunset() retourne l'heure de couché du soleil pour un jour (spécifié en tant que timestamp Unix) et un endroit donnés.

Liste de paramètres

timestamp

Le timestamp Unix du jour pour lequel l'heure du couché du soleil est donnée.

format

Constantes pour le paramètre format
Constante Description Exemple
SUNFUNCS_RET_STRING Retourne le résultat sous la forme d'une chaîne de caractères 16:46
SUNFUNCS_RET_DOUBLE Retourne le résultat sous la forme d'un nombre décimal 16.78243132
SUNFUNCS_RET_TIMESTAMP Retourne le résultat sous la forme d'un entier (timestamp) 1095034606

latitude

Par défaut, c'est le Nord. Passez une valeur négative pour le Sud. Voir aussi date.default_latitude.

longitude

Par défaut, c'est l'Est. Passez une valeur négative pour l'Ouest. Voir aussi date.default_longitude.

zenith

Par défaut : date.sunrise_zenith

gmtoffset

Spécifié en heures.

Erreurs / Exceptions

Chaque appel à une fonction date/heure générera un message de type E_NOTICE si le fuseau horaire n'est pas valide, et/ou un message de type E_STRICT ou E_WARNING si vous utilisez la configuration du système ou la variable d'environnement TZ. Voir aussi date_default_timezone_set()

Historique

Version Description
5.1.0

Émet un message de type E_STRICT et E_NOTICE lors d'erreurs de fuseaux horaires.

Valeurs de retour

Retourne l'heure de couché du soleil dans un format spécifié ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec date_sunset()

<?php

     
/* Calcul l'heure du couché du soleil pour Lisbonne, Portugal
Latitude: 38.4 North
Longitude: 9 West
Zenith ~= 90
offset: +1 GMT
*/

echo date("D M d Y"). ', sunset time : ' .date_sunset(time(), SUNFUNCS_RET_STRING38.4, -9901);

?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Mon Dec 20 2004, sunset time : 18:13

Voir aussi

  • date_sunrise() - Retourne l'heure de levé du soleil pour un jour et un endroit donnés



date_time_set

(PHP 5 >= 5.2.0)

date_time_setAlias de DateTime::setTime()

Description

Cette fonction est un alias de : DateTime::setTime()



date_timestamp_get

(PHP 5 >= 5.3.0)

date_timestamp_getAlias de DateTime::getTimestamp()

Description

Cette fonction est un alias de : DateTime::getTimestamp()



date_timestamp_set

(PHP 5 >= 5.3.0)

date_timestamp_setAlias de DateTime::setTimestamp()

Description

Cette fonction est un alias de : DateTime::setTimestamp()



date_timezone_get

(PHP 5 >= 5.2.0)

date_timezone_getAlias de DateTime::getTimezone()

Description

Cette fonction est un alias de : DateTime::getTimezone()



date_timezone_set

(PHP 5 >= 5.2.0)

date_timezone_setAlias de DateTime::setTimezone()

Description

Cette fonction est un alias de : DateTime::setTimezone()



date

(PHP 4, PHP 5)

dateFormate une date/heure locale

Description

string date ( string $format [, int $timestamp = time() ] )

Retourne une date sous forme d'une chaîne, au format donné par le paramètre format, fournie par le paramètre timestamp ou la date et l'heure courantes si aucun timestamp n'est fourni. En d'autres termes, le paramètre timestamp est optionnel et vaut par défaut la valeur de la fonction time().

Liste de paramètres

format

Le format de la date désirée. Voir les options de formatage ci-dessous. Il existe aussi de nombreuses constantes de dates qui peuvent être utilisées, ce qui fait que DATE_RSS va remplacer le format "D, d M Y H:i:s".

Les caractères suivants sont reconnus dans le paramètre format
Caractères pour le paramètre format Description Exemple de valeurs retournées
Jour --- ---
d Jour du mois, sur deux chiffres (avec un zéro initial) 01 à 31
D Jour de la semaine, en trois lettres (et en anglais) Mon à Sun
j Jour du mois sans les zéros initiaux 1 à 31
l ('L' minuscule) Jour de la semaine, textuel, version longue, en anglais Sunday à Saturday
N Représentation numérique ISO-8601 du jour de la semaine (ajouté en PHP 5.1.0) 1 (pour Lundi) à 7 (pour Dimanche)
S Suffixe ordinal d'un nombre pour le jour du mois, en anglais, sur deux lettres st, nd, rd ou th. Fonctionne bien avec j
w Jour de la semaine au format numérique 0 (pour dimanche) à 6 (pour samedi)
z Jour de l'année 0 à 365
Semaine --- ---
W Numéro de semaine dans l'année ISO-8601, les semaines commencent le lundi (ajouté en PHP 4.1.0) Exemple : 42 (la 42ème semaine de l'année)
Mois --- ---
F Mois, textuel, version longue; en anglais, comme January ou December January à December
m Mois au format numérique, avec zéros initiaux 01 à 12
M Mois, en trois lettres, en anglais Jan à Dec
n Mois sans les zéros initiaux 1 à 12
t Nombre de jours dans le mois 28 à 31
Année --- ---
L Est ce que l'année est bissextile 1 si bissextile, 0 sinon.
o L'année ISO-8601. C'est la même valeur que Y, excepté que si le numéro de la semaine ISO (W) appartient à l'année précédente ou suivante, cette année sera utilisé à la place. (ajouté en PHP 5.1.0) Exemples : 1999 ou 2003
Y Année sur 4 chiffres Exemples : 1999 ou 2003
y Année sur 2 chiffres Exemples : 99 ou 03
Heure --- ---
a Ante meridiem et Post meridiem en minuscules am ou pm
A Ante meridiem et Post meridiem en majuscules AM ou PM
B Heure Internet Swatch 000 à 999
g Heure, au format 12h, sans les zéros initiaux 1 à 12
G Heure, au format 24h, sans les zéros initiaux 0 à 23
h Heure, au format 12h, avec les zéros initiaux 01 à 12
H Heure, au format 24h, avec les zéros initiaux 00 à 23
i Minutes avec les zéros initiaux 00 à 59
s Secondes, avec zéros initiaux 00 à 59
u Microsecondes (ajouté en PHP 5.2.2) Exemple : 654321
Fuseau horaire --- ---
e L'identifiant du fuseau horaire (ajouté en PHP 5.1.0) Exemples : UTC, GMT, Atlantic/Azores
I (i majuscule) L'heure d'été est activée ou pas 1 si oui, 0 sinon.
O Différence d'heures avec l'heure de Greenwich (GMT), exprimée en heures Exemple : +0200
P Différence avec l'heure Greenwich (GMT) avec un deux-points entre les heures et les minutes (ajouté dans PHP 5.1.3) Exemple : +02:00
T Abréviation du fuseau horaire Exemples : EST, MDT ...
Z Décalage horaire en secondes. Le décalage des zones à l'ouest de la zone UTC est négative, et à l'est, il est positif. -43200 à 50400
Date et Heure complète --- ---
c Date au format ISO 8601 (ajouté en PHP 5) 2004-02-12T15:19:21+00:00
r Format de date » RFC 2822 Exemple : Thu, 21 Dec 2000 16:01:07 +0200
U Secondes depuis l'époque Unix (1er Janvier 1970, 0h00 00s GMT) Voir aussi time()

Les caractères non reconnus seront imprimés tels quel. "Z" retournera toujours 0 lorsqu'il est utilisé avec gmdate().

Note:

Sachant que cette fonction n'accepte que des entiers sous la forme de timestamp, le caractère u n'est utile que lors de l'utilisation de la fonction date_format() avec un timestamp utilisateur créé avec la fonction date_create().

timestamp

Le paramètre optionnel timestamp est un timestamp Unix de type entier qui vaut par défaut l'heure courante locale si le paramètre timestamp n'est pas fourni. En d'autres termes, il vaut par défaut la valeur de la fonction time().

Valeurs de retour

Retourne une date formatée. Si une valeur non-numérique est utilisée dans le paramètre timestamp, FALSE sera retourné et une erreur de niveau E_WARNING est émise.

Erreurs / Exceptions

Chaque appel à une fonction date/heure générera un message de type E_NOTICE si le fuseau horaire n'est pas valide, et/ou un message de type E_STRICT ou E_WARNING si vous utilisez la configuration du système ou la variable d'environnement TZ. Voir aussi date_default_timezone_set()

Historique

Version Description
5.1.0 L'intervalle de validité d'un timestamp va généralement du Vendredi 13 Décembre 1901 20:45:54 GMT au Mardi 19 Janvier 2038 03:14:07 GMT. (Ces dates correspondent aux valeurs minimales et maximales des entiers 32 bits non-signés). Cependant, avant PHP 5.1.0, cette intervalle va du 01-01-1970 au 19-01-2038 sur quelques systèmes (e.g. Windows).
5.1.0

Émet un message de type E_STRICT et E_NOTICE lors d'erreurs de fuseaux horaires.

5.1.1 Il y a plusieurs constantes utiles de formats date/heure standards qui peuvent être utilisées pour spécifier le paramètre format.

Exemples

Exemple #1 Exemple avec date()

<?php
// Définit le fuseau horaire par défaut à utiliser. Disponible depuis PHP 5.1
date_default_timezone_set('UTC');


// Affichage de quelque chose comme : Monday
echo date("l");

// Affichage de quelque chose comme : Monday 8th of August 2005 03:12:46 PM
echo date('l jS \of F Y h:i:s A');

// Affiche : July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " date("l"mktime(000712000));

/* utilise les constantes dans le paramètre format */
// Affichage de quelque chose comme : Mon, 15 Aug 2005 15:12:46 UTC
echo date(DATE_RFC822);

// Affichage de quelque chose comme : 2000-07-01T00:00:00+00:00
echo date(DATE_ATOMmktime(000712000));
?>

Vous pouvez faire afficher un caractère spécial dans la chaîne de format en le protégeant par un antislash. Si le caractère est lui-même une séquence incluant un antislash, vous devrez protéger aussi l'antislash.

Exemple #2 Protection des caractères dans la fonction date()

<?php
// Affichage de quelque chose comme : Wednesday the 15th
echo date('l \t\h\e jS');
?>

Il est possible d'utiliser date() et mktime() ensemble pour générer des dates dans le futur ou dans le passé.

Exemple #3 Exemple avec date() et mktime()

<?php
$tomorrow  
mktime(000date("m")  , date("d")+1date("Y"));
$lastmonth mktime(000date("m")-1date("d"),   date("Y"));
$nextyear  mktime(000date("m"),   date("d"),   date("Y")+1);
?>

Note:

Cette méthode est plus sûre que simplement ajouter ou retrancher le nombre de secondes dans une journée ou un mois à un timestamp, à cause des heures d'hiver et d'été.

Voici maintenant quelques exemples de formatage avec date(). Notez que vous devriez échapper tous les autres caractères, car s'ils ont une signification spéciale, ils risquent de produire des effets secondaires indésirables. Notez aussi que les versions futures de PHP peuvent attribuer une signification à des lettres qui sont actuellement inertes. Lorsque vous échappez les caractères, pensez à utiliser des guillemets simples, pour que les séquences \n ne deviennent pas des nouvelles lignes.

Exemple #4 Exemple avec date()

<?php
// Aujourd'hui, le 12 Mars 2001, 5:16:18 pm, Fuseau horaire 
// Mountain Standard Time (MST)
 
$today date("F j, Y, g:i a");                   // March 10, 2001, 5:16 pm
$today date("m.d.y");                           // 03.10.01
$today date("j, n, Y");                         // 10, 3, 2001
$today date("Ymd");                             // 20010310
$today date('h-i-s, j-m-y, it is w Day');       // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today date('\i\t \i\s \t\h\e jS \d\a\y.');     // It is the 10th day (10ème jour du mois).
$today date("D M j G:i:s T Y");                 // Sat Mar 10 17:16:18 MST 2001
$today date('H:m:s \m \e\s\t\ \l\e\ \m\o\i\s'); // 17:03:18 m est le mois
$today date("H:i:s");                           // 17:16:18
?>

Pour formater des dates dans d'autres langues, utilisez les fonctions setlocale() et strftime() au lieu de la fonction date().

Notes

Note:

Pour générer un timestamp à partir d'une représentation de date, vous pouvez utiliser la fonction strtotime(). De plus, certaines bases de données disposent de fonctions pour convertir leurs propres formats de date en timestamp (par exemple, MySQL et sa fonction » UNIX_TIMESTAMP()).

Astuce

Un timestamp représentant le début de la requête est disponible dans la variable $_SERVER['REQUEST_TIME'] depuis PHP 5.1.

Voir aussi



getdate

(PHP 4, PHP 5)

getdateRetourne la date/heure

Description

array getdate ([ int $timestamp = time() ] )

Retourne un tableau associatif contenant les informations de date et d'heure du timestamp timestamp lorsqu'il est fourni, sinon, le timestamp de la date/heure courante locale.

Liste de paramètres

timestamp

Le paramètre optionnel timestamp est un timestamp Unix de type entier qui vaut par défaut l'heure courante locale si le paramètre timestamp n'est pas fourni. En d'autres termes, il vaut par défaut la valeur de la fonction time().

Valeurs de retour

Retourne un tableau associatif contenant les informations de date et d'heure du timestamp timestamp. Les éléments du tableau associatif retourné sont les suivants :

Nom des clés du tableau associatif retourné
Clé Description Exemple de valeur retournée
"seconds" Représentation numérique des secondes 0 à 59
"minutes" Représentation numérique des minutes 0 à 59
"hours" Représentation numérique des heures 0 à 23
"mday" Représentation numérique du jour du mois courant 1 à 31
"wday" Représentation numérique du jour de la semaine courante 0 (pour Dimanche) à 6 (pour Samedi)
"mon" Représentation numérique du mois 1 à 12
"year" Année, sur 4 chiffres Exemples : 1999 ou 2003
"yday" Représentation numérique du jour de l'année 0 à 365
"weekday" Version texte du jour de la semaine Sunday à Saturday
"month" Version texte du mois, comme January ou March January à December
0 Nombre de secondes depuis l'époque Unix, similaire à la valeur retournée par la fonction time() et utilisée par date(). Dépend du système, typiquement de -2147483648 à 2147483647.

Exemples

Exemple #1 Exemple avec getdate()

<?php
$today 
getdate();
print_r($today);
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Array
(
     [seconds] => 40
     [minutes] => 58
     [hours]   => 21
     [mday]    => 17
     [wday]    => 2
     [mon]     => 6
     [year]    => 2003
     [yday]    => 167
     [weekday] => Tuesday
     [month]   => June
     [0]       => 1055901520
)

Voir aussi

  • date() - Formate une date/heure locale
  • idate() - Formate une date/heure locale en tant qu'entier
  • localtime() - Récupère l'heure locale
  • time() - Retourne le timestamp UNIX actuel
  • setlocale() - Modifie les informations de localisation



gettimeofday

(PHP 4, PHP 5)

gettimeofdayRetourne l'heure actuelle

Description

mixed gettimeofday ([ bool $return_float = false ] )

C'est une interface avec gettimeofday(2). Elle retourne un tableau associatif qui contient les informations retournées par le système.

Liste de paramètres

return_float

Lorsque défini à TRUE, un nombre décimal est retourné à la place d'un tableau.

Valeurs de retour

Par défaut, un tableau est retourné. Si le paramètre return_float est défini, alors un nombre décimal sera retourné.

Clés du tableau :

  • "sec" : secondes depuis l'époque Unix
  • "usec" : microsecondes
  • "minuteswest" : minutes de décalage par rapport à Greenwich, vers l'Ouest.
  • "dsttime" : type de correction dst

Historique

Version Description
5.1.0 Le paramètre return_float a été ajouté.

Exemples

Exemple #1 Exemple avec gettimeofday()

<?php
print_r
(gettimeofday());

echo 
gettimeofday(true);
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Array
(
   [sec] => 1073504408
   [usec] => 238215
   [minuteswest] => 0
   [dsttime] => 1
)

1073504408.23910



gmdate

(PHP 4, PHP 5)

gmdateFormate une date/heure GMT/CUT

Description

string gmdate ( string $format [, int $timestamp = time() ] )

gmdate() est identique à la fonction date(), hormis le fait que le temps retourné est GMT (Greenwich Mean Time).

Liste de paramètres

format

Le format de la date en sortie. Voir les options de formatage pour la fonction date().

timestamp

Le paramètre optionnel timestamp est un timestamp Unix de type entier qui vaut par défaut l'heure courante locale si le paramètre timestamp n'est pas fourni. En d'autres termes, il vaut par défaut la valeur de la fonction time().

Valeurs de retour

Retourne une date formatée. Si une valeur non numérique est utilisée pour le paramètre timestamp, FALSE est retourné et une erreur de niveau E_WARNING sera émise.

Historique

Version Description
5.1.0 L'intervalle de validité d'un timestamp est typiquement depuis le Vendredi 13 Décembre 1901 20:45:54 GMT au 19 Janvier 2038 03:14:07 GMT. (ce qui correspond aux valeurs minimales et maximales d'un entier 32 bits signé). Cependant, avant PHP 5.1.0, cet intervalle était limité de 01-01-1970 à 19-01-2038 sous quelques systèmes (e.g. Windows).
5.1.1 Il y a quelques constants utiles pour les formats standards date/heure qui peuvent être utilisées dans le paramètre format.

Exemples

Exemple #1 Exemple avec gmdate()

Lorsque cette fonction est exécutée en Finlande (GMT +0200), la première ligne ci-dessous affichera "Jan 01 1998 00:00:00", tandis que la seconde affichera "Dec 31 1997 22:00:00".

<?php
echo date("M d Y H:i:s"mktime(000111998));
echo 
gmdate("M d Y H:i:s"mktime(000111998));
?>

Voir aussi

  • date() - Formate une date/heure locale
  • mktime() - Retourne le timestamp UNIX d'une date
  • gmmktime() - Retourne le timestamp UNIX d'une date GMT
  • strftime() - Formate une date/heure locale avec la configuration locale



gmmktime

(PHP 4, PHP 5)

gmmktimeRetourne le timestamp UNIX d'une date GMT

Description

int gmmktime ([ int $hour = gmdate("H") [, int $minute = gmdate("i") [, int $second = gmdate("s") [, int $month = gmdate("n") [, int $day = gmdate("j") [, int $year = gmdate("Y") [, int $is_dst = -1 ]]]]]]] )

Identique à la fonction mktime() excepté le fait que les paramètres passés sont GMT. gmmktime() utilise en interne la fonction mktime(), donc, seuls les temps valides dans la zone locale dérivée peuvent être utilisés.

Comme mktime(), les arguments restants peuvent être ignorés. Ils prendront alors leurs valeurs GMT actuelles.

Liste de paramètres

hour

Le nombre d'heures depuis le début de la journée fixée par les paramètres month, day et year. Les valeurs négatives font références aux heures avant minuit du jour en question. Les valeurs supérieures à 23 font références aux heures associées pour le(s) jour(s) suivant(s).

minute

Le nombre de minutes depuis le début de l'heure hour. Les valeurs négatives font références aux minutes de l'heure précédente. Les valeurs supérieures à 59 font références aux minutes associées pour l'(les) heure(s) suivante(s).

second

Le nombre de secondes depuis le début de la minute minute. Les valeurs négatives font références aux secondes de la minute précédente. Les valeurs supérieures à 59 font références aux secondes associées à la(les) minute(s) suivante(s).

month

Le nombre de mois depuis la fin de l'année précédente. Les valeurs comprises entre 1 et 12 font références aux mois du calendrier normal de l'année en question. Les valeurs inférieures à 1 (y compris les valeurs négatives) font références aux mois de l'année précédente dans l'ordre inverse, aussi, 0 correspond à décembre, -1 à novembre, etc. Les valeurs supérieures à 12 font références au mois correspondant dans l'(les) année(s) suivante(s).

day

Le nombre de jours depuis la fin du mois précédent. Les valeurs comprises entre 1 et 28, 29, 30, 31 (suivant le mois) font références aux jours normaux dans le mois courant. Les valeurs inférieures à 1 (y compris les valeurs négatives) font références aux jours du mois précédent, aussi, 0 correspond au dernier jour du mois précédent, -1, le jour d'avant, etc. Les valeurs supérieures au nombre de jours du mois courant font références aux jours correspondants du(des) mois suivant(s).

year

L'année

is_dst

Les paramètres représentent toujours une date GMT donc, le paramètre is_dst n'influence pas le résultat.

Valeurs de retour

Retourne un timestamp Unix de type entier.

Historique

Version Description
5.1.0 Depuis PHP 5.1.0, le paramètre is_dst est devenu obsolète. Comme résultat, le nouveau gestionnaire de fuseau horaire doit être utilisé à la place.

Exemples

Exemple #1 Exemple avec gmmktime()

<?php
// Affiche : July 1, 2000 is on a Friday
echo "July 1, 2000 is on a " date("l"gmmktime(000712000));
?>

Voir aussi

  • mktime() - Retourne le timestamp UNIX d'une date
  • date() - Formate une date/heure locale
  • time() - Retourne le timestamp UNIX actuel



gmstrftime

(PHP 4, PHP 5)

gmstrftimeFormate une date/heure GMT/CUT en fonction de la configuration locale

Description

string gmstrftime ( string $format [, int $timestamp = time() ] )

gmstrftime() se comporte exactement comme strftime() hormis le fait que l'heure utilisée est celle de Greenwich (Greenwich Mean Time, GMT). Par exemple, dans la zone Eastern Standard Time (est des USA) est 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".

Liste de paramètres

format

Voir la description de la fonction strftime().

timestamp

Le paramètre optionnel timestamp est un timestamp Unix de type entier qui vaut par défaut l'heure courante locale si le paramètre timestamp n'est pas fourni. En d'autres termes, il vaut par défaut la valeur de la fonction time().

Valeurs de retour

Retourne une chaîne de caractères formatée suivant le format donné par le paramètre timestamp ou la date courante si aucun paramètre timestamp n'est fourni. Les noms des mois, des jours de la semaine et des autres chaînes dépendant d'une localisation donnée, respectent la localisation courante définie par la fonction setlocale().

Exemples

Exemple #1 Exemple avec gmstrftime()

<?php
setlocale
(LC_TIME'en_US');
echo 
strftime("%b %d %Y %H:%M:%S"mktime(2000123198)) . "\n";
echo 
gmstrftime("%b %d %Y %H:%M:%S"mktime(2000123198)) . "\n";
?>

Voir aussi

  • strftime() - Formate une date/heure locale avec la configuration locale



idate

(PHP 5)

idateFormate une date/heure locale en tant qu'entier

Description

int idate ( string $format [, int $timestamp = time() ] )

idate() retourne une nombre formaté avec le format format et représentant le timestamp timestamp ou l'heure courant si timestamp est omis. En d'autres termes, le paramètre timestamp est optionnel et la valeur par défaut est la valeur retournée par la fonction time().

À l'inverse de la fonction date(), idate() accepte juste un caractère comme paramètre format.

Liste de paramètres

format

Les caractères suivants sont reconnus dans la chaîne de caractères du paramètre format
Caractères de format Description
B Temps Internet Swatch Beat
d Le jour du mois
h Heure (format 12 heures)
H Heure (format 24 heures)
i Minutes
I(i, en majuscule) Retourne 1 si l'heure d'été est activée, 0 sinon
L(l, en majuscule) Retourne 1 pour une année bissextile, 0 sinon
m Numéro du mois
s Secondes
t Jour du mois courant
U Secondes depuis l'époque Unix - 1 Janvier 1970 00:00:00 UTC - c'est la même chose que la fonction time()
w Jour de la semaine (0 pour Dimanche)
W Le numéro de semaine de l'année ; selon l'ISO-8601, les semaines débutent le Lundi
y Année sur 1 ou 2 chiffres, voir la note plus bas
Y Année sur 4 chiffres
z Jour de l'année
Z Décalage horaire, en secondes

timestamp

Le paramètre optionnel timestamp est un timestamp Unix de type entier qui vaut par défaut l'heure courante locale si le paramètre timestamp n'est pas fourni. En d'autres termes, il vaut par défaut la valeur de la fonction time().

Valeurs de retour

Retourne un entier.

Sachant que idate() retourne toujours un entier et qu'il ne peut commencer par 0, idate() peut retourner moins de chiffres que ce dont on pourrait espérer. Voir l'exemple ci-dessous.

Erreurs / Exceptions

Chaque appel à une fonction date/heure générera un message de type E_NOTICE si le fuseau horaire n'est pas valide, et/ou un message de type E_STRICT ou E_WARNING si vous utilisez la configuration du système ou la variable d'environnement TZ. Voir aussi date_default_timezone_set()

Historique

Version Description
5.1.0

Émet un message de type E_STRICT et E_NOTICE lors d'erreurs de fuseaux horaires.

Exemples

Exemple #1 Exemple avec idate()

<?php
$timestamp 
strtotime('1st January 2004'); //1072915200

// ceci affiche l'année sur deux chiffres
// néanmoins, vu que ce chiffre va commencer par "0",
// seul "4" sera affiché
echo idate('y'$timestamp);
?>

Voir aussi

  • date() - Formate une date/heure locale
  • getdate() - Retourne la date/heure
  • time() - Retourne le timestamp UNIX actuel



localtime

(PHP 4, PHP 5)

localtimeRécupère l'heure locale

Description

array localtime ([ int $timestamp = time() [, bool $is_associative = false ]] )

localtime() retourne un tableau identique à la structure retournée par la fonction C localtime.

Liste de paramètres

timestamp

Le paramètre optionnel timestamp est un timestamp Unix de type entier qui vaut par défaut l'heure courante locale si le paramètre timestamp n'est pas fourni. En d'autres termes, il vaut par défaut la valeur de la fonction time().

is_associative

si défini à FALSE ou ignoré, force localtime() à retourner un tableau à index numérique. S'il est mis à TRUE, localtime() retourne un tableau associatif, avec tous les éléments de la structure C, accessible avec les clés. Les noms des différentes clés du tableau associatif sont les suivants :

  • "tm_sec" : secondes, de 0 à 59
  • "tm_min" : minutes, de 0 à 59
  • "tm_hour" : heure, de 0 à 23
  • "tm_mday" : jour du mois, de 1 à 31
  • "tm_mon" : mois de l'année, de 0 (Jan) à 11 (Déc)
  • "tm_year" : Année depuis 1900
  • "tm_wday" : Jour de la semaine, de 0 (Dim) à 6 (Sam)
  • "tm_yday" : Jour de l'année, de 0 à 365
  • "tm_isdst" : Est-ce que l'heure d'hiver a pris effet ? Valeur positive si oui, 0 sinon, valeur négative si le résultat n'a pu être déterminé.

Erreurs / Exceptions

Chaque appel à une fonction date/heure générera un message de type E_NOTICE si le fuseau horaire n'est pas valide, et/ou un message de type E_STRICT ou E_WARNING si vous utilisez la configuration du système ou la variable d'environnement TZ. Voir aussi date_default_timezone_set()

Historique

Version Description
5.1.0

Émet un message de type E_STRICT et E_NOTICE lors d'erreurs de fuseaux horaires.

Exemples

Exemple #1 Exemple avec localtime()

<?php
$localtime 
localtime();
$localtime_assoc localtime(time(), true);
print_r($localtime);
print_r($localtime_assoc);
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Array
(
    [0] => 24
    [1] => 3
    [2] => 19
    [3] => 3
    [4] => 3
    [5] => 105
    [6] => 0
    [7] => 92
    [8] => 1
)

Array
(
    [tm_sec] => 24
    [tm_min] => 3
    [tm_hour] => 19
    [tm_mday] => 3
    [tm_mon] => 3
    [tm_year] => 105
    [tm_wday] => 0
    [tm_yday] => 92
    [tm_isdst] => 1
)

Voir aussi



microtime

(PHP 4, PHP 5)

microtimeRetourne le timestamp UNIX actuel avec les microsecondes

Description

mixed microtime ([ bool $get_as_float = false ] )

microtime() retourne le timestamp Unix, avec les microsecondes. Cette fonction est uniquement disponible sur les systèmes qui supportent la fonction gettimeofday().

Liste de paramètres

get_as_float

Si utilisé et défini à TRUE, microtime() retournera un nombre à virgule flottante au lieu d'une chaîne de caractères, tel que décrit dans la section des valeurs retournées ci-dessous.

Valeurs de retour

Par défaut, microtime() retourne une chaîne de caractères au format "msec sec", où sec est le temps courant mesuré en nombre de secondes depuis l'époque Unix (1 Janvier 1970, 00:00:00 GMT), et msec est le nombre de microsecondes qui se sont écoulées depuis sec exprimé en secondes.

Si get_as_float est défini à TRUE, alors microtime() retourne un nombre à virgule flottante, qui représente le temps courant, en secondes, depuis l'époque Unix, précis à la microseconde près.

Historique

Version Description
5.0.0 Le paramètre get_as_float a été ajouté.

Exemples

Exemple #1 Durée d'exécution d'un script avec la fonction microtime()

<?php
/**
* Fonction simple identique à celle en PHP 5 qui va suivre
*/
function microtime_float()
{
    list(
$usec$sec) = explode(" "microtime());
    return ((float)
$usec + (float)$sec);
}

$time_start microtime_float();

// Attend pendant un moment
usleep(100);

$time_end microtime_float();
$time $time_end $time_start;

echo 
"Ne rien faire pendant $time secondes\n";
?>

Exemple #2 Durée d'exécution d'un script en PHP 5

<?php
$time_start 
microtime(true);

// Sleep for a while
usleep(100);

$time_end microtime(true);
$time $time_end $time_start;

echo 
"Did nothing in $time seconds\n";
?>

Voir aussi

  • time() - Retourne le timestamp UNIX actuel



mktime

(PHP 4, PHP 5)

mktime Retourne le timestamp UNIX d'une date

Description

int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )

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 00:00:00 GMT) et le temps spécifié.

Les arguments peuvent être omis, de droite à gauche, et tous les arguments manquants sont utilisés avec la valeur courante de l'heure et du jour.

Notes

Note:

Depuis PHP 5.1, lorsqu'appelée sans argument, la fonction mktime() émet une alerte de type E_STRICT : utilisez la fonction time() à la place.

Liste de paramètres

hour

Le nombre d'heures depuis le début de la journée fixée par les paramètres month, day et year. Les valeurs négatives font références aux heures avant minuit du jour en question. Les valeurs supérieures à 23 font références aux heures associées pour le(s) jour(s) suivant(s).

minute

Le nombre de minutes depuis le début de l'heure hour. Les valeurs négatives font références aux minutes de l'heure précédente. Les valeurs supérieures à 59 font références aux minutes associées pour l'(les) heure(s) suivante(s).

second

Le nombre de secondes depuis le début de la minute minute. Les valeurs négatives font références aux secondes de la minute précédente. Les valeurs supérieures à 59 font références aux secondes associées à la(les) minute(s) suivante(s).

month

Le nombre de mois depuis la fin de l'année précédente. Les valeurs comprises entre 1 et 12 font références aux mois du calendrier normal de l'année en question. Les valeurs inférieures à 1 (y compris les valeurs négatives) font références aux mois de l'année précédente dans l'ordre inverse, aussi, 0 correspond à décembre, -1 à novembre, etc. Les valeurs supérieures à 12 font références au mois correspondant dans l'(les) année(s) suivante(s).

day

Le nombre de jours depuis la fin du mois précédent. Les valeurs comprises entre 1 et 28, 29, 30, 31 (suivant le mois) font références aux jours normaux dans le mois courant. Les valeurs inférieures à 1 (y compris les valeurs négatives) font références aux jours du mois précédent, aussi, 0 correspond au dernier jour du mois précédent, -1, le jour d'avant, etc. Les valeurs supérieures au nombre de jours du mois courant font références aux jours correspondants du(des) mois suivant(s).

year

L'année, peut être sur deux ou quatre chiffres, avec des valeurs allant de 0 à 69, correspondant au valeur 2000 à 2069 et 70 à 100, correspondant au valeur 1970 à 2000. Sur les systèmes où time_t un entier signé sur 32bits, ce qui est le plus courant de nos jours, la période valide pour year est quelque part près de 1901 et 2038. Cependant, avant PHP 5.1.0, cette intervalle était limitée de 1970 à 2038 sur quelques systèmes (i.e. Windows).

is_dst

Ce paramètre peut être mis à 1 si l'heure d'hiver est appliquée (DST), 0 si elle ne l'est pas, et -1 (par défaut) si on ne sait pas. Si l'on ne sait pas, PHP tente de le traiter lui-même. Ceci peut occasionner des résultats inattendus (mais néanmoins correct). Quelques temps sont invalides si DST est activé sur les systèmes où PHP fonctionne ou is_dist est défini à 1. Si DST est activé e.g. 2:00, tous les temps entre 2:00 et 3:00 sont invalides et la fonction mktime() retourne une valeur indéfinie (généralement une valeur négative). Quelques systèmes (e.g. Solaris 8) activent DST à minuit, donc, le temps 0:30 du jour lorsque DST est activé est évalué à 23:30 du jour précédent.

Note:

Depuis PHP 5.1.0, ce paramètre est obsolète. Comme résultat, le nouveau gestionnaire de fuseau horaire doit être utilisé à la place.

Valeurs de retour

mktime() retourne un timestamp Unix des arguments donnés. Si les arguments ne sont pas valides, la fonction retournera FALSE (avant PHP 5.1, elle retournait -1).

Erreurs / Exceptions

Chaque appel à une fonction date/heure générera un message de type E_NOTICE si le fuseau horaire n'est pas valide, et/ou un message de type E_STRICT ou E_WARNING si vous utilisez la configuration du système ou la variable d'environnement TZ. Voir aussi date_default_timezone_set()

Historique

Version Description
5.3.0 mktime() lance maintenant une alerte de type E_DEPRECATED si le paramètre is_dst est utilisé.
5.1.0 Le paramètre is_dst est obsolète. Fait que la fonction retourne FALSE en cas d'erreur, au lieu de -1. La fonction a été modifiée pour accepter la valeur zéro comme année, mois ou bien jour.
5.1.0 Lorsqu'appelée sans argument, la fonction mktime() émet une alerte de type E_STRICT. Utilisez la fonction time() à la place.
5.1.0

Émet un message de type E_STRICT et E_NOTICE lors d'erreurs de fuseaux horaires.

Exemples

Exemple #1 Exemple simple avec mktime()

<?php
// Configuration du fuseau horaire. Disponible depuis PHP 5.1
date_default_timezone_set('UTC');

// Affiche : July 1, 2000 est un Saturday
echo "July 1, 2000 est un " date("l"mktime(000712000));

// Affiche quelque chose comme : 2006-04-05T01:02:03+00:00
echo date('c'mktime(123452006));
?>

Exemple #2 Exemple avec mktime()

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

<?php
echo date("M-d-Y"mktime(00012321997));
echo 
date("M-d-Y"mktime(0001311997));
echo 
date("M-d-Y"mktime(000111998));
echo 
date("M-d-Y"mktime(0001198));
?>

Exemple #3 Dernier jour d'un mois

Le dernier jour d'un mois peut être décrit comme le jour "0" du mois suivant, et non pas le jour -1. Les deux exemples suivants vont donner : "Le dernier jour de Février 2000 est: 29".

<?php
$lastday 
mktime(000302000);
echo 
strftime("Le dernier jour de Fevrier 2000 est : %d"$lastday);
$lastday mktime(0004, -312000);
echo 
strftime("Le dernier jour de Fevrier 2000 est : %d"$lastday);
?>

Notes

Attention

Avant PHP 5.1.0, les valeurs négatives des timestamp ne sont pas supportées sous toutes les versions actuelles de Microsoft Windows. De ce fait, l'intervalle valide pour les années est de 1970 à 2038, inclus.

Voir aussi

  • checkdate() - Valide une date grégorienne
  • gmmktime() - Retourne le timestamp UNIX d'une date GMT
  • date() - Formate une date/heure locale
  • time() - Retourne le timestamp UNIX actuel



strftime

(PHP 4, PHP 5)

strftimeFormate une date/heure locale avec la configuration locale

Description

string strftime ( string $format [, int $timestamp = time() ] )

Formate une date et/ou une heure suivant la localisation locale. Les noms des mois, des jours de la semaine mais aussi d'autres chaînes dépendant de la location, respecteront la localisation courante définie par la fonction setlocale().

Tous les caractères modificateurs ne sont pas toujours supportés par toutes les bibliothèques C. Dans ce cas, ils ne seront pas supportés par PHP non plus. De plus, toutes les plates-formes ne supportent pas les timestamps négatifs, et vos dates pourraient être limitées par le début de l'époque Unix. Cela signifie que %e, %T, %R et %D (et peut être d'autres) et les dates antérieures au 1er Janvier 1970 ne fonctionneront pas sous Windows, sur certaines distributions de Linux, et sur certains systèmes d'exploitation. Pour Windows, une liste complète des options de conversion est disponible sur le » site de MSDN.

Liste de paramètres

format

Les caractères suivants sont reconnus dans le paramètre format
format Description Exemple de valeurs retournées
Jour --- ---
%a Nom abrégé du jour de la semaine De Sun à Sat
%A Nom complet du jour de la semaine De Sunday à Saturday
%d Jour du mois en numérique, sur 2 chiffres (avec le zéro initial) De 01 à 31
%e Jour du mois, avec un espace précédant le premier chiffre. L'implémentation Windows est différente, voyez après pour plus d'informations. De 1 à 31
%j Jour de l'année, sur 3 chiffres avec un zéro initial 001 à 366
%u Représentation ISO-8601 du jour de la semaine De 1 (pour Lundi) à 7 (pour Dimanche)
%w Représentation numérique du jour de la semaine De 0 (pour Dimanche) à 6 (pour Samedi)
Semaine --- ---
%U Numéro de la semaine de l'année donnée, en commençant par le premier Lundi comme première semaine 13 (pour la 13ème semaine pleine de l'année)
%V Numéro de la semaine de l'année, suivant la norme ISO-8601:1988, en commençant comme première semaine, la semaine de l'année contenant au moins 4 jours, et où Lundi est le début de la semaine De 01 à 53 (où 53 compte comme semaine de chevauchement)
%W Une représentation numérique de la semaine de l'année, en commençant par le premier Lundi de la première semaine 46 (pour la 46ème semaine de la semaine commençant par un Lundi)
Mois --- ---
%b Nom du mois, abrégé, suivant la locale De Jan à Dec
%B Nom complet du mois, suivant la locale De January à December
%h Nom du mois abrégé, suivant la locale (alias de %b) De Jan à Dec
%m Mois, sur 2 chiffres De 01 (pour Janvier) à 12 (pour Décembre)
Année --- ---
%C Représentation, sur 2 chiffres, du siècle (année divisée par 100, réduit à un entier) 19 pour le 20ème siècle
%g Représentation, sur 2 chiffres, de l'année, compatible avec les standards ISO-8601:1988 (voyez %V) Exemple : 09 pour la semaine du 6 janvier 2009
%G La version complète à quatre chiffres de %g Exemple : 2008 pour la semaine du 3 janvier 2009
%y L'année, sur 2 chiffres Exemple : 09 pour 2009, 79 pour 1979
%Y L'année, sur 4 chiffres Exemple : 2038
Heure --- ---
%H L'heure, sur 2 chiffres, au format 24 heures De 00 à 23
%I Heure, sur 2 chiffres, au format 12 heures De 01 à 12
%l ('L' minuscule) Heure, au format 12 heures, avec un espace précédant de complétion pour les heures sur un chiffre De 1 à 12
%M Minute, sur 2 chiffres De 00 à 59
%p 'AM' ou 'PM', en majuscule, basé sur l'heure fournie Exemple : AM pour 00:31, PM pour 22:23
%P 'am' ou 'pm', en minuscule, basé sur l'heure fournie Exemple : am pour 00:31, pm pour 22:23
%r Identique à "%I:%M:%S %p" Exemple : 09:34:17 PM pour 21:34:17
%R Identique à "%H:%M" Exemple : 00:35 pour 12:35 AM, 16:44 pour 4:44 PM
%S Seconde, sur 2 chiffres De 00 à 59
%T Identique à "%H:%M:%S" Exemple : 21:34:17 pour 09:34:17 PM
%X Représentation de l'heure, basée sur la locale, sans la date Exemple : 03:59:16 ou 15:59:16
%z Soit le décalage horaire depuis UTC, ou son abréviation (suivant le système d'exploitation) Exemple : -0500 ou EST pour l'heure de l'Est
%Z Le décalage horaire ou son abréviation NON fournie par %z (suivant le système d'exploitation) Exemple : -0500 ou EST pour l'heure de l'Est
L'heure et la date --- ---
%c Date et heure préférées, basées sur la locale Exemple : Tue Feb 5 00:45:10 2009 pour le 5 Février 2009 à 12:45:10 AM
%D Identique à "%m/%d/%y" Exemple : 02/05/09 pour le 5 Février 2009
%F Identique à "%Y-%m-%d" (utilisé habituellement par les bases de données) Exemple : 2009-02-05 pour le 5 février 2009
%s Timestamp de l'époque Unix (identique à la fonction time()) Exemple : 305815200 pour le 10 Septembre 1979 08:40:00 AM
%x Représentation préférée de la date, basée sur la locale, sans l'heure Exemple : 02/05/09 pour le 5 Février 2009
Divers --- ---
%n Une nouvelle ligne ("\n") ---
%t Une tabulation ("\t") ---
%% Le caractère de pourcentage ("%") ---

La longueur maximale de ce paramètre est de 1023 caractères.

Avertissement

Contrairement à la norme ISO-9899:1999, Sun Solaris commence avec le Dimanche à 1. Aussi, le format %u ne fonctionnera pas tel que décrit dans ce manuel.

Avertissement

Windows seulement: Le modificateur %e n'est pas supporté sous Windows. Pour calculer la valeur, le modificateur %#d peut être utilisé à la place. L'exemple d'après illustre la manière d'écrire un code cross-plateforme.

Avertissement

Mac OS X uniquement : Le modificateur %P n'est pas supporté sous l'implémentation de Mac OS X de cette fonction.

timestamp

Le paramètre optionnel timestamp est un timestamp Unix de type entier qui vaut par défaut l'heure courante locale si le paramètre timestamp n'est pas fourni. En d'autres termes, il vaut par défaut la valeur de la fonction time().

Valeurs de retour

Retourne une chaîne de caractères formatée suivant le paramètre format donné, en utilisant le paramètre timestamp ou la date locale courante si aucun timestamp n'est fourni. Les noms des mois, des jours de la semaine mais aussi d'autres chaînes dépendant de la location, respecteront la localisation courante définie par la fonction setlocale().

Erreurs / Exceptions

Chaque appel à une fonction date/heure générera un message de type E_NOTICE si le fuseau horaire n'est pas valide, et/ou un message de type E_STRICT ou E_WARNING si vous utilisez la configuration du système ou la variable d'environnement TZ. Voir aussi date_default_timezone_set()

Vu que la sortie dépend de la bibliothèque C sous-jacente, quelques spécificateurs de conversion ne sont pas supportés. Sous Windows, le fait de fournir un spécificateur de conversion inconnu retournera 5 messages de niveau E_WARNING et retournera FALSE au final. Sous d'autres systèmes d'exploitation, vous ne recevrez aucun message de niveau E_WARNING et la sortie contiendra les spécificateurs non convertis.

Historique

Version Description
5.1.0

Émet un message de type E_STRICT et E_NOTICE lors d'erreurs de fuseaux horaires.

Exemples

Cet exemple ne fonctionnera que si vous avez les locales respectives installées sur votre système.

Exemple #1 Exemple avec strftime()

<?php
setlocale
(LC_TIME"C");
echo 
strftime("%A");
setlocale(LC_TIME"fi_FI");
echo 
strftime(" in Finnish is %A,");
setlocale(LC_TIME"fr_FR");
echo 
strftime(" in French %A and");
setlocale(LC_TIME"de_DE");
echo 
strftime(" in German %A.\n");
?>

Exemple #2 Exemple au format de date ISO 8601:1988

<?php
/*     December 2002 / January 2003
ISOWk  M   Tu  W   Thu F   Sa  Su
----- ----------------------------
51     16  17  18  19  20  21  22
52     23  24  25  26  27  28  29
1      30  31   1   2   3   4   5
2       6   7   8   9  10  11  12
3      13  14  15  16  17  18  19   */

// Affiche : 12/28/2002 - %V,%G,%Y = 52,2002,2002
echo "12/28/2002 - %V,%G,%Y = " strftime("%V,%G,%Y"strtotime("12/28/2002")) . "\n";

// Affiche : 12/30/2002 - %V,%G,%Y = 1,2003,2002
echo "12/30/2002 - %V,%G,%Y = " strftime("%V,%G,%Y"strtotime("12/30/2002")) . "\n";

// Affiche : 1/3/2003 - %V,%G,%Y = 1,2003,2003
echo "1/3/2003 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("1/3/2003")) . "\n";

// Affiche : 1/10/2003 - %V,%G,%Y = 2,2003,2003
echo "1/10/2003 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("1/10/2003")) . "\n";

/*     December 2004 / January 2005
ISOWk  M   Tu  W   Thu F   Sa  Su
----- ----------------------------
51     13  14  15  16  17  18  19
52     20  21  22  23  24  25  26
53     27  28  29  30  31   1   2
1       3   4   5   6   7   8   9
2      10  11  12  13  14  15  16   */

// Affiche : 12/23/2004 - %V,%G,%Y = 52,2004,2004
echo "12/23/2004 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("12/23/2004")) . "\n";

// Affiche : 12/31/2004 - %V,%G,%Y = 53,2004,2004
echo "12/31/2004 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("12/31/2004")) . "\n";

// Affiche : 1/2/2005 - %V,%G,%Y = 53,2004,2005
echo "1/2/2005 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("1/2/2005")) . "\n";

// Affiche : 1/3/2005 - %V,%G,%Y = 1,2005,2005
echo "1/3/2005 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("1/3/2005")) . "\n";

?>

Exemple #3 %e fonctionnant sous toute plateforme

<?php

// Jan 1 : résultats dans : '%e%1%' (%%, e, %%, %e, %%)
$format '%%e%%%e%%';

// Vérifie sous Windows, pour trouver et remplacer le modificateur %e 
// correctement
if (strtoupper(substr(PHP_OS03)) == 'WIN') {
    
$format preg_replace('#(?<!%)((?:%%)*)%e#''\1%#d'$format);
}

echo 
strftime($format);
?>

Exemple #4 Affiche tous les formats connus ou non.

<?php
// Décrit les formats.
$strftimeFormats = array(
    
'A' => 'Une représentation textuelle complète du jour',
    
'B' => 'Nom du mois complet, basé sur la locale',
    
'C' => 'Représentation sur 2 chiffres de l\'année (année, divisée par 100, tronquée en entier)',
    
'D' => 'Identique à "%m/%d/%y"',
    
'E' => '',
    
'F' => 'Identique à "%Y-%m-%d"',
    
'G' => 'La version complète, sur 4 chiffres de %g',
    
'H' => 'Une représentation sur 2 chiffres de l\'heure au format 24-heures',
    
'I' => 'Une représentation sur 2 chiffres de l\'heure au format 12-heures',
    
'J' => '',
    
'K' => '',
    
'L' => '',
    
'M' => 'Une représentation sur 2 chiffres des minutes',
    
'N' => '',
    
'O' => '',
    
'P' => '"am" ou "pm" (en minuscule) basé sur l\'heure courante',
    
'Q' => '',
    
'R' => 'Identique à "%H:%M"',
    
'S' => 'Une représentation sur 2 chiffres des secondes',
    
'T' => 'Identique à "%H:%M:%S"',
    
'U' => 'Numéro de la semaine pour l\'année courante, en commençant par le premier Dimanche comme première semaine',
    
'V'  => 'ISO-8601:1988 numéro de la semaine de l\'année courante, commençant par la première semaine de l\'année avec au moins 4 jours de semaine, avec le Lundi comme début de semaine',
    
'W' => 'Une représentation numérique de la semaine de l\'année, en commençant par le premier Lundi comme première semaine',
    
'X' => 'Représentation préférée pour l\'heure, basée sur la locale, sans la date',
    
'Y' => 'Une représentation sur 4 chiffres de l\'année',
    
'Z' => 'L\'abréviation du décalage horaire, non fournie par %z (dépend sur système d\'exploitation)',
    
'a' => 'L\'abréviation de la représentation textuelle du jour',
    
'b' => 'L\'abréviation du nom du mois, basée sur la locale',
    
'c' => 'Timestamp préféré basé sur la locale',
    
'd' => 'Jour du mois sur 2 chiffres (avec le zéro initial)',
    
'e' => 'Jour du mois, avec un espace précédent un seul chiffre',
    
'f' => '',
    
'g' => 'Une représentation sur 2 chiffres de l\'année au format ISO-8601:1988 (voir %V)',
    
'h' => 'Abréviation du nom du mois, basée sur la locale (alias de %b)',
    
'i' => '',
    
'j' => 'Jour de l\'année, sur 3 chiffres avec zéro initial',
    
'k' => '',
    
'l' => 'Heure, au format 12-heures, avec un espace précédent un seul chiffre',
    
'm' => 'Une représentation du mois sur 2 chiffres',
    
'n' => 'Un caractère de nouvelle ligne ("\n")',
    
'o' => '',
    
'p' => '"AM" ou "PM" (en majuscule) basé sur l\'heure courante',
    
'q' => '',
    
'r' => 'Identique à "%I:%M:%S %p"',
    
's' => 'Timestamp par rapport à l\'époque Unix',
    
't' => 'Un caractère de tabulation ("\t")',
    
'u' => 'Représentation numérique du jour de la semaine au format ISO-8601',
    
'v' => '',
    
'w' => 'Représentation numérique du jour de la semaine',
    
'x' => 'Représentation préférée de la date, basée sur la locale, sans l\'heure',
    
'y' => 'Représentation de l\'année sur 2 chiffres',
    
'z' => 'Soit le décalage horaire depuis UTC ou son abréviation (suivant le système d\'exploitation)',
    
'%' => 'Un caractère pourcentage ("%")',
);

// Résultats.
$strftimeValues = array();

// 2value les formats tout en supprimant les erreurs.
foreach($strftimeFormats as $format => $description){
    if (
False !== ($value = @strftime("%{$format}"))){
        
$strftimeValues[$format] = $value;
    }
}

// Trouve la valeur la plus longue.
$maxValueLength max(array_map('strlen'$strftimeValues));

// Affiche tous les formats connus.
foreach($strftimeValues as $format => $value){
    echo 
"Format connu : '{$format}' = "str_pad("'{$value}'"$maxValueLength), " ( {$strftimeFormats[$format]} )\n";
}

// Affiche tous les formats non connus.
foreach(array_diff_key($strftimeFormats$strftimeValues) as $format => $description){
    echo 
"Format inconnu : '{$format}'   "str_pad(' '$maxValueLength), ($description " ( {$description} )" ''), "\n";
}
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Format connu : 'A' = 'Friday'            ( Une représentation textuelle complète du jour )
Format connu : 'B' = 'December'          ( Nom du mois complet, basé sur la locale )
Format connu : 'H' = '11'                ( Une représentation sur 2 chiffres de l'heure au format 24-heures )
Format connu : 'I' = '11'                ( Une représentation sur 2 chiffres de l'heure au format 12-heures )
Format connu : 'M' = '24'                ( Une représentation sur 2 chiffres des minutes )
Format connu : 'S' = '44'                ( Une représentation sur 2 chiffres des secondes )
Format connu : 'U' = '48'                ( Numéro de la semaine pour l'année courante, en commençant par le premier Dimanche comme première semaine )
Format connu : 'W' = '48'                ( Une représentation numérique de la semaine de l'année, en commençant par le premier Lundi comme première semaine )
Format connu : 'X' = '11:24:44'          ( Représentation préférée pour l'heure, basée sur la locale, sans la date )
Format connu : 'Y' = '2010'              ( Une représentation sur 4 chiffres de l'année )
Format connu : 'Z' = 'GMT Standard Time' ( L'abréviation du décalage horaire, non fournie par %z (dépend sur système d'exploitation )
Format connu : 'a' = 'Fri'               ( L'abréviation de la représentation textuelle du jour )
Format connu : 'b' = 'Dec'               ( L'abréviation du nom du mois, basée sur la locale )
Format connu : 'c' = '12/03/10 11:24:44' ( Timestamp préféré basé sur la locale )
Format connu : 'd' = '03'                ( Jour du mois sur 2 chiffres (avec le zéro initial) )
Format connu : 'j' = '337'               ( Jour de l'année, sur 3 chiffres avec zéro initial )
Format connu : 'm' = '12'                ( Une représentation du mois sur 2 chiffres )
Format connu : 'p' = 'AM'                ( "AM" ou "PM" (en majuscule) basé sur l'heure courante )
Format connu : 'w' = '5'                 ( Représentation numérique du jour de la semaine )
Format connu : 'x' = '12/03/10'          ( Représentation préférée de la date, basée sur la locale, sans l'heure )
Format connu : 'y' = '10'                ( Représentation de l'année sur 2 chiffres )
Format connu : 'z' = 'GMT Standard Time' ( Soit le décalage horaire depuis UTC ou son abréviation (suivant le système d'exploitation) )
Format connu : '%' = '%'                 ( Un caractère pourcentage ("%") )
Format inconnu : 'C'                       ( Représentation sur 2 chiffres de l'année (année, divisée par 100, tronquée en entier) )
Format inconnu : 'D'                       ( Identique à "%m/%d/%y" )
Format inconnu : 'E'
Format inconnu : 'F'                       ( Identique à "%Y-%m-%d" )
Format inconnu : 'G'                       ( La version complète, sur 4 chiffres de %g )
Format inconnu : 'J'
Format inconnu : 'K'
Format inconnu : 'L'
Format inconnu : 'N'
Format inconnu : 'O'
Format inconnu : 'P'                       ( "am" ou "pm" (en minuscule) basé sur l'heure courante )
Format inconnu : 'Q'
Format inconnu : 'R'                       ( Identique à "%H:%M" )
Format inconnu : 'T'                       ( Identique à "%H:%M:%S" )
Format inconnu : 'V'                       ( ISO-8601:1988 numéro de la semaine de l'année  courante, commençant par la première semaine de l'année avec au moins 4  jours de semaine, avec le Lundi comme début de semaine )
Format inconnu : 'e'                       ( Jour du mois, avec un espace précédent un seul chiffre )
Format inconnu : 'f'
Format inconnu : 'g'                       ( Une représentation sur 2 chiffres de l'année au format ISO-8601:1988 (voir %V) )
Format inconnu : 'h'                       ( Abréviation du nom du mois, basée sur la locale (alias de %b) )
Format inconnu : 'i'
Format inconnu : 'k'
Format inconnu : 'l'                       ( Heure, au format 12-heures, avec un espace précédent un seul chiffre )
Format inconnu : 'n'                       ( Un caractère de nouvelle ligne ("\n") )
Format inconnu : 'o'
Format inconnu : 'q'
Format inconnu : 'r'                       ( Identique à "%I:%M:%S %p" )
Format inconnu : 's'                       ( Timestamp par rapport à l'époque Unix )
Format inconnu : 't'                       ( Un caractère de tabulation ("\t") )
Format inconnu : 'u'                       ( Représentation numérique du jour de la semaine au format ISO-8601 )
Format inconnu : 'v'

Notes

Note: %G et %V, qui sont basées sur la semaine ISO 8601:1988, peut conduire à des résultats inattendus (bien que corrects) si le système de numérotation n'est pas connu. Voir l'exemple %V de cette page.

Voir aussi



strptime

(PHP 5 >= 5.1.0)

strptime Analyse une date générée par strftime()

Description

array strptime ( string $date , string $format )

strptime() retourne un tableau après avoir analysé date, ou FALSE en cas d'erreur.

Les noms des mois et jour de la semaine dépendent de la configuration locale, choisie avec setlocale() (LC_TIME).

Liste de paramètres

date (string)

La chaîne à analyser (e.g. retournée par strftime())

format (string)

Le format utilisé par date (e.g. le même que celui qui a été utilisé par strftime()).

Pour plus d'informations sur les spécificateurs de formats, voyez la fonction strftime().

Valeurs de retour

Retourne un tableau ou FALSE si une erreur survient.

Les paramètres suivants sont retournés dans le tableau
Paramètres Description
"tm_sec" Secondes après la minute (0-61)
"tm_min" Minutes après l'heure (0-59)
"tm_hour" Heure depuis minuit (0-23)
"tm_mday" Jour du mois (1-31)
"tm_mon" Mois depuis janvier (0-11)
"tm_year" Années depuis 1900
"tm_wday" Jours depuis dimanche (0-6)
"tm_yday" Jours depuis le 1er janvier (0-365)
"unparsed" La partie de date qui n'a pas été reconnue par l'analyseur avec le format spécifié.

Exemples

Exemple #1 Exemple avec strptime()

<?php
$format 
'%d/%m/%Y %H:%M:%S';
$strf strftime($format);

echo 
"$strf\n";

print_r(strptime($strf$format));
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

03/10/2004 15:54:19

Array
(
    [tm_sec] => 19
    [tm_min] => 54
    [tm_hour] => 15
    [tm_mday] => 3
    [tm_mon] => 9
    [tm_year] => 104
    [tm_wday] => 0
    [tm_yday] => 276
    [unparsed] =>
)

Notes

Note: Cette fonction n'est pas implémentée sous Windows.

Note:

En interne, cette fonction appèle la fonction strptime() fournie par la bibliothèque système C. Cette fonction a des comportements bien différents suivants les systèmes d'exploitation. L'utilisation de la fonction date_parse_from_format(), qui elle, ne souffre pas de ces défauts, est recommandée depuis PHP 5.3.0 et suivants.

Note:

"tm_sec" inclut toutes les secondes intercalaires (acutellement 2 par an). Pour plus d'informations sur les secondes intercalaires, reportez-vous à l'» article sur Wikipedia les concernant.

Note:

Avant PHP 5.2.0, cette fonction pouvait avoir un comportement imprévisible, notamment concernant "tm_sec", "tm_min" et "tm_hour" qui pouvaient retourner des valeurs non définies.

Voir aussi



strtotime

(PHP 4, PHP 5)

strtotimeTransforme un texte anglais en timestamp

Description

int strtotime ( string $time [, int $now = time() ] )

strtotime() essaye de lire une date au format anglais dans la chaîne time, et de la transformer en timestamp Unix (le nombre de secondes depuis le 1er Janvier 1970 à 00:00:00 UTC), relativement au timestamp now, ou à la date courante si ce dernier est omis.

Chaque paramètre de la fonction utilise le décalage horaire par défaut à moins qu'un décalage horaire y soit explicitement paramétré. Soyez vigilant à ne pas utiliser un décalage horaire différent pour chaque paramètre à moins que ce soit ce dont vous avez besoin. Reportez-vous à la fonction date_default_timezone_get() afin de savoir comment définir un décalage horaire par défaut.

Liste de paramètres

time

Une chaîne date/heure. Les formats valides sont expliqués dans la documentation sur les formats Date et Heure.

now

Le timestamp, représentant la date courante, utilisé pour le calcul relative des dates.

Valeurs de retour

Retourne un timestamp en cas de succès, FALSE sinon. Avant PHP 5.1.0, cette fonction retournait -1 en cas d'échec.

Erreurs / Exceptions

Chaque appel à une fonction date/heure générera un message de type E_NOTICE si le fuseau horaire n'est pas valide, et/ou un message de type E_STRICT ou E_WARNING si vous utilisez la configuration du système ou la variable d'environnement TZ. Voir aussi date_default_timezone_set()

Historique

Version Description
5.3.0 Avant PHP 5.3.0, 24:00 n'était pas un format valide et strtotime() retournait FALSE.
5.2.7 En PHP 5 avant 5.2.7, demander le jour de la semaine correspondant au premier jour du mois ajoute de manière incorrecte une semaine au timestamp retourné. Ceci a été corrigé dans PHP 5.2.7 et supérieur.
5.1.0 La fonction retourne maintenant FALSE en cas d'échec, au lieu de -1.
5.1.0

Émet un message de type E_STRICT et E_NOTICE lors d'erreurs de fuseaux horaires.

5.0.2 En PHP 5 jusqu'à 5.0.2, "now" et les autres temps relatifs sont mal calculés depuis minuit d'aujourd'hui. Dans les autres versions, le calcul est correct.
5.0.0 Les microsecondes sont acceptées mais ignorées.
4.4.0 En PHP avant 4.4.0, "next" est mal calculé et considère +2. Une solution typique à ce problème est d'utiliser "+1".

Exemples

Exemple #1 Exemple avec strtotime()

<?php
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";
echo 
strtotime("next Thursday"), "\n";
echo 
strtotime("last Monday"), "\n";
?>

Exemple #2 Vérification d'erreur

<?php
$str 
'Pas bon';

// Avant PHP 5.1.0, vous devez comparer avec  -1, au lieu de false
if (($timestamp strtotime($str)) === false) {
   echo 
"La chaîne ($str) est boguée";
} else {
   echo 
"$str == " date('l dS \o\f F Y h:i:s A'$timestamp);
}
?>

Notes

Note:

Si le chiffre des années est précisé sur deux chiffres, les valeurs entre 00-69 correspondent à 2000-2069 et 70-99 à 1970-1999. Voyez les notes après concernant les différences possibles entres systèmes 32bits (des dates peuvent échoué après le 19/01/2038 à 03:14:07).

Note:

L'intervalle de validité d'un timestamp va du Vendredi 13 Décembre 1901 20:45:54 UTC au Mardi 19 Janvier 2038 03:14:07 UTC. (Cela correspond aux dates maximales et minimales pour un entier de 32 bits signé.) Toutes les plates-formes ne supportent pas les timestamp négatifs et dans ce cas, l'intervalle de date sera limitée à environs l'époque Unix. Cela signifie que les dates antérieures au 1 Janvier 1970 ne fonctionneront pas sous Windows, quelques distributions Linux et quelques autres systèmes. PHP 5.1.0 ainsi que les versions plus récentes outrepassent cette limitation.

Pour les versions 64-bit de PHP, l'intervalle valide d'un timestamp est réellement infini, sachant que 64 bits peut représenter approximativement 293 milliards d'années dans n'importe quelle direction.

Note:

Les dates aux formats m/d/y ou d-m-y formats sont analysées en regardant le séparateur entre les différentes parties: si le séparateur est un slash (/), alors le format américain m/d/y est supposé; si le séparateur est un tiret (-) ou un point (.), alors le format Européen d-m-y sera supposé.

Pour éviter des ambiguïtés éventuelles, le mieux est d'utiliser le format ISO 8601 (YYYY-MM-DD) ou encore DateTime::createFromFormat() lorsque possible.

Note:

L'utilisation de cette fonction sur des opérations mathématiques n'est pas conseillée. Il vaut mieux utiliser dans ce cas DateTime::add() et DateTime::sub() en PHP 5.3 et suivants, ou DateTime::modify() en PHP 5.2.

Voir aussi



time

(PHP 4, PHP 5)

timeRetourne le timestamp UNIX actuel

Description

int time ( void )

time() retourne l'heure courante, mesurée en secondes depuis le début de l'époque UNIX, (1er janvier 1970 00:00:00 GMT).

Exemples

Exemple #1 Exemple avec time()

<?php
$nextWeek 
time() + (24 60 60);
// 7 jours; 24 heures; 60 minutes; 60secondes
echo 'Aujourd\'hui :       'date('Y-m-d') ."\n";
echo 
'Semaine prochaine : 'date('Y-m-d'$nextWeek) ."\n";
// ou en utilisant strtotime():
echo 'Semaine prochaine : 'date('Y-m-d'strtotime('+1 week')) ."\n";
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Aujourd'hui :       2005-03-30
Semaine prochaine : 2005-04-06
Semaine prochaine : 2005-04-06

Notes

Astuce

Un timestamp représentant le début de la demande est disponible dans la variable $_SERVER['REQUEST_TIME'] depuis PHP 5.1.

Voir aussi

  • date() - Formate une date/heure locale
  • microtime() - Retourne le timestamp UNIX actuel avec les microsecondes



timezone_abbreviations_list

(PHP 5 >= 5.2.0)

timezone_abbreviations_listAlias de DateTimeZone::listAbbreviations()

Description

Cette fonction est un alias de : DateTimeZone::listAbbreviations()



timezone_identifiers_list

(PHP 5 >= 5.2.0)

timezone_identifiers_listAlias de DateTimeZone::listIdentifiers()

Description

Cette fonction est un alias de : DateTimeZone::listIdentifiers()



timezone_location_get

(PHP 5 >= 5.3.0)

timezone_location_getAlias de DateTimeZone::getLocation()

Description

Cette fonction est un alias de : DateTimeZone::getLocation()



timezone_name_from_abbr

(PHP 5 >= 5.1.3)

timezone_name_from_abbrRetourne le nom du fuseau horaire à partir de son abréviation

Description

string timezone_name_from_abbr ( string $abbr [, int $gmtOffset = -1 [, int $isdst = -1 ]] )

Liste de paramètres

abbr

Abréviation du fuseau horaire.

gmtOffset

Décalage à partir du GMT en seconde. La valeur par défaut est -1 ce qui signifie que le premier fuseau horaire trouvé correspondant à abbr est retourné. Autrement, le décalage exact est recherché et seulement s'il n'est pas trouvé alors le premier fuseau horaire avec n'importe quel décalage est retourné.

isdst

Indicateur d'heure d'été/heure d'hiver. Par défaut -1 qui signifie que le décalage heure d'été/heure d'hiver n'est pas pris en compte dans la recherche même si le fuseau le gère. Si mis à 1, alors le gmtOffset est supposé comprendre le décalage heure d'été /heure d'hiver; si 0 alors gmtOffset est supposé représenter un décalage ne prennant pas en compte l'heure d'été/hiver. Si abbr n'existe pas alors le fuseau horaire est cherché uniquement au moyen de gmtOffset et isdst.

Valeurs de retour

Retourne un nom de fuseau horaire en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec timezone_name_from_abbr()

<?php
echo timezone_name_from_abbr("CET") . "\n";
echo 
timezone_name_from_abbr(""36000) . "\n";
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Europe/Berlin
Europe/Paris

Voir aussi



timezone_name_get

(PHP 5 >= 5.2.0)

timezone_name_getAlias de DateTimeZone::getName()

Description

Cette fonction est un alias de : DateTimeZone::getName()



timezone_offset_get

(PHP 5 >= 5.2.0)

timezone_offset_getAlias de DateTimeZone::getOffset()

Description

Cette fonction est un alias de : DateTimeZone::getOffset()



timezone_open

(PHP 5 >= 5.2.0)

timezone_openAlias de DateTimeZone::__construct()

Description

Cette fonction est un alias de : DateTimeZone::__construct()



timezone_transitions_get

(PHP 5 >= 5.2.0)

timezone_transitions_getAlias de DateTimeZone::getTransitions()

Description

Cette fonction est un alias de : DateTimeZone::getTransitions()



timezone_version_get

(PHP 5 >= 5.3.0)

timezone_version_get Lit la version de la timezonedb

Description

string timezone_version_get ( void )

timezone_version_get() lit la version de la timezonedb.

Valeurs de retour

Retourne une chaîne de caractères.

Exemples

Exemple #1 Lecture de la version de la timezonedb

<?php
echo timezone_version_get();
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

2009.7


Sommaire



Formats supportés de temps et de dates

Sommaire

Cette section explique tous les formats accéptés par strtotime(), DateTime et date_create(). Les formats sont groupés par sections. Dans la plupart des cas les formats de sections différentes peuvent être utilisés dans la même chaine date/time. Pour chaque format supporté, un ou plusieurs exemples sont données ainsi qu'une description du format en question. Les caractères entre guillemets simples pour les formats sont insensibles à la casse ('t' pourrait s'écrire t ou T), les caractères écrits entre guillemets doubles, eux, sont sensibles à la casse ("T" et seulement T).


Formats pour les temps (Time)

Symboles utilisés
Description Formats Exemples
frac . [0-9]+ ".21342", ".85"
hh "0"?[1-9] | "1"[0-2] "04", "7", "12"
HH [01][0-9] | "2"[0-4] "04", "7", "19"
méridien [AaPp] .? [Mm] .? [\0\t ] "A.m.", "pM", "am."
MM [0-5][0-9] "00", "12", "59"
II [0-5][0-9] "00", "12", "59"
espace [ \t]  
tz "("? [A-Za-z]{1,6} ")"? | [A-Z][a-z]+([_/][A-Z][a-z]+)+ "CEST", "Europe/Amsterdam", "America/Indiana/Knox"
tzcorrection "GMT"? [+-] hh ":"? MM? "+0400", "GMT-07:00", "-07:00"
Notation 12 heures
Description Format Examples
Heures seules, avec méridien hh espace? méridien "4 am", "5PM"
Heures et minutes, avec méridien hh [.:] MM space? méridien "4:08 am", "7:19P.M."
Heures, minutes et secondes avec méridien hh [.:] MM [.:] II espace? méridien "4:08:37 am", "7:19:19P.M."
MS SQL (Heures, minutes, secondes et fraction avec méridien), PHP 5.3 et plus uniquement hh ":" MM ":" II [.:] [0-9]+ meridian "4:08:39:12313am"
Notation 24 heures
Description Format Exemples
Heures et minutes 't'? HH [.:] MM "04:08", "19.19", "T23:43"
Heures et minutes, sans double-points 't'? HH MM "0408", "t1919", "T2343"
Heures, minutes et secondes 't'? HH [.:] MM [.:] II "04.08.37", "t19:19:19"
Heures, minutes et secondes, sans double-points 't'? HH MM II "040837", "T191919"
Heures, minutes, secondes et fuseau 't'? HH [.:] MM [.:] II space? ( tzcorrection | tz ) "040837CEST", "T191919-0700"
Heures, minutes, secondes et fraction 't'? HH [.:] MM [.:] II frac "04.08.37.81412", "19:19:19.532453"
Information de fuseau horaire tz | tzcorrection "CEST", "Europe/Amsterdam", "+0430", "GMT-06:00"


Formats de dates

Symboles utilisés
Description Format Exemples
suffixe des jours "st" | "nd" | "rd" | "th"  
dd ([0-2]?[0-9] | "3"[01]) daysuf? "7th", "22nd", "31"
DD "0" [0-9] | [1-2][0-9] | "3" [01] "07", "31"
m 'january' | 'february' | 'march' | 'april' | 'may' | 'june' | 'july' | 'august' | 'september' | 'october' | 'november' | 'december' | 'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' | 'sep' | 'sept' | 'oct' | 'nov' | 'dec' | "I" | "II" | "III" | "IV" | "V" | "VI" | "VII" | "VIII" | "IX" | "X" | "XI" | "XII"  
M 'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' | 'sep' | 'sept' | 'oct' | 'nov' | 'dec'  
mm "0"? [0-9] | "1"[0-2] "0", "04", "7", "12"
MM "0" [0-9] | "1"[0-2] "00", "04", "07", "12"
y [0-9]{1,4} "00", "78", "08", "8", "2008"
yy [0-9]{2} "00", "08", "78"
YY [0-9]{4} "2000", "2008", "1978"
Notations localisées
Description Format Exemples
Mois américain et jour mm "/" dd "5/12", "10/27"
Mois américain, jour et année mm "/" dd "/" y "12/22/78", "1/17/2006", "1/17/6"
Année sur quatre chiffres, mois et jour avec slashs YY "/" mm "/" dd "2008/6/30", "1978/12/22"
Année sur quatre chiffres et mois (GNU) YY "-" mm "2008-6", "2008-06", "1978-12"
Année, mois et jour avec tirets y "-" mm "-" dd "2008-6-30", "78-12-22", "8-6-21"
Jour, mois et année sur quatre chiffres, avec des points, des tabulations ou des tirets dd [.\t-] mm [.-] YY "30-6-2008", "22.12\t1978"
Jour, mois et année sur deux chiffres, avec des points ou des tabulations dd [.\t] mm "." yy "30.6.08", "22\t12\t78"
Jour, mois textuel et année dd ([ \t.-])* m ([ \t.-])* y "30-June 2008", "22DEC78", "14 III 1879"
Mois textuel et année sur quatre chiffres (le jour sera le 1) m ([ \t.-])* YY "June 2008", "DEC1978", "March 1879"
Année sur quatre chiffres et mois textuel (le jour sera le 1) YY ([ \t.-])* m "2008 June", "1978-XII", "1879.MArCH"
Mois textuel, jour et année m ([ .\t-])* dd [,.stndrh\t ]+ y "July 1st, 2008", "April 17, 1790", "May.9,78"
Mois textuel et jour m ([ .\t-])* dd [,.stndrh\t ]* "July 1st,", "Apr 17", "May.9"
Jour et mois textuel d ([ .\t-])* m "1 July", "17 Apr", "9.May"
Mois abrégé, jour et année M "-" DD "-" y "May-09-78", "Apr-17-1790"
Année, mois abrégé et jour y "-" M "-" DD "78-Dec-22", "1814-MAY-17"
Année (et juste l'année) YY "1978", "2008"
Mois textuel (et juste le mois) m "March", "jun", "DEC"
Notations ISO8601
Description Format Exemples
Année sur huit chiffres, mois et jour YY MM DD "15810726", "19780417", "18140517"
Année sur quatre chiffres, mois et jour avec des slashes YY "/" MM "/" DD "2008/06/30", "1978/12/22"
Année sur deux chiffres, mois et jour avec des tirets yy "-" MM "-" DD "08-06-30", "78-12-22"
Année sur quatre chiffres avec un signe optionnel, mois et jour [+-]? YY "-" MM "-" DD "-0002-07-26", "+1978-04-17", "1814-05-17"

Note:

Pour les formats y et yy , les années avant 100 sont considérées d'une manière spéciale lorsque les symboles y ou yy sont utilisés. Si l'année est comprise entre 0 (inclusif) et 69 (inclusif), 2000 sont ajoutés. Si l'année est comprise entre 70 (inclusif) et 99 (inclusif) alors 1900 sont ajoutés. Cela signifie que "00-01-01" est interprété comme "2000-01-01".

Note:

Le format "Jour, mois et année sur deux chiffres avec tabulations ou points" (dd [.\t] mm "." yy) ne fonctionne que pour des valeurs d'années de 61 (inclusif) à 99 (inclusif) - en dehors de ces bornes le format du temps "HH [.:] MM [.:] SS" a une precédence plus forte et primera.

Note:

Le format "Année (et juste l'année)" ne fonctionne que si la chaine qui représente le temps a déja été trouvée, sinon le format est reconnu comme HH MM.

Note:

Il est possible d'ajouter ou soustraire une retenue pour les formats dd et DD. Le jour 0 signifie le dernier jour du mois précédent les retenues positives compteront le mois suivant. Ainsi, "2008-08-00" est équivalent à "2008-07-31" et "2008-06-31" est équivalent à "2008-07-01" (Juin ne possède que 30 jours).

Il est aussi possible de jouer avec les retenues des formats mm et MM grâce à la valeur 0. Une valeur de mois de 0 signifie Décembre de l'année précédente. Par exemple "2008-00-22" est équivalent à "2007-12-22".

Si vous combinez les deux notions précédentes et utilisez une retenue négative sur le jour et le mois, alors il se passe ceci: "2008-00-00" est converti d'abord vers "2007-12-00" puis vers "2007-11-30". Ceci arrive aussi avec la chaine "0000-00-00" qui est alors tranformée vers "-0001-11-30" (l'année -1 dans le calendrier ISO 8601, qui est 2 BC dans le calendrier Gregorien).



Formats composés

Symboles utilisés
Description Formats Exemples
DD "0" [0-9] | [1-2][0-9] | "3" [01] "02", "12", "31"
doy "00"[1-9] | "0"[1-9][0-9] | [1-2][0-9][0-9] | "3"[0-5][0-9] | "36"[0-6] "36"[0-6] "000", "012", "366"
frac . [0-9]+ ".21342", ".85"
hh "0"?[1-9] | "1"[0-2] "04", "7", "12"
HH [01][0-9] | "2"[0-4] "04", "7", "19"
méridien [AaPp] .? [Mm] .? [\0\t ] "A.m.", "pM", "am."
ii [0-5][0-9] "04", "8", "59"
II [0-5][0-9] "04", "08", "59"
M 'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' | 'sep' | 'sept' | 'oct' | 'nov' | 'dec'  
MM [0-5][0-9] "00", "12", "59"
espace [ \t]  
ss [0-5][0-9] "04", "8", "59"
SS [0-5][0-9] "04", "08", "59"
W "0"[1-9] | [1-4][0-9] | "5"[0-3] "05", "17", "53"
tzcorrection "GMT"? [+-] hh ":"? MM? "+0400", "GMT-07:00", "-07:00"
YY [0-9]{4} "2000", "2008", "1978"
Notations localisées
Description Format Exemples
Format de log commun dd "/" M "/" YY : HH ":" II ":" SS space tzcorrection "10/Oct/2000:13:55:36 -0700"
EXIF YY ":" MM ":" DD " " HH ":" II ":" SS "2008:08:07 18:11:31"
Année ISO avec semaine ISO YY "-"? "W" W "2008W27", "2008-W28"
Année ISO avec semaine ISO et jour YY "-"? "W" W "-"? [0-7] "2008W273", "2008-W28-3"
MySQL YY "-" MM "-" DD " " HH ":" II ":" SS "2008-08-07 18:11:31"
PostgreSQL: Année avec jour de l'année YY "."? doy "2008.197", "2008197"
SOAP YY "-" MM "-" DD "T" HH ":" II ":" SS frac tzcorrection? "2008-07-01T22:35:17.02", "2008-07-01T22:35:17.03+08:00"
Unix Timestamp "@" "-"? [0-9]+ "@1215282385"
XMLRPC YY MM DD "T" hh ":" II ":" SS "20080701T22:38:07", "20080701T9:38:07"
XMLRPC (Compact) YY MM DD 't' hh II SS "20080701t223807", "20080701T093807"
WDDX YY "-" mm "-" dd "T" hh ":" ii ":" ss "2008-7-1T9:3:37"

Note:

Le "W" dans les formats "Année ISO avec semaine ISO" et "Année ISO avec semaine ISO et jour" est sensible à la casse, vous ne pouvez utiliser que la majuscule "W".

Le "T" dans les formats SOAP, XMRPC et WDDX est sensible à la casse, utilisez toujours la majuscule "T".

Le format timestamp Unix définit le fuseau horaire à UTC.



Formats relatifs

Symboles utilisés
Description Format
nom du jour 'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat' | 'sun'
textes relatifs aux jours 'weekday' | 'weekdays'
nombre [+-]?[0-9]+
ordinal 'first' | 'second' | 'third' | 'fourth' | 'fifth' | 'sixth' | 'seventh' | 'eighth' | 'ninth' | 'tenth' | 'eleventh' | 'twelfth' | 'next' | 'last' | 'previous' | 'this'
textes relatifs 'next' | 'last' | 'previous' | 'this'
espace [ \t]+
unité (('sec' | 'second' | 'min' | 'minute' | 'hour' | 'day' | 'fortnight' | 'forthnight' | 'month' | 'year') 's'?) | 'weeks' | daytext
Notations basées sur le jour
Format Description Exemples
'yesterday' Minuit d'hier "yesterday 14:00"
'midnight' Le temps est affecté à 00:00:00  
'today' Le temps est affecté à 00:00:00  
'now' Maintenant  
'noon' Le temps est affecté à 12:00:00 "yesterday noon"
'tomorrow' Minuit de demain  
'back of' hour 15 minutes avant l'heure précisée "back of 7pm", "back of 15"
'front of' hour 15 minutes après l'heure spécifiée "front of 5am", "front of 23"
'first day' ' of'? Affecte le jour du premier jour du mois courant. Il est plus intéréssant d'utiliser cette phrase suivie d'un nom de mois. "first day of January 2008"
'last day' ' of'? Affecte le jour du dernier jour du mois courant. Il est plus intéréssant d'utiliser cette phrase suivie d'un nom de mois. "last day of next month"
ordinal espace nom de jour espace 'of' Calcule le x-ième jour de semaine du mois en cours. "first sat of July 2008"
'last' espace nom de jour espace 'of' Calcule le dernier jour de semaine du mois en cours. "last sat of July 2008"
nombre espace? (unité | 'week') Gère des temps relatifs dont la valeur est dénombrée. "+5 weeks", "12 day", "-7 weekdays"
nombre espace unité Gère des temps relatifs dont la valeur est dénombrée. "fifth day", "second month"
'ago' Utilise dans le passé toute description de temps relatif ('il y a'). "2 days ago", "8 days ago 14:00", "2 months 5 days ago", "2 months ago 5 days", "2 days ago ago"
nom de jour Se déplace vers le prochain jour indiqué. "Monday"
reltext espace 'week' Gère le format spécial "weekday + last/this/next week". "Monday next week"

Note:

Les expressions relatives sont toujours traitées après les expressions non relatives. Ceci fait en sorte que "+1 week july 2008" et "july 2008 +1 week" sont équivalents.

"yesterday", "midnight", "today", "noon" et "tomorrow" sont des exceptions à cette règle. Notez que "tomorrow 11:00" et "11:00 tomorrow" sont différents. Soit la date d'aujourd'hui à "July 23rd, 2008" , la première expression donne "2008-07-24 11:00" alors que la seconde donnera "2008-07-24 00:00". La raison est que ces cinq expressions influencent directement la date courante.

Note:

Notez les remarques qui suivent lorsque le jour de semaine courant est le même que le jour de semaine utilisé dans la chaine de date/time. Le jour de semaine courant aurait pu être recalculé par rapport aux parties non relatives de la chaine date/time.

  1. "nom de jour" n'avance pas vers un autre jour. (Exemple: "Wed July 23rd, 2008" signifie "2008-07-23").
  2. "nombre nom de jour" n'avance pas vers un autre jour. (Exemple: "1 wednesday july 23rd, 2008" signifie "2008-07-23").
  3. "nombre week nom de jour" ajoutera d'abord le nombre de semaines, mais n'avancera pas vers un autre jour. Dans ce cas "nombre week" et "nom de jour" sont deux blocs distincts. (Exemple: "+1 week wednesday july 23rd, 2008" signifie "2008-07-30").
  4. "ordinal nom de jour" avance vers un autre jour. (Exemple "first wednesday july 23rd, 2008" signifie "2008-07-30").
  5. "nombre week ordinal nom de jour" ajoutera d'abord le nombre de semaines et ensuite avancera vers un autre jour. Dans ce cas, "nombre week" et "ordinal nom de jour" sont deux blocs distincts. (Exemple: "+1 week first wednesday july 23rd, 2008" signifie "2008-08-06").
  6. "ordinal nom de jour 'of' " n'avance pas vers uyn autre jour. (Exemple: "first wednesday of july 23rd, 2008" signifie "2008-07-02" car la phrase avec 'of' remet à zéro le jour du mois vers '1' et le '23' est ignoré ici).

Notez aussi que le "of" dans "ordinal espace nom de jour espace 'of' " et "'last' espace nom de jour espace 'of' " fait quelque chose de spécial.

  1. Il affecte le jour du mois à 1.
  2. "ordinal nom de jour 'of' " n'avance pas vers un autre jour. (Exemple: "first tuesday of july 2008" signifie "2008-07-01").
  3. "ordinal nom de jour " avance vers un autre jour. (Exemple: "first tuesday july 2008" signifie "2008-07-08", voyez aussi le point numéro 4 de la liste ci dessus).
  4. "'last' nom de jour 'of' " prend le dernier jour nommé du mois courant. (Exemple: "last wed of july 2008" signifie "2008-07-30")
  5. "'last' nom de jour" prend le dernier jour nommé à partir du jour actuel. (Exemple: "last wed july 2008" signifie "2008-06-25"; "july 2008" affecte d'abord la date courante à "2008-07-01" et ensuite "last wed" remonte au dernier mercredi qui est le "2008-06-25").

Note:

Les valeurs relatives des mois calculés sont basées sur le nombre de jours des mois que l'on utilise. Par exemple "+2 month 2011-11-30", donnera comme résultat la date "2012-01-30". Ceci est du au fait que le mois de novembre comporte 30 jours, et que le mois de décembre en comporte 31, soit un ajout total de 61 jours.




Liste des Fuseaux Horaires Supportés

Sommaire

Ici, vous trouverez une liste complète des fuseaux horaires supportés par PHP, qui peuvent être utilisés avec, e.g. date_default_timezone_set().

Note: La dernière version de la base de données des fuseaux horaires peut être installée via la commande PECL » timezonedb.

Note: Cette liste est basée sur la version de la base de données des fuseaux horaires 2012.3.


Afrique

Afrique
Africa/Abidjan Africa/Accra Africa/Addis_Ababa Africa/Algiers Africa/Asmara
Africa/Asmera Africa/Bamako Africa/Bangui Africa/Banjul Africa/Bissau
Africa/Blantyre Africa/Brazzaville Africa/Bujumbura Africa/Cairo Africa/Casablanca
Africa/Ceuta Africa/Conakry Africa/Dakar Africa/Dar_es_Salaam Africa/Djibouti
Africa/Douala Africa/El_Aaiun Africa/Freetown Africa/Gaborone Africa/Harare
Africa/Johannesburg Africa/Juba Africa/Kampala Africa/Khartoum Africa/Kigali
Africa/Kinshasa Africa/Lagos Africa/Libreville Africa/Lome Africa/Luanda
Africa/Lubumbashi Africa/Lusaka Africa/Malabo Africa/Maputo Africa/Maseru
Africa/Mbabane Africa/Mogadishu Africa/Monrovia Africa/Nairobi Africa/Ndjamena
Africa/Niamey Africa/Nouakchott Africa/Ouagadougou Africa/Porto-Novo Africa/Sao_Tome
Africa/Timbuktu Africa/Tripoli Africa/Tunis Africa/Windhoek  


Amerique

Amerique
America/Adak America/Anchorage America/Anguilla America/Antigua America/Araguaina
America/Argentina/Buenos_Aires America/Argentina/Catamarca America/Argentina/ComodRivadavia America/Argentina/Cordoba America/Argentina/Jujuy
America/Argentina/La_Rioja America/Argentina/Mendoza America/Argentina/Rio_Gallegos America/Argentina/Salta America/Argentina/San_Juan
America/Argentina/San_Luis America/Argentina/Tucuman America/Argentina/Ushuaia America/Aruba America/Asuncion
America/Atikokan America/Atka America/Bahia America/Bahia_Banderas America/Barbados
America/Belem America/Belize America/Blanc-Sablon America/Boa_Vista America/Bogota
America/Boise America/Buenos_Aires America/Cambridge_Bay America/Campo_Grande America/Cancun
America/Caracas America/Catamarca America/Cayenne America/Cayman America/Chicago
America/Chihuahua America/Coral_Harbour America/Cordoba America/Costa_Rica America/Creston
America/Cuiaba America/Curacao America/Danmarkshavn America/Dawson America/Dawson_Creek
America/Denver America/Detroit America/Dominica America/Edmonton America/Eirunepe
America/El_Salvador America/Ensenada America/Fort_Wayne America/Fortaleza America/Glace_Bay
America/Godthab America/Goose_Bay America/Grand_Turk America/Grenada America/Guadeloupe
America/Guatemala America/Guayaquil America/Guyana America/Halifax America/Havana
America/Hermosillo America/Indiana/Indianapolis America/Indiana/Knox America/Indiana/Marengo America/Indiana/Petersburg
America/Indiana/Tell_City America/Indiana/Vevay America/Indiana/Vincennes America/Indiana/Winamac America/Indianapolis
America/Inuvik America/Iqaluit America/Jamaica America/Jujuy America/Juneau
America/Kentucky/Louisville America/Kentucky/Monticello America/Knox_IN America/Kralendijk America/La_Paz
America/Lima America/Los_Angeles America/Louisville America/Lower_Princes America/Maceio
America/Managua America/Manaus America/Marigot America/Martinique America/Matamoros
America/Mazatlan America/Mendoza America/Menominee America/Merida America/Metlakatla
America/Mexico_City America/Miquelon America/Moncton America/Monterrey America/Montevideo
America/Montreal America/Montserrat America/Nassau America/New_York America/Nipigon
America/Nome America/Noronha America/North_Dakota/Beulah America/North_Dakota/Center America/North_Dakota/New_Salem
America/Ojinaga America/Panama America/Pangnirtung America/Paramaribo America/Phoenix
America/Port-au-Prince America/Port_of_Spain America/Porto_Acre America/Porto_Velho America/Puerto_Rico
America/Rainy_River America/Rankin_Inlet America/Recife America/Regina America/Resolute
America/Rio_Branco America/Rosario America/Santa_Isabel America/Santarem America/Santiago
America/Santo_Domingo America/Sao_Paulo America/Scoresbysund America/Shiprock America/Sitka
America/St_Barthelemy America/St_Johns America/St_Kitts America/St_Lucia America/St_Thomas
America/St_Vincent America/Swift_Current America/Tegucigalpa America/Thule America/Thunder_Bay
America/Tijuana America/Toronto America/Tortola America/Vancouver America/Virgin
America/Whitehorse America/Winnipeg America/Yakutat America/Yellowknife  


Antarctique

Antarctique
Antarctica/Casey Antarctica/Davis Antarctica/DumontDUrville Antarctica/Macquarie Antarctica/Mawson
Antarctica/McMurdo Antarctica/Palmer Antarctica/Rothera Antarctica/South_Pole Antarctica/Syowa
Antarctica/Vostok        


Arctique

Arctique
Arctic/Longyearbyen


Asie

Asie
Asia/Aden Asia/Almaty Asia/Amman Asia/Anadyr Asia/Aqtau
Asia/Aqtobe Asia/Ashgabat Asia/Ashkhabad Asia/Baghdad Asia/Bahrain
Asia/Baku Asia/Bangkok Asia/Beirut Asia/Bishkek Asia/Brunei
Asia/Calcutta Asia/Choibalsan Asia/Chongqing Asia/Chungking Asia/Colombo
Asia/Dacca Asia/Damascus Asia/Dhaka Asia/Dili Asia/Dubai
Asia/Dushanbe Asia/Gaza Asia/Harbin Asia/Hebron Asia/Ho_Chi_Minh
Asia/Hong_Kong Asia/Hovd Asia/Irkutsk Asia/Istanbul Asia/Jakarta
Asia/Jayapura Asia/Jerusalem Asia/Kabul Asia/Kamchatka Asia/Karachi
Asia/Kashgar Asia/Kathmandu Asia/Katmandu Asia/Kolkata Asia/Krasnoyarsk
Asia/Kuala_Lumpur Asia/Kuching Asia/Kuwait Asia/Macao Asia/Macau
Asia/Magadan Asia/Makassar Asia/Manila Asia/Muscat Asia/Nicosia
Asia/Novokuznetsk Asia/Novosibirsk Asia/Omsk Asia/Oral Asia/Phnom_Penh
Asia/Pontianak Asia/Pyongyang Asia/Qatar Asia/Qyzylorda Asia/Rangoon
Asia/Riyadh Asia/Saigon Asia/Sakhalin Asia/Samarkand Asia/Seoul
Asia/Shanghai Asia/Singapore Asia/Taipei Asia/Tashkent Asia/Tbilisi
Asia/Tehran Asia/Tel_Aviv Asia/Thimbu Asia/Thimphu Asia/Tokyo
Asia/Ujung_Pandang Asia/Ulaanbaatar Asia/Ulan_Bator Asia/Urumqi Asia/Vientiane
Asia/Vladivostok Asia/Yakutsk Asia/Yekaterinburg Asia/Yerevan  


Atlantique

Atlantique
Atlantic/Azores Atlantic/Bermuda Atlantic/Canary Atlantic/Cape_Verde Atlantic/Faeroe
Atlantic/Faroe Atlantic/Jan_Mayen Atlantic/Madeira Atlantic/Reykjavik Atlantic/South_Georgia
Atlantic/St_Helena Atlantic/Stanley      


Australie

Australie
Australia/ACT Australia/Adelaide Australia/Brisbane Australia/Broken_Hill Australia/Canberra
Australia/Currie Australia/Darwin Australia/Eucla Australia/Hobart Australia/LHI
Australia/Lindeman Australia/Lord_Howe Australia/Melbourne Australia/North Australia/NSW
Australia/Perth Australia/Queensland Australia/South Australia/Sydney Australia/Tasmania
Australia/Victoria Australia/West Australia/Yancowinna    


Europe

Europe
Europe/Amsterdam Europe/Andorra Europe/Athens Europe/Belfast Europe/Belgrade
Europe/Berlin Europe/Bratislava Europe/Brussels Europe/Bucharest Europe/Budapest
Europe/Chisinau Europe/Copenhagen Europe/Dublin Europe/Gibraltar Europe/Guernsey
Europe/Helsinki Europe/Isle_of_Man Europe/Istanbul Europe/Jersey Europe/Kaliningrad
Europe/Kiev Europe/Lisbon Europe/Ljubljana Europe/London Europe/Luxembourg
Europe/Madrid Europe/Malta Europe/Mariehamn Europe/Minsk Europe/Monaco
Europe/Moscow Europe/Nicosia Europe/Oslo Europe/Paris Europe/Podgorica
Europe/Prague Europe/Riga Europe/Rome Europe/Samara Europe/San_Marino
Europe/Sarajevo Europe/Simferopol Europe/Skopje Europe/Sofia Europe/Stockholm
Europe/Tallinn Europe/Tirane Europe/Tiraspol Europe/Uzhgorod Europe/Vaduz
Europe/Vatican Europe/Vienna Europe/Vilnius Europe/Volgograd Europe/Warsaw
Europe/Zagreb Europe/Zaporozhye Europe/Zurich    


Indien

Indien
Indian/Antananarivo Indian/Chagos Indian/Christmas Indian/Cocos Indian/Comoro
Indian/Kerguelen Indian/Mahe Indian/Maldives Indian/Mauritius Indian/Mayotte
Indian/Reunion        


Pacifique

Pacifique
Pacific/Apia Pacific/Auckland Pacific/Chatham Pacific/Chuuk Pacific/Easter
Pacific/Efate Pacific/Enderbury Pacific/Fakaofo Pacific/Fiji Pacific/Funafuti
Pacific/Galapagos Pacific/Gambier Pacific/Guadalcanal Pacific/Guam Pacific/Honolulu
Pacific/Johnston Pacific/Kiritimati Pacific/Kosrae Pacific/Kwajalein Pacific/Majuro
Pacific/Marquesas Pacific/Midway Pacific/Nauru Pacific/Niue Pacific/Norfolk
Pacific/Noumea Pacific/Pago_Pago Pacific/Palau Pacific/Pitcairn Pacific/Pohnpei
Pacific/Ponape Pacific/Port_Moresby Pacific/Rarotonga Pacific/Saipan Pacific/Samoa
Pacific/Tahiti Pacific/Tarawa Pacific/Tongatapu Pacific/Truk Pacific/Wake
Pacific/Wallis Pacific/Yap      


Autres

Autres
Brazil/Acre Brazil/DeNoronha Brazil/East Brazil/West Canada/Atlantic
Canada/Central Canada/East-Saskatchewan Canada/Eastern Canada/Mountain Canada/Newfoundland
Canada/Pacific Canada/Saskatchewan Canada/Yukon CET Chile/Continental
Chile/EasterIsland CST6CDT Cuba EET Egypt
Eire EST EST5EDT Etc/GMT Etc/GMT+0
Etc/GMT+1 Etc/GMT+10 Etc/GMT+11 Etc/GMT+12 Etc/GMT+2
Etc/GMT+3 Etc/GMT+4 Etc/GMT+5 Etc/GMT+6 Etc/GMT+7
Etc/GMT+8 Etc/GMT+9 Etc/GMT-0 Etc/GMT-1 Etc/GMT-10
Etc/GMT-11 Etc/GMT-12 Etc/GMT-13 Etc/GMT-14 Etc/GMT-2
Etc/GMT-3 Etc/GMT-4 Etc/GMT-5 Etc/GMT-6 Etc/GMT-7
Etc/GMT-8 Etc/GMT-9 Etc/GMT0 Etc/Greenwich Etc/UCT
Etc/Universal Etc/UTC Etc/Zulu Factory GB
GB-Eire GMT GMT+0 GMT-0 GMT0
Greenwich Hongkong HST Iceland Iran
Israel Jamaica Japan Kwajalein Libya
MET Mexico/BajaNorte Mexico/BajaSur Mexico/General MST
MST7MDT Navajo NZ NZ-CHAT Poland
Portugal PRC PST8PDT ROC ROK
Singapore Turkey UCT Universal US/Alaska
US/Aleutian US/Arizona US/Central US/East-Indiana US/Eastern
US/Hawaii US/Indiana-Starke US/Michigan US/Mountain US/Pacific
US/Pacific-New US/Samoa UTC W-SU WET
Zulu        
Avertissement

N'utilisez aucun des fuseaux horaires listés ici (à côté de UTC), ils n'existent que pour des raisons de compatibilité ascendante.






Extensions spécifiques à la ligne de commande


Fonctions de contrôle d'écran de terminal


Introduction

ncurses (new curses, les nouveaux curseurs) sont une émulation libre des curseurs du System V Rel 4.0 (et plus récente). Ils utilisent le format terminfo, supportent les pavés numériques, les couleurs, les colorations multiples, les caractères de formulaire et les touches de fonctions. De par la nature interactive de cette bibliothèque, il est hors de question de l'utiliser pour écrire des applications pour le Web mais, par contre, elle peut être très intéressante pour écrire des scripts en ligne de commande.

Les fonctionnalités disponibles, telles que les couleurs, dépendent du terminal que vous utilisez. Utilisez les fonctions telles que ncurses_has_colors(), ncurses_can_change_color() et ncurses_has_ic() pour vérifier les capacités du votre.

Note:

Cette extension a été déplacée dans le module » PECL et ne sera plus intégrée dans PHP à partir de PHP 5.3.0.

Ncurses est disponible sur les plates-formes suivantes :

  • AIX
  • BeOS
  • BSD variants (FreeBSD, NetBSD, OpenBSD)
  • Cygwin
  • Digital Unix (aka OSF1)
  • GNU/Linux
  • HPUX
  • IRIX64
  • Mac OS X
  • OS/2
  • QNX
  • SCO OpenServer
  • Solaris
  • Tru64



Installation/Configuration

Sommaire


Pré-requis

Vous devez disposer des bibliothèques ncurses et des fichiers d'en-têtes. Téléchargez la dernière version sur le site de » ftp://ftp.gnu.org/pub/gnu/ncurses/ ou sur un miroir GNU.



Installation

Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici : » http://pecl.php.net/package/ncurses.

Le support des caractères CRT (ncursesw) a été ajouté en version 1.0.1 de cette extension PECL.



Configuration à l'exécution

Cette extension ne définit aucune directive de configuration.



Types de ressources

Cette extension définit les ressources window, panel et pad.




Constantes pré-définies

Sommaire

Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.


Codes d'erreurs ncurses

En cas d'erreur, les fonctions ncurses retournent -1. Certaines fonctions retourne 0 en cas de succès. Voyez les documentations associées pour plus de détails.



Couleurs

Constantes de couleurs ncurses
Constante Signification
NCURSES_COLOR_BLACK Pas de couleur
NCURSES_COLOR_WHITE blanc
NCURSES_COLOR_RED rouge : supporté lorsque le terminal est en mode couleurs
NCURSES_COLOR_GREEN vert : supporté lorsque le terminal est en mode couleurs
NCURSES_COLOR_YELLOW jaune : supporté lorsque le terminal est en mode couleurs
NCURSES_COLOR_BLUE bleu : supporté lorsque le terminal est en mode couleurs
NCURSES_COLOR_CYAN cyan : supporté lorsque le terminal est en mode couleurs
NCURSES_COLOR_MAGENTA magenta : supporté lorsque le terminal est en mode couleurs


Touches

Constantes de touches ncurses
Constante Signification
NCURSES_KEY_F0 - NCURSES_KEY_F64 Touches de fonctions F1 : F64
NCURSES_KEY_DOWN flèche vers le bas
NCURSES_KEY_UP flèche vers le haut
NCURSES_KEY_LEFT flèche vers la gauche
NCURSES_KEY_RIGHT flèche vers la droite
NCURSES_KEY_HOME touche home (vers le haut + flèche vers la gauche)
NCURSES_KEY_BACKSPACE retour en arrière
NCURSES_KEY_DL efface une ligne
NCURSES_KEY_IL insère une ligne
NCURSES_KEY_DC efface un caractère
NCURSES_KEY_IC insère un caractère, ou bien passe en mode insertion
NCURSES_KEY_EIC termine le mode insertion
NCURSES_KEY_CLEAR efface l'écran
NCURSES_KEY_EOS efface l'écran jusqu'en bas
NCURSES_KEY_EOL efface l'écran jusqu'à la fin de la ligne
NCURSES_KEY_SF scrolle une ligne vers le bas
NCURSES_KEY_SR scrolle une ligne vers le haut
NCURSES_KEY_NPAGE page suivante
NCURSES_KEY_PPAGE page précédente
NCURSES_KEY_STAB place une tabulation
NCURSES_KEY_CTAB supprime une tabulation
NCURSES_KEY_CATAB supprime toutes les tabulations
NCURSES_KEY_SRESET remise à zéro partielle
NCURSES_KEY_RESET remise à zéro totale
NCURSES_KEY_PRINT imprime
NCURSES_KEY_LL inférieur gauche (sur le pavé numérique)
NCURSES_KEY_A1 supérieur gauche (sur le pavé numérique)
NCURSES_KEY_A3 supérieur droit (sur le pavé numérique)
NCURSES_KEY_B2 centre (sur le pavé numérique)
NCURSES_KEY_C1 inférieur gauche (sur le pavé numérique)
NCURSES_KEY_C3 inférieur droit (sur le pavé numérique)
NCURSES_KEY_BTAB tabulation arrière
NCURSES_KEY_BEG début
NCURSES_KEY_CANCEL annule
NCURSES_KEY_CLOSE ferme
NCURSES_KEY_COMMAND commande
NCURSES_KEY_COPY copie
NCURSES_KEY_CREATE crée
NCURSES_KEY_END fin
NCURSES_KEY_EXIT quitte
NCURSES_KEY_FIND trouve
NCURSES_KEY_HELP aide
NCURSES_KEY_MARK marque
NCURSES_KEY_MESSAGE message
NCURSES_KEY_MOVE déplace
NCURSES_KEY_NEXT suivant
NCURSES_KEY_OPEN ouvre
NCURSES_KEY_OPTIONS options
NCURSES_KEY_PREVIOUS précédent
NCURSES_KEY_REDO refaire
NCURSES_KEY_REFERENCE référence
NCURSES_KEY_REFRESH rafraîchis
NCURSES_KEY_REPLACE replace
NCURSES_KEY_RESTART redémarre
NCURSES_KEY_RESUME recommence
NCURSES_KEY_SAVE sauve
NCURSES_KEY_SBEG shift et début
NCURSES_KEY_SCANCEL shift et annule
NCURSES_KEY_SCOMMAND shift et commande
NCURSES_KEY_SCOPY shift et copie
NCURSES_KEY_SCREATE shift et crée
NCURSES_KEY_SDC shift et efface un caractère
NCURSES_KEY_SDL shift et efface une ligne
NCURSES_KEY_SELECT sélectionne
NCURSES_KEY_SEND shift et fin
NCURSES_KEY_SEOL shift et fin de ligne
NCURSES_KEY_SEXIT shift et quitte
NCURSES_KEY_SFIND shift et trouve
NCURSES_KEY_SHELP shift et aide
NCURSES_KEY_SHOME shift et home
NCURSES_KEY_SIC shift et entrée
NCURSES_KEY_SLEFT shift et flèche vers la gauche
NCURSES_KEY_SMESSAGE shift et message
NCURSES_KEY_SMOVE shift et déplace
NCURSES_KEY_SNEXT shift et suivant
NCURSES_KEY_SOPTIONS shift et options
NCURSES_KEY_SPREVIOUS shift et précédent
NCURSES_KEY_SPRINT shift et imprime
NCURSES_KEY_SREDO shift et refait
NCURSES_KEY_SREPLACE shift et remplace
NCURSES_KEY_SRIGHT shift et flèche vers la droite
NCURSES_KEY_SRSUME shift et recommence
NCURSES_KEY_SSAVE shift et sauve
NCURSES_KEY_SSUSPEND shift et suspend
NCURSES_KEY_UNDO défait
NCURSES_KEY_MOUSE un événement souris est survenu
NCURSES_KEY_MAX valeur maximale de clé


Souris

Constantes de souris
Constante Signification
NCURSES_BUTTON1_RELEASED - NCURSES_BUTTON4_RELEASED bouton (1-4) relâché
NCURSES_BUTTON1_PRESSED - NCURSES_BUTTON4_PRESSED bouton (1-4) pressé
NCURSES_BUTTON1_CLICKED - NCURSES_BUTTON4_CLICKED bouton (1-4) cliqué
NCURSES_BUTTON1_DOUBLE_CLICKED - NCURSES_BUTTON4_DOUBLE_CLICKED bouton (1-4) double cliqué
NCURSES_BUTTON1_TRIPLE_CLICKED - NCURSES_BUTTON4_TRIPLE_CLICKED bouton (1-4) triple cliqué
NCURSES_BUTTON_CTRL Contrôle pressé durant le clic
NCURSES_BUTTON_SHIFT shift pressé durant le clic
NCURSES_BUTTON_ALT Alt pressé durant le clic
NCURSES_ALL_MOUSE_EVENTS indique tous les événements souris
NCURSES_REPORT_MOUSE_POSITION indique la position de la souris



Fonctions Ncurses


ncurses_addch

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_addchAjoute un caractère à la position courante et avance le curseur

Description

int ncurses_addch ( int $ch )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

ch



ncurses_addchnstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_addchnstrAjoute une chaîne de taille donnée à la position courante

Description

int ncurses_addchnstr ( string $s , int $n )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

s

n



ncurses_addchstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_addchstrAjoute une chaîne à la position courante

Description

int ncurses_addchstr ( string $s )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

s



ncurses_addnstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_addnstrAjoute une chaîne à la position courante

Description

int ncurses_addnstr ( string $s , int $n )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

s

n



ncurses_addstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_addstrAffiche du texte à la position courante

Description

int ncurses_addstr ( string $text )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

text



ncurses_assume_default_colors

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_assume_default_colorsDéfinit la couleur 0

Description

int ncurses_assume_default_colors ( int $fg , int $bg )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

fg

bg



ncurses_attroff

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_attroffDésactive les attributs donnés

Description

int ncurses_attroff ( int $attributes )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

attributes



ncurses_attron

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_attronActive les attributs fournis

Description

int ncurses_attron ( int $attributes )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

attributes



ncurses_attrset

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_attrsetModifie les attributs donnés

Description

int ncurses_attrset ( int $attributes )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

attributes



ncurses_baudrate

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_baudrateRetourne le baudrate du terminal

Description

int ncurses_baudrate ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.



ncurses_beep

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_beepFait beeper le terminal

Description

int ncurses_beep ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

ncurses_beep() envoie une alerte audible (bell) et si ce n'est pas possible, fait flasher l'écran.

Voir aussi



ncurses_bkgd

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_bkgdDéfinit les propriétés de fond d'écran pour le terminal

Description

int ncurses_bkgd ( int $attrchar )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

attrchar



ncurses_bkgdset

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_bkgdsetDéfinit le fond d'écran

Description

void ncurses_bkgdset ( int $attrchar )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

attrchar



ncurses_border

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_borderDessine un bord autour de l'écran avec les caractères données

Description

int ncurses_border ( int $left , int $right , int $top , int $bottom , int $tl_corner , int $tr_corner , int $bl_corner , int $br_corner )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Dessine les lignes spécifiées et les coins autour de la fenêtre principale.

Utilisez ncurses_wborder() pour les bordures autour de la fenêtre.

Liste de paramètres

Chaque paramètre attend 0 pour dessiner la ligne et 1 pour ne pas le faire.

left

right

top

bottom

tl_corner

Coin en haut à gauche

tr_corner

Coin en haut à droite

bl_corner

Coin en bas à gauche

br_corner

Coin en bas à droite

Voir aussi



ncurses_bottom_panel

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_bottom_panelPlace un conteneur visible en bas de la pile

Description

int ncurses_bottom_panel ( resource $panel )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

panel



ncurses_can_change_color

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_can_change_colorVérifie si le terminal peut changer de couleur

Description

bool ncurses_can_change_color ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Vérifie si le terminal supporte les couleurs et si on peut peut changer ces couleurs à l'aide de la fonction ncurses_init_color(). ncurses doit être initialisé avec ncurses_init() avant d'appeler cette fonction.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne TRUE si on peut changer les couleurs du terminal, et FALSE sinon.

Voir aussi



ncurses_cbreak

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_cbreakChange la bufferisation d'entrée

Description

bool ncurses_cbreak ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Désactive la bufferisation de ligne, et le traitement des caractères (les interruptions et le flux de caractères de contrôle sont inchangés), rendant les caractères tapés par l'utilisateur directement accessibles au programme.

Valeurs de retour

Retourne TRUE en cas de succès, et NCURSES_ERR en cas d'erreur.

Voir aussi



ncurses_clear

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_clearEfface l'écran

Description

bool ncurses_clear ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Efface totalement l'écran sans configurer les blancs.

Note : ncurses_clear() efface totalement l'écran sans configurer les blancs, qui représentent la couleur de fond d'écran. Pour effacer le fond d'écran avec les blancs, utilisez plutôt ncurses_erase().

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



ncurses_clrtobot

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_clrtobotEfface l'écran depuis la position courante jusqu'au bas de l'écran

Description

bool ncurses_clrtobot ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Efface toutes les lignes de l'écran depuis le curseur jusqu'à la fin de l'écran. Les blancs qui sont créés avec la fonction ncurses_clrtobot() ont le rendu courant du fond d'écran.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



ncurses_clrtoeol

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_clrtoeolEfface l'écran depuis la position courante jusqu'à la fin de la ligne

Description

bool ncurses_clrtoeol ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Efface la ligne courante depuis la position courante du curseur jusqu'à la fin. Les blancs qui sont créés avec la fonction ncurses_clrtoeol() ont le rendu courant du fond d'écran.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



ncurses_color_content

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_color_contentLit la valeur RGB d'une couleur

Description

int ncurses_color_content ( int $color , int &$r , int &$g , int &$b )

Lit les composants rouge, vert et bleu d'une couleur. Les capacités de gestion des couleurs du terminal doivent avoir été initialisées avec ncurses_start_color() avant d'appeler cette fonction.

Liste de paramètres

color

Le numéero de la couleur dont il faut lire les composants. Cela peut être une des constantes de couleurs prédéfinies.

r

Une variable passée par référence, pour recevoir le composant rouge de la couleur demandée. La valeur retournée sera entre 0 et 1000.

g

Une variable passée par référence, pour recevoir le composant vert de la couleur demandée. La valeur retournée sera entre 0 et 1000.

b

Une variable passée par référence, pour recevoir le composant bleu de la couleur demandée. La valeur retournée sera entre 0 et 1000.

Valeurs de retour

Retourne -1 si la fonction a réussi, et 0 si ncurses ou la gestion des couleurs du terminal n'ont pas été initialisées.

Voir aussi



ncurses_color_set

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_color_setModifie la couleur de fond et de devant

Description

int ncurses_color_set ( int $pair )

Configure les couleurs actives de fond et d'affichage. Tous les caractères qui seront écrits après l'utilisation de cette fonction utiliseront ces couleurs. Cette fonction a besoin du support des couleurs dans le terminal et de leur initialisation avec ncurses_start_color().

ncurses utilise des paires de couleurs pour spécifier simultanément les deux couleurs. Utilisez ncurses_init_pair() pour définir une paire.

Liste de paramètres

pair

La paire de couleur qui sera utilisée pour définir les couleurs de fond d'écran et d'affichage.

Valeurs de retour

Retourne -1 en cas de succès, et 0 en cas d'échec.

Exemples

Exemple #1 Affichage d'une chaîne avec une couleur donnée à l'écran

<?php
ncurses_init
();

// Si le terminal supporte les couleurs, initialisation et activation
if (ncurses_has_colors()) {
    
ncurses_start_color();
    
ncurses_init_pair(1NCURSES_COLOR_YELLOWNCURSES_COLOR_BLUE);
    
ncurses_color_set(1);
}

// Écriture d'une chaîne à l'écran
ncurses_mvaddstr(1010"Hello world! Yellow on blue text!");

// Envoi à l'écran
ncurses_refresh();

ncurses_end();
?>

Voir aussi



ncurses_curs_set

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_curs_setModifie l'état du curseur

Description

int ncurses_curs_set ( int $visibility )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

visibility



ncurses_def_prog_mode

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_def_prog_modeSauve le mode du terminal

Description

bool ncurses_def_prog_mode ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Sauve le mode du terminal pour réutilisation (dans les curses) avec la fonction ncurses_reset_prog_mode().

Valeurs de retour

Retourne FALSE en cas de succès, et TRUE sinon.

Voir aussi



ncurses_def_shell_mode

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_def_shell_modeSauve le mode de terminal (shell)

Description

bool ncurses_def_shell_mode ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Sauve le mode de terminal courant pour qu'il soit réutilisé par le shell (et non pas par curses) avec la fonction ncurses_reset_shell_mode().

Valeurs de retour

Retourne FALSE en cas de succès, et TRUE sinon.

Voir aussi



ncurses_define_key

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_define_keyDéfinit un code de clé (keycode)

Description

int ncurses_define_key ( string $definition , int $keycode )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

definition

keycode



ncurses_del_panel

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_del_panelRetire un conteneur de la pile et l'efface (mais pas la fenêtre associée)

Description

bool ncurses_del_panel ( resource $panel )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

panel



ncurses_delay_output

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_delay_outputRetarde l'affichage sur les terminaux utilisant des caractères de remplissage

Description

int ncurses_delay_output ( int $milliseconds )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

milliseconds



ncurses_delch

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_delchEfface le caractère courant et décale le reste de la ligne vers la gauche

Description

bool ncurses_delch ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Efface la caractère sous le curseur. Tous les caractères sont alors décalés vers la gauche sur la même ligne, et le dernier caractère est remplacé par un vide. La position du curseur ne change pas.

Valeurs de retour

Retourne FALSE en cas de succès, et TRUE sinon.

Voir aussi



ncurses_deleteln

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_deletelnEfface la ligne courante, et monte l'écran d'une ligne

Description

bool ncurses_deleteln ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Efface la ligne courante, qui est placée sous le curseur. Toutes les lignes sous-jacentes sont alors remontées d'un cran. La ligne du bas est effacée. La position du curseur ne change pas.

Valeurs de retour

Retourne FALSE en cas de succès, et sinon TRUE.

Voir aussi

  • ncurses_delch() - Efface le caractère courant et décale le reste de la ligne vers la gauche



ncurses_delwin

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_delwinEfface une fenêtre ncurses

Description

bool ncurses_delwin ( resource $window )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window



ncurses_doupdate

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_doupdateAffiche tout ce qui est prêt, et rafraîchit l'écran

Description

bool ncurses_doupdate ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Compare l'écran mémoire avec l'écran physique, et met à jour l'écran physique. Cette méthode est plus efficace que d'utiliser des rafraîchissements multiples.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.



ncurses_echo

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_echoActive l'écho d'entrée clavier

Description

bool ncurses_echo ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Active le mode écho. Tous les caractères saisis par l'utilisateur sont affichés à l'écran par ncurses_getch().

Valeurs de retour

Retourne FALSE en cas de succès, et TRUE si une erreur survient.

Voir aussi



ncurses_echochar

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_echocharAffiche un caractère et rafraîchit l'écran

Description

int ncurses_echochar ( int $character )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

character



ncurses_end

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_endCesse l'utilisation de ncurses et efface l'écran

Description

int ncurses_end ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.



ncurses_erase

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_eraseEfface l'écran du terminal

Description

bool ncurses_erase ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Remplit le terminal avec des blancs.

Les blancs créés ont la couleur du fond d'écran, configurée avec la fonction ncurses_bkgd().

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi



ncurses_erasechar

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_erasecharLit le caractère qui se fait effacer

Description

string ncurses_erasechar ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Retourne le caractère qui se fait effacer.

Valeurs de retour

Le caractère effacé, sous la forme d'une chaîne de caractères.

Voir aussi



ncurses_filter

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_filterDéfinit LINES pour iniscr() et newterm() à 1

Description

void ncurses_filter ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.



ncurses_flash

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_flashFait flasher le terminal (visual bell)

Description

bool ncurses_flash ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Fait flasher le terminal et si ce n'est pas possible, envoie une alerte sonore (bell).

Valeurs de retour

Retourne FALSE en cas de succès, et TRUE sinon.

Voir aussi



ncurses_flushinp

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_flushinpVide le buffer d'entrée du clavier

Description

bool ncurses_flushinp ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Vide le buffer d'entrée du clavier que votre programme n'a pas encore lu.

Valeurs de retour

Retourne FALSE en cas de succès, et TRUE sinon.



ncurses_getch

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_getchLit un caractère sur le clavier

Description

int ncurses_getch ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.



ncurses_getmaxyx

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_getmaxyxRetourne la taille d'une fenêtre

Description

void ncurses_getmaxyx ( resource $window , int &$y , int &$x )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Place la taille verticale et la taille horizontale de la fenêtre window dans les variables fournies.

Les variables doivent être passées par référence, donc, elles seront modifiées lorsque l'utilisateur change la taille du terminal.

Liste de paramètres

window

La fenêtre mesurée

y

Sera défini pour la hauteur de la fenêtre

x

Sera défini pour la largeur de la fenêtre

Valeurs de retour

Aucune valeur n'est retournée.



ncurses_getmouse

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_getmouseLit les événements souris

Description

bool ncurses_getmouse ( array &$mevent )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

ncurses_getmouse() lit les événements souris placés dans la queue.

Liste de paramètres

mevent

Les options d'événements seront placées dans ce paramètre, qui doit être un tableau, passé par référence (voir l'exemple ci-dessous).

En cas de succès, un tableau associatif, contenant les clés suivantes, sera délivré :

  • "id" : Identifiant permettant de distinguer plusieurs périphériques

  • "x" : Position à l'écran, en abscisse relative, et comptée en caractères

  • "y" : Position à l'écran, en ordonnée relative, et comptée en caractères

  • "z" : Actuellement non supporté

  • "mmask" : Action de souris

Valeurs de retour

Retourne FALSE si un événement de souris est actuellement visible dans la fenêtre fournie, TRUE sinon.

Exemples

Exemple #1 Exemple avec ncurses_getmouse()

<?php
switch (ncurses_getch()){
  case 
NCURSES_KEY_MOUSE:
    if (!
ncurses_getmouse($mevent)){
      if (
$mevent["mmask"] & NCURSES_MOUSE_BUTTON1_PRESSED){
        
$mouse_x $mevent["x"]; // Sauve la position de la souris
        
$mouse_y $mevent["y"];
      }
    }
  break;

  default:
    
/* .... */
}
?>

Voir aussi



ncurses_getyx

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_getyxRetourne la position courante du curseur pour une fenêtre

Description

void ncurses_getyx ( resource $window , int &$y , int &$x )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window

y

x



ncurses_halfdelay

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_halfdelayMet le terminal en mode semi-retardé

Description

int ncurses_halfdelay ( int $tenth )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

tenth



ncurses_has_colors

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_has_colorsVérifie que le terminal supporte les couleurs

Description

bool ncurses_has_colors ( void )

Vérifie que le terminal supporte les couleurs. Cette fonction peut être utilisée pour écrire des programmes indépendants des capacités du terminal. ncurses doit être initialisé avec ncurses_init() avant d'appeler cette fonction.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne TRUE si le terminal supporte les couleurs, FALSE sinon.

Exemples

Exemple #1 Writing a string with a specified color to the screen

<?php
ncurses_init
();

// Si le terminal supporte les couleurs, initialise et active les couleurs
if (ncurses_has_colors()) {
    
ncurses_start_color();
    
ncurses_init_pair(1NCURSES_COLOR_YELLOWNCURSES_COLOR_BLUE);
    
ncurses_color_set(1);
}

// Écrit une chaîne à l'écran
ncurses_mvaddstr(1010"Hello world! Yellow on blue text!");

// Envoi à l'écran
ncurses_refresh();

ncurses_end();
?>

Voir aussi



ncurses_has_ic

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_has_icVérifie les capacités d'insertion et d'effacement

Description

bool ncurses_has_ic ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Vérifie les capacités d'insertion et d'effacement du terminal.

Valeurs de retour

Retourne TRUE lorsque le terminal a ces capacités, FALSE sinon.

Voir aussi



ncurses_has_il

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_has_ilVérifie les capacités d'insertion et d'effacement

Description

bool ncurses_has_il ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Vérifie les capacités d'insertion et d'effacement du terminal.

Valeurs de retour

Retourne TRUE si le terminal a ces capacités, FALSE sinon.

Voir aussi



ncurses_has_key

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_has_keyVérifie la présence des touches de fonctions sur le clavier

Description

int ncurses_has_key ( int $keycode )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

keycode



ncurses_hide_panel

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_hide_panelRetire un conteneur de la pile, pour le rendre invisible

Description

int ncurses_hide_panel ( resource $panel )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

panel



ncurses_hline

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_hlineDessine une ligne horizontale à la position courante, en utilisant un caractère et une taille maximale

Description

int ncurses_hline ( int $charattr , int $n )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

charattr

n



ncurses_inch

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_inchLit le caractère et ses attributs à la position courante

Description

string ncurses_inch ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Retourne le caractère de la position courante.

Valeurs de retour

Retourne le caractère.



ncurses_init_color

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_init_colorConfigure une nouvelle valeur RGB pour une couleur

Description

int ncurses_init_color ( int $color , int $r , int $g , int $b )

Définit ou redéfinit une couleur. Lorsque cette fonction est appelée, toutes les occurrences d'une couleur donnée à l'écran, s'il y en a, changent immédiatement de définition.

Le terminal doit supporter les couleurs, et avoir été initialisé avec la fonction ncurses_start_color() avant d'appeler cette fonction. De plus, le terminal doit avoir être capable de changer les couleurs, ce qui peut être vérifié avec la fonction ncurses_can_change_color().

Liste de paramètres

color

Le numéro d'identification de la couleur à redéfinir. Cela peut être une des constantes de couleurs.

r

Une valeur de couleur pour le rouge, entre 0 et 1000.

g

Une valeur de couleur pour le vert, entre 0 et 1000.

b

Une valeur de couleur pour le bleu, entre 0 et 1000.

Valeurs de retour

Retourne -1 si la fonction a réussi, et 0 si ncurses ou les couleurs du terminal n'ont pas été initialisées, ou que le terminal ne supporte pas le changement de couleurs.

Voir aussi



ncurses_init_pair

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_init_pairAlloue une paire de couleur

Description

int ncurses_init_pair ( int $pair , int $fg , int $bg )

Définit ou redéfinit une paire de couleur pour l'affichage à l'écran : fond d'écran et affichage. Si la paire de couleur a déjà été initialisée, l'écran est rafraîchit et toutes les occurrences sont modifiées pour refléter la nouvelle définition.

Le support des couleurs doit avoir été initialisé avec ncurses_start_color() avant d'appeler cette fonction. La première paire de couleur (numéro 0) est supposée être blanc sur noir pardéfaut, mais peut être modifiée avec ncurses_assume_default_colors().

Liste de paramètres

pair

Le numéro de la paire à définir.

fg

La couleur d'affichage pour la paire de couleurs. Doit être une des couleurs prédéfinies ou une couleur définie par ncurses_init_color(), si le terminal est capable de changer les couleurs.

bg

La couleur de fond pour la paire de couleurs. Doit être une des couleurs prédéfinies ou une couleur définie par ncurses_init_color(), si le terminal est capable de changer les couleurs.

Valeurs de retour

Retourne -1 si la fonction réussit, et 0 si ncurses ou le support des couleurs n'a pas été initialisé.

Notes

Notez que le support du changement de couleurs n'est pas nécessaire pour définir une paire de couleurs pré-existante, mais uniquement pour changer la définition des composants (rouge, vert et bleu) des couleurs elles-mêmes, via ncurses_init_color().

Exemples

Exemple #1 Écriture d'une chaîne dans une couleur donnée

<?php
ncurses_init
();

// Si le terminal supporte les couleurs, initialisation et activation
if (ncurses_has_colors()) {
    
ncurses_start_color();
    
ncurses_init_pair(1NCURSES_COLOR_YELLOWNCURSES_COLOR_BLUE);
    
ncurses_color_set(1);
}

// Écriture d'une chaîne à la position donnée
ncurses_mvaddstr(1010"Hello world! Yellow on blue text!");

// Envoi à l'écran
ncurses_refresh();

ncurses_end();
?>

Voir aussi



ncurses_init

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_initInitialise ncurses

Description

void ncurses_init ( void )

Initialise l'interface ncurses et doit être utilisé avant n'importe quelle autre fonction ncurses.

Notez que ncurses_end() doit être appelé avant la fin du programme, ou alors le terminal ne sera pas remis dans sont mode non-visuel correct.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Aucune valeur n'est retournée.

Voir aussi

  • ncurses_end() - Cesse l'utilisation de ncurses et efface l'écran



ncurses_insch

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_inschInsère un caractère et décale le reste de la ligne vers la droite, y compris le caractère courant

Description

int ncurses_insch ( int $character )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

character



ncurses_insdelln

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_insdellnInsère des lignes devant la ligne courante en scrollant vers le bas (des nombres négatifs donneront un scroll vers le haut)

Description

int ncurses_insdelln ( int $count )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

count



ncurses_insertln

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_insertlnInsère une ligne et décale le reste de l'écran vers le bas

Description

int ncurses_insertln ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Insère une nouvelle ligne au-dessus de la ligne courante. La ligne du bas de l'écran sera perdue.



ncurses_insstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_insstrInsère une chaîne à la position courante, et décale le reste de la chaîne à droite

Description

int ncurses_insstr ( string $text )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

text



ncurses_instr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_instrLit une chaîne depuis le terminal

Description

int ncurses_instr ( string &$buffer )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Lit une chaîne depuis le terminal et retourne le nombre de caractères lus depuis la position courante jusqu'à la fin de la ligne.

Liste de paramètres

buffer

Les caractères. Les attributs seront supprimés.

Valeurs de retour

Retourne le nombre de caractères.



ncurses_isendwin

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_isendwinVérifie si ncurses est en mode endwin

Description

bool ncurses_isendwin ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Vérifie si ncurses est en mode endwin.

Valeurs de retour

Retourne TRUE, si ncurses_end() a été appelée sans aucun appel subséquent à ncurses_wrefresh(), FALSE sinon.

Voir aussi



ncurses_keyok

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_keyokActive ou désactive un code de clé (keycode)

Description

int ncurses_keyok ( int $keycode , bool $enable )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

keycode

enable



ncurses_keypad

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_keypadActive ou désactive le keypad

Description

int ncurses_keypad ( resource $window , bool $bf )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window

bf



ncurses_killchar

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_killcharRetourne la ligne du caractère actuellement supprimé

Description

string ncurses_killchar ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Retourne la ligne du caractère actuellement supprimé.

Valeurs de retour

Retourne le caractère supprimé.

Voir aussi



ncurses_longname

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_longnameRetourne la description du terminal

Description

string ncurses_longname ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Retourne une description complète du terminal.

Valeurs de retour

Retourne une description complète du terminal. La description est tronquée à 128 caractères. En cas d'erreur, FALSE sera retourné.

Voir aussi



ncurses_meta

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_metaActive/désactive les informations de méta clé 8-bits

Description

int ncurses_meta ( resource $window , bool $8bit )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window

8bit



ncurses_mouse_trafo

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mouse_trafoTransforme les coordonnées

Description

bool ncurses_mouse_trafo ( int &$y , int &$x , bool $toscreen )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

y

x

toscreen



ncurses_mouseinterval

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mouseintervalConfigure les délais entre les clics de souris

Description

int ncurses_mouseinterval ( int $milliseconds )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

milliseconds



ncurses_mousemask

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mousemaskConfigure les événements de souris à surveiller

Description

int ncurses_mousemask ( int $newmask , int &$oldmask )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Configure les événements de souris à surveiller. Par défaut, aucun événement souris n'est rapporté.

Les événements souris sont représentés par NCURSES_KEY_MOUSE dans la fonction ncurses_wgetch(). Pour lire les données d'événements dans la queue, utilisez la fonction ncurses_getmouse().

Liste de paramètres

newmask

Les options de masque de souris sont les constantes suivantes :

  • NCURSES_BUTTON1_PRESSED

  • NCURSES_BUTTON1_RELEASED

  • NCURSES_BUTTON1_CLICKED

  • NCURSES_BUTTON1_DOUBLE_CLICKED

  • NCURSES_BUTTON1_TRIPLE_CLICKED

  • NCURSES_BUTTON2_PRESSED

  • NCURSES_BUTTON2_RELEASED

  • NCURSES_BUTTON2_CLICKED

  • NCURSES_BUTTON2_DOUBLE_CLICKED

  • NCURSES_BUTTON2_TRIPLE_CLICKED

  • NCURSES_BUTTON3_PRESSED

  • NCURSES_BUTTON3_RELEASED

  • NCURSES_BUTTON3_CLICKED

  • NCURSES_BUTTON3_DOUBLE_CLICKED

  • NCURSES_BUTTON3_TRIPLE_CLICKED

  • NCURSES_BUTTON4_PRESSED

  • NCURSES_BUTTON4_RELEASED

  • NCURSES_BUTTON4_CLICKED

  • NCURSES_BUTTON4_DOUBLE_CLICKED

  • NCURSES_BUTTON4_TRIPLE_CLICKED

  • NCURSES_BUTTON_SHIFT>

  • NCURSES_BUTTON_CTRL

  • NCURSES_BUTTON_ALT

  • NCURSES_ALL_MOUSE_EVENTS

  • NCURSES_REPORT_MOUSE_POSITION

Comme effet secondaire, utiliser la valeur de 0 avec le paramètre newmask désactive la souris. Lui donner une valeur positive non nulle réactive la souris.

oldmask

Ce paramètre sera défini avec la valeur du masque précédent.

Valeurs de retour

Retourne un masque pour indiquer quels paramètres de newmask peut être rapporté. En cas d'échec complet, elle retourne 0.

Exemples

Exemple #1 Exemple avec ncurses_mousemask()

<?php
$newmask 
NCURSES_BUTTON1_CLICKED NCURSES_BUTTON1_RELEASED;
$mask ncurses_mousemask($newmask$oldmask);
if (
$mask $newmask){
    
printf("Toutes les options de souris spécifiées sont supportées\n");
}
?>

Voir aussi



ncurses_move_panel

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_move_panelDéplace un conteneur pour que son coin supérieur gauche soit aux coordonnées [startx, starty]

Description

int ncurses_move_panel ( resource $panel , int $startx , int $starty )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

panel

startx

starty



ncurses_move

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_moveDéplace la position d'affichage

Description

int ncurses_move ( int $y , int $x )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

y

x



ncurses_mvaddch

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvaddchDéplace la position courante et ajoute un caractère

Description

int ncurses_mvaddch ( int $y , int $x , int $c )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

y

x

c



ncurses_mvaddchnstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvaddchnstrDéplace la position et ajoute la chaîne attribuée avec la taille donnée

Description

int ncurses_mvaddchnstr ( int $y , int $x , string $s , int $n )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

y

x

s

n



ncurses_mvaddchstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvaddchstrDéplace la position et ajoute une chaîne attribuée

Description

int ncurses_mvaddchstr ( int $y , int $x , string $s )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

y

x

s



ncurses_mvaddnstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvaddnstrDéplace la position et ajoute une chaîne de taille donnée

Description

int ncurses_mvaddnstr ( int $y , int $x , string $s , int $n )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

y

x

s

n



ncurses_mvaddstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvaddstrDéplace la position et ajoute une chaîne

Description

int ncurses_mvaddstr ( int $y , int $x , string $s )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

y

x

s



ncurses_mvcur

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvcurDéplace immédiatement le curseur

Description

int ncurses_mvcur ( int $old_y , int $old_x , int $new_y , int $new_x )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

old_y

old_x

new_y

new_x



ncurses_mvdelch

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvdelchDéplace la position et efface le caractère, puis décale le reste de la ligne à gauche

Description

int ncurses_mvdelch ( int $y , int $x )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

y

x



ncurses_mvgetch

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvgetchDéplace la position et lit le caractère à la nouvelle position

Description

int ncurses_mvgetch ( int $y , int $x )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

y

x



ncurses_mvhline

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvhlineChoisi une nouvelle position et dessine une ligne horizontale avec le caractère donné, et de taille maximale donnée

Description

int ncurses_mvhline ( int $y , int $x , int $attrchar , int $n )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

y

x

attrchar

n



ncurses_mvinch

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvinchDéplace la position et lit le caractère à la nouvelle position

Description

int ncurses_mvinch ( int $y , int $x )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

y

x



ncurses_mvvline

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvvlineModifie la position et dessine une ligne verticale avec le caractère donné, de taille maximale donnée

Description

int ncurses_mvvline ( int $y , int $x , int $attrchar , int $n )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

y

x

attrchar

n



ncurses_mvwaddstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvwaddstrAjoute une chaîne à une nouvelle position dans la fenêtre

Description

int ncurses_mvwaddstr ( resource $window , int $y , int $x , string $text )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window

y

x

text



ncurses_napms

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_napmsFait une pause

Description

int ncurses_napms ( int $milliseconds )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

milliseconds



ncurses_new_panel

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_new_panelCrée un nouveau conteneur et l'associe à une fenêtre

Description

resource ncurses_new_panel ( resource $window )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window



ncurses_newpad

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_newpadCrée un nouveau pad (fenêtre)

Description

resource ncurses_newpad ( int $rows , int $cols )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

rows

cols



ncurses_newwin

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_newwinCrée une nouvelle fenêtre

Description

resource ncurses_newwin ( int $rows , int $cols , int $y , int $x )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Crée une nouvelle fenêtre pour y dessiner des éléments.

Lors de la création de la nouvelle fenêtre, pensez à utiliser ncurses_getmaxyx() pour repérer les espaces disponibles, sachant qu'un terminal est individuel et peut varier.

Liste de paramètres

rows

Nombre de lignes

cols

Nombre de colonnes

y

Y : coordonnée de l'origine

x

X : coordonnée de l'origine

Valeurs de retour

Retourne un identifiant de ressource pour la nouvelle fenêtre.



ncurses_nl

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_nlConvertit les nouvelles lignes et retours chariot en sauts de ligne

Description

bool ncurses_nl ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.



ncurses_nocbreak

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_nocbreakPasse le terminal en mode cooked

Description

bool ncurses_nocbreak ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Retourne le terminal en mode normal (cooked). Initialement, le terminal peut ou peut ne pas être en mode cbreak, comme mode hérité. Par conséquent, un program doit appeler ncurses_cbreak() et ncurses_nocbreak() explicitement.

Valeurs de retour

Retourne FALSE en cas de succès, et TRUE sinon.

Voir aussi



ncurses_noecho

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_noechoDésactive l'écho clavier

Description

bool ncurses_noecho ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Annule l'effet d'écho des caractères tapés à l'écran.

Valeurs de retour

Retourne FALSE en cas de succès, et TRUE sinon.

Voir aussi



ncurses_nonl

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_nonlNe convertit par les nouvelles lignes et retours chariot en sauts de ligne

Description

bool ncurses_nonl ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.



ncurses_noqiflush

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_noqiflushNe vide pas les buffers sur réception des caractères de signaux

Description

void ncurses_noqiflush ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.



ncurses_noraw

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_norawDéconfigure le mode brut du terminal

Description

bool ncurses_noraw ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Déconfigure le mode brut du terminal. Le mode brut est similaire au mode cbreak, car les caractères tapés sont immédiatement passés au programme. La différence est qu'en mode brut, les caractères d'interruption, de fin de programme, de suspension et de suivi du flux de caractères sont passés sans être interprétés.

Valeurs de retour

Retourne FALSE en cas de succès, et TRUE sinon.

Voir aussi



ncurses_pair_content

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_pair_contentRetourne les couleurs de fond et d'affichage d'une paire

Description

int ncurses_pair_content ( int $pair , int &$f , int &$b )

ncurses_pair_content() lit les couleurs de fond et de forme qui constitue une paire. Le support des couleurs du terminal doivent avoir été initialisées avec la fonction ncurses_start_color() avant d'appeler cette fonction.

Liste de paramètres

pair

Le numéro de la paire de couleur qu'il faut lire.

f

Une référence dans laquelle les informations de la couleur d'affichage sera placée. Les informations retournées seront un numéro de couleur parmi les couleurs prédéfinies ou une couleur définie précédemment par ncurses_init_color(), si le terminal supporte le changement de couleur.

b

Une référence dans laquelle les informations de la couleur de fond sera placée. Les informations retournées seront un numéro de couleur parmi les couleurs prédéfinies ou une couleur définie précédemment par ncurses_init_color(), si le terminal supporte le changement de couleur.

Valeurs de retour

Retourne -1 si la fonction a réussi, et 0 si ncurses ou le support des couleurs du terminal n'ont pas été initialisées.

Voir aussi



ncurses_panel_above

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_panel_aboveRetourne le conteneur au-dessus du conteneur

Description

resource ncurses_panel_above ( resource $panel )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

panel

Valeurs de retour

Si le conteneur est null, retourne le dernier conteneur de la pile.



ncurses_panel_below

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_panel_belowRetourne le conteneur sous le conteneur

Description

resource ncurses_panel_below ( resource $panel )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

panel

Liste de paramètres

Si le conteneur est null, le premier conteneur de la pile est retourné.



ncurses_panel_window

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_panel_windowRetourne la fenêtre associée avec un conteneur

Description

resource ncurses_panel_window ( resource $panel )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

panel



ncurses_pnoutrefresh

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_pnoutrefreshCopie une région depuis un pad dans un écran virtuel

Description

int ncurses_pnoutrefresh ( resource $pad , int $pminrow , int $pmincol , int $sminrow , int $smincol , int $smaxrow , int $smaxcol )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

pad

pminrow

pmincol

sminrow

smincol

smaxrow

smaxcol



ncurses_prefresh

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_prefreshCopie une région depuis un pad dans l'écran virtuel

Description

int ncurses_prefresh ( resource $pad , int $pminrow , int $pmincol , int $sminrow , int $smincol , int $smaxrow , int $smaxcol )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

pad

pminrow

pmincol

sminrow

smincol

smaxrow

smaxcol



ncurses_putp

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_putpApplique l'information d'espacement à la chaîne et l'affiche

Description

int ncurses_putp ( string $text )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

text



ncurses_qiflush

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_qiflushVide les buffers après détection d'un caractère de signal

Description

void ncurses_qiflush ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.



ncurses_raw

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_rawPasse le terminal en mode brut (raw)

Description

bool ncurses_raw ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Place le terminal en mode brut. Le mode brut est similaire au mode cbreak, car les caractères tapés sont immédiatement passés au programme. La différence est qu'en mode brut, les caractères d'interruption, de fin de programme, de suspension et de suivi du flux de caractères sont passés sans être interprétés.

Valeurs de retour

Retourne FALSE en cas de succès, et TRUE sinon.

Voir aussi



ncurses_refresh

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_refreshRafraîchit l'écran

Description

int ncurses_refresh ( int $ch )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

ch



ncurses_replace_panel

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_replace_panelRemplace la fenêtre associée à un conteneur

Description

int ncurses_replace_panel ( resource $panel , resource $window )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

panel

window



ncurses_reset_prog_mode

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_reset_prog_modeRestaure le mode prog sauvé par def_prog_mode

Description

int ncurses_reset_prog_mode ( void )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.



ncurses_reset_shell_mode

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_reset_shell_modeRestaure le mode shell, mode sauvé par def_shell_mode

Description

int ncurses_reset_shell_mode ( void )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.



ncurses_resetty

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_resettyRétablit le terminal sauvé

Description

bool ncurses_resetty ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Rétablit le terminal sauvé par la fonction ncurses_savetty().

Valeurs de retour

Retourne toujours FALSE.

Voir aussi



ncurses_savetty

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_savettySauve l'état du terminal

Description

bool ncurses_savetty ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Sauve l'état courant du terminal. L'état courant du terminal peut être rétabli avec la fonction ncurses_resetty().

Valeurs de retour

Retourne toujours FALSE.

Voir aussi



ncurses_scr_dump

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_scr_dumpSauve un écran dans un fichier

Description

int ncurses_scr_dump ( string $filename )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

filename



ncurses_scr_init

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_scr_initInitialise un écran depuis un fichier de sauvegarde

Description

int ncurses_scr_init ( string $filename )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

filename



ncurses_scr_restore

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_scr_restoreRétablit un écran depuis un fichier de sauvegarde

Description

int ncurses_scr_restore ( string $filename )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

filename



ncurses_scr_set

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_scr_setConfigure un écran depuis un fichier de sauvegarde

Description

int ncurses_scr_set ( string $filename )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

filename



ncurses_scrl

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_scrlScrolle le contenu de la fenêtre vers le haut ou le bas, sans changer la position courante

Description

int ncurses_scrl ( int $count )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

count



ncurses_show_panel

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_show_panelPlace un conteneur invisible en haut de la pile, pour le rendre visible

Description

int ncurses_show_panel ( resource $panel )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

panel



ncurses_slk_attr

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_attrRetourne l'attribut de la clé soft label courante

Description

int ncurses_slk_attr ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Retourne l'attribut de la clé soft label.

Valeurs de retour

L'attribut, sous la forme d'un entier.



ncurses_slk_attroff

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_attroffDésactive l'attribut donné pour les étiquettes des function-key (fonctions clés)

Description

int ncurses_slk_attroff ( int $intarg )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

intarg



ncurses_slk_attron

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_attronActive l'attribut donné pour les étiquettes des function-key (fonctions clés)

Description

int ncurses_slk_attron ( int $intarg )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

intarg



ncurses_slk_attrset

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_attrsetDéfinit les attributs donnés à une étiquette function-key

Description

int ncurses_slk_attrset ( int $intarg )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

intarg



ncurses_slk_clear

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_clearEfface les soft labels de l'écran

Description

bool ncurses_slk_clear ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

ncurses_slk_clear() efface les clés label keys de l'écran.

Valeurs de retour

Retourne FALSE en cas de succès, et TRUE sinon.



ncurses_slk_color

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_colorConfigure la couleur des clés soft label

Description

int ncurses_slk_color ( int $intarg )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

intarg



ncurses_slk_init

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_initInitialise les fonctions de clés soft label

Description

bool ncurses_slk_init ( int $format )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Initialise les fonctions de clés soft label.

ncurses_slk_init() doit être appelée avant que ncurses_init() et ncurses_newwin() soient utilisées.

Liste de paramètres

format

Si ncurses_init() utilise une ligne de stdscr pour émuler les soft labels, alors le paramètre format détermine comment les labels seront arrangés sur l'écran.

La valeur 0 indique que vous utiliserez un arrangement de type 3-2-3; la valeur 1 indiquera un arrangement 4-4; la valeur 2 indiquera un mode 4-4-4, mais une ligne d'index sera créée en plus.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.



ncurses_slk_noutrefresh

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_noutrefreshCopie toutes les clés soft label à l'écran virtuel

Description

bool ncurses_slk_noutrefresh ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.



ncurses_slk_refresh

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_refreshCopie les clés soft label à l'écran

Description

int ncurses_slk_refresh ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Copie les clés soft label de l'écran virtuel vers l'écran physique.



ncurses_slk_restore

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_restoreRétablit les clés soft label

Description

int ncurses_slk_restore ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Rétablit les clés soft label après l'utilisation de ncurses_slk_clear().



ncurses_slk_set

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_setModifie les étiquettes de clé de fonction (function key labels)

Description

bool ncurses_slk_set ( int $labelnr , string $label , int $format )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

labelnr

label

format



ncurses_slk_touch

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_touchForce l'affichage lorsque ncurses_slk_noutrefresh est utilisé

Description

int ncurses_slk_touch ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Force l'affichage de tous les soft labels dès la prochaine utilisation de ncurses_slk_noutrefresh().



ncurses_standend

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_standendCesse l'utilisation de l'attribut 'standout'

Description

int ncurses_standend ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.



ncurses_standout

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_standoutCommence l'utilisation de l'attribut 'standout'

Description

int ncurses_standout ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.



ncurses_start_color

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_start_colorActive les couleurs

Description

int ncurses_start_color ( void )

ncurses_start_color() intialise le support des couleurs dans ncurses. Cette fonction doit être appelée avant toute manipulation des couelurs, et après ncurses_init(). C'est une bonne pratique que d'appeler cette fonction juste après ncurses_init().

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne 0 en cas de succès, et -1 si la table de couleurs n'a pas pu être allouée ou ncurses n'a pas été initialisée.

Exemples

Exemple #1 Affichage d'une chaîne en couleur à l'écran

<?php
ncurses_init
();

// Si le terminal supporte les couleurs, initialisation et activation
if (ncurses_has_colors()) {
    
ncurses_start_color();
    
ncurses_init_pair(1NCURSES_COLOR_YELLOWNCURSES_COLOR_BLUE);
    
ncurses_color_set(1);
}

// Ecriture de la chaîne à l'écran
ncurses_mvaddstr(1010"Hello world! Yellow on blue text!");

// Envoi à l'écran
ncurses_refresh();

ncurses_end();
?>

Voir aussi



ncurses_termattrs

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_termattrsRetourne toutes les options supportées par le terminal, combinées ensemble par l'opérateur OR

Description

bool ncurses_termattrs ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.



ncurses_termname

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_termnameRetourne le nom court du terminal

Description

string ncurses_termname ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Retourne le nom court du terminal.

Valeurs de retour

Retourne le nom court du terminal. Le nom court est tronqué à 14 caractères. En cas d'erreur, ncurses_termname() retourne NULL.

Voir aussi



ncurses_timeout

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_timeoutConfigure le temps d'expiration des séquences clavier spéciales

Description

void ncurses_timeout ( int $millisec )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

millisec



ncurses_top_panel

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_top_panelPlace un conteneur visible sur le haut de la pile

Description

int ncurses_top_panel ( resource $panel )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

panel



ncurses_typeahead

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_typeaheadSpécifie un autre descripteur de fichier pour la vérification à la volée des données saisies

Description

int ncurses_typeahead ( int $fd )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

fd



ncurses_ungetch

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_ungetchReplace un caractère dans la queue d'entrée

Description

int ncurses_ungetch ( int $keycode )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

keycode



ncurses_ungetmouse

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_ungetmouseAjoute un événement souris dans la queue

Description

bool ncurses_ungetmouse ( array $mevent )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Ajoute un événement souris dans la queue d'entrée, et associe cet événement avec l'état du terminal et les coordonnées relatives (en caractères) de la souris, spécifiés dans mevent.

Liste de paramètres

mevent

Un tableau associatif spécifiant les options de l'événement :

  • "id" : identifiant permettant de distinguer plusieurs périphériques

  • "x" : position à l'écran, en abscisse relative, et comptée en caractères

  • "y" : position à l'écran, en ordonnée relative, et comptée en caractères

  • "z" : actuellement non supporté

  • "mmask" : action de souris

Valeurs de retour

Retourne FALSE en cas de succès, et TRUE sinon.

Voir aussi



ncurses_update_panels

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_update_panelsRafraîchit l'écran virtuel pour prendre en compte les relations entre les conteneurs de la pile

Description

void ncurses_update_panels ( void )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.



ncurses_use_default_colors

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_use_default_colorsAssigne la couleur de terminal pour l'index -1

Description

bool ncurses_use_default_colors ( void )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.



ncurses_use_env

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_use_envContrôle l'utilisation des informations d'environnement concernant la taille du terminal

Description

void ncurses_use_env ( bool $flag )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

flag



ncurses_use_extended_names

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_use_extended_namesContrôle l'utilisation des noms étendus dans les descriptions terminfo

Description

int ncurses_use_extended_names ( bool $flag )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

flag



ncurses_vidattr

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_vidattrAffiche la chaîne sur un terminal dans le mode d'attribut vidéo

Description

int ncurses_vidattr ( int $intarg )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

intarg



ncurses_vline

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_vlineDessine une ligne verticale à la position courante en utilisant un caractère donné, pour une taille donnée

Description

int ncurses_vline ( int $charattr , int $n )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

charattr

n



ncurses_waddch

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_waddch Ajoute un caractère à la position courante, dans une fenêtre, et avance le curseur

Description

int ncurses_waddch ( resource $window , int $ch )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window

ch



ncurses_waddstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_waddstrAffiche le texte à la position courante dans la fenêtre

Description

int ncurses_waddstr ( resource $window , string $str [, int $n ] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window

str

n



ncurses_wattroff

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wattroffDésactive les attributs d'une fenêtre

Description

int ncurses_wattroff ( resource $window , int $attrs )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window

attrs



ncurses_wattron

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wattronEfface les attributs de la fenêtre

Description

int ncurses_wattron ( resource $window , int $attrs )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window

attrs



ncurses_wattrset

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wattrsetModifie les attributs d'une fenêtre

Description

int ncurses_wattrset ( resource $window , int $attrs )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window

attrs



ncurses_wborder

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wborderDessine le bord d'une fenêtre avec un caractère qualifié

Description

int ncurses_wborder ( resource $window , int $left , int $right , int $top , int $bottom , int $tl_corner , int $tr_corner , int $bl_corner , int $br_corner )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Dessine les lignes spécifiées et les coins autour de la fenêtre passée par window.

Utilisez ncurses_border() pour les bordures de la fenêtre principale.

Liste de paramètres

Chaque paramètre attend 0 pour dessiner et 1 pour ne pas le faire.

window

La fenêtre à traiter

left

right

top

bottom

tl_corner

Coin en haut, à gauche

tr_corner

Coin en haut, à droite

bl_corner

Coin en bas, à gauche

br_corner

Coin en bas, à droite

Voir aussi

  • ncurses_border() - Dessine un bord autour de l'écran avec les caractères données



ncurses_wclear

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wclearEfface la fenêtre

Description

int ncurses_wclear ( resource $window )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window



ncurses_wcolor_set

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wcolor_setModifie les paires de couleurs de la fenêtre

Description

int ncurses_wcolor_set ( resource $window , int $color_pair )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window

color_pair



ncurses_werase

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_weraseEfface le contenu de la fenêtre

Description

int ncurses_werase ( resource $window )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window



ncurses_wgetch

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wgetchLit un caractère depuis le clavier (fenêtre)

Description

int ncurses_wgetch ( resource $window )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window



ncurses_whline

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_whlineDessine une ligne horizontale à partir de la position courante, avec un caractère qualifié, et d'une taille maximale

Description

int ncurses_whline ( resource $window , int $charattr , int $n )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window

charattr

n



ncurses_wmouse_trafo

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wmouse_trafoTransforme les coordonnées d'une fenêtre

Description

bool ncurses_wmouse_trafo ( resource $window , int &$y , int &$x , bool $toscreen )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window

x

y

toscreen



ncurses_wmove

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wmoveDéplace la position d'affichage de la fenêtre

Description

int ncurses_wmove ( resource $window , int $y , int $x )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window

y

x



ncurses_wnoutrefresh

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wnoutrefreshCopie la fenêtre dans l'écran virtuel

Description

int ncurses_wnoutrefresh ( resource $window )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window



ncurses_wrefresh

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wrefreshRafraîchit la fenêtre sur l'écran du terminal

Description

int ncurses_wrefresh ( resource $window )
Avertissement

Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window



ncurses_wstandend

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wstandendTermine le mode standout de la fenêtre

Description

int ncurses_wstandend ( resource $window )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window



ncurses_wstandout

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wstandoutPasse une fenêtre en mode standout

Description

int ncurses_wstandout ( resource $window )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window



ncurses_wvline

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wvlineDessine une ligne verticale dans une fenêtre, à la position courante, en utilisant un caractère qualifié, avec une taille maximale

Description

int ncurses_wvline ( resource $window , int $charattr , int $n )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

window

charattr

n


Sommaire




Newt


Introduction

Il s'agit d'une extension du langage PHP pour la bibliothèque RedHat Newt, une fenêtre basé sur un terminal et sur une bibliothèque de widget pour écrire des applications avec des interfaces conviviaux. Une fois que cette extension est activé dans PHP, vous aurez la possibilité d'utiliser des widgets, comme des fenêtres, des boutons, des boîtes à cocher, des boîtes radio, des labels, des boîtes texte, des barres de défilement, de grandes boîtes texte, des règles, etc. L'utilisation de cette extension est vraiment similaire à l'API original Newt du langage de programmation C.



Installation/Configuration

Sommaire


Pré-requis

Ce module utilise les fonctions de la bibliothèque RedHat Newt. Vous aurez besoin de la version libnewt >= 0.51.0.



Installation

Cette extension » PECL n'est pas intégrée à PHP. Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici : » http://pecl.php.net/package/newt.

En PHP 4, les sources de cette extension PECL peuvent être trouvées dans le dossier ext/ avec les sources de PHP ou sur le lien PECL ci-dessous. Afin d'utiliser ces fonctions, vous devez compiler le support newt en CGI ou en CLI PHP en utilisant l'option de configure --with-newt[=DIR] .

Note:

Cette extension n'est pas disponible pour la plate-forme Windows.

Vous aurez aussi besoin des bibliothèques curses et slang afin de compiler cette extension. Pour spécifier des emplacements de ces bibliothèques, utilisez les options de configuration suivante : --with-curses-dir=/path/to/libcurses --with-slang-dir=/path/to/libslang



Configuration à l'exécution

Cette extension ne définit aucune directive de configuration.



Types de ressources

Cette extension utilise deux types de ressources : "composant newt" et "grille newt".

Le type de ressource "composant newt" est retourné par les fonctions, qui créent les widgets communs newt (par exemple : newt_button()).

Le type de ressource "grille newt" est un lien spécial pour les identifiants des composants, retourné par la classe d'objet de grille de newt (par exemple : newt_create_grid())




Constantes pré-définies

Sommaire

Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.


Raisons de sortie de Newt

Raisons de sortie de Newt
Constante Signification
NEWT_EXIT_HOTKEY touche rapide définie par newt_form_add_hot_key() a été appuyée
NEWT_EXIT_COMPONENT certains composants ont demandé la sortie de la forme
NEWT_EXIT_FDREADY le pointeur de fichier spécifié dans newt_form_watch_fd() est prêt à être lu ou écrit
NEWT_EXIT_TIMER le temps spécifié dans newt_form_set_timer() s'est écoulé


Newt colorsets

Newt colorsets
Constante Signification
NEWT_COLORSET_ROOT  
NEWT_COLORSET_BORDER  
NEWT_COLORSET_WINDOW  
NEWT_COLORSET_SHADOW  
NEWT_COLORSET_TITLE  
NEWT_COLORSET_BUTTON  
NEWT_COLORSET_ACTBUTTON  
NEWT_COLORSET_CHECKBOX  
NEWT_COLORSET_ACTCHECKBOX  
NEWT_COLORSET_ENTRY  
NEWT_COLORSET_LABEL  
NEWT_COLORSET_LISTBOX  
NEWT_COLORSET_ACTLISTBOX  
NEWT_COLORSET_TEXTBOX  
NEWT_COLORSET_ACTTEXTBOX  
NEWT_COLORSET_HELPLINE  
NEWT_COLORSET_ROOTTEXT  
NEWT_COLORSET_EMPTYSCALE  
NEWT_COLORSET_FULLSCALE  
NEWT_COLORSET_DISENTRY  
NEWT_COLORSET_COMPACTBUTTON  
NEWT_COLORSET_ACTSELLISTBOX  
NEWT_COLORSET_SELLISTBOX  


Drapeaux d'argument Newt

Drapeaux d'argument Newt
Constante Signification
NEWT_ARG_LAST  
NEWT_ARG_APPEND  


Sens des Drapeaux Newt

Sens des Drapeaux Newt
Constante Signification
NEWT_FLAGS_SET  
NEWT_FLAGS_RESET  
NEWT_FLAGS_TOGGLE  


Drapeaux des Composants Newt

Drapeaux des Composants Newt
Constante Signification
NEWT_FLAG_RETURNEXIT Sort de la forme, lorsque le composant est activé
NEWT_FLAG_HIDDEN Le composant est caché
NEWT_FLAG_SCROLL Le composant est flottant
NEWT_FLAG_DISABLED Le composant est désactivé
NEWT_FLAG_BORDER  
NEWT_FLAG_WRAP Enveloppe le texte
NEWT_FLAG_NOF12 Ne sort pas de la forme en appuyant sur F12
NEWT_FLAG_MULTIPLE  
NEWT_FLAG_SELECTED Le composant est sélectionné
NEWT_FLAG_CHECKBOX Le composant est une case à cocher
NEWT_FLAG_PASSWORD Le composant est une boîte de mot de passe
NEWT_FLAG_SHOWCURSOR Montre le curseur


Drapeaux de pointeur de fichier

Drapeaux de pointeur de fichier
Constante Signification
NEWT_FD_READ  
NEWT_FD_WRITE  
NEWT_FD_EXCEPT  


Drapeaux d'Arbre de Cases à Cocher

Drapeaux d'Arbre de Cases à Cocher
Constante Signification
NEWT_CHECKBOXTREE_UNSELECTABLE  
NEWT_CHECKBOXTREE_HIDE_BOX  
NEWT_CHECKBOXTREE_COLLAPSED  
NEWT_CHECKBOXTREE_EXPANDED  
NEWT_CHECKBOXTREE_UNSELECTED  
NEWT_CHECKBOXTREE_SELECTED  


Drapeaux d'Entrée

Drapeaux d'Entrée
Constante Signification
NEWT_ENTRY_SCROLL  
NEWT_ENTRY_HIDDEN  
NEWT_ENTRY_RETURNEXIT  
NEWT_ENTRY_DISABLED  


Drapeaux de Liste

Drapeaux de Liste
Constante Signification
NEWT_LISTBOX_RETURNEXIT  


Drapeaux de Boîte Texte

Drapeaux de Boîte Texte
Constante Signification
NEWT_TEXTBOX_WRAP Enveloppe le texte dans la boîte texte
NEWT_TEXTBOX_SCROLL Défile le texte dans la boîte texte


Drapeaux de Formulaire

Drapeaux de Formulaire
Constante Signification
NEWT_FORM_NOF12 Ne sort pas de la forme en appuyant sur F12


Clés Newt

Clés Newt
Constante Signification
NEWT_KEY_TAB  
NEWT_KEY_ENTER  
NEWT_KEY_SUSPEND  
NEWT_KEY_ESCAPE  
NEWT_KEY_RETURN  
NEWT_KEY_EXTRA_BASE  
NEWT_KEY_UP  
NEWT_KEY_DOWN  
NEWT_KEY_LEFT  
NEWT_KEY_RIGHT  
NEWT_KEY_BKSPC  
NEWT_KEY_DELETE  
NEWT_KEY_HOME  
NEWT_KEY_END  
NEWT_KEY_UNTAB  
NEWT_KEY_PGUP  
NEWT_KEY_PGDN  
NEWT_KEY_INSERT  
NEWT_KEY_F1  
NEWT_KEY_F2  
NEWT_KEY_F3  
NEWT_KEY_F4  
NEWT_KEY_F5  
NEWT_KEY_F6  
NEWT_KEY_F7  
NEWT_KEY_F8  
NEWT_KEY_F9  
NEWT_KEY_F10  
NEWT_KEY_F11  
NEWT_KEY_F12  
NEWT_KEY_RESIZE  


Ancres Newt

Ancres Newt
Constante Signification
NEWT_ANCHOR_LEFT  
NEWT_ANCHOR_RIGHT  
NEWT_ANCHOR_TOP  
NEWT_ANCHOR_BOTTOM  


Drapeaux de Grille

Drapeaux de Grille
Constante Signification
NEWT_GRID_FLAG_GROWX  
NEWT_GRID_FLAG_GROWY  
NEWT_GRID_EMPTY  
NEWT_GRID_COMPONENT  
NEWT_GRID_SUBGRID  



Exemples

Sommaire


Utilisation simple

Cet exemple est une utilisation du dialogue 'setup' de RedHat écrit en PHP, exécuté en mode texte.

Exemple #1 Exemple d'Utilisation Newt

<?php
newt_init 
();
newt_cls ();

newt_draw_root_text (00"Test Mode Setup Utility 1.12");
newt_push_help_line (null);
newt_draw_root_text (-300"(c) 1999-2002 RedHat, Inc");

newt_get_screen_size ($rows$cols);

newt_open_window ($rows/2-17$cols/2-103417"Choose a Tool");

$form newt_form ();

$list newt_listbox (3210);

foreach (array (
    
"Authentication configuration",
    
"Firewall configuration",
    
"Mouse configuration",
    
"Network configuration",
    
"Printer configuration",
    
"System services") as $l_item)
{
    
newt_listbox_add_entry ($list$l_item$l_item);
}

$b1 newt_button (512"Run Tool");
$b2 newt_button (2112"Quit");

newt_form_add_component ($form$list);
newt_form_add_components ($form, array($b1$b2));

newt_refresh ();
newt_run_form ($form);

newt_pop_window ();
newt_pop_help_line ();
newt_finished ();
newt_form_destroy ($form);
?>



Fonctions Newt


newt_bell

(PECL newt >= 0.1)

newt_bellEnvoie un beep au terminal

Description

void newt_bell ( void )

Cette fonction envoie un beep au terminal.

Note:

Dépendemment des configurations du terminal, le beep peut être ou ne peut être audible.

Valeurs de retour

Aucune valeur n'est retournée.



newt_button_bar

(PECL newt >= 0.1)

newt_button_barRetourne une grille contenant les boutons créés

Description

resource newt_button_bar ( array &$buttons )

Cette fonction retourne une grille contenant les boutons créés.

Liste de paramètres

buttons

Valeurs de retour

Retourne une grille, contenant les boutons créés.



newt_button

(PECL newt >= 0.1)

newt_buttonCrée un nouveau bouton

Description

resource newt_button ( int $left , int $top , string $text )

Crée un nouveau bouton.

Liste de paramètres

left

Coordonnée X du bouton.

top

Coordonnée Y du bouton.

text

Le texte qui devrait apparaître dans le bouton.

Valeurs de retour

Retourne une ressource du composant bouton créé ou FALSE en cas d'erreur.

Exemples

Exemple #1 Exemple avec newt_button()

<?php

$form 
newt_form();

$ok_button newt_button(512"Run Tool");
    
newt_form_add_component($form$ok_button);

?>

Voir aussi



newt_centered_window

(PECL newt >= 0.1)

newt_centered_windowOuvre une fenêtre centrée de la taille spécifiée

Description

int newt_centered_window ( int $width , int $height [, string $title ] )

Ouvre une fenêtre centrée de la taille spécifiée.

Liste de paramètres

width

Largeur de la fenêtre

height

Hauteur de la fenêtre

title

Titre de la fenêtre

Valeurs de retour

Valeur non définie.

Voir aussi



newt_checkbox_get_value

(PECL newt >= 0.1)

newt_checkbox_get_valueRécupère la valeur de la ressource de boîte à cocher

Description

string newt_checkbox_get_value ( resource $checkbox )

Cette fonction retourne le caractère dans la séquence qui indique la valeur courante de la boîte à cocher.

Liste de paramètres

checkbox

Valeurs de retour

Retourne le caractère indiquant la valeur de la boîte à cocher.



newt_checkbox_set_flags

(PECL newt >= 0.1)

newt_checkbox_set_flagsConfigure une ressource de boîte à cocher

Description

void newt_checkbox_set_flags ( resource $checkbox , int $flags , int $sense )

Cette fonction permet de définir divers drapeaux d'une ressource de boîte à cocher.

Liste de paramètres

checkbox

flags

sense

Valeurs de retour

Aucune valeur n'est retournée.



newt_checkbox_set_value

(PECL newt >= 0.1)

newt_checkbox_set_valueDéfinit la valeur de la boîte à cocher

Description

void newt_checkbox_set_value ( resource $checkbox , string $value )

Cette fonction permet de définir la valeur courante de la ressource de boîte à cocher.

Liste de paramètres

checkbox

value

Valeurs de retour

Aucune valeur n'est retournée.



newt_checkbox_tree_add_item

(PECL newt >= 0.1)

newt_checkbox_tree_add_itemAjout un nouvel élément à l'arbre des boîtes à cocher

Description

void newt_checkbox_tree_add_item ( resource $checkboxtree , string $text , mixed $data , int $flags , int $index [, int $... ] )

Cette fonction permet d'ajout un nouvel élément l'arbre des boîtes à cocher.

Liste de paramètres

checkboxtree

text

data

flags

index

Valeurs de retour

Aucune valeur n'est retournée.



newt_checkbox_tree_find_item

(PECL newt >= 0.1)

newt_checkbox_tree_find_itemCherche un élément dans l'arbre des boîtes à cocher

Description

array newt_checkbox_tree_find_item ( resource $checkboxtree , mixed $data )

Cherche un élément dans l'arbre des boîtes à cocher.

Liste de paramètres

checkboxtree

data

Valeurs de retour

Retourne la ressource de l'élément de l'arbre de boîtes à cocher, ou NULL s'il n'a pas été trouvé.



newt_checkbox_tree_get_current

(PECL newt >= 0.1)

newt_checkbox_tree_get_currentRetourne l'élément sélectionné de l'arbre des boîtes à cocher

Description

mixed newt_checkbox_tree_get_current ( resource $checkboxtree )

Cette méthode retourne l'élément sélectionné de l'arbre des boîtes à cocher.

Liste de paramètres

checkboxtree

Valeurs de retour

Retourne l'élément courant (sélectionné) de l'arbre des boîtes à cocher.



newt_checkbox_tree_get_entry_value

(PECL newt >= 0.1)

newt_checkbox_tree_get_entry_value

Description

string newt_checkbox_tree_get_entry_value ( resource $checkboxtree , mixed $data )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

checkboxtree

data

Valeurs de retour



newt_checkbox_tree_get_multi_selection

(PECL newt >= 0.1)

newt_checkbox_tree_get_multi_selection

Description

array newt_checkbox_tree_get_multi_selection ( resource $checkboxtree , string $seqnum )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

checkboxtree

seqnum

Valeurs de retour



newt_checkbox_tree_get_selection

(PECL newt >= 0.1)

newt_checkbox_tree_get_selection

Description

array newt_checkbox_tree_get_selection ( resource $checkboxtree )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

checkboxtree

Valeurs de retour



newt_checkbox_tree_multi

(PECL newt >= 0.1)

newt_checkbox_tree_multi

Description

resource newt_checkbox_tree_multi ( int $left , int $top , int $height , string $seq [, int $flags ] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

left

top

height

seq

flags

Valeurs de retour



newt_checkbox_tree_set_current

(PECL newt >= 0.1)

newt_checkbox_tree_set_current

Description

void newt_checkbox_tree_set_current ( resource $checkboxtree , mixed $data )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

checkboxtree

data

Valeurs de retour

Aucune valeur n'est retournée.



newt_checkbox_tree_set_entry_value

(PECL newt >= 0.1)

newt_checkbox_tree_set_entry_value

Description

void newt_checkbox_tree_set_entry_value ( resource $checkboxtree , mixed $data , string $value )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

checkboxtree

data

value

Valeurs de retour

Aucune valeur n'est retournée.



newt_checkbox_tree_set_entry

(PECL newt >= 0.1)

newt_checkbox_tree_set_entry

Description

void newt_checkbox_tree_set_entry ( resource $checkboxtree , mixed $data , string $text )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

checkboxtree

data

text

Valeurs de retour

Aucune valeur n'est retournée.



newt_checkbox_tree_set_width

(PECL newt >= 0.1)

newt_checkbox_tree_set_width

Description

void newt_checkbox_tree_set_width ( resource $checkbox_tree , int $width )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

checkbox_tree

width

Valeurs de retour

Aucune valeur n'est retournée.



newt_checkbox_tree

(PECL newt >= 0.1)

newt_checkbox_tree

Description

resource newt_checkbox_tree ( int $left , int $top , int $height [, int $flags ] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

left

top

height

flags

Valeurs de retour



newt_checkbox

(PECL newt >= 0.1)

newt_checkbox

Description

resource newt_checkbox ( int $left , int $top , string $text , string $def_value [, string $seq ] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

left

top

text

def_value

seq

Valeurs de retour



newt_clear_key_buffer

(PECL newt >= 0.1)

newt_clear_key_bufferJette le contenu de l'entrée du tampon du terminal sans attendre d'autre entrée additionnelle

Description

void newt_clear_key_buffer ( void )

Jette le contenu de l'entrée du tampon du terminal sans attendre d'autre entrée additionnelle

Valeurs de retour

Aucune valeur n'est retournée.

Voir aussi



newt_cls

(PECL newt >= 0.1)

newt_cls

Description

void newt_cls ( void )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

Valeurs de retour

Aucune valeur n'est retournée.



newt_compact_button

(PECL newt >= 0.1)

newt_compact_button

Description

resource newt_compact_button ( int $left , int $top , string $text )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

left

top

text

Valeurs de retour



newt_component_add_callback

(PECL newt >= 0.1)

newt_component_add_callback

Description

void newt_component_add_callback ( resource $component , mixed $func_name , mixed $data )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

component

func_name

data

Valeurs de retour

Aucune valeur n'est retournée.



newt_component_takes_focus

(PECL newt >= 0.1)

newt_component_takes_focus

Description

void newt_component_takes_focus ( resource $component , bool $takes_focus )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

component

takes_focus

Valeurs de retour

Aucune valeur n'est retournée.



newt_create_grid

(PECL newt >= 0.1)

newt_create_grid

Description

resource newt_create_grid ( int $cols , int $rows )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

cols

rows

Valeurs de retour



newt_cursor_off

(PECL newt >= 0.1)

newt_cursor_off

Description

void newt_cursor_off ( void )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

Valeurs de retour

Aucune valeur n'est retournée.



newt_cursor_on

(PECL newt >= 0.1)

newt_cursor_on

Description

void newt_cursor_on ( void )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Valeurs de retour

Aucune valeur n'est retournée.



newt_delay

(PECL newt >= 0.1)

newt_delay

Description

void newt_delay ( int $microseconds )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

microseconds

Valeurs de retour

Aucune valeur n'est retournée.



newt_draw_form

(PECL newt >= 0.1)

newt_draw_form

Description

void newt_draw_form ( resource $form )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

form

Valeurs de retour

Aucune valeur n'est retournée.



newt_draw_root_text

(PECL newt >= 0.1)

newt_draw_root_textAffiche la chaîne de caractères à la position indiquée

Description

void newt_draw_root_text ( int $left , int $top , string $text )

Affiche la chaîne de caractères à la position indiquée.

Liste de paramètres

left

Numéro de colonne

Note:

Si left est négatif, la position est mesurée à partir du côté opposé de l'écran.

top

Numéro de ligne

Note:

Si top est négatif, la position est mesurée à partir du côté opposé de l'écran.

text

Texte à afficher.

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Exemple avec newt_draw_root_text()

Ce code démontre l'affichage des titres dans les deux coins de l'écran.

<?php
 newt_init
();
 
newt_cls();

 
newt_draw_root_text (20"Un peu de texte");
 
newt_refresh();
 
sleep(1);

 
newt_draw_root_text (-300"Du texte dans l'autre coin");
 
newt_refresh();
 
sleep(1);

 
newt_finished();
?>

Voir aussi



newt_entry_get_value

(PECL newt >= 0.1)

newt_entry_get_value

Description

string newt_entry_get_value ( resource $entry )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

entry

Valeurs de retour



newt_entry_set_filter

(PECL newt >= 0.1)

newt_entry_set_filter

Description

void newt_entry_set_filter ( resource $entry , callable $filter , mixed $data )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

entry

filter

data

Valeurs de retour

Aucune valeur n'est retournée.



newt_entry_set_flags

(PECL newt >= 0.1)

newt_entry_set_flags

Description

void newt_entry_set_flags ( resource $entry , int $flags , int $sense )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

entry

flags

sense

Valeurs de retour

Aucune valeur n'est retournée.



newt_entry_set

(PECL newt >= 0.1)

newt_entry_set

Description

void newt_entry_set ( resource $entry , string $value [, bool $cursor_at_end ] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

entry

value

cursor_at_end

Valeurs de retour

Aucune valeur n'est retournée.



newt_entry

(PECL newt >= 0.1)

newt_entry

Description

resource newt_entry ( int $left , int $top , int $width [, string $init_value [, int $flags ]] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

left

top

width

init_value

flags

Valeurs de retour



newt_finished

(PECL newt >= 0.1)

newt_finishedArrête l'interface newt

Description

int newt_finished ( void )

Arrête l'interface newt. Cette fonction est appelée lorsque le programme est prêt à être arrêté.

Valeurs de retour

Retourne 1 en cas de succès ou 0 en cas d'échec.

Voir aussi



newt_form_add_component

(PECL newt >= 0.1)

newt_form_add_componentAjoute un seul composant à la forme

Description

void newt_form_add_component ( resource $form , resource $component )

Ajoute un seul composant à la forme qui est passé dans le premier paramètre.

Liste de paramètres

form

Forme à laquelle le composant sera ajouté

component

Composant à ajouter à la forme

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Exemple avec newt_form_add_component()

<?php
$form 
newt_form();

$options = array("Authentication configuration""Firewall configuration",
"Mouse configuration""Network configuration""Printer configuration",
"System services");

$list newt_listbox(3210);

foreach (
$options as $l_item) {
   
newt_listbox_add_entry($list$l_item$l_item);
}

newt_form_add_component($form$list);
?>

Voir aussi



newt_form_add_components

(PECL newt >= 0.1)

newt_form_add_componentsAjoute plusieurs composants à la forme

Description

void newt_form_add_components ( resource $form , array $components )

Ajoute plusieurs composants à la forme form.

Liste de paramètres

form

Forme à laquelle les composants seront ajoutés

components

Tableau de composants à ajouter à la forme

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Exemple avec newt_form_add_components()

<?php
$form 
newt_form();

$b1 newt_button(512"Run Tool");
$b2 newt_button(2112"Quit");

newt_form_add_components($form, array($b1$b2));
?>

Voir aussi



newt_form_add_hot_key

(PECL newt >= 0.1)

newt_form_add_hot_key

Description

void newt_form_add_hot_key ( resource $form , int $key )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

form

key

Valeurs de retour

Aucune valeur n'est retournée.



newt_form_destroy

(PECL newt >= 0.1)

newt_form_destroyDétruit une forme

Description

void newt_form_destroy ( resource $form )

Cette fonction libère les ressources mémoires utilisées par la forme et tous les composants qui avaient été ajoutés à la forme (en incluant les composants qui sont sur des formes filles). Une fois que la forme est détruite, aucun des composants qui appartenaient à la forme ne peut être utilisé.

Liste de paramètres

form

Composant forme, qui sera détruit

Valeurs de retour

Aucune valeur n'est retournée.

Voir aussi



newt_form_get_current

(PECL newt >= 0.1)

newt_form_get_current

Description

resource newt_form_get_current ( resource $form )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

form

Valeurs de retour



newt_form_run

(PECL newt >= 0.1)

newt_form_runExécute une forme

Description

void newt_form_run ( resource $form , array &$exit_struct )

Cette fonction exécute la forme qui lui est passée.

Liste de paramètres

form

Composant forme

exit_struct

Tableau, utilisé pour retourner des informations après l'exécution des composants de la forme. Les clés et leur valeur sont décrites dans la table suivante :

Structure Arrêt de Forme
Clé Index Type de Valeur Description
reason entier La raison indiquant pourquoi la forme a été quittée. Les valeurs possibles sont définies ici.
watch ressource Lien de ressource, spécifié dans newt_form_watch_fd()
key entier Raccourci
component ressource Composant, qui a causé la forme à quitter

Valeurs de retour

Aucune valeur n'est retournée.

Voir aussi



newt_form_set_background

(PECL newt >= 0.1)

newt_form_set_background

Description

void newt_form_set_background ( resource $from , int $background )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

from

background

Valeurs de retour

Aucune valeur n'est retournée.



newt_form_set_height

(PECL newt >= 0.1)

newt_form_set_height

Description

void newt_form_set_height ( resource $form , int $height )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

form

height

Valeurs de retour

Aucune valeur n'est retournée.



newt_form_set_size

(PECL newt >= 0.1)

newt_form_set_size

Description

void newt_form_set_size ( resource $form )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

form

Valeurs de retour

Aucune valeur n'est retournée.



newt_form_set_timer

(PECL newt >= 0.1)

newt_form_set_timer

Description

void newt_form_set_timer ( resource $form , int $milliseconds )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

form

milliseconds

Valeurs de retour

Aucune valeur n'est retournée.



newt_form_set_width

(PECL newt >= 0.1)

newt_form_set_width

Description

void newt_form_set_width ( resource $form , int $width )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

form

width

Valeurs de retour

Aucune valeur n'est retournée.



newt_form_watch_fd

(PECL newt >= 0.1)

newt_form_watch_fd

Description

void newt_form_watch_fd ( resource $form , resource $stream [, int $flags ] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

form

stream

flags

Valeurs de retour

Aucune valeur n'est retournée.



newt_form

(PECL newt >= 0.1)

newt_formCrée une forme

Description

resource newt_form ([ resource $vert_bar [, string $help [, int $flags ]]] )

Crée une nouvelle forme.

Liste de paramètres

vert_bar

Barre de défilement vertical qui devrait être associée à la forme

help

Chaîne de caractères d'aide

flags

Drapeaux variés

Valeurs de retour

Retourne le lien ressource du composant de la forme créé ou FALSE en cas d'erreur.

Exemples

Exemple #1 Exemple avec newt_form()

Affiche un simple bouton "Quitter", qui ferme l'application une fois qu'il est pressé.

<?php
newt_init
();
newt_cls();

$myform newt_form();
$button newt_button (512"Quitter");

newt_form_add_component ($myform$button);
newt_refresh ();
newt_run_form ($myform);

newt_finished ();
newt_form_destroy ($myform);
?>

Voir aussi



newt_get_screen_size

(PECL newt >= 0.1)

newt_get_screen_sizeRemplit les références passées avec la taille courante du terminal

Description

void newt_get_screen_size ( int &$cols , int &$rows )

Remplit les références passées avec la taille courante du terminal.

Liste de paramètres

cols

Nombre de colonnes dans le terminal

rows

Nombre de lignes dans le terminal

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Exemple avec newt_get_screen_size()

Ce code affiche la taille de l'écran de votre terminal.

<?php
 newt_init
();
 
newt_get_screen_size (&$cols, &$rows);
 
newt_finished();

 print 
"Votre taille de terminal est : {$cols}x{$rows}\n";
?>

L'exemple ci-dessus va afficher :

Votre taille de terminal est : 138x47



newt_grid_add_components_to_form

(PECL newt >= 0.1)

newt_grid_add_components_to_form

Description

void newt_grid_add_components_to_form ( resource $grid , resource $form , bool $recurse )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

grid

form

recurse

Valeurs de retour

Aucune valeur n'est retournée.



newt_grid_basic_window

(PECL newt >= 0.1)

newt_grid_basic_window

Description

resource newt_grid_basic_window ( resource $text , resource $middle , resource $buttons )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

text

middle

buttons

Valeurs de retour



newt_grid_free

(PECL newt >= 0.1)

newt_grid_free

Description

void newt_grid_free ( resource $grid , bool $recurse )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

grid

recurse

Valeurs de retour

Aucune valeur n'est retournée.



newt_grid_get_size

(PECL newt >= 0.1)

newt_grid_get_size

Description

void newt_grid_get_size ( resouce $grid , int &$width , int &$height )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

grid

width

height

Valeurs de retour

Aucune valeur n'est retournée.



newt_grid_h_close_stacked

(PECL newt >= 0.1)

newt_grid_h_close_stacked

Description

resource newt_grid_h_close_stacked ( int $element1_type , resource $element1 [, int $... [, resource $... ]] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

element1_type

element1

Valeurs de retour



newt_grid_h_stacked

(PECL newt >= 0.1)

newt_grid_h_stacked

Description

resource newt_grid_h_stacked ( int $element1_type , resource $element1 [, int $... [, resource $... ]] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

element1_type

element1

Valeurs de retour



newt_grid_place

(PECL newt >= 0.1)

newt_grid_place

Description

void newt_grid_place ( resource $grid , int $left , int $top )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

grid

left

top

Valeurs de retour

Aucune valeur n'est retournée.



newt_grid_set_field

(PECL newt >= 0.1)

newt_grid_set_field

Description

void newt_grid_set_field ( resource $grid , int $col , int $row , int $type , resource $val , int $pad_left , int $pad_top , int $pad_right , int $pad_bottom , int $anchor [, int $flags ] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

grid

col

row

type

val

pad_left

pad_top

pad_right

pad_bottom

anchor

flags

Valeurs de retour

Aucune valeur n'est retournée.



newt_grid_simple_window

(PECL newt >= 0.1)

newt_grid_simple_window

Description

resource newt_grid_simple_window ( resource $text , resource $middle , resource $buttons )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

text

middle

buttons

Valeurs de retour



newt_grid_v_close_stacked

(PECL newt >= 0.1)

newt_grid_v_close_stacked

Description

resource newt_grid_v_close_stacked ( int $element1_type , resource $element1 [, int $... [, resource $... ]] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

element1_type

element1

Valeurs de retour



newt_grid_v_stacked

(PECL newt >= 0.1)

newt_grid_v_stacked

Description

resource newt_grid_v_stacked ( int $element1_type , resource $element1 [, int $... [, resource $... ]] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

element1_type

element1

Valeurs de retour



newt_grid_wrapped_window_at

(PECL newt >= 0.1)

newt_grid_wrapped_window_at

Description

void newt_grid_wrapped_window_at ( resource $grid , string $title , int $left , int $top )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

grid

title

left

top

Valeurs de retour

Aucune valeur n'est retournée.



newt_grid_wrapped_window

(PECL newt >= 0.1)

newt_grid_wrapped_window

Description

void newt_grid_wrapped_window ( resource $grid , string $title )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

grid

title

Valeurs de retour

Aucune valeur n'est retournée.



newt_init

(PECL newt >= 0.1)

newt_initInitialise newt

Description

int newt_init ( void )

Initialise l'interface newt. Cette fonction doit être appelée avant n'importe quelle autre fonction newt.

Valeurs de retour

Retourne 1 en cas de succès ou 0 en cas d'échec.

Voir aussi



newt_label_set_text

(PECL newt >= 0.1)

newt_label_set_text

Description

void newt_label_set_text ( resource $label , string $text )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

label

text

Valeurs de retour

Aucune valeur n'est retournée.



newt_label

(PECL newt >= 0.1)

newt_label

Description

resource newt_label ( int $left , int $top , string $text )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

left

top

text

Valeurs de retour



newt_listbox_append_entry

(PECL newt >= 0.1)

newt_listbox_append_entry

Description

void newt_listbox_append_entry ( resource $listbox , string $text , mixed $data )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

listbox

text

data

Valeurs de retour

Aucune valeur n'est retournée.



newt_listbox_clear_selection

(PECL newt >= 0.1)

newt_listbox_clear_selection

Description

void newt_listbox_clear_selection ( resource $listbox )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

listbox

Valeurs de retour

Aucune valeur n'est retournée.



newt_listbox_clear

(PECL newt >= 0.1)

newt_listbox_clear

Description

void newt_listbox_clear ( resource $listobx )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

listobx

Valeurs de retour

Aucune valeur n'est retournée.



newt_listbox_delete_entry

(PECL newt >= 0.1)

newt_listbox_delete_entry

Description

void newt_listbox_delete_entry ( resource $listbox , mixed $key )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

listbox

key

Valeurs de retour

Aucune valeur n'est retournée.



newt_listbox_get_current

(PECL newt >= 0.1)

newt_listbox_get_current

Description

string newt_listbox_get_current ( resource $listbox )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

listbox

Valeurs de retour



newt_listbox_get_selection

(PECL newt >= 0.1)

newt_listbox_get_selection

Description

array newt_listbox_get_selection ( resource $listbox )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

listbox

Valeurs de retour



newt_listbox_insert_entry

(PECL newt >= 0.1)

newt_listbox_insert_entry

Description

void newt_listbox_insert_entry ( resource $listbox , string $text , mixed $data , mixed $key )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

listbox

text

data

key

Valeurs de retour

Aucune valeur n'est retournée.



newt_listbox_item_count

(PECL newt >= 0.1)

newt_listbox_item_count

Description

int newt_listbox_item_count ( resource $listbox )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

listbox

Valeurs de retour



newt_listbox_select_item

(PECL newt >= 0.1)

newt_listbox_select_item

Description

void newt_listbox_select_item ( resource $listbox , mixed $key , int $sense )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

listbox

key

sense

Valeurs de retour

Aucune valeur n'est retournée.



newt_listbox_set_current_by_key

(PECL newt >= 0.1)

newt_listbox_set_current_by_key

Description

void newt_listbox_set_current_by_key ( resource $listbox , mixed $key )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

listbox

key

Valeurs de retour

Aucune valeur n'est retournée.



newt_listbox_set_current

(PECL newt >= 0.1)

newt_listbox_set_current

Description

void newt_listbox_set_current ( resource $listbox , int $num )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

listbox

num

Valeurs de retour

Aucune valeur n'est retournée.



newt_listbox_set_data

(PECL newt >= 0.1)

newt_listbox_set_data

Description

void newt_listbox_set_data ( resource $listbox , int $num , mixed $data )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

listbox

num

data

Valeurs de retour

Aucune valeur n'est retournée.



newt_listbox_set_entry

(PECL newt >= 0.1)

newt_listbox_set_entry

Description

void newt_listbox_set_entry ( resource $listbox , int $num , string $text )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

listbox

num

text

Valeurs de retour

Aucune valeur n'est retournée.



newt_listbox_set_width

(PECL newt >= 0.1)

newt_listbox_set_width

Description

void newt_listbox_set_width ( resource $listbox , int $width )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

listbox

width

Valeurs de retour

Aucune valeur n'est retournée.



newt_listbox

(PECL newt >= 0.1)

newt_listbox

Description

resource newt_listbox ( int $left , int $top , int $height [, int $flags ] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

left

top

height

flags

Valeurs de retour



newt_listitem_get_data

(PECL newt >= 0.1)

newt_listitem_get_data

Description

mixed newt_listitem_get_data ( resource $item )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

item

Valeurs de retour



newt_listitem_set

(PECL newt >= 0.1)

newt_listitem_set

Description

void newt_listitem_set ( resource $item , string $text )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

item

text

Valeurs de retour

Aucune valeur n'est retournée.



newt_listitem

(PECL newt >= 0.1)

newt_listitem

Description

resource newt_listitem ( int $left , int $top , string $text , bool $is_default , resouce $prev_item , mixed $data [, int $flags ] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

left

top

text

is_default

prev_item

data

flags

Valeurs de retour



newt_open_window

(PECL newt >= 0.1)

newt_open_windowOuvre une fenêtre de la taille et la position spécifiée

Description

int newt_open_window ( int $left , int $top , int $width , int $height [, string $title ] )

Ouvre une fenêtre de la taille et la position spécifiée.

Liste de paramètres

left

Emplacement du coin haut gauche de la fenêtre (numéro de colonne)

top

Emplacement du coin haut gauche de la fenêtre (numéro de ligne)

width

Largeur de la fenêtre

height

Hauteur de la fenêtre

title

Titre de la fenêtre

Valeurs de retour

Retourne 1 en cas de succès ou 0 en cas d'échec.

Voir aussi



newt_pop_help_line

(PECL newt >= 0.1)

newt_pop_help_lineReplace la ligne d'aide courante avec une provenant de la pile

Description

void newt_pop_help_line ( void )

Replace la ligne d'aide courante avec une provenant de la pile.

Note:

Il est important de ne pas appeler la fonction newt_pop_help_line() plus que newt_push_help_line().

Valeurs de retour

Aucune valeur n'est retournée.

Voir aussi



newt_pop_window

(PECL newt >= 0.1)

newt_pop_windowSupprime la fenêtre de premier plan de l'affichage

Description

void newt_pop_window ( void )

Supprime la fenêtre de premier plan de l'affichage et redessine le secteur d'affichage sur lequel la fenêtre se trouvait.

Valeurs de retour

Aucune valeur n'est retournée.

Voir aussi



newt_push_help_line

(PECL newt >= 0.1)

newt_push_help_lineSauvegarde la ligne d'aide courante sur la pile et affiche la nouvelle ligne

Description

void newt_push_help_line ([ string $text ] )

Sauvegarde la ligne d'aide courante sur la pile et affiche la nouvelle ligne.

Liste de paramètres

text

Nouveau message d'aide

Note:

Si non spécifié, la ligne d'aide est supprimée.

Valeurs de retour

Aucune valeur n'est retournée.

Voir aussi



newt_radio_get_current

(PECL newt >= 0.1)

newt_radio_get_current

Description

resource newt_radio_get_current ( resource $set_member )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

set_member

Valeurs de retour



newt_radiobutton

(PECL newt >= 0.1)

newt_radiobutton

Description

resource newt_radiobutton ( int $left , int $top , string $text , bool $is_default [, resource $prev_button ] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

left

top

text

is_default

prev_button

Valeurs de retour



newt_redraw_help_line

(PECL newt >= 0.1)

newt_redraw_help_line

Description

void newt_redraw_help_line ( void )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

Valeurs de retour

Aucune valeur n'est retournée.



newt_reflow_text

(PECL newt >= 0.1)

newt_reflow_text

Description

string newt_reflow_text ( string $text , int $width , int $flex_down , int $flex_up , int &$actual_width , int &$actual_height )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

text

width

flex_down

flex_up

actual_width

actual_height

Valeurs de retour



newt_refresh

(PECL newt >= 0.1)

newt_refreshMet à jour les portions modifiées de l'écran

Description

void newt_refresh ( void )

Pour améliorer les performances, newt met à jour seulement l'affichage lorsque c'est requis et non lorsque le programme lui demande d'écrire dans le terminal. Les applications peuvent forcer newt pour mettre à jour immédiatement les portions modifiées de l'écran en appelant cette fonction.

Valeurs de retour

Aucune valeur n'est retournée.



newt_resize_screen

(PECL newt >= 0.1)

newt_resize_screen

Description

void newt_resize_screen ([ bool $redraw ] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

redraw

Valeurs de retour

Aucune valeur n'est retournée.



newt_resume

(PECL newt >= 0.1)

newt_resumeRécupère l'interface de newt après l'appel de newt_suspend()

Description

void newt_resume ( void )

Récupère l'interface après l'appel de newt_suspend().

Valeurs de retour

Aucune valeur n'est retournée.

Voir aussi

  • newt_suspend() - Indique à newt de retourner à l'état initial du terminal



newt_run_form

(PECL newt >= 0.1)

newt_run_formExécute une forme

Description

resource newt_run_form ( resource $form )

Cette fonction exécute la forme qui lui est passée en argument.

Liste de paramètres

form

Composant forme

Valeurs de retour

Le composant qui a arrêté la forme.

Note:

Notez que cette fonction n'est pas similaire aux conventions de nom de newt. Il s'agit d'une plus vieille interface qui ne fonctionnera pas pour toutes les formes. Elle a été laissée dans newt seulement pour compatibilité des applications. Il s'agit d'une interface plus simple que la nouvelle newt_form_run() et est toujours utilisée plus souvent en pratique. Lorsqu'une application a terminée d'une forme, elle la détruit et tous les composants que la forme contient.

Voir aussi



newt_scale_set

(PECL newt >= 0.1)

newt_scale_set

Description

void newt_scale_set ( resource $scale , int $amount )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

scale

amount

Valeurs de retour

Aucune valeur n'est retournée.



newt_scale

(PECL newt >= 0.1)

newt_scale

Description

resource newt_scale ( int $left , int $top , int $width , int $full_value )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

left

top

width

full_value

Valeurs de retour



newt_scrollbar_set

(PECL newt >= 0.1)

newt_scrollbar_set

Description

void newt_scrollbar_set ( resource $scrollbar , int $where , int $total )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

scrollbar

where

total

Valeurs de retour

Aucune valeur n'est retournée.



newt_set_help_callback

(PECL newt >= 0.1)

newt_set_help_callback

Description

void newt_set_help_callback ( mixed $function )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

function

Valeurs de retour

Aucune valeur n'est retournée.



newt_set_suspend_callback

(PECL newt >= 0.1)

newt_set_suspend_callbackAssigne la fonction de rappel appelée sur suspension

Description

void newt_set_suspend_callback ( callable $function , mixed $data )

newt_set_suspend_callback() assigne une fonction de rappel qui sera appelée lorsque l'utilisateur appuiera sur la touche de suspension (normalement ^Z). Si aucune fonction de rappel n'est configurée, la commande de suspension est ignorée.

Liste de paramètres

function

Une fonction de rappel, qui accepte un argument : data

data

Cette donnée sera passée à la fonction de rappel

Valeurs de retour

Aucune valeur n'est retournée.

Voir aussi

  • newt_suspend() - Indique à newt de retourner à l'état initial du terminal
  • newt_resume() - Récupère l'interface de newt après l'appel de newt_suspend



newt_suspend

(PECL newt >= 0.1)

newt_suspendIndique à newt de retourner à l'état initial du terminal

Description

void newt_suspend ( void )

Indique newt de retourner à l'état initial du terminal. Une fois cela fait, l'application est suspendue (en envoyant à elle-même un SIGTSTP, embranche sur un programme enfant ou fait n'importe quoi d'autre qu'elle aime).

Valeurs de retour

Aucune valeur n'est retournée.

Voir aussi

  • newt_resume() - Récupère l'interface de newt après l'appel de newt_suspend



newt_textbox_get_num_lines

(PECL newt >= 0.1)

newt_textbox_get_num_lines

Description

int newt_textbox_get_num_lines ( resource $textbox )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

textbox

Valeurs de retour



newt_textbox_reflowed

(PECL newt >= 0.1)

newt_textbox_reflowed

Description

resource newt_textbox_reflowed ( int $left , int $top , char $*text , int $width , int $flex_down , int $flex_up [, int $flags ] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

left

top

*text

width

flex_down

flex_up

flags

Valeurs de retour



newt_textbox_set_height

(PECL newt >= 0.1)

newt_textbox_set_height

Description

void newt_textbox_set_height ( resource $textbox , int $height )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

textbox

height

Valeurs de retour

Aucune valeur n'est retournée.



newt_textbox_set_text

(PECL newt >= 0.1)

newt_textbox_set_text

Description

void newt_textbox_set_text ( resource $textbox , string $text )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

textbox

text

Valeurs de retour

Aucune valeur n'est retournée.



newt_textbox

(PECL newt >= 0.1)

newt_textbox

Description

resource newt_textbox ( int $left , int $top , int $width , int $height [, int $flags ] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

left

top

width

height

flags

Valeurs de retour



newt_vertical_scrollbar

(PECL newt >= 0.1)

newt_vertical_scrollbar

Description

resource newt_vertical_scrollbar ( int $left , int $top , int $height [, int $normal_colorset [, int $thumb_colorset ]] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

left

top

height

normal_colorset

thumb_colorset

Valeurs de retour



newt_wait_for_key

(PECL newt >= 0.1)

newt_wait_for_keyNe continue pas tant qu'une touche n'est pas appuyée

Description

void newt_wait_for_key ( void )

Cette fonction ne continue pas tant qu'une touche n'est pas appuyée. La frappe est alors ignorée. Si une touche est déjà dans le tampon du terminal, cette fonction jette la frappe et continue immédiatement.

Valeurs de retour

Aucune valeur n'est retournée.

Voir aussi

  • newt_clear_key_buffer() - Jette le contenu de l'entrée du tampon du terminal sans attendre d'autre entrée additionnelle



newt_win_choice

(PECL newt >= 0.1)

newt_win_choice

Description

int newt_win_choice ( string $title , string $button1_text , string $button2_text , string $format [, mixed $args [, mixed $... ]] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

title

button1_text

button2_text

format

args

Valeurs de retour



newt_win_entries

(PECL newt >= 0.1)

newt_win_entries

Description

int newt_win_entries ( string $title , string $text , int $suggested_width , int $flex_down , int $flex_up , int $data_width , array &$items , string $button1 [, string $... ] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

title

text

suggested_width

flex_down

flex_up

data_width

items

button1

button2

Valeurs de retour

Exemples

Exemple #1 Exemple avec newt_win_entries()

<?php

newt_init
();
newt_cls();

$entries[] = array('text' => 'First name:''value' => &$f_name);
$entries[] = array('text' => 'Last name:',  'value' => &$l_name);

$rc newt_win_entries("User information""Please enter your credentials:"507730$entries"Ok""Back");
newt_finished ();

if (
$rc != 2) {
   echo 
"Your name is: $f_name $l_name\n";
}
?>



newt_win_menu

(PECL newt >= 0.1)

newt_win_menu

Description

int newt_win_menu ( string $title , string $text , int $suggestedWidth , int $flexDown , int $flexUp , int $maxListHeight , array $items , int &$listItem [, string $button1 [, string $... ]] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

title

text

suggestedWidth

flexDown

flexUp

maxListHeight

items

listItem

button1

Valeurs de retour

Aucune valeur n'est retournée.



newt_win_message

(PECL newt >= 0.1)

newt_win_message

Description

void newt_win_message ( string $title , string $button_text , string $format [, mixed $args [, mixed $... ]] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

title

button_text

format

args

Valeurs de retour

Aucune valeur n'est retournée.



newt_win_messagev

(PECL newt >= 0.1)

newt_win_messagev

Description

void newt_win_messagev ( string $title , string $button_text , string $format , array $args )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

title

button_text

format

args

Valeurs de retour

Aucune valeur n'est retournée.



newt_win_ternary

(PECL newt >= 0.1)

newt_win_ternary

Description

int newt_win_ternary ( string $title , string $button1_text , string $button2_text , string $button3_text , string $format [, mixed $args [, mixed $... ]] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Liste de paramètres

title

button1_text

button2_text

button3_text

format

args

Valeurs de retour


Sommaire




GNU Readline


Introduction

Les fonctions readline implémente une interface de la bibliothèque GNU Readline. Ce sont des fonctions qui fournissent des lignes de commandes éditables. Un exemple est fourni montrant comment Bash vous permet d'utiliser les flèches pour insérer des caractères ou scroller dans l'historique des commandes. De part la nature de cette bibliothèque, vous ne devriez pas en avoir besoin dans vos applications Web mais par contre, cela peut être très utile lors de l'écriture de scripts utilisés depuis la ligne de command.

Note: Cette extension n'est pas disponible sur les plates-formes Windows.



Installation/Configuration

Sommaire


Pré-requis

Pour utiliser les fonctions readline, vous devez installer la bibliothèque libreadline. Vous pouvez la trouver sur la page d'accueil du projet GNU Readline, ici : » http://cnswww.cns.cwru.edu/~chet/readline/rltop.html. Elle est maintenu par Chet Ramey, qui est également l'auteur de Bash.

Vous pouvez également utiliser ces fonctions avec la bibliothèque libedit, une alternative non-GPL à la bibliothèque readline. La bibliothèque libedit est sous licence BSD et est disponible au téléchargement depuis » http://www.thrysoee.dk/editline/.



Installation

Pour utiliser ces fonctions, vous devez compiler PHP, en version CGI ou CLI. Vous devez aussi utiliser l'option de compilation --with-readline[=DIR] . Si vous souhaitez utiliser la bibliothèque libedit readline, en remplacement, compilez PHP avec l'option --with-libedit[=DIR] .



Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Options de configuration Readline
Nom Défaut Modifiable Historique
cli.pager "" PHP_INI_ALL Disponible depuis PHP 5.4.0.
cli.prompt "\\b \\> " PHP_INI_ALL Disponible depuis PHP 5.4.0.

Voici un éclaircissement sur l'utilisation des directives de configuration.

cli.pager string

Outil externe pour afficher la sortie depuis la ligne de commande.

cli.prompt string

Prompt de la ligne de commande.



Types de ressources

Cette extension ne définit aucune ressource.




Constantes pré-définies

Cette extension ne définit aucune constante.



Fonctions Readline


readline_add_history

(PHP 4, PHP 5)

readline_add_historyAjoute une ligne à l'historique

Description

bool readline_add_history ( string $line )

Ajoute une ligne à l'historique.

Liste de paramètres

line

La ligne à ajouter à l'historique.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.



readline_callback_handler_install

(PHP 5 >= 5.1.0)

readline_callback_handler_installInitialise l'interface et le terminal de rappel de readline, affiche le prompt et retourne immédiatement

Description

bool readline_callback_handler_install ( string $prompt , callable $callback )

Définie une interface de rappel pour readline, affiche le prompt et retourne immédiatement. Appeler cette fonction deux fois sans effacer au préalable l'interface de rappel précédente effacera automatiquement et proprement l'ancienne interface.

La fonctionnalité de rappel est très utile lorsque combinée à la fonction stream_select() permettant l'interconnexion IO / entrée utilisateur, à la différence de readline().

Liste de paramètres

prompt

Le message de prompt.

callback

La fonction callback prend un paramètre : l'entrée utilisateur retournée.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple d'interface de rappelde Readline

<?php
function rl_callback($ret)
{
    global 
$c$prompting;

    echo 
"You entered: $ret\n";
    
$c++;

    if (
$c 10) {
        
$prompting false;
        
readline_callback_handler_remove();
    } else {
        
readline_callback_handler_install("[$c] Entrer quelque chose : "'rl_callback');
    }
}

$c 1;
$prompting true;

readline_callback_handler_install("[$c] Entrer quelque chose : "'rl_callback');

while (
$prompting) {
    
$w NULL;
    
$e NULL;
    
$n stream_select($r = array(STDIN), $w$enull);
    if (
$n && in_array(STDIN$r)) {
        
// lit un caractère, appelera la fonction de callback lorsqu'une nouvelle ligne est entrée
        
readline_callback_read_char();
    }
}

echo 
"Le prompt est désactivé. Tout a été effectué.\n";
?>

Voir aussi



readline_callback_handler_remove

(PHP 5 >= 5.1.0)

readline_callback_handler_removeEfface un gestionnaire de rappel readline

Description

bool readline_callback_handler_remove ( void )

Efface un gestionnaire de rappel installé précédemment et restaure les paramètres du terminal.

Valeurs de retour

Retourne TRUE si un gestionnaire de rappel précédemment installé a été effacé ou FALSE s'il n'a pas été trouvé.

Exemples

Voir la fonction readline_callback_handler_install() pour un exemple concernant l'utilisation de l'interface de rappel readline.

Voir aussi



readline_callback_read_char

(PHP 5 >= 5.1.0)

readline_callback_read_charLit un caractère et informe l'interface de rappel readline

Description

void readline_callback_read_char ( void )

Lit un caractère de l'entrée utilisateur. Lorsqu'une ligne est reçue, la fonction informe l'interface de rappel readline installée en utilisant readline_callback_handler_install() qu'une ligne est prête à être entrée.

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Voir la fonction readline_callback_handler_install() pour un exemple concernant l'utilisation de l'interface de rappel readline.

Voir aussi



readline_clear_history

(PHP 4, PHP 5)

readline_clear_historyEfface l'historique

Description

bool readline_clear_history ( void )

Efface l'historique.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.



readline_completion_function

(PHP 4, PHP 5)

readline_completion_functionEnregistre une fonction de complétion

Description

bool readline_completion_function ( callable $function )

Enregistre une nouvelle fonction de complétion. C'est la même fonctionnalité que lorsque vous utilisez la touche de tabulation sous Bash.

Liste de paramètres

function

Vous devez fournir le nom d'une fonction qui accepte un nom partiel de commande, et retourne une liste de fonctions complète possibles.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.



readline_info

(PHP 4, PHP 5)

readline_infoLit ou modifie diverses variables internes de readline

Description

mixed readline_info ([ string $varname [, string $newvalue ]] )

Lit/modifie diverses variables internes.

Liste de paramètres

varname

Un nom de variable.

newvalue

Si fourni, ce sera la nouvelle valeur à définir.

Valeurs de retour

Appelée sans paramètre, readline_info() retourne une tableau contenant les valeurs des paramètres de Readline. Les éléments seront indexés par les clés suivantes : "done", "end", "erase_empty_line", "library_version", "line_buffer", "mark", "pending_input", "point", "prompt", "readline_name" et "terminal_name".

Si appelée avec un ou deux paramètres, l'ancienne valeur est retournée.



readline_list_history

(PHP 4, PHP 5)

readline_list_historyListe l'historique

Description

array readline_list_history ( void )

Liste l'historique.

Valeurs de retour

Retourne un tableau avec la liste de toutes les lignes de commandes de l'historique. Les éléments sont indexés numériquement, à partir de 0.



readline_on_new_line

(PHP 5 >= 5.1.0)

readline_on_new_lineInforme readline que le curseur est passé à une nouvelle ligne

Description

void readline_on_new_line ( void )

Informe readline que le curseur est passé à une nouvelle ligne.

Valeurs de retour

Aucune valeur n'est retournée.



readline_read_history

(PHP 4, PHP 5)

readline_read_historyLit l'historique

Description

bool readline_read_history ([ string $filename ] )

Lit une ligne de l'historique depuis le fichier filename.

Liste de paramètres

filename

Chemin vers le fichier contenant l'historique des commandes.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.



readline_redisplay

(PHP 5 >= 5.1.0)

readline_redisplayDemande à readline de refaire l'affichage

Description

void readline_redisplay ( void )

Demande à readline de refaire l'affichage.

Valeurs de retour

Aucune valeur n'est retournée.



readline_write_history

(PHP 4, PHP 5)

readline_write_historyÉcrit dans l'historique

Description

bool readline_write_history ([ string $filename ] )

Écrit l'historique dans le fichier filename.

Liste de paramètres

filename

Chemin vers le fichier à sauvegarder.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.



readline

(PHP 4, PHP 5)

readlineLit une ligne

Description

string readline ([ string $prompt ] )

Retourne une ligne entrée par l'utilisateur. Vous devez ajouter cette ligne à l'historique vous-même, avec la fonction readline_add_history().

Liste de paramètres

prompt

Vous pouvez spécifier une chaîne de caractères à utiliser comme prompt à l'utilisateur.

Valeurs de retour

Retourne une chaîne de caractères depuis l'utilisateur. La ligne retournée a été débarrassée du caractère final de nouvelle ligne.

Exemples

Exemple #1 Exemple avec readline()

<?php
// Lit 3 commandes de l'utilisateur
for ($i=0$i 3$i++) {
        
$line readline("Commande : ");
        
readline_add_history($line);
}

// Liste l'historique
print_r(readline_list_history());

// Liste les variables
print_r(readline_info());
?>


Sommaire





Extensions sur l'archivage et la compression


Bzip2


Introduction

Les fonctions bzip2 sont utilisées pour lire et écrire de façon transparente les fichiers compressés bzip2 (.bz2).



Installation/Configuration

Sommaire


Pré-requis

Cette extension utilise les fonctions » bzip2 de la bibliothèque écrite par Julian Seward. Ce module nécessite bzip2/libbzip2, version >= 1.0.x.



Installation

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.



Configuration à l'exécution

Cette extension ne définit aucune directive de configuration.



Types de ressources

Cette extension définit un type de ressource : un pointeur de fichier identifiant le fichier bz2.




Constantes pré-définies

Cette extension ne définit aucune constante.



Exemples

Cet exemple ouvre un fichier temporaire et y écrit une chaîne de test, puis, affiche le contenu de ce fichier.

Exemple #1 Petit exemple avec bzip2

<?php

$filename 
"/tmp/testfile.bz2";
$str "Ceci est une chaîne de test.\n";

// Ouvre un fichier en écriture
$bz bzopen($filename"w");

// Écrit une chaîne
bzwrite($bz$str);

// Ferme le fichier
bzclose($bz);

// Ouvre le fichier en lecture
$bz bzopen($filename"r");

// Lit 10 caractères
echo bzread($bz10);

// Affiche le contenu du fichier et on le ferme
echo bzread($bz);

bzclose($bz);

?>


Fonctions Bzip2


bzclose

(PHP 4 >= 4.0.4, PHP 5)

bzcloseFerme un fichier bzip2

Description

int bzclose ( resource $bz )

bzclose() ferme le fichier bzip2 représenté par le pointeur bz.

Liste de paramètres

bz

Le pointeur de fichier. Il doit être valide et doit pointer vers un fichier ouvert avec succès par la fonction bzopen().

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi

  • bzopen() - Ouvre un fichier compressé avec bzip2



bzcompress

(PHP 4 >= 4.0.4, PHP 5)

bzcompressCompresse une chaîne avec bzip2

Description

mixed bzcompress ( string $source [, int $blocksize = 4 [, int $workfactor = 0 ]] )

bzcompress() compresse la chaîne source et retourne les données ainsi encodées.

Liste de paramètres

source

La chaîne à compresser.

blocksize

Spécifie la taille de bloc utilisée 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 ressources pour se faire.

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

En dehors de workfactor, le résultat sera le même.

Valeurs de retour

La chaîne compressée ou un numéro d'erreur si une erreur survient.

Exemples

Exemple #1 Compression de données

<?php
$str 
"donnée simple";
$bzstr bzcompress($str9);
echo 
$bzstr;
?>

Voir aussi



bzdecompress

(PHP 4 >= 4.0.4, PHP 5)

bzdecompressDécompresse une chaîne bzip2

Description

mixed bzdecompress ( string $source [, int $small = 0 ] )

bzdecompress() décompresse la chaîne source, contenant des données compressées bzip2.

Liste de paramètres

source

La chaîne à décompresser.

small

Si ce paramètre 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é.

Valeurs de retour

La chaîne décompressée ou un numéro d'erreur si une erreur survient.

Exemples

Exemple #1 Décompression d'une chaîne

<?php
$start_str 
"phrase à compresser";
$bzstr bzcompress($start_str);

echo 
"Chaîne compressée : ";
echo 
$bzstr;
echo 
"\n<br />\n";

$str bzdecompress($bzstr);
echo 
"Chaîne décompressée : ";
echo 
$str;
echo 
"\n<br />\n";
?>

Voir aussi



bzerrno

(PHP 4 >= 4.0.4, PHP 5)

bzerrnoRetourne le code d'erreur bzip2

Description

int bzerrno ( resource $bz )

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

Liste de paramètres

bz

Le pointeur de fichier. Il doit être valide et doit pointer vers un fichier ouvert avec succès avec la fonction bzopen().

Valeurs de retour

Retourne le code erreur sous la forme d'un entier.

Voir aussi

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



bzerror

(PHP 4 >= 4.0.4, PHP 5)

bzerrorRetourne le numéro et le message d'erreur bzip2 dans un tableau

Description

array bzerror ( resource $bz )

bzerror() retourne un tableau associatif avec le numéro et le message d'erreur du fichier bz2 représenté par le pointeur bz.

Liste de paramètres

bz

Le pointeur de fichier. Il doit être valide et doit pointer vers un fichier ouvert avec succès par la fonction bzopen().

Valeurs de retour

Retourne un tableau associatif, avec le code erreur dans l'entrée errno, et le message d'erreur dans l'entrée errstr.

Exemples

Exemple #1 Exemple avec bzerror()

<?php
$error 
bzerror($bz);
                   
echo 
$error["errno"];
echo 
$error["errstr"];
?>

Voir aussi



bzerrstr

(PHP 4 >= 4.0.4, PHP 5)

bzerrstrRetourne le message d'erreur bzip2

Description

string bzerrstr ( resource $bz )

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

Liste de paramètres

bz

Le pointeur de fichier. Il doit être valide et doit pointer vers un fichier ouvert avec succès par la fonction bzopen().

Valeurs de retour

Retourne une chaîne contenant le message d'erreur.

Voir aussi

  • bzerrno() - Retourne le code d'erreur bzip2
  • bzerror() - Retourne le numéro et le message d'erreur bzip2 dans un tableau



bzflush

(PHP 4 >= 4.0.4, PHP 5)

bzflushForce l'écriture de toutes les données compressées

Description

int bzflush ( resource $bz )

bzflush() force l'écriture de toutes les données bzip2 mises en tampon pour le fichier représenté par bz.

Liste de paramètres

bz

Le pointeur de fichier. Il doit être valide et doit pointer vers un fichier ouvert avec succès par la fonction bzopen().

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Voir aussi

  • bzread() - Lecture binaire d'un fichier bzip2
  • bzwrite() - Écriture binaire dans un fichier bzip2



bzopen

(PHP 4 >= 4.0.4, PHP 5)

bzopenOuvre un fichier compressé avec bzip2

Description

resource bzopen ( string $filename , string $mode )

bzopen() ouvre un fichier bzip2 (.bz2) en écriture ou en lecture.

Liste de paramètres

filename

Le nom du fichier à ouvrir.

mode

Similaire à la fonction fopen(), seules les options 'r' (pour lecture), et 'w' (pour écriture) sont supportées. Toute autre option fera que la fonction retournera FALSE.

Valeurs de retour

Si l'ouverture échoue, bzopen() retourne FALSE, sinon, il retourne un pointeur vers le fichier ouvert.

Exemples

Exemple #1 Exemple avec bzopen()

<?php
                   
$file 
"/tmp/foo.bz2";
$bz bzopen($file"r") or die("Impossible d'ouvrir le fichier $file pour lecture");
                   
bzclose($bz);
                   
?>

Voir aussi



bzread

(PHP 4 >= 4.0.4, PHP 5)

bzreadLecture binaire d'un fichier bzip2

Description

string bzread ( resource $bz [, int $length = 1024 ] )

bzread() lit depuis le pointeur de fichier bzip2 donné.

La lecture s'arrête lorsque length (non-compressé) octets ont été lus ou si la fin du fichier est atteint, le premier des deux qui survient.

Liste de paramètres

bz

Le pointeur de fichier. Il doit être valide et doit pointer vers un fichier ouvert avec succès par la fonction bzopen().

length

Si non spécifié, bzread() lira 1024 (non-compressé) octets à la fois. Un maximum de 8192 octets non-compressés sera lu à la fois.

Valeurs de retour

Retourne les données non-compressées ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec bzread()

<?php
                   
$file 
"/tmp/foo.bz2";
$bz bzopen($file"r") or die("Impossible d'ouvrir le fichier $file");
                   
$decompressed_file '';
while (!
feof($bz)) {
  
$decompressed_file .= bzread($bz4096);
}
bzclose($bz);
                   
echo 
"Le contenu du fichier $file est : <br />\n";
echo 
$decompressed_file;
                   
?>

Voir aussi

  • bzwrite() - Écriture binaire dans un fichier bzip2
  • feof() - Teste la fin du fichier
  • bzopen() - Ouvre un fichier compressé avec bzip2



bzwrite

(PHP 4 >= 4.0.4, PHP 5)

bzwriteÉcriture binaire dans un fichier bzip2

Description

int bzwrite ( resource $bz , string $data [, int $length ] )

bzwrite() écrit le contenu de la chaîne data dans le fichier bzip2 représenté par bz.

Liste de paramètres

bz

Le pointeur de fichier. Il doit être valide et doit pointer vers un fichier ouvert avec succès par la fonction bzopen().

data

Les données écrites.

length

Si fourni, l'écriture s'arrêtera après que length (non-compressé) octets aient été écrits ou bien que la fin de data soit atteinte, le premier des deux qui survient.

Valeurs de retour

Retourne le nombre d'octets écrits ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec bzwrite()

<?php
$str 
"donné non-compressée";
$bz bzopen("/tmp/foo.bz2""w");
bzwrite($bz$strstrlen($str));
bzclose($bz);
?>

Voir aussi

  • bzread() - Lecture binaire d'un fichier bzip2
  • bzopen() - Ouvre un fichier compressé avec bzip2


Sommaire

  • bzclose — Ferme un fichier bzip2
  • bzcompress — Compresse une chaîne avec bzip2
  • bzdecompress — Décompresse une chaîne bzip2
  • bzerrno — Retourne le code 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 d'un fichier bzip2
  • bzwrite — Écriture binaire dans un fichier bzip2



LZF


Introduction

LZF est un algorithme de compression très rapide, idéal pour économiser de l'espace disque sans trop de perte de temps. Il peut être optimisé pour la vitesse ou pour la compression au moment de la compilation. Cette extension utilise la bibliothèque » liblzf créée par Marc Lehmann.



Installation/Configuration

Sommaire


Pré-requis

Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible.



Installation

Cette extension » PECL n'est pas intégrée à PHP. Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici : » http://pecl.php.net/package/lzf.

Si vous voulez utiliser ces fonctions, vous devez compiler PHP avec le support lzf en utilisant l'option de configuration --with-lzf[=DIR] . Vous pouvez également passer l'option --enable-lzf-better-compression pour optimiser LZF d'un point de vue d'espace au détriment de la vitesse.

Les utilisateurs de Windows doivent activer la bibliothèque php_lzf.dll dans le php.ini pour pouvoir utiliser ces fonctions. Aucune bibliothèque DLL pour cette extension PECL n'est actuellement disponible. Reportez-vous à la section Compilation sous Windows.



Configuration à l'exécution

Cette extension ne définit aucune directive de configuration.



Types de ressources

Cette extension ne définit aucune ressource.




Constantes pré-définies

Cette extension ne définit aucune constante.



Fonctions LZF


lzf_compress

(PECL lzf >= 0.1.0)

lzf_compressCompression LZF

Description

string lzf_compress ( string $data )

lzf_compress() compresse les données data en utilisant l'encodage LZF.

Liste de paramètres

data

La chaîne de caractères à compresser.

Valeurs de retour

Retourne les données compressées ou FALSE si une erreur survient.

Voir aussi



lzf_decompress

(PECL lzf >= 0.1.0)

lzf_decompressDécompression LZF

Description

string lzf_decompress ( string $data )

lzf_compress() décompresse les données data en utilisant l'encodage LZF.

Liste de paramètres

data

La chaîne compressée.

Valeurs de retour

Retourne les données compressées ou FALSE si une erreur survient.

Voir aussi



lzf_optimized_for

(PECL lzf >= 1.0.0)

lzf_optimized_forDétermine le mode d'optimisation de l'extension LZF

Description

int lzf_optimized_for ( void )

Détermine le mode d'optimisation de l'extension LZF.

Valeurs de retour

Retourne 1 si LZF a été optimisé pour la vitesse, 0 pour la compression.


Sommaire




Phar


Introduction

L'extension phar fournit un moyen de mettre une application PHP complète dans un fichier unique appelé un "phar" (PHP Archive) pour une installation et une configuration aisées. En plus de ce service, l'extension fournit aussi une classe d'abstraction de format de fichier pour créer et manipuler des fichiers tar et zip à travers la classe PharData, tout comme PDO fournit une interface unifiée pour accéder à des base de données différentes. Mais à l'inverse de PDO, qui ne peut pas transposer les données d'une base à l'autre, Phar a la possibilité de convertir des fichiers tar, zip et phar avec une simple ligne de code. Regardez Phar::convertToExecutable() pour avoir un exemple.

Qu'est-ce que phar? Les archives phar sont en fait un moyen pratique de grouper plusieurs fichiers en un seul. Ainsi, une archive phar permet de distribuer une application PHP complète dans un fichier unique et de l'exécuter à partir de ce fichier sans pour autant l'extraire sur le disque. De plus, des archives phar peuvent être exécutées par PHP aussi facilement que n'importe quel autre fichier, aussi bien en ligne de commande que via un serveur web. Phar est une sorte de clé USB pour les applications PHP.

Phar implémente cette fonctionnalité via un flux. Normalement, pour utiliser un fichier externe à partir d'un script PHP, vous devez utiliser la fonction include.

Exemple #1 Utiliser un fichier externe

<?php
 
include '/chemin/vers/le/fichier/externe.php';
 
?>

On peut considérer que PHP traduit en fait /chemin/vers/le/fichier/externe.php en un flux file:///chemin/vers/le/fichier/externe.php, et qu'il utilise de façon cachée les fonctions de flux de fichiers plats pour accéder à des fichiers locaux.

Pour utiliser un fichier nommé fichier.php contenu dans une archive phar /chemin/vers/monphar.phar, la syntaxe est quasi similaire à la syntaxe file:// ci-dessus.

Exemple #2 Utilier un fichier contenu dans une archive phar

<?php
 
include 'phar:///chemin/vers/monphar.phar/fichier.php';
 
?>

En fait, on peut traiter une archive phar comme s'il s'agissait d'un disque externe, en utilisant n'importe laquelle des fonctions relatives à fopen(), opendir() et mkdir() pour lire, changer ou créer des nouveaux fichiers ou répertoires au sein de l'archive phar. Celà permet à des applications PHP complètes d'être distribuées dans un seul fichier et d'être exécutées à partir de celui-ci

L'utilisation la plus courant d'une archive phar est de distribuer une application complète en un seul fichier. Par exemple, l'installeur PEAR qui est inclus avec les versions de PHP est distribué grâce à une archive phar. pour utiliser l'archive phar ainsi distribuée, celle-ci peut-être exécutée via la ligne de commande ou via un navigateur web.

Les archives phar peuvent être distribuées sous forme de fichiers tar, de fichiers zip ou de fichiers phar spécialement conçus pour l'extensions phar. Chaque format de fichier a ses avantages et ses inconvénients. Les fichiers zip et tar peuvent être extraits par n'importe quel outil tiers qui peut lire le format, mais requièrent l'extension phar pour être exécutés par PHP. Le format de fichier phar est unique et dédié à l'extension phar et peut être créé uniquement par celle-ci ou par le paquet PEAR » PHP_Archive, mais a l'avantage de ne pas nécessiter l'installation de l'extension phar pour que l'application empaquetée puisse être exécutée.

En d'autres mots, même avec l'extension phar désactivée, il est possible d'exécuter ou d'inclure une archive basée sur phar. Accéder à des fichiers individuels au sein d'une archive phar n'est possible qu'avec l'extension phar à moins que l'archive phar n'ait été créée par PHP_Archive.

L'extension phar est aussi capable de convertir une archive phar à partir d'un tar vers un fichier zip ou phar en une seule commande :

Exemple #3 Convertir une archive phar au format tar

<?php
 $phar 
= new Phar('monphar.phar');
 
$pgz $phar->convertToExecutable(Phar::TARPhar::GZ); // produit monphar.phar.tar.gz
 
?>

Phar peut compresser des fichiers individuels ou une archive entière en utilisant la compression gzip ou bzip2, et peut vérifier l'intégrité de l'archive automatiquement en utilisant des fonctions de signature md5(), sha1(), sha256(), ou sha512().

Enfin, l'extension phar est orientée sécurité, elle désactive par défaut les accès en écriture sur les archives phar exécutables et requiert la désactivation au niveau système du paramètre phar.readonly du php.ini pour créer ou modifier des archives phar. Des archives tar et zip sans le marqueur exécutable peuvent toujours être créées ou modifiées en utilisant la classe PharData.

Si vous créez des applications dans le but de les distribuer, vous devriez lire Comment créer des archives Phar. Si vous voulez davantage d'informations sur les différences entre les formats de fichier que phar supporte, vous devriez lire Phar, Tar et Zip.

Si vous utilisez des applications phar, il y a des astuces très utiles dans Comment utiliser des archives Phar

Le mot phar est la contraction de PHP et de Archive et est grandement inspiré du mot jar (Java Archive) familier aux développeurs Java.

L'implémentation des archives Phar est basée sur le paquet PEAR » PHP_Archive, et les détails d'implémentations sont les mêmes, bien que l'extension Phar soit plus puissante. En plus, celle-ci permet à la plupart des applications PHP d'être exécutées sans modification alors que les archives basées sur PHP_Archive requièrent souvent beaucoup de modification pour fonctionner.



Installation/Configuration

Sommaire


Pré-requis

Phar requiert PHP 5.2.0 ou plus récent. Des fonctionnalités supplémentaires requièrent l'extension SPL pour tirer parti de l'itération et de l'accès sous forme de tableau au contenu d'un fichier Phar. Le flux phar ne requiert aucune extension supplémentaire pour fonctionner.

Vous pouvez éventuellement souhaiter activer les extensions zlib et bzip2 pour tirer parti du support phar compressé. De plus, pour exploiter les signatures OpenSSL, l'extension OpenSSL doit être activée.

A noter qu'un bogue dans le filtre de flux zlib.deflate corrigé en PHP 5.2.6 et plus récent pourrait causer la troncature des archives phar compressées en gzip ou bzip2.



Installation

L'extension Phar est incluse dans PHP depuis PHP 5.3.0. Phar peut aussi être installé depuis l'extension PECL pour les versions précédentes de PHP versions, la » page PECL de Phar contient plus d'informations et l'historique.

Les utilisateurs de Windows doivent inclure php_phar.dll dans php.ini pour utiliser cette extension.



Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Options de configuration pour le système de fichiers
Nom Défaut Modifiable Historique
phar.readonly "1" PHP_INI_ALL  
phar.require_hash "1" PHP_INI_ALL  
phar.extract_list "" PHP_INI_ALL Disponible de phar 1.1.0 à 1.2.3, supprimé en 2.0.0.
phar.cache_list "" PHP_INI_SYSTEM Disponible à partir de phar 2.0.0.

Voici un éclaircissement sur l'utilisation des directives de configuration.

phar.readonly booléen

Cette option désactive la création ou la modification des archives Phar en utilisant le flux phar ou le support en écriture sur les objets Phar. Ce paramètre devrait toujours être activé sur des machines de production, car le support en écriture sur les archives phar pourrait mener à la création de virus basés sur PHP en cas d'utilisation conjuguée avec des vulnérabilités communes.

Note:

Ce paramètre ne peut être désactivé que dans php.ini pour des raisons de sécurité. Si phar.readonly est désactivé dans php.ini, l'utilisateur peut activer phar.readonly dans un script ou le désactiver plus tard. Si phar.readonly est activé dans php.ini, un script pourrait "réactiver" sans danger la variable INI, mais ne pourrait pas la désactiver.

phar.require_hash booléen

Cette option forcera toutes les archives Phar ouvertes à contenir un type de signature (à ce jour MD5, SHA1, SHA256 et SHA512 sont supportés), et toute archive Phar ne contenant pas de signature sera rejetée.

Note:

Ce paramètre ne peut être désactivé que dans php.ini pour des raisons de sécurité. Si phar.require_hash est désactivé dans php.ini, l'utilisateur peut activer phar.require_hash dans un script ou le désactiver plus tard. Si phar.require_hash est activé dans php.ini, un script pourrait "réactiver" sans danger la variable INI, mais ne pourrait pas la désactiver.

Ce paramètre n'affecte pas la lecture des fichiers tar avec la classe PharData.

phar.extract_list chaîne de caractères

Ce paramètre INI a été supprimé en phar 2.0.0.

Permet la correspondance entre le chemin complet d'une archive phar ou son alias et l'emplacement de ses fichiers extraits. Le format de ce paramètre est name=archive,name2=archive2. Cela permet l'extraction de fichiers phar sur le disque, et permet à phar d'agir comme une sorte de correspondance vers des fichiers extraits sur disque. C'est souvent utilisé pour des raisons de performance ou pour aider au débogage de phar.

Exemple #1 Exemple d'utilisation de phar.extract_list

dans php.ini:
phar.extract_list = archive=/chemin/complet/vers/archive/,arch2=/chemin/complet/vers/arch2
<?php
include "phar://archive/content.php";
include "phar://arch2/foo.php";
?>

phar.cache_list chaîne de caractères

Ce paramètre INI a été ajouté en phar 2.0.0

Permet aux correspondances d'archives phar d'être traitées au démarrage du serveur web, augmentant de ce fait les performance d'accès aux fichiers contenus dans une archive phar et les rendant très proche d'un accès à des fichiers d'une installation classique sur disque.

Exemple #2 Exemple d'utilisation de phar.cache_list

dans php.ini (windows):
phar.cache_list =C:\chemin\vers\phar1.phar;C:\chemin\vers\phar2.phar
dans php.ini (unix):
phar.cache_list =/chemin/vers/phar1.phar:/chemin/vers/phar2.phar



Types de ressources

L'extension Phar fournit le flux phar, qui permet l'accès de façon transparente aux fichiers contenus dans un phar. Pour davantage d'information, lisez le format de fichier Phar




Constantes pré-définies

Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.

Les constantes de compression Phar
Constante Valeur Description
Phar::NONE (integer) 0x00000000 aucune compression
Phar::COMPRESSED (integer) 0x0000F000 masque de bits pouvant être utilisé avec les drapeaux de fichier pour déterminer si une compression est utilisée
Phar::GZ (integer) 0x00001000 compression zlib (gzip)
Phar::BZ2 (integer) 0x00002000 compression bzip2
Les constantes de format de fichier Phar
Constante Valeur Description
Phar::SAME (integer) 0 Conserve le même format de fichier
Phar::PHAR (integer) 1 format de fichier phar
Phar::TAR (integer) 2 format de fichier tar
Phar::ZIP (integer) 3 format de fichier zip
Les constantes de signature Phar
Constante Valeur Description
Phar::MD5 (integer) 0x0001 signature avec l'algorithme md5
Phar::SHA1 (integer) 0x0002 signature avec l'algorithme sha1
Phar::SHA256 (integer) 0x0003 signature avec l'algorithme sha256 (requiert l'extension hash)
Phar::SHA512 (integer) 0x0004 signature avec l'algorithme sha512 (requiert l'extension hash)
Phar::OPENSSL (integer) 0x0010 signature avec une paire de clé privée/publique OpenSSL. C'est une véritable signature à clé asymétrique/
Les constantes d'écrasement de mime Phar webPhar
Constante Valeur Description
Phar::PHP (integer) 1 utilisée pour renseigner le paramètre d'écrasement mime de Phar::webPhar() et faire en sorte que l'extension soit parsée comme un fichier PHP
Phar::PHPS (integer) 2 utilisée pour renseigner le paramètre d'écrasement mime de Phar::webPhar() et faire en sorte que l'extension soit parsée comme un fichier PHP via highlight_file()


Utiliser les archives Phar

Sommaire


Utiliser les archives Phar : Introduction

Les archives Phar sont identiques dans le concept aux archives JAR de Java, mais sont conçues plus spécifiquement pour les besoins et la flexibilité des applications PHP. Une archive Phar est utilisée pour distribuer une application PHP complète ou une bibliothèque sous forme d'un fichier unique. Une application sous forme d'archive Phar est utilisée exactement de la même façon que n'importe quelle autre application PHP :

php applicationsympa.phar
  

L'utilisation d'une bibliothèque sous forme d'archive Phar est la même que n'importe quelle autre bibliothèque PHP :

<?php
include 'bibliothequesympa.phar';
?>

Le flux phar fournit le coeur de l'extension phar, et est décrit en détails ici. Le flux phar permet l'accès aux fichiers contenus dans une archive phar via les fonctions standards de fichier fopen(), opendir(), et toute autre fonctionnant sur des fichiers normaux. Le flux phar supporte toutes les opérations de lecture/écriture à al fois su les fichiers et sur les répertoires.

<?php
include 'phar://bibliothequesympa.phar/fichier/interne.php';
header('Content-type: image/jpeg');
// les phars peuvent être atteint via le chemin complet ou via des alias
echo file_get_contents('phar:///chemin/complet/vers/bibliothequesympa.phar/images/wow.jpg');
?>

La classe Phar implémente des fonctionnalités avancées pour accéder aux fichiers et créer des archives phar. La classe Phar est décrite en détails ici.

<?php
try {
    
// ouvre un phar existant
    
$p = new Phar('bibliothequesympa.phar'0);
    
// Phar étend la classe DirectoryIterator de SPL
    
foreach (new RecursiveIteratorIterator($p) as $file) {
        
// $file est une classe PharFileInfo et hérité de SplFileInfo
        
echo $file->getFileName() . "\n";
        echo 
file_get_contents($file->getPathName()) . "\n"// affiche le contenu;
    
}
    if (isset(
$p['fichier/interne.php'])) {
        
var_dump($p['fichier/interne.php']->getMetadata());
    }

    
// crée un nouveau phar - phar.readonly doit être à 0 dans php.ini
    // phar.readonly est activé par défaut pour des raisons de sécurité.
    // Sur des serveurs de production, les Phars n'ont pas besoin d'être créés,
    // juste d'être exécutés.
    
if (Phar::canWrite()) {
        
$p = new Phar('nouveauphar.tar.phar'0'nouveauphar.tar.phar');
        
// On crée une archive Phar basée sur tar, compressée par gzip (.tar.gz)
        
$p $p->convertToExecutable(Phar::TARPhar::GZ);

        
// crée une transaction - rien n'est écrit dans nouveauphar.phar
        // jusqu'à ce que stopBuffering() ne soit appelé, bien qu'un stockage temporaire soit requis
        
$p->startBuffering();
        
// ajoute tous les fichiers de /chemin/vers/leprojet dans le phar avec le préfixe "projet"
        
$p->buildFromIterator(new RecursiveIteratorIterator(new DirectoryIterator('/chemin/vers/leprojet')), '/chemin/vers/');

        
// ajoute un nouveau fichier en utilisant l'API d'accès par tableau
        
$p['fichier1.txt'] = 'Information';
        
$fp fopen('grosfichier.dat''rb');
        
// copie toutes les données du flux
        
$p['data/grosfichier.dat'] = $fp;

        if (
Phar::canCompress(Phar::GZ)) {
            
$p['data/grosfichier.dat']->compress(Phar::GZ);
        }

        
$p['images/wow.jpg'] = file_get_contents('images/wow.jpg');
        
// toute valeur peut être sauvegardée comme métadonnée spécifique au fichier
        
$p['images/wow.jpg']->setMetadata(array('mime-type' => 'image/jpeg'));
        
$p['index.php'] = file_get_contents('index.php');
        
$p->setMetadata(array('bootstrap' => 'index.php'));

        
// sauvegarde l'archive phar sur le disque
        
$p->stopBuffering();
    }
} catch (
Exception $e) {
    echo 
'N\'a pas pu ouvrir le Phar: '$e;
}
?>

D'autre part, la vérification du contenu du fichier phar peut être faite en utilisant un des algorithme de signature symétrique (MD5, SHA1, SHA256 et SHA512 si ext/hash est activée) et en utilisant la signature asymétrique par clé publique/privée de OpenSSL (nouveauté de Phar 2.0.0). Pour tirer parti de la signature OpenSSL, vous devez générer une paire de clés publique/privée et utiliser la clé privée pour signer avec Phar::setSignatureAlgorithm(). En plus, la clé publique, extraite en utilisant ce code :

<?php
$public 
openssl_get_publickey(file_get_contents('private.pem'));
$pkey '';
openssl_pkey_export($public$pkey);
?>
doit être sauvegardée à part de l'archive phar qu'elle vérifie. Si l'archive phar est sauvegardée en tant que /chemin/vers/mon.phar, la clé publique doit être sauvegardée en tant que /chemin/vers/mon.phar.pubkey, sans quoi phar ne sera pas capable de vérifier la signature OpenSSL.

Depuis la version 2.0.0, la classe Phar fournit aussi trois méthodes statiques, Phar::webPhar(), Phar::mungServer() et Phar::interceptFileFuncs() qui sont cruciales pour empaqueter des applications PHP visant à être utilisée sur un système de fichiers classique ou en tant qu'application web. Phar::webPhar() implémente un contrôleur qui route les appels HTTP vers le bon endroit de l'archive phar. Phar::mungServer() est utilisé pour modifier les valeurs du tableau $_SERVER pour dire aux applications d'utiliser ces valeurs. Phar::interceptFileFuncs() dit à Phar d'intercepter les appels à fopen(), file_get_contents(), opendir(), et à toutes les fonctions basées sur stat (file_exists(), is_readable(), etc) et route tous les chemins relatif vers les bons endroits de l'archive phar.

Par exemple, empaqueter une version de la célèbre application phpMyAdmin dans une archive phar nécessite juste ce simple script et, dès lors, phpMyAdmin.phar.tar.php peut être accédé comme un fichier classique à partir de votre serveur web, après avoir modifié le couple utilisateur/motdepasse :

<?php
@unlink('phpMyAdmin.phar.tar.php');
copy('phpMyAdmin-2.11.3-english.tar.gz''phpMyAdmin.phar.tar.php');
$a = new Phar('phpMyAdmin.phar.tar.php');
$a->startBuffering();
$a["phpMyAdmin-2.11.3-english/config.inc.php"] = '<?php
/* Servers configuration */
$i = 0;

/* Server localhost (config:root) [1] */
$i++;
$cfg[\'Servers\'][$i][\'host\'] = \'localhost\';
$cfg[\'Servers\'][$i][\'extension\'] = \'mysqli\';
$cfg[\'Servers\'][$i][\'connect_type\'] = \'tcp\';
$cfg[\'Servers\'][$i][\'compress\'] = false;
$cfg[\'Servers\'][$i][\'auth_type\'] = \'config\';
$cfg[\'Servers\'][$i][\'user\'] = \'root\';
$cfg[\'Servers\'][$i][\'password\'] = \'\';


/* End of servers configuration */
if (strpos(PHP_OS, \'WIN\') !== false) {
    $cfg[\'UploadDir\'] = getcwd();
} else {
    $cfg[\'UploadDir\'] = \'/tmp/pharphpmyadmin\';
    @mkdir(\'/tmp/pharphpmyadmin\');
    @chmod(\'/tmp/pharphpmyadmin\', 0777);
}'
;
$a->setStub('<?php
Phar::interceptFileFuncs();
Phar::webPhar("phpMyAdmin.phar", "phpMyAdmin-2.11.3-english/index.php");
echo "phpMyAdmin is intended to be executed from a web browser\n";
exit -1;
__HALT_COMPILER();
'
);
$a->stopBuffering();
?>



Utiliser les archives Phar : le flux phar

Le flux Phar supporte totalement fopen() pour les lectures/écritures (pas les concaténations), unlink(), stat(), fstat(), fseek(), rename() et le opérations de flux sur les répertoires opendir() et depuis la version 2.0.0, rmdir() et mkdir().

La compression et les métadonnées individuelles par fichier peuvent aussi être manipulées au sein de l'archive Phar en utilisant les contextes de flux :

<?php
$context 
stream_context_create(array('phar' =>
                                    array(
'compress' => Phar::GZ)),
                                    array(
'metadata' => array('user' => 'cellog')));
file_put_contents('phar://mon.phar/unfichier.php'0$context);
?>

Le flux phar n'agit pas sur les fichiers distants et ne peut pas considérer les fichiers distants, etc... même si les options INI allow_url_fopen et allow_url_include sont désactivées.

Bien qu'il soit possible de créer des archives phar de zéro en utilisant juste les opérations sur les flux, il est préférable d'utiliser la fonctionnalité incluse dans la classe Phar. Le flux est mieux utilisé pour les opérations de lecture.



Utiliser les archives Phar : les classes Phar et PharData

La classe Phar supporte la lecture et la manipulation des archives Phar, ainsi que l'itération à travers la fonctionnalité héritée de la classe RecursiveDirectoryIterator. Avec le support de l'interface ArrayAccess, les fichiers contenus dans une archive Phar peuvent être accédés comme s'ils étaient membres d'un tableau associatif.

La classe PharData étend la classe Phar, et permet la création et la modification d'archives tar et zip non exécutables (données) même si phar.readonly=1 dans php.ini. Ainsi, PharData::setAlias() et PharData::setStub() sont toutes deux désactivées car les concepts d'alias et de conteneur sont restreints aux archives phar exécutables.

Il est important de noter que quand une archive Phar est créée, le chemin complet doit être passé au constructeur de l'objet Phar. Un chemin relatif empêcherait l'initialisation.

En supposant que $p est un objet initialisé de cette façon :

<?php
$p 
= new Phar('/chemin/vers/monphar.phar'0'monphar.phar');
?>

Une archive Phar vide sera créée en tant que /chemin/vers/monphar.phar, ou si /chemin/vers/monphar.phar existe déjà, il sera ouvert de nouveau. Le terme monphar.phar démontre le concept d'un alias qui peut être utilisé pour référencer /chemin/vers/monphar.phar dans des URL comme ceci :

<?php
// ces deux appels à file_get_contents() sont équivalents si
// /chemin/vers/monphar.phar a un alias explicite de "monphar.phar"
// dans son mainfeste, ou si le phar a été initialisé avec l'instantiation de
// l'objet Phar de l'exemple précedent
$f file_get_contents('phar:///chemin/vers/monphar.phar/nimportequoi.txt');
$f file_get_contents('phar://monphar.phar/nimportequoi.txt');
?>

Avec l'objet Phar $p nouvellement créé, les choses suivantes sont possibles :

  • $a = $p['fichier.php'] crée une PharFileInfo qui réfère au contenu de phar://monphar.phar/fichier.php
  • $p['fichier.php'] = $v crée un nouveau fichier (phar://monphar.phar/fichier.php), ou écrase un fichier existant au sein de monphar.phar. $v peut être soit une chaîne ou un pointeur vers un fichier ouvert, dans quel cas le contenu du fichier sera utilisé pour créer le nouveau fichier. Notez que $p->addFromString('fichier.php', $v) est équivalent en terme de fonctionnalité au cas ci-dessus. Il est aussi possible d'ajouter le contenu d'un fichier avec $p->addFile('/chemin/vers/fichier.php', 'fichier.php'). Enfin, un répertoire vide peut être créé avec $p->addEmptyDir('vide').
  • isset($p['fichier.php']) peut être utilisé pour déterminer si phar://monphar.phar/fichier.php existe au sein de monphar.phar.
  • unset($p['fichier.php']) efface phar://monphar.phar/fichier.php de monphar.phar.

De plus, l'objet Phar est le seul moyen d'accéder aux métadonnées spécifiques de Phar, via Phar::getMetadata(), et c'est aussi le seul moyen de régler ou de récupérer le conteneur du chargeur de l'archive Phar via Phar::getStub() et Phar::setStub(). De plus, la compression pour l'archive Phar entière peut être manipulée seulement via la classe Phar.

La liste complète des fonctionnalités de l'objet Phar est documentée ci-dessous.

La classe PharFileInfo étend la classe SplFileInfo et ajoute plusieurs méthodes pour manipuler les métadonnées spécifiques à Phar d'un fichier contenu dans un Phar, telles que manipuler la compression ou les métadonnées.




Créer des archives Phar

Sommaire


Créer des archives Phar : Introduction

Sera entièrement écrit plus tard. Avant de lire ceci, soyez sûr de lire Comment utiliser des archives Phar.

Se documenter sur Phar::buildFromIterator() et les spécificités des choix de format de fichier disponible pour les archives peut être un bon début. Une bonne compréhension de ce qu'est et de ce que fait un conteneur (stub) est cruciale pour la création d'archive phar, ce qui fait de Phar::setStub() et Phar::createDefaultStub() également un bon point de départ. Si vous distribuer des applications web, il est important de connaître Phar::webPhar() et la méthode associée Phar::mungServer(). Toute application qui accède à ses propres fichiers devrait aussi considérer l'utilisation de Phar::interceptFileFuncs().




Qu'est-ce qui fait d'un phar un phar et pas un tar ou un zip?

Sommaire


Les constituants de toutes les archives Phar, indépendamment du format de fichier

Toute les archives Phar contiennent de trois à quatre sections:

  1. Un conteneur

  2. Un manifest décrivant le contenu

  3. Le contenu du fichier

  4. Une signature (facultative) pour vérifier l'intégrité (uniquement avec le format de fichier phar)



Le conteneur de fichier Phar

Un conteneur Phar est un simple fichier PHP. Le conteneur minimal contient :

<?php __HALT_COMPILER();

Un conteneur doit contenir au moins le jeton __HALT_COMPILER(); en guise de conclusion. Typiquement, un conteneur comportera les fonctionnalités de chargement suivantes :

<?php
Phar
::mapPhar();
include 
'phar://monphar.phar/index.php';
__HALT_COMPILER();

Il n'y a aucune restriction sur le contenu d'un conteneur Phar, si ce n'est le besoin d'être conclu par __HALT_COMPILER();. Le tag fermant PHP

?>
peut être inclus ou omis, mais il ne peut y avoir plus d'un espace entre le ; et le tag fermant
?>
sans quoi l'extension phar ne sera pas capable de lire le manifeste de l'archive.

Dans une archive phar basée sur tar ou zip, le conteneur est stocké dans le fichier .phar/stub.php. Le conteneur par défaut des archives Phar basées sur phar contient approximativement 7ko de code pour extraire le contenu du phar et l'exécuter. Regardez la fonction Phar::createDefaultStub() pour davantage de détails.

L'alias phar est stocké, dans le cas d'une archive phar basée sur tar ou zip, dans le fichier .phar/alias.txt en tant que texte plein.



Comparaison entre Phar, Tar et Zip

Quels sont les avantages et les inconvénients de chacun des trois formats supportés par l'extension phar? Ce tableau tente de répondre à cette question.

Tableau comparatif : Phar, Tar et Zip
Fonctionnalité Phar Tar Zip
Format de fichier standard Non Oui Oui
Peut être exécuté sans l'extension Phar [1] Oui Non Non
Compression par fichier Oui Non Oui
Compression pour toute l'archive Oui Oui Non
Validation par signature de toute l'archive Oui Oui Oui (PHP 5.3.1+)
Support d'applications spécifiquement Web Oui Oui Oui
Métadonnées par fichier Oui Oui Oui
Métadonnées pour toute l'archive Oui Oui Oui
Création/modification d'archive [2] Oui Oui Oui
Support complet de toutes les fonctions de flux Oui Oui Oui
Peut être créée/modifiée même si phar.readonly=1 [3] Non Oui Oui

Astuce

[1] PHP ne peut accéder directement au contenu d'une archive Phar sans que l'extension Phar soit installée si elle utilise un conteneur qui extrait le contenu de l'archive phar. Le conteneur créé par Phar::createDefaultStub() extrait l'archive phar et exécute son contenu à partir d'un répertoire temporaire si aucune extension phar n'est trouvée.

Astuce

[2] Tous les accès en écriture nécessitent que phar.readonly soit désactivé dans le php.ini ou directement via la ligne de commande.

Astuce

[3] Seules les archives tar ou zip sans .phar dans leur nom et sans conteneur exécutable .phar/stub.php peuvent être créées si phar.readonly=1.



Les phars basés sur Tar

Les archives basées sur le format de fichier tar sont conformes au format moderne USTAR. Le design des en-têtes du fichier tar le rend plus efficace que le format de fichier zip et aussi efficace que le format de fichier phar quand il s'agit d'accéder aux données. Les noms de fichiers sont limités à 255 octets, y compris le chemin complet au sein de l'archive phar basée sur tar. Ces archives peuvent être intégralement compressées au format gzip ou bzip2 tout en restant exécutables par l'extension Phar.

Pour compresser une archive entière, utilisez Phar::compress(). Pour décompresser une archive entière, utilisez Phar::decompress().



Les phars basés sur Zip

Les archives basées sur le format de fichier zip supportent de nombreuses fonctionnalités incluses dans le format zip. Les métadonnées par fichier ou sur toute l'archive sont stockées dans les commentaires du fichier zip et de l'archive zip en tant que chaîne de caractères sérialisée. Les commentaires zip déjà existants seront lus sans problème en tant que chaîne. Les lectures/écritures compressées sont supportées par la compression zlib, et uniquement les lectures compressées par la compression bzip2. Il n'y a pas de limite sur le nombre de fichiers au sein d'une archive phar basée sur zip. Les répertoires vides sont stockés dans l'archive zip comme des fichiers avec un slash final, comme mon/repertoire/



Le format de fichier Phar

Le format de fichier phar est composé de conteneur/manifeste/contenu/signature, et stocke les informations cruciales de ce qui est contenu dans l'archive phar dans son manifeste.

Le manifeste Phar est un format hautement optimisé qui permet la spécification fichier par fichier de la compression, des permissions et même des métadonnées utilisateur tels que l'utilisateur ou le groupe propriétaire. Toutes les valeurs de plus d'un octet sont stockées sous forme petit-boutiste, Ã l'exception de la version de l'API qui est stockée pour des raisons historiques en 3 morceaux grand-boutistes.

Tous les drapeaux non utilisés sont réservés pour un usage futur et ne doivent pas être utilisés pour stocker des informations personnalisées. Utilisez les métadonnées par fichier pour stocker des métadonnées personnalisées sur des fichiers particuliers.

Le format de fichier basique du manifeste d'une archive Phar est le suivant :

Format global du manifeste Phar
Taille en octets Description
4 octets Longueur du manifeste en octets (limitée à 1 Mo)
4 octets Nombre de fichiers dans le Phar
2 octets Version de l'API du manifest Phar (à ce jour 1.0.0)
4 octets Drapeaux "bitmappés" globaux du Phar
4 octets Longueur de l'alias Phar
?? L'alias Phar (longueur basée sur la valeur précédente)
4 octets Longueur des métadonnées Phar (0 si aucune)
?? métadonnées Phar sérialisées, stockées dans un format serialize()
au moins 24 * nombre d'octets des entrées Entrées pour chaque fichier



Drapeaux "bitmappés" globaux du Phar

Voici les drapeaux "bitmappés" actuellement reconnus par l'extension Phar pour le bitmap plein global de Phar :

Valeurs de bitmap reconnues
Valeur Description
0x00010000 Si présent, le Phar contient une signature de vérification
0x00001000 Si présent, le Phar contient au moins 1 fichier qui est compressé grâce à zlib
0x00002000 Si présent, le Phar contient au moins 1 fichier qui est compressé grâce à bzip



Définition des entrées du manifeste Phar

Chaque fichier du manifeste contient les informations suivantes :

Entrée du manifeste Phar
Taille en octets Description
4 octets Longueur du nom de fichier en octets
?? Nom de fichier (longueur basée sur la valeur précédente)
4 octets Taille du fichier décompressé en octets
4 octets Timestamp Unix du fichier
4 octets Taille du fichier compressé en octets
4 octets Somme de contrôle CRC32 du contenu décompressé du fichier
4 octets Drapeaux bitmappés spécifiques au fichier
4 octets Longueur des métadonnées du fichier sérialisées (0 si aucune)
?? métadonnées du fichier sérialisées, stockées dans un format serialize()

A noter qu'à partir de l'API 1.1.1, les répertoires vides sont stockés comme des noms de fichier avec un slash final comme mon/repertoire/

Les valeurs reconnues de drapeaux bitmappés spécifiques au fichier sont :

Valeurs reconnues de bitmap
Valeur Description
0x000001FF Ces bits sont réservés pour définir des permissions spécifiques au fichier. Celles-ci sont utilisées pour fstat() et peuvent être utilisées pour recréer les permissions souhaitées en cas d'extraction.
0x00001000 Si présent, le fichier est compressé grâce à zlib
0x00002000 Si présent, le fichier est compressé grâce à bzip



Phar Signature format

Les Phar qui contiennent une signature ont toujours la signature ajoutée à la fin du Phar, après le chargeur, le manifeste et le contenu. Les deux types de signature supportés à ce jour sont MD5 et SHA1.

Format de signature
Longueur en octets Description
16 ou 20 octets La signature actuelle, 20 octets pour une SHA1, 16 octets pour une MD5, 32 octets pour une SHA256, et 64 octets pour une SHA512.
4 octets Les drapeaux de signature. 0x0001 est utilisé pour définir une signature MD5, 0x0002 pour une SHA1, 0x0004 pour une SHA256 et 0x0008 pour une SHA512. Le support des signatures SHA256 et SHA512 a été introduit avec l'API version 1.1.0.
4 octets GBMB magique utilisé pour définir la présence d'une signature.




La classe Phar

(No version information available, might only be in SVN)

Introduction

La classe Phar fournit une interface de haut niveau pour accéder et créer des archives phar.

Synopsis de la classe

Phar extends RecursiveDirectoryIterator implements Countable , ArrayAccess {
/* Propriétés */
/* Méthodes */
void addEmptyDir ( string $dirname )
void addFile ( string $file [, string $localname ] )
void addFromString ( string $localname , string $contents )
string apiVersion ( void )
array buildFromDirectory ( string $base_dir [, string $regex ] )
array buildFromIterator ( Iterator $iter [, string $base_directory ] )
bool canCompress ([ int $type = 0 ] )
bool canWrite ( void )
object compress ( int $compression [, string $extension ] )
bool compressAllFilesBZIP2 ( void )
bool compressAllFilesGZ ( void )
void compressFiles ( int $compression )
__construct ( string $fname [, int $flags [, string $alias ]] )
PharData convertToData ([ int $format = 9021976 [, int $compression = 9021976 [, string $extension ]]] )
Phar convertToExecutable ([ int $format = 9021976 [, int $compression = 9021976 [, string $extension ]]] )
bool copy ( string $oldfile , string $newfile )
int count ( void )
string createDefaultStub ([ string $indexfile [, string $webindexfile ]] )
object decompress ([ string $extension ] )
bool decompressFiles ( void )
bool delMetadata ( void )
bool delete ( string $entry )
bool extractTo ( string $pathto [, string|array $files [, bool $overwrite = false ]] )
mixed getMetadata ( void )
bool getModified ( void )
array getSignature ( void )
string getStub ( void )
array getSupportedCompression ( void )
array getSupportedSignatures ( void )
string getVersion ( void )
bool hasMetadata ( void )
void interceptFileFuncs ( void )
bool isBuffering ( void )
mixed isCompressed ( void )
bool isFileFormat ( int $format )
bool isValidPharFilename ( string $filename [, bool $executable = true ] )
bool isWritable ( void )
bool loadPhar ( string $filename [, string $alias ] )
bool mapPhar ([ string $alias [, int $dataoffset = 0 ]] )
void mount ( string $pharpath , string $externalpath )
void mungServer ( array $munglist )
bool offsetExists ( string $offset )
int offsetGet ( string $offset )
void offsetSet ( string $offset , string $value )
bool offsetUnset ( string $offset )
string running ([ bool $retphar = true ] )
bool setAlias ( string $alias )
bool setDefaultStub ([ string $index [, string $webindex ]] )
void setMetadata ( mixed $metadata )
void setSignatureAlgorithm ( int $sigtype [, string $privatekey ] )
bool setStub ( string $stub )
void startBuffering ( void )
void stopBuffering ( void )
bool uncompressAllFiles ( void )
bool unlinkArchive ( string $archive )
void webPhar ([ string $alias [, string $index = "index.php" [, string $f404 [, array $mimetypes [, array $rewrites ]]]]] )
}

Phar::addEmptyDir

(Unknown)

Phar::addEmptyDirAjoute un répertoire vide à l'archive phar

Description

void Phar::addEmptyDir ( string $dirname )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Grâce à cette méthode, un répertoire vide est créé avec le chemin dirname. Cette méthode est identique à ZipArchive::addEmptyDir().

Liste de paramètres

dirname

Le nom du répertoire vide à créer dans l'archive phar

Valeurs de retour

pas de valeur de retour, une exception est levée en cas d'échec.

Exemples

Exemple #1 Un exemple avec Phar::addEmptyDir()

<?php
try {
    
$a = new Phar('/chemin/vers/phar.phar');

    
$a->addEmptyDir('/chemin/complet/vers/fichier');
    
// démontre comment le fichier est stocké
    
$b $a['chemin/complet/vers/fichier']->isDir();
} catch (
Exception $e) {
    
// traite les erreurs ici
}
?>

Voir aussi



Phar::addFile

(Unknown)

Phar::addFileAjoute un fichier du système de fichiers à l'archive phar

Description

void Phar::addFile ( string $file [, string $localname ] )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Grâce à cette méthode, tout fichier ou URL peut être ajouté à l'archive phar. Si le second paramètre optionnel localname est spécifié, le fichier sera stocké dans l'archive de ce nom, sinon le paramètre file est utilisé comme chemin vers lequel stocker l'archive. Les URL doivent être locales, sans quoi une exception est levée. Cette méthode est identique à ZipArchive::addFile().

Liste de paramètres

file

Chemin absolu ou relatif vers un fichier du disque à ajouter à l'archive phar.

localname

Chemin où le fichier sera stocké dans l'archive.

Valeurs de retour

Pas de valeur de retour, une exception est levée en cas d'échec.

Exemples

Exemple #1 Un exemple avec Phar::addFile()

<?php
try {
    
$a = new Phar('/chemin/vers/phar.phar');

    
$a->addFile('/chemin/complet/vers/fichier');
    
// démontre comment le fichier est stocké
    
$b $a['chemin/complet/vers/fichier']->getContent();

    
$a->addFile('/chemin/complet/vers/fichier''mon/fichier.txt');
    
$c $a['mon/fichier.txt']->getContent();

    
// démontre l'utilisation d'URL
    
$a->addFile('http://www.exemple.com''exemple.html');
} catch (
Exception $e) {
    
// traite les erreurs ici
}
?>

Voir aussi



Phar::addFromString

(Unknown)

Phar::addFromStringAjoute un fichier du système de fichiers à l'archive phar

Description

void Phar::addFromString ( string $localname , string $contents )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Grâce à cette méthode, toute chaîne peut être ajoutée à l'archive phar. Le fichier sera stocké dans l'archive avec localname en tant que chemin. Cette méthode est identique à ZipArchive::addFromString().

Liste de paramètres

localname

Chemin dans lequel le fichier sera stocké dans l'archive.

contents

Le contenu de fichier à stocker

Valeurs de retour

Pas de valeur de retour, une exception est levée en cas d'échec.

Exemples

Exemple #1 Un exemple avec Phar::addFromString()

<?php
try {
    
$a = new Phar('/chemin/vers/phar.phar');

    
$a->addFromString('chemin/vers/fichier.txt''mon fichier simple');
    
$b $a['chemin/vers/fichier.txt']->getContent();

    
// pour ajouter du contenu à partir d'un descripteur de flux pour des gros fichiers, utilisez offsetSet()
    
$c fopen('/chemin/vers/grosfichier.bin');
    
$a['grosfichier.bin'] = $c;
    
fclose($c);
} catch (
Exception $e) {
    
// traite les erreurs ici
}
?>

Voir aussi



Phar::apiVersion

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::apiVersionRetourne la version de l'API

Description

string Phar::apiVersion ( void )

Retourne la version de l'API du format de fichier phar qui sera utilisée pour la création de phars. L'extension Phar supporte la lecture des versions d'API 1.0.0 et supérieures. L'API version 1.1.0 est requise pour les hachages SHA-256 et SHA-512, et l'API version 1.1.1 est requise pour stocker des répertoires vides.

Liste de paramètres

Valeurs de retour

La version de l'API, par exemple "1.0.0".

Exemples

Exemple #1 Un exemple avecPhar::apiVersion()

<?php
echo Phar::apiVersion();
?>

L'exemple ci-dessus va afficher :

1.1.1



Phar::buildFromDirectory

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::buildFromDirectoryConstruit une archive phar à partir des fichiers d'un répertoire

Description

array Phar::buildFromDirectory ( string $base_dir [, string $regex ] )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Remplit une archive phar à partir du contenu d'un répertoire. Le second paramètre, optionnel, est une expression rationnelle (pcre) utilisée pour exclure des fichiers. Tout fichier dont le nom satisfait l'expression rationnelle sera inclus, les autres seront exclus. Pour un contrôle plus fin, utilisez Phar::buildFromIterator().

Liste de paramètres

base_dir

Le chemin absolu ou relatif vers le répertoire contenant tous les fichiers à ajouter à l'archive.

regex

Une expression rationnelle optionnelle utilisée pour filtrer la liste des fichiers. Seuls les fichiers dont le nom satisfait l'expression rationnelle seront inclus dans l'archive.

Valeurs de retour

Phar::buildFromDirectory() retourne un tableau associatif faisant correspondre le chemin interne du fichier avec le chemin complet sur le système de fichiers.

Erreurs / Exceptions

Cette méthode lève une exception BadMethodCallException quand elle est incapable d'instancier l'itérateur de répertoire interne, ou une exception PharException s'il y a eu des erreurs lors de la sauvegarde de l'archive.

Exemples

Exemple #1 Un exemple avecPhar::buildFromDirectory()

<?php
// crée avec l'alias "projet.phar"
$phar = new Phar('projet.phar'0'projet.phar');
// ajoute des fichiers dans le projet
$phar->buildFromDirectory(dirname(__FILE__) . '/projet');
$phar->setStub($phar->createDefaultWebStub('cli/index.php''www/index.php'));

$phar2 = new Phar('projet2.phar'0'projet2.phar');
// ajoute tous les fichiers dans le projet, mais juste les fichiers .php
$phar->buildFromDirectory(dirname(__FILE__) . '/projet''/\.php$/');
$phar->setStub($phar->createDefaultStub('cli/index.php''www/index.php'));
?>

Voir aussi



Phar::buildFromIterator

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::buildFromIteratorConstruit une archive phar à partir d'un itérateur

Description

array Phar::buildFromIterator ( Iterator $iter [, string $base_directory ] )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Remplit une archive phar à partir d'un itérateur. Deux styles d'itérateur sont supportés : les itérateurs qui font correspondre le nom de fichier au sein du phar avec le nom d'un fichier sur le disque, et les itérateurs comme DirectoryIterator qui retournent des objets SplFileInfo. Pour les itérateurs qui retournent des objets SplFileInfo, le second paramètre est obligatoire.

Liste de paramètres

iter

Un itérateur qui associe un fichier avec une position, ou bien retourne des objets SplFileInfo.

base_directory

Pour les itérateurs qui retournent des objets SplFileInfo, la portion de chemin absolu de chaque fichier qu'il faut supprimer lors de l'ajout à l'archive phar.

Valeurs de retour

Phar::buildFromIterator() retourne un tableau associatif qui associe la représentation interne du fichier à un chemin absolu dans le système.

Exemples

Exemple #1 Exemple avec Phar::buildFromIterator() et SplFileInfo

Pour la plupart des archives phar, l'archive reflète l'arborescence d'un répertoire, et le second style est le plus utile. Par exemple, pour créer une archive phar contenant les fichiers de l'arborescence du répertoire :

/chemin/vers/projet/
                 config/
                        dist.xml
                        debug.xml
                 lib/
                     file1.php
                     file2.php
                 src/
                     processthing.php
                 www/
                     index.php
                 cli/
                     index.php

Ce code peut être utilisé pour ajouter à l'archive "projet.phar" :

<?php
// crée avec l'alias "projet.phar"
$phar = new Phar('projet.phar'0'projet.phar');
$phar->buildFromIterator(
    new 
RecursiveIteratorIterator(
     new 
RecursiveDirectoryIterator('/chemin/vers/projet')),
    
'/chemin/vers/projet');
$phar->setStub($phar->createDefaultStub('cli/index.php''www/index.php'));
?>

Le fichier projet.phar peut alors être utilisé immédiatement. Phar::buildFromIterator() ne règle pas les paramètres tels que la compression ou les métadonnées; ceci peut cependant être fait après avoir créé l'archive phar.

Il est intéressant de noter que Phar::buildFromIterator() peut aussi être utilisé pour copier les éléments d'une archive phar existante, car l'objet Phar hérite de DirectoryIterator :

<?php
// crée avec l'alias "projet.phar"
$phar = new Phar('projet.phar'0'projet.phar');
$phar->buildFromIterator(
    new 
RecursiveIteratorIterator(
     new 
Phar('/chemin/vers/unautrephar.phar')),
    
'phar:///chemin/vers/unautrephar.phar/chemin/vers/projet');
$phar->setStub($phar->createDefaultWebStub('cli/index.php''www/index.php'));
?>

Exemple #2 Exemple avec Phar::buildFromIterator() et d'autres itérateurs

La seconde forme d'itérateur peut être utilisée avec n'importe quel itérateur qui retourne une correspondance clé => valeur, tels que ArrayIterator :

<?php
// crée avec l'alias "projet.phar"
$phar = new Phar('projet.phar'0'projet.phar');
$phar->buildFromIterator(
    new 
ArrayIterator(
     array(
        
'interne/fichier.php' => dirname(__FILE__) . '/unfichier.php',
        
'unautre/fichier.jpg' => fopen('/chemin/vers/grosfichier.jpg''rb'),
     )));
$phar->setStub($phar->createDefaultWebStub('cli/index.php''www/index.php'));
?>

Erreurs / Exceptions

Cette méthode émet une exception UnexpectedValueException quand l'itérateur retourne des valeurs fausses, telles qu'une clé entière à la place d'une chaîne; une exception BadMethodCallException quand un itérateur basé sur SplFileInfo est passé sans paramètre base_directory, ou une exception PharException s'il y a eu des erreurs lors de la sauvegarde de l'archive phar.

Voir aussi



Phar::canCompress

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::canCompressDétermine si l'extension phar supporte une la compression en utilisant soit zip soit bzip2

Description

bool Phar::canCompress ([ int $type = 0 ] )

Cette méthode doit être utilisée pour déterminer si la compression est possible avant de charger une archive phar qui contient des fichiers compressés.

Liste de paramètres

type

Phar::GZ et Phar::BZ2 peuvent être utilisées pour déterminer si la compression est possible avec respectivement zlip ou bzip2.

Valeurs de retour

TRUE si la compression/décompression est disponible, FALSE sinon.

Exemples

Exemple #1 Un exemple avec Phar::canCompress()

<?php
if (Phar::canCompress()) {
    echo 
file_get_contents('phar://pharcompresse.phar/interne/fichier.txt');
} else {
    echo 
'compression non disponible';
}
?>

Voir aussi



Phar::canWrite

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::canWriteDétermine si l'extension phar supporte la création et l'écriture des phars

Description

bool Phar::canWrite ( void )

Cette méthode statique détermine si l'accès en écriture a été désactivé dans le php.ini du système via la variable INI phar.readonly.

Liste de paramètres

Valeurs de retour

TRUE si l'accès en écriture est possible, FALSE sinon.

Exemples

Exemple #1 Un exemple avec Phar::canWrite()

<?php
if (Phar::canWrite()) {
    
file_put_contents('phar://monphar.phar/fichier.txt''coucou');
}
?>

Voir aussi



Phar::compress

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::compressCompresse l'archive Phar complète en utilisant la compression Gzip ou Bzip2

Description

object Phar::compress ( int $compression [, string $extension ] )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Dans le cas des archives phar basées sur tar ou sur phar, cette méthode compresse l'archive complète en utilisant la compression gzip ou bzip2. Le fichier qui en résulte peut être traité avec la commande gzip/bzip2, ou accédée directement et de façon transparente avec l'extension Phar.

Dans le cas des archives phar basées sur Zip, cette méthode échoue en lançant une exception. L'extension zlib doit être activée pour compresser avec gzip, tandis que l'extension bzip2 doit être activée pour compresser avec bzip2. Comme avec toutes les fonctionnalités qui modifient le contenu d'un phar, la variable INI phar.readonly doit être à off pour fonctionner.

En plus, cette méthode renomme automatiquement l'archive, en suffisant son nom par .gz, .bz2 ou en enlevant l'extension si Phar::NONE est passée pour supprimer la compression. Sinon, une extension de fichier peut aussi être spécifiée en utilisant le second paramètre.

Liste de paramètres

compression

La compression doit être soit Phar::GZ, soit Phar::BZ2 pour bénéficier de la compression, ou bien Phar::NONE pour éliminer la compression.

extension

Par défaut, l'extension est .phar.gz ou .phar.bz2 pour compresser les archives phar, et .phar.tar.gz ou .phar.tar.bz2 pour compresser les archives tar. Pour décompresser, les extensions par défaut sont .phar et .phar.tar.

Valeurs de retour

Retourne un objet Phar.

Erreurs / Exceptions

Lève une exception BadMethodCallException si la variable INI phar.readonly est à on, si l'extension zlib n'est pas disponible, ou si l'extension bzip2 n'est pas activée.

Exemples

Exemple #1 Un exemple avec Phar::compress()

<?php
$p 
= new Phar('/chemin/vers/mon.phar'0'mon.phar');
$p['monfichier.txt'] = 'salut';
$p['monfichier2.txt'] = 'salut';
$p1 $p->compress(Phar::GZ); // copie vers /chemin/vers/mon.phar.gz
$p2 $p->compress(Phar::BZ2); // copie vers /chemin/vers/mon.phar.bz2
$p3 $p2->compress(Phar::NONE); // exception: /chemin/vers/mon.phar existe déjà
?>

Voir aussi



Phar::compressAllFilesBZIP2

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::compressAllFilesBZIP2Compresse tous les fichiers de l'archive Phar courante en utilisant la compression Bzip2

Description

bool Phar::compressAllFilesBZIP2 ( void )

Note:

Cette méthode a été supprimée de l'extension phar depuis la version 2.0.0. Vous pouvez utiliser Phar::compress(), Phar::decompress(), Phar::compressFiles() et Phar::decompressFiles() à la place.

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Cette méthode compresse tous les fichiers de l'archive Phar en utilisant la compression bzip2. L'extension bzip2 doit être activée pour pouvoir bénéficier de cette fonctionnalité. De plus, si un ou des fichiers ont déjà été compressés en utilisant la compression gzip, l'extension zlib doit être activée pour pouvoir décompresser les fichiers et les re-compresser avec l'algorithme bzip2. Comme avec toutes les fonctionnalités qui modifient le contenu d'un phar, la variable INI phar.readonly doit être à off pour fonctionner.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Erreurs / Exceptions

Lève une exception BadMethodCallException si la variable INI phar.readonly est on, si l'extension bzip2 n'est pas disponible, ou si un ou des fichiers ont été déjà compressés avec la compression gzip et que l'extension zlib n'est pas activée.

Exemples

Exemple #1 Un exemple avec Phar::compressAllFilesBZIP2()

<?php
$p 
= new Phar('/chemin/vers/mon.phar'0'mon.phar');
$p['monfichier.txt'] = 'salut';
$p['monfichier2.txt'] = 'salut';
foreach (
$p as $file) {
    
var_dump($file->getFileName());
    
var_dump($file->isCompressed());
    
var_dump($file->isCompressedBZIP2());
    
var_dump($file->isCompressedGZ());
}
$p->compressAllFilesBZIP2();
foreach (
$p as $file) {
    
var_dump($file->getFileName());
    
var_dump($file->isCompressed());
    
var_dump($file->isCompressedBZIP2());
    
var_dump($file->isCompressedGZ());
}
?>

L'exemple ci-dessus va afficher :

string(10) "monfichier.txt"
bool(false)
bool(false)
bool(false)
string(11) "monfichier2.txt"
bool(false)
bool(false)
bool(false)
string(10) "monfichier.txt"
bool(true)
bool(true)
bool(false)
string(11) "monfichier2.txt"
bool(true)
bool(true)
bool(false)

Voir aussi



Phar::compressAllFilesGZ

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::compressAllFilesGZCompresse tous les fichiers de l'archive Phar courante en utilisant la compression Gzip

Description

bool Phar::compressAllFilesGZ ( void )

Note:

Cette méthode a été supprimée de l'extension phar depuis la version 2.0.0. Vous pouvez utiliser Phar::compress(), Phar::decompress(), Phar::compressFiles() et Phar::decompressFiles() à la place.

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Pour les archives phar basées sur tar, cette méthode compresse l'archive complète en utilisant la compression gzip. Le fichier qui en résulte peut être traité avec la commande gunzip, ou accédée directement et de façon transparente avec l'extension Phar.

Pour les archives phar basées sur Zip, cette méthode compresse tous les fichiers de l'archive Phar en utilisant la compression gzip. L'extension zlib doit être activée pour pouvoir bénéficier de cette fonctionnalité. De plus, si un ou des fichiers ont déjà été compressés en utilisant la compression bzip2, l'extension bzip2 doit être activée pour pouvoir décompresser les fichiers et les re-compresser avec l'algorithme gzip. Comme avec toutes les fonctionnalités qui modifient le contenu d'un phar, la variable INI phar.readonly doit être à off pour fonctionner.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Erreurs / Exceptions

Lève une exception BadMethodCallException si la variable INI phar.readonly est à on, si l'extension zlib n'est pas disponible, ou si un ou des fichiers ont déjà été compressés avec l'algorithme bzip2 et que l'extension bzip2 n'est pas activée.

Exemples

Exemple #1 Un exemple avec Phar::compressAllFilesGZ()

<?php
$p 
= new Phar('/chemin/vers/mon.phar'0'mon.phar');
$p['monfichier.txt'] = 'salut';
$p['monfichier2.txt'] = 'salut';
foreach (
$p as $file) {
    
var_dump($file->getFileName());
    
var_dump($file->isCompressed());
    
var_dump($file->isCompressedBZIP2());
    
var_dump($file->isCompressedGZ());
}
$p->compressAllFilesGZ();
foreach (
$p as $file) {
    
var_dump($file->getFileName());
    
var_dump($file->isCompressed());
    
var_dump($file->isCompressedBZIP2());
    
var_dump($file->isCompressedGZ());
}
?>

L'exemple ci-dessus va afficher :

string(10) "monfichier.txt"
bool(false)
bool(false)
bool(false)
string(11) "monfichier2.txt"
bool(false)
bool(false)
bool(false)
string(10) "monfichier.txt"
bool(true)
bool(false)
bool(true)
string(11) "monfichier22.txt"
bool(true)
bool(false)
bool(true)

Voir aussi



Phar::compressFiles

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::compressFilesCompresse tous les fichiers de l'archive Phar courante'

Description

void Phar::compressFiles ( int $compression )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Pour les archives phar basées sur tar, cette méthode lève une exception BadMethodCallException car la compression de fichier individuelle au sein d'une archive tar n'est pas supportée par le format de fichier. Utilisez Phar::compress() pour compresser une archive phar basée sur tar en entier.

Pour les extensions phar basées sur Zip, cette méthode compresse tous les fichiers de l'archive Phar en utilisant la compression spécifiée. Les extensions zlib ou bzip2 doivent être activée pour tirer parti de cette fonctionnalité. De plus, si un ou des fichiers ont déjà été compressé en utilisant la compression bzip2/zlib, l'extension adéquate doit être activée pour décompresser les fichiers avant de les recompresser. extensions must be enabled to take advantage of this feature. In addition, if any files are already compressed using bzip2/zlib compression, the respective extension must be enabled in order to decompress the files prior to re-compressing. Comme avec toutes les fonctionnalités qui modifient le contenu d'un phar, la variable INI phar.readonly doit être à off pour fonctionner.

Liste de paramètres

compression

La compression doit être soit Phar::GZ, soit Phar::BZ2 pour bénéficier de la compression, ou bien Phar::NONE pour éliminer la compression.

Valeurs de retour

Aucune valeur n'est retournée.

Erreurs / Exceptions

Lève une exception BadMethodCallException si la variable INI phar.readonly est à on, si l'extension zlib n'est pas disponible, ou si un ou des fichiers ont été compressés avec l'algorithme bzip2 et que l'extension bzip2 n'est pas activée.

Exemples

Exemple #1 Un exemple avec Phar::compressFiles()

<?php
$p 
= new Phar('/chemin/vers/mon.phar'0'mon.phar');
$p['monfichier.txt'] = 'salut';
$p['monfichier2.txt'] = 'salut';
foreach (
$p as $file) {
    
var_dump($file->getFileName());
    
var_dump($file->isCompressed());
    
var_dump($file->isCompressed(Phar::BZ2));
    
var_dump($file->isCompressed(Phar::GZ));
}
$p->compressFiles(Phar::GZ);
foreach (
$p as $file) {
    
var_dump($file->getFileName());
    
var_dump($file->isCompressed());
    
var_dump($file->isCompressed(Phar::BZ2));
    
var_dump($file->isCompressed(Phar::GZ));
}
?>

L'exemple ci-dessus va afficher :

string(10) "monfichier.txt"
bool(false)
bool(false)
bool(false)
string(11) "monfichier2.txt"
bool(false)
bool(false)
bool(false)
string(10) "monfichier.txt"
int(4096)
bool(false)
bool(true)
string(11) "monfichier2.txt"
int(4096)
bool(false)
bool(true)

Voir aussi



Phar::__construct

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::__constructConstruit un objet d'archive Phar

Description

Phar::__construct ( string $fname [, int $flags [, string $alias ]] )

Liste de paramètres

fname

Le chemin vers une archive Phar existante ou à créer

flags

Les drapeaux à passer à la classe parente RecursiveDirectoryIterator.

alias

Alias avec lequel on doit faire référence à l'archive lors de l'appels aux fonctionnalités de flux.

Erreurs / Exceptions

Lève une exception BadMethodCallException si la méthode est appelée deux fois, ou UnexpectedValueException si l'archive ne peut pas être ouverte.

Exemples

Exemple #1 Un exemple avec Phar::__construct()

<?php
try {
    
$p = new Phar('/path/to/my.phar'FilesystemIterator::CURRENT_AS_FILEINFO FilesystemIterator::KEY_AS_FILENAME,
                  
'mon.phar');
} catch (
UnexpectedValueException $e) {
    die(
'Ne peut pas ouvrir mon.phar');
} catch (
BadMethodCallException $e) {
    echo 
'techniquement, ça ne peut pas arriver';
}
// ça fonctionne maintenant
echo file_get_contents('phar://mon.phar/exemple.txt');
// et ça fonctionne comme si nous avions tapé
echo file_get_contents('phar:///chemin/vers/mon.phar/exemple.txt');
?>



Phar::convertToData

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::convertToDataConvertit une archive phar en un fichier non-exécutable

Description

PharData Phar::convertToData ([ int $format = 9021976 [, int $compression = 9021976 [, string $extension ]]] )

Convertit une archive phar exécutable en un fichier tar ou zip. Pour rendre le tar ou le zip non exécutable, le conteneur phar et l'alias phar sont supprimés de l'archive nouvellement créée.

Si aucun changement n'est spécifié, cette méthode émet une exception BadMethodCallException si l'archive est dans le format de fichier phar. Pour les archives basées sur tar ou zip, cette méthode convertit l'archive en une archive non exécutable.

En cas de succès, la méthode crée une nouvelle archive sur le disque et retourne un objet PharData. L'ancienne archive n'est pas supprimée du disque, ce qui devrait être fait manuellement à la fin du procédé.

Liste de paramètres

format

Ce doit être l'un des formats Phar::TAR ou Phar::ZIP. Si ce paramètre est NULL, le format de fichier actuel sera conservé.

compression

Ce doit être Phar::NONE pour aucune compression globale, Phar::GZ la une compression basée sur zlib et Phar::BZ2 pour une compression basée sur bzip2.

extension

Ce paramètre est utilisée pour écraser l'extension par défaut d'une archive convertie. A noter que .phar ne peut pas être utilisé dans le nom de fichier d'une archive tar ou zip non-exécutable.

Si on convertit vers une archive basée sur tar, les extensions par défaut sont .tar, .tar.gz, et .tar.bz2 selon la compression spécifiée. Pour les archives phar basées sur zip, l'extension par défaut est .zip.

Valeurs de retour

La méthode retourne un objet PharData en cas de succès et émet une exception en cas d'échec.

Erreurs / Exceptions

Cette méthode émet une exception BadMethodCallException si elle n'est pas capable de compresser, si une méthode de compression inconnue a été spécifiée ou si l'archive demandée a été mise en tampon avec Phar::startBuffering() sans être conclue avec Phar::stopBuffering(), et émet une exception PharException si un quelconque problème a été rencontré pendant la phase de création de l'archive.

Exemples

Exemple #1 Un exemple avec Phar::convertToData()

Utilisons Phar::convertToData():

<?php
try {
    
$tarphar = new Phar('monphar.phar.tar');
    
// notez bien que monphar.phar.tar n'est *pas* effacé
    // on convertit vers le format de fichier tar non exéctuable
    // crée monphar.tar
    
$tar $tarphar->convertToData();
    
// on convertit vers le format de fichier zip non exéctuable et crée monphar.zip
    
$zip $tarphar->convertToData(Phar::ZIP);
    
// crée monphar.tbz
    
$tgz $tarphar->convertToData(Phar::TARPhar::BZ2'.tbz');
    
// crée monphar.phar.tgz
    
$phar $tarphar->convertToData(Phar::PHAR); // émet une exception
} catch (Exception $e) {
    
// on traite les erreurs ici
}
?>

Voir aussi



Phar::convertToExecutable

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::convertToExecutableConvertit une archive phar vers un autre format de fichier d'archive phar exécutable

Description

Phar Phar::convertToExecutable ([ int $format = 9021976 [, int $compression = 9021976 [, string $extension ]]] )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Cette méthode est utilisée pour convertir une archive phar vers un autre format de fichier. Par exemple, elle peut être utilisée pour créer une archive phar basée sur tar en partant d'une archive phar basée sur zip ou à partir d'une archive phar exécutable basée sur le format de fichier phar. De plus, elle peut aussi être utilisée pour appliquer une compression globale à une archive basée sur tar ou sur phar.

Si aucun changement n'est précisé, cette méthode lève une exception BadMethodCallException.

En cas de succès, la méthode crée une nouvelle archive sur le disque et retourne un objet Phar. L'ancienne archive n'est pas supprimée du disque, ce qui devrait être fait manuellement à la fin du procédé.

Liste de paramètres

format

Ce doit être l'un des formats Phar::PHAR, Phar::TAR, ou Phar::ZIP. Si ce paramètre est NULL, le format de fichier actuel sera conservé.

compression

Ce doit être Phar::NONE pour aucune compression globale, Phar::GZ la une compression basée sur zlib et Phar::BZ2 pour une compression basée sur bzip2.

extension

Ce paramètre est utilisée pour écraser l'extension par défaut d'une archive convertie. A noter que toutes les archives phar basée sur zip ou sur tar doivent comporter .phar dans leur extension pour être traitées comme une archive phar.

Si on convertit vers une archive basée sur phar, les extensions par défaut sont .phar, .phar.gz, ou .phar.bz2 selon la compression spécifiée. Pour les archives phar basées sur tar, les extensions par défaut sont .phar.tar, .phar.tar.gz, et .phar.tar.bz2. Pour les archives phar basées sur zip, l'extension par défaut est .phar.zip.

Valeurs de retour

La méthode retourne un objet Phar en cas de succès et lève une exception en cas d'échec.

Erreurs / Exceptions

Cette méthode lève une exception BadMethodCallException si elle n'est pas capable de compresser, si une méthode de compression inconnue a été spécifiée ou si l'archive demandée a été mise en tampon avec Phar::startBuffering() sans être conclue avec Phar::stopBuffering(), lève une exception UnexpectedValueException si le support en écriture a été désactivé et lève une exception PharException si un quelconque problème a été rencontré pendant la phase de création de l'archive.

Exemples

Exemple #1 Un exemple avec Phar::convertToExecutable()

Utilisons Phar::convertToExecutable() :

<?php
try {
    
$tarphar = new Phar('monphar.phar.tar');
    
// on le convertit vers le format de fichier phar
    // notez bien que monphar.phar.tar n'est *pas* effacé
    
$phar $tarphar->convertToExecutable(Phar::PHAR); // crée monphar.phar
    
$phar->setStub($phar->createDefaultStub('cli.php''web/index.php'));
    
// crée monphar.phar.tgz
    
$compressed $phar->convertToExecutable(Phar::TARPhar::GZ'.phar.tgz');
} catch (
Exception $e) {
    
// on traite les erreurs ici
}
?>

Voir aussi



Phar::copy

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::copyCopie un fichier appartenant à une archive vers un autre fichier de la même archive

Description

bool Phar::copy ( string $oldfile , string $newfile )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Copie un fichier appartenant à une archive vers un nouveau fichier de la même archive. C'est une alternative orientée objet à l'utilisation de copy() avec un flux phar.

Liste de paramètres

oldfile

newfile

Valeurs de retour

Retourne TRUE en cas de succès, mais il est plus sûr d'encadrer l'appel à cette méthode dans un bloc try/catch et de considérer son succès si aucune exception n'est levée.

Erreurs / Exceptions

Lève une exception UnexpectedValueException si le fichier source n'existe pas, si le fichier destination existe déjà, si l'accès en écriture est désactivé, si ouvrir l'un ou l'autre des fichiers échoue, si la lecture du fichier source échoue, ou lève une exception PharException si l'écriture des changement dans le phar échoue.

Exemples

Exemple #1 Exemple avec Phar::copy()

Cet exemple montre comment utiliser Phar::copy() et la comparaison en terme de performance avec l'équivalent utilisant le flux phar. La différence principale entre les deux méthodes concerne la gestion des erreurs. Toutes les méthodes Phar lèvent des exceptions, là où les fonctions de flux utilisent trigger_error().

<?php
try {
    
$phar = new Phar('monphar.phar');
    
$phar['a'] = 'salut';
    
$phar->copy('a''b');
    echo 
$phar['b']; // affiche "salut"
} catch (Exception $e) {
    
// traite les erreurs
}

// l'équivalent en terme de flux du code ci-dessus
// des E_WARNING sont retournés plutôt que des exceptions
copy('phar://monphar.phar/a''phar//monphar.phar/c');
echo 
file_get_contents('phar://monphar.phar/c'); // affiche "salut"
?>



Phar::count

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::countRetourne le nombre d'entrées (fichiers) dans l'archive Phar

Description

int Phar::count ( void )

Liste de paramètres

Valeurs de retour

Le nombre de fichiers contenus dans le phar, ou 0 (le nombre zéro) si aucun.

Exemples

Exemple #1 Un exemple avec Phar::count()

<?php
// on s'assure que le phar n'existe pas
@unlink('lenouveauphar.phar');
try {
    
$p = new Phar(dirname(__FILE__) . '/lenouveauphar.phar'0'le nouveauphar.phar');
} catch (
Exception $e) {
    echo 
'Ne peut pas créer le phar:'$e;
}
echo 
'Le nouveau phar a ' $p->count() . " entrées\n";
$p['file.txt'] = 'salut';
echo 
'Le nouveau phar a ' $p->count() . " entrées\n";
?>

L'exemple ci-dessus va afficher :

Le nouveau phar a 0 entrées
Le nouveau phar a 1 entrées



Phar::createDefaultStub

(Unknown)

Phar::createDefaultStubCrée un conteneur de chargement d'une archive Phar

Description

string Phar::createDefaultStub ([ string $indexfile [, string $webindexfile ]] )

Cette méthode est destinée à la création de conteneurs spécifique au format de fichier phar et n'est pas conçue pour être utilisée avec des archives phar basées sur tar ou sur zip.

Les archives Phar contiennent un chargeur ou un conteneur écrit en PHP qui est exécuté quand l'archive est exécutée soit par une inclusion

<?php
include 'monphar.phar';
?>
ou par une simple exécution :
php monphar.phar
    

Cette méthode fournit un moyen simple et facile de créer un conteneur qui lancera un fichier de démarrage à partir de l'archive phar. En plus, des fichiers différents peuvent être spécifiés pour exécuter l'archive à partir de la ligne de commande ou d'un serveur web. Le conteneur de chargement appelle alors Phar::interceptFileFuncs() pour permettre l'empaquetage facile d'applications PHP accédant au système de fichiers. Si l'extension phar n'est pas présente, le conteneur de chargement extraira l'archive phar vers un répertoire temporaire et traitera les fichiers. Une fonction d'extinction effacera les fichier temporaires à la fin.

Valeurs de retour

Retourne une chaîne de caractères contenant un conteneur de chargement personnalisé qui permet à l'archive Phar créée de fonctionner avec ou sans l'extension Phar d'activée.

Erreurs / Exceptions

Lève une exception UnexpectedValueException si un des paramètres est plus long que 400 octets.

Exemples

Exemple #1 Exemple avec Phar::createDefaultStub()

<?php
try {
    
$phar = new Phar('monphar.phar');
    
$phar->setStub($phar->createDefaultStub('cli.php''web/index.php'));
} catch (
Exception $e) {
    
// traite les erreurs
}
?>

Voir aussi

  • Phar::setStub() - Utilisé pour spécifier le chargeur PHP ou le conteneur de chargement d'une archive Phar
  • Phar::getStub() - Retourne le chargeur PHP ou le conteneur de chargement d'une archive Phar



Phar::decompress

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::decompressDécompresse l'archive tar complète

Description

object Phar::decompress ([ string $extension ] )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Pour les archives phar basées sur tar et sur phar, cette méthode décompresse l'archive complète.

Pour les archives phar bases sur Zip, cette méthode échoue et lève une exception. L'extension zlib doit être active pour décompresser une archive compressée grâce à gzip, et l'extension bzip2 doit être active pour décompresser une archive compressée grâce à bzip2. Comme avec toutes les fonctionnalités qui modifient le coutenu d'un phar, la variable INI phar.readonly doit être à off pour fonctionner.

De plus, cette méthode change automatiquement l'extension de l'archive, .phar Par défaut pour les archives phar, ou .phar.tar pour les archives phar basées sur tar. Sinon, une extension de fichier peut aussi être spécifiée en utilisant le second paramètre.

Liste de paramètres

extension

Pour décompresser, les extension de fichier par défaut sont .phar et .phar.tar. Utilisez ce paramètre pour spécifier une autre extension de fichier. A noter que toutes les archives phar exécutables doivent contenir .phar dans leur nom de fichier.

Valeurs de retour

Un objet Phar est retourné.

Erreurs / Exceptions

Lève une exception BadMethodCallException si la variable INI phar.readonly est à on, si l'extension zlib n'est pas disponible, ou si l'extension bzip2 n'est pas activée.

Exemples

Exemple #1 Un exemple avec Phar::decompress()

<?php
$p 
= new Phar('/chemin/vers/mon.phar'0'mon.phar.gz');
$p['monfichier.txt'] = 'salut';
$p['monfichier.txt'] = 'salut';
$p3 $p2->decompress(); // crée /chemin/vers/mon.phar
?>

Voir aussi



Phar::decompressFiles

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::decompressFilesDécompresse tous les fichiers de l'archive Phar courante

Description

bool Phar::decompressFiles ( void )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Pour les archives phar basées sur tar, cette méthode lève une exception BadMethodCallException, car la compression individuelle des fichiers au sein d'une archive tar n'est pas supportée par le format de fichier. Utilisez Phar::compress() pour compresser en archive phar basée sur tar en entier.

Pour les archives phar basées sur Zip ou sur phar, cette méthode décompresse tous les fichiers de l'archive Phar. Les extensions zlib ou bzip2 doivent être activées pour tirer parti de cette fonctionnalité si n'importe lequel des fichiers est compressé en utilisant une la compression bzip2/zlib. Comme avec toutes les fonctionnalités qui modifient le contenu d'un phar, la variable INI phar.readonly doit être à off pour fonctionner.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Erreurs / Exceptions

Lève une exception BadMethodCallException si la variable INI phar.readonly est à on, si l'extension zlib n'est pas disponible ou si un des fichiers est compressé en utilisant la compression bzip2 et que l'extension bzip2 n'est pas activée.

Exemples

Exemple #1 Un exemple avec Phar::decompressFiles()

<?php
$p 
= new Phar('/chemin/vers/mon.phar'0'mon.phar');
$p['monfichier.txt'] = 'salut';
$p['monfichier2.txt'] = 'salut';
$p->compressFiles(Phar::GZ);
foreach (
$p as $file) {
    
var_dump($file->getFileName());
    
var_dump($file->isCompressed());
    
var_dump($file->isCompressed(Phar::BZ2));
    
var_dump($file->isCompressed(Phar::GZ));
}
$p->decompressFiles();
foreach (
$p as $file) {
    
var_dump($file->getFileName());
    
var_dump($file->isCompressed());
    
var_dump($file->isCompressed(Phar::BZ2));
    
var_dump($file->isCompressed(Phar::GZ));
}
?>

L'exemple ci-dessus va afficher :

string(10) "monfichier.txt"
int(4096)
bool(false)
bool(true)
string(11) "monfichier2.txt"
int(4096)
bool(false)
bool(true)
string(10) "monfichier.txt"
bool(false)
bool(false)
bool(false)
string(11) "monfichier2.txt"
bool(false)
bool(false)
bool(false)

Voir aussi



Phar::delMetadata

(PHP >= 5.3.0, PECL phar >= 1.2.0)

Phar::delMetadataEfface les méta-données globales du phar

Description

bool Phar::delMetadata ( void )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Efface les méta-données globales du phar

Liste de paramètres

Valeurs de retour

retourne TRUE en cas de succès, mais il est plus sûr de vérifier si des exceptions sont levées, et de considérer que tout s'est bien passé si aucune n'est levée.

Erreurs / Exceptions

Lève une exception PharException si des erreurs apparaissent pendant l'écriture sur le disque.

Exemples

Exemple #1 Un exemple avec Phar::delMetaData()

<?php
try {
    
$phar = new Phar('monphar.phar');
    
var_dump($phar->getMetadata());
    
$phar->setMetadata("salut");
    
var_dump($phar->getMetadata());
    
$phar->delMetadata();
    
var_dump($phar->getMetadata());
} catch (
Exception $e) {
    
// traite les erreurs
}
?>

L'exemple ci-dessus va afficher :

NULL
string(8) "salut"
NULL

Voir aussi



Phar::delete

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::deleteEfface un fichier au sein d'une archive phar

Description

bool Phar::delete ( string $entry )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Efface une fichier au sein d'une archive phar. C'est l'équivalent fonctionnel de l'appel à unlink() dans un contexte de flux, comme décrit dans l'exemple suivant...

Liste de paramètres

entry

Chemin du fichier à effacer au sein de l'archive.

Valeurs de retour

retourne TRUE en cas de succès, mais il est plus sûr de vérifier si des exceptions sont levées, et de considérer que tout s'est bien passé si aucune n'est levée.

Erreurs / Exceptions

Lève une exception PharException si des erreurs apparaissent pendant l'écriture sur le disque.

Exemples

Exemple #1 Un exemple avec Phar::delete()

<?php
try {
    
$phar = new Phar('monphar.phar');
    
$phar->delete('efface/moi.php');
    
// c'est équivalent à :
    
unlink('phar://monphar.phar/efface/moi.php');
} catch (
Exception $e) {
    
// traite les erreurs
}
?>

Voir aussi



Phar::extractTo

(Unknown)

Phar::extractToExtrait le contenu d'une archive phar vers un répertoire

Description

bool Phar::extractTo ( string $pathto [, string|array $files [, bool $overwrite = false ]] )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Extrait tous les fichiers d'une archive phar vers le disque. Les fichiers et les dossiers extraits conservent les permissions à l'identique de l'intérieur de l'archive. Les paramètres optionnels permettent un éventuel contrôle sur quel fichier est extrait et si des fichiers déjà existants sur le disque peuvent être écrasés. Le second paramètre files peut être soit le nom d'un fichier ou d'un répertoire, soit un tableau de noms de fichiers et de répertoires à extraire. Par défaut, cette méthode n'écrasant pas les fichiers existants, le troisième paramètre peut être passé à TRUE pour activer l'écrasement de fichiers. Cette méthode est identique à ZipArchive::extractTo().

Liste de paramètres

pathto

Chemin du fichier à effacer au sein de l'archive.

files

Le nom d'un fichier ou d'un répertoire ou un tableau de fichiers/répertoires à extraire

overwrite

Le passer à TRUE pour activer l'écrasement des fichiers existants

Valeurs de retour

retourne TRUE en cas de succès, mais il est plus sûr de vérifier si des exceptions sont levées, et de considérer que tout s'est bien passé si aucune n'est levée.

Erreurs / Exceptions

Lève une exception PharException si des erreurs apparaissent pendant l'écriture sur le disque.

Exemples

Exemple #1 Un exemple avec Phar::extractTo()

<?php
try {
    
$phar = new Phar('monphar.phar');
    
$phar->extractTo('/chemin/complet'); // extrait tous les fichiers
    
$phar->extractTo('/autre/chemin''fichier.txt'); // extrait seulement fichier.txt
    
$phar->extractTo('/ce/chemin',
        array(
'fichier1.txt''fichier2.txt')); // extrait seulement 2 fichiers
    
$phar->extractTo('/troisieme/chemin'nulltrue); // extrait tous les fichiers, en écrasant
} catch (Exception $e) {
    
// traite les erreurs
}
?>

Voir aussi



Phar::getMetadata

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::getMetadataRetourne les méta-données de l'archive phar

Description

mixed Phar::getMetadata ( void )

Récupère les méta-données de l'archive. Celles-ci peuvent être n'importe quelle variable PHP pouvant être sérialisée.

Liste de paramètres

Aucun paramètre.

Valeurs de retour

n'importe quelle variable PHP pouvant être sérialisée et qui est stockée comme méta-donnée de l'archive Phar, ou NULL si aucune méta-donnée n'est stockée.

Exemples

Exemple #1 Un exemple avec Phar::getMetadata()

<?php
// on s'assure que le phar n'existe pas
@unlink('nouveauphar.phar');
try {
    
$p = new Phar(dirname(__FILE__) . '/nouveauphar.phar'0'nouveauphar.phar');
    
$p['fichier.php'] = '<?php echo "salut";';
    
$p->setMetadata(array('bootstrap' => 'fichier.php'));
    
var_dump($p->getMetadata());
} catch (
Exception $e) {
    echo 
'Ne peut pas modifier le phar :'$e;
}
?>

L'exemple ci-dessus va afficher :

array(1) {
  ["bootstrap"]=>
  string(8) "fichier.php"
}

Voir aussi



Phar::getModified

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::getModifiedIndique si le fichier phar a été modifié

Description

bool Phar::getModified ( void )

Détermine si une archive phar a eu soit un fichier interne effacé ou si le contenu d'un fichier a changé d'une façon ou d'une autre.

Liste de paramètres

Aucun paramètre.

Valeurs de retour

TRUE si le phar a été modifié depuis son ouverture, FALSE sinon.



Phar::getSignature

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::getSignatureRetourne la signature MD5/SHA1/SHA256/SHA512 d'une archive Phar

Description

array Phar::getSignature ( void )

Retourne la signature de vérification d'une archive phar sous forme d'une chaîne de caractères hexadécimale.

Liste de paramètres

Valeurs de retour

Un tableau avec la signature de l'archive ouverte avec le hash en guise de clé et "MD5", "SHA-1", "SHA-256" ou "SHA-512" comme hash_type. Cette signature est un hachage calculé à partir du contenu de l'archive entière; elle peut être utilisée pour vérifier l'intégrité de l'archive. Une signature valide est absolument requise pour toutes les archives phar exécutables si la variable INI phar.require_hash vaut TRUE.



Phar::getStub

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::getStubRetourne le chargeur PHP ou le conteneur de chargement d'une archive Phar

Description

string Phar::getStub ( void )

Les archives phar contiennent un chargeur, ou conteneur (stub), écrit en PHP qui est exécuté quand l'archive elle-même est exécutée soit par inclusion :

<?php
include 'monphar.phar';
?>
soit par simple exécution :
php monphar.phar
    

Valeurs de retour

Retourne une chaîne de caractères avec le contenu du conteneur de chargement (stub) de l'archive phar courante.

Erreurs / Exceptions

Lève une exception RuntimeException s'il n'est pas possible de lire le conteneur de chargement de l'archive Phar.

Exemples

Exemple #1 Exemple avec Phar::getStub()

<?php
$p 
= new Phar('/chemin/vers/mon.phar'0'mon.phar');
echo 
$p->getStub();
echo 
"==SUIVANT==\n";
$p->setStub("<?php
function __autoload(
$class)
{
    include 'phar://' . str_replace('_', '/', 
$class);
}
Phar::mapPhar('monphar.phar');
include 'phar://monphar.phar/demarrage.php';
__HALT_COMPILER(); ?>"
);
echo 
$p->getStub();
?>

L'exemple ci-dessus va afficher :

<?php __HALT_COMPILER(); ?>
==SUIVANT==
<?php
function __autoload($class)
{
    include 'phar://' . str_replace('_', '/', $class);
}
Phar::mapPhar('monphar.phar');
include 'phar://monphar.phar/demarrage.php';
__HALT_COMPILER(); ?>

Voir aussi



Phar::getSupportedCompression

(PHP >= 5.3.0, PECL phar >= 1.2.0)

Phar::getSupportedCompressionRetourne un tableau des algorithmes de compression supportés

Description

array Phar::getSupportedCompression ( void )

Liste de paramètres

Aucun paramètre.

Valeurs de retour

Retourne un tableau contenant l'un des algorithmes Phar::GZ ou Phar::BZ2, selon la disponibilité de l'extension zlib ou de l'extension bz2.

Voir aussi



Phar::getSupportedSignatures

(PHP >= 5.3.0, PECL phar >= 1.1.0)

Phar::getSupportedSignaturesRetourne un tableau des types de signature supportés

Description

array Phar::getSupportedSignatures ( void )

Retourne un tableau des types de signature supportés

Liste de paramètres

Aucun paramètre.

Valeurs de retour

Retourne un tableau contenant un ou plusieurs des types MD5, SHA-1, SHA-256, SHA-512.

Voir aussi



Phar::getVersion

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::getVersionRetourne les informations de version de l'archive Phar

Description

string Phar::getVersion ( void )

Retourne la version de l'API d'une archive Phar ouverte.

Liste de paramètres

Valeurs de retour

La version de l'API de l'archive ouverte. A ne pas confondre avec la version dAPI que l'extension phar chargée utilisera pour créer de nouveaux phar. Chaque archive Phar a la version d'API codée en dur dans son manifeste. Pour davantage d'information, regardez le format de fichier Phar.

Voir aussi



Phar::hasMetadata

(PHP >= 5.3.0, PECL phar >= 1.2.0)

Phar::hasMetadataDétermine si le phar a ou non des méta-données

Description

bool Phar::hasMetadata ( void )

Détermine si le phar a ou non des méta-données.

Liste de paramètres

Aucun paramètre.

Valeurs de retour

Retourne TRUE si des méta-données sont présentes, FALSE sinon.

Exemples

Exemple #1 Un exemple avec Phar::hasMetadata()

<?php
try {
    
$phar = new Phar('monphar.phar');
    
var_dump($phar->hasMetadata());
    
$phar->setMetadata(array('deschoses' => 'salut'));
    
var_dump($phar->hasMetadata());
    
$phar->delMetadata();
    
var_dump($phar->hasMetadata());
} catch (
Exception $e) {
    
// traite les erreurs
}
?>

L'exemple ci-dessus va afficher :

bool(false)
bool(true)
bool(false)

Voir aussi



Phar::interceptFileFuncs

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::interceptFileFuncsInforme phar qu'il doit intercepter les fonctions de fichiers

Description

void Phar::interceptFileFuncs ( void )

Informe phar d'intercepter fopen(), readfile(), file_get_contents(), opendir() et toutes les fonctions relatives à stat. Si n'importe laquelle de ces fonctions est appelée depuis l'archive phar avec un chemin relatif, l'appel est modifié pour accéder à un fichier au sein de l'archive. Les chemins absolus sont supposés être des tentatives de chargement de fichiers externes à partir du système de fichiers.

Cette fonction rend possible l'exécution d'applications PHP conçues pour être lancées en dehors d'un disque dur, en tant qu'application phar.

Liste de paramètres

Aucun paramètre.

Valeurs de retour

Exemples

Exemple #1 Exemple avec Phar::interceptFileFuncs()

<?php
Phar
::interceptFileFuncs();
include 
'phar://' __FILE__ '/fichier.php';
?>

En supposant que ce phar est nommé /chemin/vers/monphar.phar est qu'il contient fichier.php et fichier2.txt, si fichier.php contient ce code :

Exemple #2 Un exemple avec Phar::interceptFileFuncs()

<?php
echo file_get_contents('fichier2.txt');
?>

Normalement, PHP chercherait dans le répertoire courant le fichier nommé file2.txt, c'est à dire dans le répertoire de fichier.php ou le répertoire courant de l'utilisateur de la ligne de commande. Phar::interceptFileFuncs() dit à PHP de considérer phar:///chemin/vers/monphar.phar/ comme répertoire courant et ainsi ouvre dans l'exemple ci-dessus le fichier phar:///chemin/vers/monphar.phar/fichier2.txt.



Phar::isBuffering

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::isBufferingDétermine si les opérations d'écriture du Phar sont mises en tampons ou sont directement inscrites sur le disque

Description

bool Phar::isBuffering ( void )

Cette méthode peut être utilisée pour déterminer si un Phar sauvera ses changements immédiatement sur le disque ou si un appel à la fonction Phar::stopBuffering() est nécessaire pour inscrire les modifications.

La mise en tampon de l'écriture du Phar se fait par archive; la mise en tampon de l'archive Pharfoo.phar n'affecte en rien les changements faits sur l'archive Phar bar.phar.

Valeurs de retour

Retourne TRUE si les opérations d'écriture sont mises en tampons, FALSE sinon.

Exemples

Exemple #1 Un exemple avec Phar::isBuffering()

<?php
$p 
= new Phar(dirname(__FILE__) . '/nouveauphar.phar'0'nouveauphar.phar');
$p2 = new Phar('pharexistant.phar');
$p['fichier1.txt'] = 'salut';
var_dump($p->isBuffering());
var_dump($p2->isBuffering());
?>
=2=
<?php
$p
->startBuffering();
var_dump($p->isBuffering());
var_dump($p2->isBuffering());
$p->stopBuffering();
?>
=3=
<?php
var_dump
($p->isBuffering());
var_dump($p2->isBuffering());
?>

L'exemple ci-dessus va afficher :

bool(false)
bool(false)
=2=
bool(true)
bool(false)
=3=
bool(false)
bool(false)

Voir aussi

  • Phar::startBuffering() - Démarre la mise en tampon de écritures Phar, ne modifie pas l'objet Phar sur le disque
  • Phar::stopBuffering() - Arrête la mise en tampon des écritures Phar et provoque l'écriture que le disque



Phar::isCompressed

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::isCompressedRetourne Phar::GZ ou PHAR::BZ2 si l'archive entière est compressée (.tar.gz/tar.bz, etc)

Description

mixed Phar::isCompressed ( void )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Retourne Phar::GZ ou PHAR::BZ2 si l'archive entière est compressée (.tar.gz/tar.bz, etc). Les archives phar basées sur Zip ne peuvent pas être compressées en tant que fichier, et cette méthode retournera toujours FALSE si une archive phar basée sur Zip est interrogée.

Liste de paramètres

Aucun paramètre.

Valeurs de retour

Phar::GZ, Phar::BZ2 ou FALSE

Exemples

Exemple #1 Exemple avec Phar::isCompressed()

<?php
try {
    
$phar1 = new Phar('monphar.zip.phar');
    
var_dump($phar1->isCompressed());
    
$phar2 = new Phar('monpharnoncompresse.tar.phar');
    
var_dump($phar2->isCompressed());
    
$phar2->compressAllFilesGZ();
    
var_dump($phar2->isCompressed() == Phar::GZ);
} catch (
Exception $e) {
}
?>

L'exemple ci-dessus va afficher :

bool(false)
bool(false)
bool(true)

Voir aussi



Phar::isFileFormat

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::isFileFormatRetourne TRUE si l'archive phar est basée sur le formats de fichier tar/phar/zip selon le paramètre

Description

bool Phar::isFileFormat ( int $format )

Liste de paramètres

format

Soit Phar::PHAR, soit Phar::TAR, soit Phar::ZIP pour tester le format de fichier de l'archive.

Valeurs de retour

Retourne TRUE si l'archive phar utilise le format de fichier spécifié en paramètre

Erreurs / Exceptions

Une exception PharException est levée sur le paramètre est un format de fichier inconnu.

Voir aussi



Phar::isValidPharFilename

(PHP >= 5.3.0, PECL phar >= 1.2.0)

Phar::isValidPharFilenameDétermine si le nom de fichier spécifié est un nom de fichier valide pour une archive phar

Description

bool Phar::isValidPharFilename ( string $filename [, bool $executable = true ] )

Détermine si le nom de fichier spécifié est une nom de fichier valide pour une archive phar, qui sera reconnue comme telle par l'extension phar. Ceci peut être utilisé pour tester un nom sans avoir à instancier une archive phar et à attraper l'inévitable Exception qui sera levée si un nom de fichier non valide est spécifié.

Liste de paramètres

filename

Le nom ou le chemin complet vers une archive phar non encore créée

executable

Ce paramètre détermine si le nom de fichier doit être traité comme celui d'une archive phar exécutable ou comme une archive de données non exécutable.

Valeurs de retour

Retourne TRUE si le nom de fichier est valide, FALSE sinon.



Phar::isWritable

(Unknown)

Phar::isWritableRetourne TRUE si l'archive phar peut être modifiée

Description

bool Phar::isWritable ( void )

Cette méthode retourne TRUE si phar.readonly est à 0 et que l'archive phar actuelle sur le disque n'est pas en lecture seule.

Liste de paramètres

Aucun paramètre.

Valeurs de retour

Retourne TRUE si l'archive phar peut être modifiée

Voir aussi



Phar::loadPhar

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::loadPharCharge n'importe quelle archive phar avec un alias

Description

bool Phar::loadPhar ( string $filename [, string $alias ] )

Cette méthode peut être utilisée pour lire le contenu d'une archive Phar externe. C'est principalement utile pour assigner un alias à un phar de telle façon que les références ultérieures au phar puissent être faites à l'aide d'un alias plus court ou pour charger des archives Phar qui contiennent seulement des données et qui ne sont pas destinées à être exécutées/incluses dans des scripts PHP.

Liste de paramètres

filename

le chemin relatif ou absolu vers l'archive phar à ouvrir

alias

L'alias qui pourra être utilisé pour se référer à l'archive phar. Notez que de nombreuses archives phar spécifient un alias explicite au sein de l'archive phar, et une exception PharException sera levée si un nouvel alias est spécifié dans ce cas.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Erreurs / Exceptions

Une exceptionPharException est levée si un alias est passé alors que l'archive phar a déjà un alias explicite

Exemples

Exemple #1 Un exemple avec Phar::loadPhar()

Phar::loadPhar peut être utilisée n'importe où pour charger une archive phar externe alors que Phar::mapPhar devrait être utilisée dans un conteneur de chargement pour un Phar.

<?php
try {
    
Phar::loadPhar('/chemin/vers/phar.phar''mon.phar');
    echo 
file_get_contents('phar://mon.phar/fichier.txt');
} catch (
PharException $e) {
    echo 
$e;
}
?>

Voir aussi



Phar::mapPhar

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::mapPharLit le phar exécuté et charge son manifeste

Description

bool Phar::mapPhar ([ string $alias [, int $dataoffset = 0 ]] )

Cette méthode statique peut être utilisée seulement au sein du conteneur de chargement d'une archive Phar pour initialiser le phar quand il est exécuté directement ou quand il est inclus dans un autre script.

Liste de paramètres

alias

L'alias qui peut être utilisé dans l'URL phar:// pour se référer à l'archive plutôt que d'utiliser son chemin complet.

dataoffset

Variable inutilisée, présente par souci de compatibilité avec la bibliothèque PHP_Archive de PEAR.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Erreurs / Exceptions

Une exception PharException est levée si la méthode n'est pas appelée directement au sein de l'exécution de PHP, si aucun jeton __HALT_COMPILER(); n'est trouvé dans le fichier source actuel ou si le fichier ne peut pas être ouvert en lecture.

Exemples

Exemple #1 Exemple avec Phar::mapPhar()

mapPhar ne doit être utilisé qu'au sein du conteneur de chargement d'un phar. Utilisez loadPhar pour charger un phar externe en mémoire.

Voici un exemple de conteneur de chargement Phar qui utilise mapPhar.

<?php
function __autoload($class)
{
    include 
'phar://mon.phar/' str_replace('_''/'$class) . '.php';
}
try {
    
Phar::mapPhar('mon.phar');
    include 
'phar://mon.phar/demarrage.php';
} catch (
PharException $e) {
    echo 
$e->getMessage();
    die(
'Ne peut pas initialiser le Phar');
}
__HALT_COMPILER();

Voir aussi



Phar::mount

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::mountMonte un chemin ou un fichier externe à un emplacement virtuel au sein de l'archive phar

Description

void Phar::mount ( string $pharpath , string $externalpath )

Tout comme le concept unix de montage d'un périphérique externe à un endroit de l'arborescence, Phar::mount() permet de se référer à des fichiers et des répertoires externes comme s'ils étaient à l'intérieur de l'archive.

Liste de paramètres

pharpath

Le chemin interne au sein de l'archive phar à utiliser en tant que point de montage. Doit être un chemin relatif dans l'archive phar, et ne doit pas déjà exister.

externalpath

Un chemin ou une URL vers un fichier ou un répertoire externe à monter au sein de l'archive

Valeurs de retour

Aucun retour. Une exception PharException est levée en cas d'échec.

Erreurs / Exceptions

Lève une exception PharException si un problème est rencontré lors du montage.

Exemples

Exemple #1 Un exemple avec Phar::mount()

L'exemple suivant présente l'accès à un fichier de configuration externe comme s'il était un chemin au sein de l'archive phar.

Tout d'abord, le code au sein de l'archive phar :

<?php
$configuration 
simplexml_load_string(file_get_contents(
    
Phar::running(false) . '/config.xml'));
?>

Ensuite le code externe utilisé pour monter le fichier de configuration :

<?php
// on commence par configurer l'association entre le fichier config.xml abstrait
// et celui sur le disque
Phar::mount('phar://config.xml''/home/example/config.xml');
// on lance maintenant l'application
include '/chemin/vers/archive.phar';
?>

Une autre méthode est de mettre le code de montage au sein du conteneur de chargement de l'archive phar. Voici un exemple pour configurer un fichier de configuration par défaut si aucune configuration utilisateur n'est faite :

<?php
// on commence par configurer l'association entre le fichier config.xml abstrait
// et celui sur le disque
if (defined('EXTERNAL_CONFIG')) {
    
Phar::mount('config.xml'EXTERNAL_CONFIG);
    if (
file_exists(__DIR__ '/extra_config.xml')) {
        
Phar::mount('extra.xml'__DIR__ '/extra_config.xml');
    }
} else {
    
Phar::mount('config.xml''phar://' __FILE__ '/default_config.xml');
    
Phar::mount('extra.xml''phar://' __FILE__ '/default_extra.xml');
}
// on lance maintenant l'application
include 'phar://' __FILE__ '/index.php';
__HALT_COMPILER();
?>

... et le code externe pour charger cette archive phar :

<?php
define
('EXTERNAL_CONFIG''/home/exemple/config.xml');
// on lance maintenant l'application
include '/chemin/vers/archive.phar';
?>



Phar::mungServer

(Unknown)

Phar::mungServerDéfinit une liste de maximum 4 variables $_SERVER qui doivent être modifiées lors de l'exécution

Description

void Phar::mungServer ( array $munglist )

Phar::mungServer() doit être appelée seulement dans le conteneur de chargement d'une archive phar.

Définit une liste de maximum 4 variables $_SERVER qui doiventt être modifiées lors de l'exécution. Les variables qui peuvent être modifiées pour effacer les traces de l'exécution phar sont REQUEST_URI, PHP_SELF, SCRIPT_NAME et SCRIPT_FILENAME.

Seule, cette méthode ne fait rien. Elle prend effet seulement quand elle est combinée à Phar::webPhar() et seulement si le fichier demandé est un fichier PHP à parser. Notez que les variables PATH_INFO et PATH_TRANSLATED sont toujours modifiées.

Les valeurs de départ des variables qui sont modifiées sont stockées dans le tableau SERVER avec le préfixe PHAR_ et donc par exemple SCRIPT_NAME sera stockée en tant que PHAR_SCRIPT_NAME.

Liste de paramètres

munglist

un tableau contenant n'importe laquelle des variables REQUEST_URI, PHP_SELF, SCRIPT_NAME et SCRIPT_FILENAME en tant qu'indices de chaînes de caractères. Les autres valeurs déclenchent une exception et Phar::mungServer() est sensible à la casse.

Valeurs de retour

Aucun retour.

Erreurs / Exceptions

Lève une exception UnexpectedValueException si un quelconque problème est trouvé dans les données passées.

Exemples

Exemple #1 Un exemple avec Phar::mungServer()

<?php
// exemple de conteneur
Phar::mungServer(array('REQUEST_URI'));
Phar::webPhar();
__HALT_COMPILER();
?>

Voir aussi

  • Phar::webPhar() - mapPhar pour les phars orientés web. Contrôleur pour les applications web
  • Phar::setStub() - Utilisé pour spécifier le chargeur PHP ou le conteneur de chargement d'une archive Phar



Phar::offsetExists

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::offsetExistsdétermine si un fichier existe dans le phar

Description

bool Phar::offsetExists ( string $offset )

C'est une implémentation de l'interface ArrayAccess qui permet la manipulation directe du contenu d'une archive Phar en utilisant les crochets d'accès au tableau.

offsetExists() est appelé comme isset() est appelé.

Liste de paramètres

offset

Le nom de fichier (en chemin relatif) à chercher dans le Phar.

Valeurs de retour

Retourne TRUE si le fichier existe dans le phar, FALSE sinon.

Exemples

Exemple #1 Un exemple avec Phar::offsetExists()

<?php
$p 
= new Phar(dirname(__FILE__) . '/mon.phar'0'mon.phar');
$p['premierfichier.txt'] = 'premier fichier';
$p['secondfichier.txt'] = 'second fichier';
// les lignes suivantes font appel à offsetExists() de façon indirecte
var_dump(isset($p['premierfichier.txt']));
var_dump(isset($p['pasla.txt']));
?>

L'exemple ci-dessus va afficher :

bool(true)
bool(false)

Voir aussi



Phar::offsetGet

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::offsetGetObtient un objet PharFileInfo à partir d'un fichier

Description

int Phar::offsetGet ( string $offset )

C'est une implémentation de l'interface ArrayAccess qui permet la manipulation directe du contenu d'une archive Phar en utilisant les crochets d'accès au tableau. Phar::offsetGet() est utilisé pour extraire des fichiers d'une archive Phar.

Liste de paramètres

offset

Le nom de fichier (en chemin relatif) à chercher dans le Phar.

Valeurs de retour

Un objet PharFileInfo est retourné et peut être utilisé pour intégrer le contenu d'un fichier ou pour récupérer des informations sur le fichier courant.

Erreurs / Exceptions

Cette méthode émet une exception BadMethodCallException si le fichier n'existe pas dans l'archive Phar.

Exemples

Exemple #1 Exemple avec Phar::offsetGet()

Comme avec toutes les classes qui implémentent l'interface ArrayAccess, Phar::offsetGet() est automatiquement appelée quand les crochets d'accès à un tableau sont utilisés ([]).

<?php
$p 
= new Phar(dirname(__FILE__) . '/monphar.phar'0'monphar.phar');
$p['existe.txt'] = "le fichier existe\n";
try {
    
// appelle automatiquement offsetGet()
    
echo $p['existe.txt'];
    echo 
$p['nexistepas.txt'];
} catch (
BadMethodCallException $e) {
    echo 
$e;
}
?>

L'exemple ci-dessus va afficher :

le fichier existe
Entry nexistepas.txt does not exist

Voir aussi



Phar::offsetSet

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::offsetSetmet le contenu d'un fichier interne à l'archive à l'identique du contenu d'un fichier externe

Description

void Phar::offsetSet ( string $offset , string $value )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

C'est une implémentation de l'interface ArrayAccess qui permet la manipulation directe du contenu d'une archive Phar en utilisant les crochets d'accès au tableau. offsetSet est utilisé pour modifier un fichier existant ou pour ajouter un nouveau fichier à l'archive Phar.

Liste de paramètres

offset

Le nom de fichier (en chemin relatif) à chercher dans le Phar.

value

Contenu du fichier.

Valeurs de retour

Aucune valeur de retour.

Erreurs / Exceptions

Si phar.readonly est à 1, une exception BadMethodCallException est levée, car modifier un Phar n'est permis que quand phar.readonly est à 0. Une exception PharException est levée s'il y a eu un problème lors de l'écriture des changements de l'archive Phar sur le disque.

Exemples

Exemple #1 Un exemple avec Phar::offsetSet()

offsetSet ne doit pas être accédé directement, mais plutôt via l'opérateur d'accès au tableau, [].

<?php
$p 
= new Phar('/chemin/vers/mon.phar'0'mon.phar');
try {
    
// appelle offsetSet
    
$p['fichier.txt'] = 'Salut';
} catch (
Exception $e) {
    echo 
'Ne peut pas modifier fichier.txt:'$e;
}
?>

Voir aussi



Phar::offsetUnset

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::offsetUnsetEfface un fichier d'un phar

Description

bool Phar::offsetUnset ( string $offset )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

C'est une implémentation de l'interface ArrayAccess qui permet la manipulation directe du contenu d'une archive Phar en utilisant les crochets d'accès au tableau. offsetUnset est utilisé pour supprimer un fichier existant et est appelé par la fonction unset().

Liste de paramètres

offset

Le nom de fichier (en chemin relatif) à chercher dans le Phar.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Erreurs / Exceptions

Si phar.readonly est à 1, une exception BadMethodCallException est levée, car modifier un Phar n'est permis que quand phar.readonly est à 0.Une exception PharException est levée s'il y a eu un problème lors de l'écriture des changements de l'archive Phar sur le disque.

Exemples

Exemple #1 Un exemple avec Phar::offsetUnset()

<?php
$p 
= new Phar('/chemin/vers/mon.phar'0'mon.phar');
try {
    
// efface fichier.txt de mon.phar en appelant offsetUnset
    
unset($p['fichier.txt']);
} catch (
Exception $e) {
    echo 
'Ne peut pas effacer fichier.txt: '$e;
}
?>

Voir aussi



Phar::running

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::runningRetourne le chemin complet sur le disque ou l'URL phar complète de l'archive phar couramment exécutée

Description

string Phar::running ([ bool $retphar = true ] )

Retourne le chemin complet de l'archive phar exécutée. C'est bien entendu utilisé un peu comme la constante magique __FILE__ et a des effets uniquement au sein d'une archive phar en train d'être exécutée.

Dans le conteneur de chargement d'une archive, Phar::running() retourne "". Utilisez simplement __FILE__ pour accéder au phar courant au sein d'un conteneur de chargement.

Liste de paramètres

retphar

Si FALSE, le chemin complet sur le disque vers le phar est retourné. Si TRUE, une URL phar complète est retournée.

Valeurs de retour

Retourne le chemin de fichier si valide, sinon une chaîne vide.

Exemples

Exemple #1 Un exemple avec Phar::running()

Pour l'exemple suivant, on suppose que le fichier phar est /chemin/vers/mon.phar.

<?php
$a 
Phar::running(); // $a vaut "phar:///chemin/vers/mon.phar"
$b Phar::running(false); // $b vaut "/chemin/vers/mon.phar"
?>



Phar::setAlias

(PHP >= 5.3.0, PECL phar >= 1.2.1)

Phar::setAliasFixe l'alias de l'archive Phar

Description

bool Phar::setAlias ( string $alias )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Fixe l'alias de l'archive Phar et l'écrit en tant qu'alias permanent de cette archive phar. Un alias peut être utilisé à l'intérieur d'une archive phar pour s'assurer que l'utilisation du flux phar pour accéder à des fichiers internes fonctionnera toujours quelque soit l'emplacement de l'archive phar sur le système de fichiers. Une alternative consiste à se fier à l'interception de include faite par Phar ou d'utiliser Phar::interceptFileFuncs() et d'utiliser des chemins relatifs.

Liste de paramètres

alias

Une petite chaîne avec laquelle on se référera à cette archive lors des accès avec le flux phar.

Valeurs de retour

Erreurs / Exceptions

Une exception UnexpectedValueException est levée quand l'accès en écriture est désactivé et une exception PharException est levée si l'alias est déjà utilisé ou si un problème a été rencontré lors de l'écriture des changements sur le disque.

Exemples

Exemple #1 Un exemple avec Phar::setAlias()

<?php
try {
    
$phar = new Phar('monphar.phar');
    
$phar->setAlias('monp.phar');
} catch (
Exception $e) {
    
// traite les erreurs
}
?>

Voir aussi



Phar::setDefaultStub

(Unknown)

Phar::setDefaultStubUtilisé pour fixer le chargeur PHP ou le conteneur de chargement d'une archive Phar en tant que chargeur par défaut

Description

bool Phar::setDefaultStub ([ string $index [, string $webindex ]] )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Cette méthode est un raccourci qui combine les fonctionnalités de Phar::createDefaultStub() et de Phar::setStub().

Liste de paramètres

index

Chemin relatif au sein de l'archive phar a exécuter si lancée à partir de la ligne de commande

webindex

Chemin relatif au sein de l'archive phar a exécuter si lancée à partir d'un navigateur

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Erreurs / Exceptions

Une exception UnexpectedValueException est levée si phar.readonly est activée dans le php.ini. Une exception PharException est levée si des problèmes sont rencontrés lors de l'écriture des changements sur disque.

Exemples

Exemple #1 Un exemple avec Phar::setDefaultStub()

<?php
try {
    
$phar = new Phar('monphar.phar');
    
$phar->setDefaultStub('cli.php''web/index.php');
    
// est identique à :
    // $phar->setStub($phar->createDefaultStub('cli.php', 'web/index.php'));
} catch (Exception $e) {
    
// traite les erreurs
}
?>

Voir aussi



Phar::setMetadata

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::setMetadataFixe les métadonnées de l'archive phar

Description

void Phar::setMetadata ( mixed $metadata )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Phar::setMetadata() doit être utilisée pour stocker des données personnalisées qui décrivent l'archive phar, en tant qu'entité à part entière. PharFileInfo::setMetadata() doit être utilisée pour les métadonnées spécifiques aux fichiers. Les métadonnées peuvent diminuer les performance de chargement d'une archive phar si les données sont importantes.

Une utilisation possible des métadonnées est la spécification des fichiers à utiliser au sein de l'archive pour la lancer, ou l'emplacement d'un fichier de manifeste comme le fichier package.xml de » PEAR. De façon générale, toute donnée utile qui décrit l'archive phar peut être stockée.

Liste de paramètres

metadata

Toute variable PHP contenant des informations à stocker et qui décrit l'archive phar

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Un exemple avec Phar::setMetadata()

<?php
// on s'assure que le phar n'existe pas déjà
@unlink('nouveau.phar');
try {
    
$p = new Phar(dirname(__FILE__) . '/nouveau.phar'0'nouveau.phar');
    
$p['fichier.php'] = '<?php echo "salut"';
    
$p->setMetadata(array('chargeur' => 'fichier.php'));
    
var_dump($p->getMetadata());
} catch (
Exception $e) {
    echo 
'Ne peut pas créer/modifier le phar :'$e;
}
?>

L'exemple ci-dessus va afficher :

array(1) {
  ["chargeur"]=>
  string(11) "fichier.php"
}

Voir aussi



Phar::setSignatureAlgorithm

(PHP >= 5.3.0, PECL phar >= 1.1.0)

Phar::setSignatureAlgorithmFixe et applique l'algorithme de signature d'un phar

Description

void Phar::setSignatureAlgorithm ( int $sigtype [, string $privatekey ] )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Fixe et applique l'algorithme de signature d'un phar. L'algorithme de signature doit être Phar::MD5, Phar::SHA1, Phar::SHA256, Phar::SHA512, ou Phar::OPENSSL.

Notez que toutes les archives phar exécutables ont une signature créée automatiquement, SHA1 par défaut. Les archives de données basées sur tar ou sur zip (créées avec la classe PharData) doivent avoir leur signature créée et assignée explicitement via Phar::setSignatureAlgorithm().

Liste de paramètres

sigtype

Un des algorithmes Phar::MD5, Phar::SHA1, Phar::SHA256, Phar::SHA512, ou Phar::OPENSSL

privatekey

Le contenu d'une clé privée OpenSSL, telle qu'extraite d'un certificat ou d'un fichier de clé OpenSSL :

<?php
$private 
openssl_get_privatekey(file_get_contents('private.pem'));
$pkey '';
openssl_pkey_export($private$pkey);
$p->setSignatureAlgorithm(Phar::OPENSSL$pkey);
?>
Reportez-vous à l'introduction de phar pour les instructions de nommage et de placement du fichier de clé publique.

Valeurs de retour

Aucune valeur n'est retournée.

Erreurs / Exceptions

Lève une exception UnexpectedValueException pour de nombreuses erreurs et une exception PharException si des problèmes surviennent durant l'écriture des changements sur le disque.

Voir aussi



Phar::setStub

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::setStubUtilisé pour spécifier le chargeur PHP ou le conteneur de chargement d'une archive Phar

Description

bool Phar::setStub ( string $stub )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Cette méthode est utilisée pour ajouter un chargeur PHP à une nouvelle archive Phar, ou pour remplacer le conteneur de chargement d'une archive Phar existante.

Le conteneur de chargement d'une archive Phar est utilisé quand une archive est incluse directement comme dans cet exemple :

<?php
include 'monphar.phar';
?>

Le chargeur n'est pas utilisé quand un fichier est inclus via le flux phar comme ceci :

<?php
include 'phar://monphar.phar/unfchier.php';
?>

Liste de paramètres

stub

Une chaîne ou une ressource de flux ouvert à utiliser comme conteneur exécutable pour cette archive phar.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Erreurs / Exceptions

Une exception UnexpectedValueException est levée si phar.readonly est activé dans le php.ini. Une exception PharException est levée si des problèmes sont rencontrés lors de l'écriture des changement sur le disque.

Exemples

Exemple #1 Un exemple avec Phar::setStub()

<?php
try {
    
$p = new Phar(dirname(__FILE__) . '/nouveau.phar'0'nouveau.phar');
    
$p['a.php'] = '<?php var_dump("Salut");';
    
$p->setStub('<?php var_dump("Premier"); Phar::mapPhar("nouveau.phar"); __HALT_COMPILER(); ?>');
    include 
'phar://nouveau.phar/a.php';
    
var_dump($p->getStub());
    
$p['b.php'] = '<?php var_dump("Tout le monde");';
    
$p->setStub('<?php var_dump("Second"); Phar::mapPhar("nouveau.phar"); __HALT_COMPILER(); ?>');
    include 
'phar://nouveau.phar/b.php';
    
var_dump($p->getStub());
} catch (
Exception $e) {
    echo 
'Erreur lors de l'écriture de nouveau.phar', $e;
}
?>

L'exemple ci-dessus va afficher :

string(5) "Salut"
string(79) "<?php var_dump("Premier"); Phar::mapPhar("nouveau.phar"); __HALT_COMPILER(); ?>"
string(13) "Tout le monde"
string(78) "<?php var_dump("Second"); Phar::mapPhar("nouveau.phar"); __HALT_COMPILER(); ?>"

Voir aussi



Phar::startBuffering

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::startBufferingDémarre la mise en tampon de écritures Phar, ne modifie pas l'objet Phar sur le disque

Description

void Phar::startBuffering ( void )

Bien que techniquement inutile, la méthode Phar::startBuffering() peut fournir un gain de performance lors de la création ou la modification d'une archive Phar avec un grand nombre de fichiers. D'ordinaire, chaque fois qu'un fichier au sein de l'archive Phar est créé ou modifié, l'archive Phar entière et recréée en incluant les changements. De cette manière, l'archive sera toujours à jour vis à vis des opération qui y sont appliquées.

Alors que ceci peut paraître inutile lors de la création d'un archive Phar simple, ça prend tout son sens lors de l'écriture en une fois de l'archive Phar entière. De même, il est souvent nécessaire de faire une série de changements et de s'assurer qu'ils sont tous possibles avant d'écrire sur le disque, un peu comme les transactions des base de données relationnelles. Les fonctions Phar::startBuffering()/Phar::stopBuffering() sont disponibles dans ce but.

La mise en tampon Phar s'effectue par archive, le tampon actif pour l'archive Phar foo.phar n'affecte pas les changements faits à l'archive Phar bar.phar.

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Un exemple avec Phar::startBuffering()

<?php
// on s'assure que le phar n'existe pas déjà
@unlink('nouveau.phar');
try {
    
$p = new Phar(dirname(__FILE__) . '/nouveau.phar'0'nouveau.phar');
} catch (
Exception $e) {
    echo 
'Ne peut pas créer le phar:'$e;
}
echo 
'Le nouveau phar a ' $p->count() . " entrées\n";
$p->startBuffering();
$p['fichier.txt'] = 'salut';
$p['fichier2.txt'] = 'jolie';
$p['fichier2.txt']->setCompressedGZ();
$p['fichier3.txt'] = 'môme';
$p['fichier3.txt']->setMetadata(42);
$p->setStub("<?php
function __autoload(
$class)
{
    include 'phar://monphar.phar/' . str_replace('_', '/', 
$class) . '.php';
}
Phar::mapPhar('monphar.phar');
include 'phar://monphar.phar/demarrage.php';
__HALT_COMPILER();"
);
$p->stopBuffering();
?>

Voir aussi

  • Phar::stopBuffering() - Arrête la mise en tampon des écritures Phar et provoque l'écriture que le disque
  • Phar::isBuffering() - Détermine si les opérations d'écriture du Phar sont mises en tampons ou sont directement inscrites sur le disque



Phar::stopBuffering

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::stopBufferingArrête la mise en tampon des écritures Phar et provoque l'écriture que le disque

Description

void Phar::stopBuffering ( void )

Phar::stopBuffering() est utilisée en conjonction avec la méthode Phar::startBuffering(). Phar::startBuffering() peut fournir un gain de performance lors de la création ou la modification d'une archive Phar avec un grand nombre de fichiers. D'ordinaire, chaque fois qu'un fichier au sein de l'archive Phar est créé ou modifié, l'archive Phar entière et recréée en incluant les changements. De cette manière, l'archive sera toujours à jour vis à vis des opération qui y sont appliquées.

Alors que ceci peut paraître inutile lors de la création d'un archive Phar simple, ça prend tout son sens lors de l'écriture en une fois de l'archive Phar entière. De même, il est souvent nécessaire de faire une série de changements et de s'assurer qu'ils sont tous possibles avant d'écrire sur le disque, un peu comme les transactions des base de données relationnelles. Les fonctions Phar::startBuffering()/Phar::stopBuffering() sont disponibles dans ce but.

La mise en tampon Phar s'effectue par archive, le tampon actif pour l'archive Phar foo.phar n'affecte pas les changements faits à l'archive Phar bar.phar.

Valeurs de retour

Aucune valeur n'est retournée.

Erreurs / Exceptions

Une exception PharException est levée si des problèmes sont rencontrés lors de l'écriture des changements sur le disque.

Exemples

Exemple #1 Un exemple Phar::stopBuffering()

<?php
$p 
= new Phar(dirname(__FILE__) . '/nouveau.phar'0'nouveau.phar');
$p['fichier1.txt'] = 'salut';
$p->startBuffering();
var_dump($p->getStub());
$p->setStub("<?php
function __autoload(\$class)
{
    include 'phar://nouveau.phar/' . str_replace('_', '/', \$class) . '.php';
}
Phar::mapPhar('nouveau.phar');
include 'phar://nouveau.phar/demarrage.php';
__HALT_COMPILER();"
);
$p->stopBuffering();
var_dump($p->getStub());
?>

L'exemple ci-dessus va afficher :

string(24) "<?php __HALT_COMPILER();"
string(195) "<?php
function __autoload($class)
{
    include 'phar://' . str_replace('_', '/', $class);
}
Phar::mapPhar('nouveau.phar');
include 'phar://nouveau.phar/demarrage.php';
__HALT_COMPILER();"

Voir aussi

  • Phar::startBuffering() - Démarre la mise en tampon de écritures Phar, ne modifie pas l'objet Phar sur le disque
  • Phar::isBuffering() - Détermine si les opérations d'écriture du Phar sont mises en tampons ou sont directement inscrites sur le disque



Phar::uncompressAllFiles

(PECL phar < 2.0.0)

Phar::uncompressAllFilesDécompresse tous les fichiers de l'archive Phar courante

Description

bool Phar::uncompressAllFiles ( void )

Note:

Cette méthode a été supprimée de l'extension phar depuis la version 2.0.0. Vous pouvez utiliser Phar::compress(), Phar::decompress(), Phar::compressFiles() et Phar::decompressFiles() à la place.

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Cette méthode décompresse tous les fichiers de l'archive Phar. Si un des fichiers est déjà compressé en utilisant la compression gzip, l'extension zlib doit être activée pour décompresser le fichier, et si un des fichiers est déjà compressé en utilisant la compression bzip2, l'extension bzip2 doit être activée pour décompresser le fichier. Comme avec toutes les fonctionnalités qui modifient le contenu d'un As with all functionality that modifies the contents of phar, la variable INI phar.readonly doit être à off pour que ça fonctionne.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Erreurs / Exceptions

Lève une exception BadMethodCallException si la variable INI phar.readonly est à on, si l'extension bzip2 n'est pas activée alors qu'au moins un fichier est compressé avec la compression bzip2 ou si au moins un des fichiers est compressé avec la compression gzip et que l'extension zlib n'est pas activée.

Exemples

Exemple #1 Un exemple avec Phar::uncompressAllFiles()

<?php
try {
    
$p = new Phar('/chemin/vers/mon.phar'0'mon.phar');
    
$p['monfichier.txt'] = 'salut';
    
$p['monfichier2.txt'] = 'salut';
    
$p->compressAllFilesGZ();
    foreach (
$p as $file) {
        
var_dump($file->getFileName());
        
var_dump($file->isCompressed());
        
var_dump($file->isCompressedBZIP2());
        
var_dump($file->isCompressedGZ());
    }
    
$p->uncompressAllFiles();
    foreach (
$p as $file) {
        
var_dump($file->getFileName());
        
var_dump($file->isCompressed());
        
var_dump($file->isCompressedBZIP2());
        
var_dump($file->isCompressedGZ());
    }
} catch (
Exception $e) {
    echo 
'Les opération d'écriture sur mon.phar ont échoué ', $e;
}
?>

L'exemple ci-dessus va afficher :

string(10) "monfichiere.txt"
bool(true)
bool(false)
bool(true)
string(11) "monfichier2.txt"
bool(true)
bool(false)
bool(true)
string(10) "monfichier.txt"
bool(false)
bool(false)
bool(false)
string(11) "monfichier2.txt"
bool(false)
bool(false)
bool(false)

Voir aussi



Phar::unlinkArchive

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::unlinkArchiveEfface complètement une archive phar du disque et de la mémoire

Description

bool Phar::unlinkArchive ( string $archive )

Efface complètement une archive phar du disque et de la mémoire

Liste de paramètres

archive

Le chemin sur le disque vers l'archive phar.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Erreurs / Exceptions

Une exception PharException est levée si des pointeurs sont ouverts vers des fichiers de l'archive phar, ou si des objets Phar, PharData, ou PharFileInfo réfèrent à l'archive phar.

Exemples

Exemple #1 Un exemple avec Phar::unlinkArchive()

<?php
// utilisation simple
Phar::unlinkArchive('/chemin/vers/mon.phar');

// un exemple plus commun :
$p = new Phar('mon.phar');
$fp fopen('phar://mon.phar/fichier.txt''r');
// cela crée 'mon.phar.gz'
$gp $p->compress(Phar::GZ);
// enlève toutes les références à l'archive
unset($p);
fclose($fp);
// efface maintenant toute trace de l'archive
Phar::unlinkArchive('mon.phar');
?>

Voir aussi



Phar::webPhar

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::webPharmapPhar pour les phars orientés web. Contrôleur pour les applications web

Description

void Phar::webPhar ([ string $alias [, string $index = "index.php" [, string $f404 [, array $mimetypes [, array $rewrites ]]]]] )

Phar::mapPhar() pour les phars orientés web. Cette méthode parse $_SERVER['REQUEST_URI'] et route les requêtes d'un navigateur vers un fichier interne à l'archive. Dans le principe, cela simule un serveur web, en routant des requêtes vers le bon fichier, en envoyant les bons en-têtes et analysant le fichier PHP comme il convient. Cette méthode puissante permet de convertir facilement des applications PHP en archive phar. Combinée avec Phar::mungServer() et Phar::interceptFileFuncs(), n'importe quelle application web peut être utilisée sans changement à partir de l'archive phar.

Phar::webPhar() doit être appelé uniquement à partir du conteneur de chargement d'une archive phar (lisez ceci pour en savoir davantage sur les conteneurs).

Liste de paramètres

alias

L'alias qui peut être utilisé dans l'URL phar:// pour se référer à l'archive, plutôt que son chemin complet.

index

L'emplacement au sein de l'archive de l'index de répertoire.

f404

L'emplacement du script à exécuter quand un fichier n'est pas trouvé. Ce script doit envoyer des en-têtes HTTP 404 corrects.

mimetypes

Un tableau faisant correspondre des extensions de fichier supplémentaires à des types MIME. Si les correspondances par défaut suffisent, passez un tableau vide. Par défaut, ces correspondances sont les suivantes :

<?php
$mimes 
= array(
    
'phps' => Phar::PHPS// passage vers highlight_file()
    
'c' => 'text/plain',
    
'cc' => 'text/plain',
    
'cpp' => 'text/plain',
    
'c++' => 'text/plain',
    
'dtd' => 'text/plain',
    
'h' => 'text/plain',
    
'log' => 'text/plain',
    
'rng' => 'text/plain',
    
'txt' => 'text/plain',
    
'xsd' => 'text/plain',
    
'php' => Phar::PHP// parse en tant que PHP
    
'inc' => Phar::PHP// parse en tant que PHP
    
'avi' => 'video/avi',
    
'bmp' => 'image/bmp',
    
'css' => 'text/css',
    
'gif' => 'image/gif',
    
'htm' => 'text/html',
    
'html' => 'text/html',
    
'htmls' => 'text/html',
    
'ico' => 'image/x-ico',
    
'jpe' => 'image/jpeg',
    
'jpg' => 'image/jpeg',
    
'jpeg' => 'image/jpeg',
    
'js' => 'application/x-javascript',
    
'midi' => 'audio/midi',
    
'mid' => 'audio/midi',
    
'mod' => 'audio/mod',
    
'mov' => 'movie/quicktime',
    
'mp3' => 'audio/mp3',
    
'mpg' => 'video/mpeg',
    
'mpeg' => 'video/mpeg',
    
'pdf' => 'application/pdf',
    
'png' => 'image/png',
    
'swf' => 'application/shockwave-flash',
    
'tif' => 'image/tiff',
    
'tiff' => 'image/tiff',
    
'wav' => 'audio/wav',
    
'xbm' => 'image/xbm',
    
'xml' => 'text/xml',
);
?>

rewrites

Un tableau faisant correspondre des URI à des fichiers internes, simulant le mod_rewrite de apache. Par exemple:

<?php
array(
    
'moninfo' => 'moninfo.php'
);
?>
routera les appels à http://<hôte>/monphar.phar/moninfo vers le fichier phar:///chemin/vers/monphar.phar/moninfo.php, en préservant les GET/POST. Ca ne fonctionne pas tout à fait comme mod_rewrite car ça ne fera pas correspondre http://<hôte>/monphar.phar/moninfo/unautre.

Valeurs de retour

Aucune valeur n'est retournée.

Erreurs / Exceptions

Lève une exception PharException quand le fichier interne ne peut pas être ouvert ou si l'appel est fait en dehors d'un conteneur. Si un valeur de tableau non valide est passée dans mimetypes ou dans rewrites, une exception UnexpectedValueException est levée.

Exemples

Exemple #1 Exemple avec Phar::webPhar()

Dans l'exemple ci-dessous, le phar créé affichera Salut tout le monde si quelqu'un appelle /monphar.phar/index.php ou /monphar.phar, et affichera la source de index.phps si /monphar.phar/index.phps est appelé.

<?php
// l'archive phar est créée :
try {
    
$phar = new Phar('monphar.phar');
    
$phar['index.php'] = '<?php echo "Salut tout le monde"; ?>';
    
$phar['index.phps'] = '<?php echo "Salut tout le monde"; ?>';
    
$phar->setStub('<?php
Phar::webPhar();
__HALT_COMPILER(); ?>'
);
} catch (
Exception $e) {
    
// on traite les erreurs ici
}
?>

Voir aussi


Sommaire



La classe PharData

(No version information available, might only be in SVN)

Introduction

La classe PharData fournit une interface de haut niveau pour accéder et créer des archives tar et zip non exécutables. Du fait que ces archives ne contiennent pas de conteneur et qu'elles ne puissent être exécutées par l'extension phar, il est possible de créer et de manipuler des fichiers zip et tar normaux en utilisant la classe PharData même si le paramètre phar.readonly du php.ini est à 1.

Synopsis de la classe

PharData extends Phar {
/* Propriétés */
/* Méthodes */
bool addEmptyDir ( string $dirname )
void Phar::addFile ( string $file [, string $localname ] )
bool addFromString ( string $localname , string $contents )
array Phar::buildFromDirectory ( string $base_dir [, string $regex ] )
array buildFromIterator ( Iterator $iter [, string $base_directory ] )
object compress ( int $compression [, string $extension ] )
bool compressFiles ( int $compression )
__construct ( string $fname [, int $flags [, string $alias [, int $format = Phar::TAR ]]] )
PharData convertToData ([ int $format [, int $compression [, string $extension ]]] )
Phar convertToExecutable ([ int $format [, int $compression [, string $extension ]]] )
bool copy ( string $oldfile , string $newfile )
object decompress ([ string $extension ] )
bool decompressFiles ( void )
bool delMetadata ( void )
bool delete ( string $entry )
bool extractTo ( string $pathto [, string|array $files [, bool $overwrite = false ]] )
bool isWritable ( void )
void offsetSet ( string $offset , string $value )
bool offsetUnset ( string $offset )
bool setAlias ( string $alias )
bool setDefaultStub ([ string $index [, string $webindex ]] )
void Phar::setMetadata ( mixed $metadata )
void Phar::setSignatureAlgorithm ( int $sigtype )
bool setStub ( string $stub )
/* Méthodes héritées */
void Phar::addEmptyDir ( string $dirname )
void Phar::addFile ( string $file [, string $localname ] )
void Phar::addFromString ( string $localname , string $contents )
string Phar::apiVersion ( void )
array Phar::buildFromDirectory ( string $base_dir [, string $regex ] )
array Phar::buildFromIterator ( Iterator $iter [, string $base_directory ] )
bool Phar::canCompress ([ int $type = 0 ] )
bool Phar::canWrite ( void )
object Phar::compress ( int $compression [, string $extension ] )
void Phar::compressFiles ( int $compression )
Phar::__construct ( string $fname [, int $flags [, string $alias ]] )
PharData Phar::convertToData ([ int $format = 9021976 [, int $compression = 9021976 [, string $extension ]]] )
Phar Phar::convertToExecutable ([ int $format = 9021976 [, int $compression = 9021976 [, string $extension ]]] )
bool Phar::copy ( string $oldfile , string $newfile )
int Phar::count ( void )
string Phar::createDefaultStub ([ string $indexfile [, string $webindexfile ]] )
object Phar::decompress ([ string $extension ] )
bool Phar::decompressFiles ( void )
bool Phar::delMetadata ( void )
bool Phar::delete ( string $entry )
bool Phar::extractTo ( string $pathto [, string|array $files [, bool $overwrite = false ]] )
mixed Phar::getMetadata ( void )
bool Phar::getModified ( void )
array Phar::getSignature ( void )
string Phar::getStub ( void )
string Phar::getVersion ( void )
bool Phar::hasMetadata ( void )
bool Phar::isBuffering ( void )
mixed Phar::isCompressed ( void )
bool Phar::isFileFormat ( int $format )
bool Phar::isValidPharFilename ( string $filename [, bool $executable = true ] )
bool Phar::isWritable ( void )
bool Phar::loadPhar ( string $filename [, string $alias ] )
bool Phar::mapPhar ([ string $alias [, int $dataoffset = 0 ]] )
void Phar::mount ( string $pharpath , string $externalpath )
void Phar::mungServer ( array $munglist )
bool Phar::offsetExists ( string $offset )
int Phar::offsetGet ( string $offset )
void Phar::offsetSet ( string $offset , string $value )
bool Phar::offsetUnset ( string $offset )
string Phar::running ([ bool $retphar = true ] )
bool Phar::setAlias ( string $alias )
bool Phar::setDefaultStub ([ string $index [, string $webindex ]] )
void Phar::setMetadata ( mixed $metadata )
void Phar::setSignatureAlgorithm ( int $sigtype [, string $privatekey ] )
bool Phar::setStub ( string $stub )
void Phar::startBuffering ( void )
void Phar::stopBuffering ( void )
bool Phar::unlinkArchive ( string $archive )
void Phar::webPhar ([ string $alias [, string $index = "index.php" [, string $f404 [, array $mimetypes [, array $rewrites ]]]]] )
}

PharData::addEmptyDir

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::addEmptyDirAjoute un répertoire vide à l'archive tar/zip

Description

bool PharData::addEmptyDir ( string $dirname )

Avec cette méthode, un répertoire vide est créé avec le chemin dirname. Cette méthode est identique à ZipArchive::addEmptyDir().

Liste de paramètres

dirname

Le nom du répertoire vide à créer dans l'archive phar

Valeurs de retour

aucune valeur de retour, une exception est levée en cas d'échec.

Exemples

Exemple #1 Un exemple avec PharData::addEmptyDir()

<?php
try {
    
$a = new PharData('/chemin/vers/mon.tar');

    
$a->addEmptyDir('/chemin/complet/vers/fichier');
    
// montre comment le fichier est stocké
    
$b $a['chemin/complet/vers/fichier']->isDir();
} catch (
Exception $e) {
    
// les erreurs sont traitées ici
}
?>

Voir aussi



PharData::addFile

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::addFileAjoute un fichier du système de fichiers à l'archive tar/zip

Description

void Phar::addFile ( string $file [, string $localname ] )

Avec cette méthode, n'importe quel fichier ou URL peut être ajouté à l'archive tar/zip. Si le second paramètre optionnel localname est spécifié, le fichier sera stocké dans l'archive avec ce nom, sans quoi le paramètre file est utilisé comme chemin vers lequel stocker le fichier au sein de l'archive. Les URL doivent avoir un nom local sans quoi une exception est levée. Cette méthode est identique à ZipArchive::addFile().

Liste de paramètres

file

Chemin relatif ou absolu vers un fichier du disque à ajouter à l'archive phar.

localname

Chemin vers lequel le fichier sera stocké au sein de l'archive.

Valeurs de retour

aucune valeur de retour, une exception est levée en cas d'échec.

Exemples

Exemple #1 Un exemple avec PharData::addFile()

<?php
try {
    
$a = new PharData('/chemin/vers/mon.tar');

    
$a->addFile('/chemin/complet/vers/fichier');
    
// montre comment le fichier est stocké
    
$b $a['chemin/complet/vers/fichier']->getContent();

    
$a->addFile('/chemin/complet/vers/fichier''mon/fichier.txt');
    
$c $a['mon/fichier.txt']->getContent();

    
// montre l'utilisation des URLs
    
$a->addFile('http://www.exemple.com''exemple.html');
} catch (
Exception $e) {
    
// les erreurs sont traitées ici
}
?>

Voir aussi



PharData::addFromString

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::addFromStringAjoute un fichier du système de fichiers à l'archive tar/zip

Description

bool PharData::addFromString ( string $localname , string $contents )

Ajoute une chaîne de caractères à l'archive tar/zip. Le fichier sera stocké dans l'archive avec le chemin localname. Cette méthode est identique à ZipArchive::addFromString().

Liste de paramètres

localname

Chemin vers lequel le fichier sera stocké au sein de l'archive.

contents

Le contenu du fichier à stocker

Valeurs de retour

Aucune valeur de retour, une exception est levée en cas d'échec.

Exemples

Exemple #1 Exemple avec PharData::addFromString()

<?php
try {
    
$a = new PharData('/chemin/vers/mon.tar');

    
$a->addFromString('chemin/vers/fichier.txt''mon fichier simple');
    
$b $a['chemin/vers/fichier.txt']->getContent();

    
// pour ajouter du contenu à partir d'un gestionnaire de flux pour des gros fichier, utilisez offsetSet()
    
$c fopen('/chemin/vers/grosfichier.bin');
    
$a['grosfichier.bin'] = $c;
    
fclose($c);
} catch (
Exception $e) {
    
// les erreurs sont traitées ici
}
?>

Voir aussi



PharData::buildFromDirectory

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::buildFromDirectoryConstruit une archive tar/zip à partir des fichiers d'un répertoire

Description

array Phar::buildFromDirectory ( string $base_dir [, string $regex ] )

Remplit une archive tar/zip à partir du contenu d'un répertoire. Le second paramètre optionnel est une expression rationnelle (pcre) utilisée pour exclure des fichiers. N'importe quel fichier dont le nom satisfait sera inclus, tous les autres seront exclus. Pour un contrôle plus fin, utilisez PharData::buildFromIterator().

Liste de paramètres

base_dir

Le chemin relatif ou absolu vers le répertoire contenant tous les fichiers à ajouter à l'archive.

regex

Une expression rationnelle optionnelle qui est utilisée pour filtrer la liste des fichiers. Seuls les fichiers dont le nom satisfont l'expression seront inclus dans l'archive.

Valeurs de retour

Phar::buildFromDirectory() retourne un tableau associatif faisant correspondre un chemin de fichier interne vers un chemin complet sur le système de fichiers.

Erreurs / Exceptions

Cette méthode soulève une exception BadMethodCallException quand elle est incapable d'instancier les itérateurs interne de répertoire, ou une exception PharException si des erreurs ont été rencontrée lors de l'enregistrement de l'archive phar.

Exemples

Exemple #1 Un exemple avec PharData::buildFromDirectory()

<?php
$phar 
= new PharData('projet.tar');
// ajoute tous les fichiers au projet
$phar->buildFromDirectory(dirname(__FILE__) . '/projet');

$phar2 = new PharData('projet2.zip');
// ajoute tous les fichiers au projet en n'incluant que les fichiers php
$phar->buildFromDirectory(dirname(__FILE__) . '/projet''/\.php$/');
?>

Voir aussi



PharData::buildFromIterator

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::buildFromIteratorConstruit une archive tar ou zip à partir d'un itérateur

Description

array PharData::buildFromIterator ( Iterator $iter [, string $base_directory ] )

Remplit une archive tar ou zip à partir d'un itérateur. Deux styles d'itérateurs sont supportés, les itérateurs qui font correspondre le chemin de fichier au sein de l'archive avec le chemin sur le disque, et les itérateurs comme DirectoryIterator qui retournent des objets SplFileInfo. Pour les itérateurs qui retournent des objets SplFileInfo, le second paramètre est requis.

Exemples

Exemple #1 Exemple avec PharData::buildFromIterator() et SplFileInfo

Pour la plupart des archive tar/zip, l'archive reflétera la structure de répertoire actuelle, et le second style est le plus utile. Par exemple, pour créer une archive tar/zip contenant les fichiers contenant la structure de répertoire ci-dessous :

/chemin/vers/projet/
                 config/
                        dist.xml
                        debug.xml
                 lib/
                     fichier1.php
                     fichier2.php
                 src/
                     processthing.php
                 www/
                     index.php
                 cli/
                     index.php

Ce code peut être utilisé pour ajouter des fichiers à l'archive "projet.tar" tar :

<?php
$phar 
= new PharData('projet.tar');
$phar->buildFromIterator(
    new 
RecursiveIteratorIterator(
     new 
RecursiveDirectoryIterator('/chemin/vers/projet')),
    
'/chemin/vers/projet');
?>

Le fichier projet.tar peut alors être effacé immédiatement. PharData::buildFromIterator() ne règle pas les paramètres tels que la compression, les métadonnées, ce qui peut être fait après avoir créé l'archive tar/zip.

A noter que Phar::buildFromIterator() peut aussi être utilisé pour copier le contenu d'une archive phar, tar ou zip existante, car l'objet PharData est dérivé de DirectoryIterator :

<?php
$phar 
= new PharData('projet.tar');
$phar->buildFromIterator(
    new 
RecursiveIteratorIterator(
     new 
Phar('/chemin/vers/unautrephar.phar')),
    
'phar:///chemin/vers/unautrephar.phar/chemin/vers/projet');
$phar->setStub($phar->createDefaultStub('cli/index.php''www/index.php'));
?>

Exemple #2 Exemple avec PharData::buildFromIterator() et d'autres itérateurs

La seconde forme d'itérateur peut être utilisée avec n'importe quel itérateur qui retourne une association clé => valeur, tel que ArrayIterator :

<?php
$phar 
= new PharData('projet.tar');
$phar->buildFromIterator(
    new 
ArrayIterator(
     array(
        
'interne/fichier.php' => dirname(__FILE__) . '/unfichier.php',
        
'unautre/fichier.jpg' => fopen('/chemin/vers/grosfichier.jpg''rb'),
     )));
?>

Liste de paramètres

iter

N'importe quel itérateur qui fait correspondre de façon associative un fichier tar/zip ou qui retourne des objets SplFileInfo

base_directory

Pour les itérateurs qui retournent des objets SplFileInfo, la partie du chemin complet vers le fichier à enlever lors de l'ajout à l'archive tar/zip

Valeurs de retour

PharData::buildFromIterator() retourne un tableau associatif faisant correspondre un chemin de fichier interne avec un chemin complet vers le fichier sur le système de fichiers.

Erreurs / Exceptions

Cette méthode retourne une exception UnexpectedValueException quand l'itérateur retourne des valeurs incorrectes, comme une clé entière plutôt qu'une chaîne, une exception BadMethodCallException quand un itérateur basé sur SplFileInfo-based est passé sans paramètre base_directory, ou une exception PharException si des erreurs ont été rencontrées lors de la sauvegarde de l'archive phar.

Voir aussi



PharData::compress

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::compressCompresse l'archive tar/zip complète en utilisant la compression Gzip ou Bzip2

Description

object PharData::compress ( int $compression [, string $extension ] )

Pour les archives tar, cette méthode compresse l'archive entière en utilisant la compressions gzip ou bzip2. Le fichier qui en résulte peut être manipulé avec la commande gunzip/bunzip, ou être accédé directement et de façon transparente avec l'extension Phar.

Pour les archives zip, cette méthode échoue en levant une exception. L'extension zlib doit être activée pour compresser avec gzip, l'extension bzip2 doit être activée pour compresser avec bzip2.

De plus, cette méthode renomme automatiquement l'archive, en la suffixant par .gz, .bz2 ou en enlevant l'extension si Phar::NONE est spécifié pour enlever la compression. Sinon, une extension de fichier peut être spécifiée avec le second paramètre.

Liste de paramètres

compression

La compression doit être Phar::GZ ou Phar::BZ2 pour appliquer une compression, ou Phar::NONE pour l'enlever.

extension

Par défaut, l'extension est .tar.gz ou .tar.bz2 pour compresser un tar, et .tar pour décompresser.

Valeurs de retour

Un objet PharData est retourné.

Erreurs / Exceptions

Soulève une exception BadMethodCallException si l'extension zlib n'est pas disponible, ou si l'extension bzip2 n'est pas activée.

Exemples

Exemple #1 Un exemple avec PharData::compress()

<?php
$p 
= new PharData('/chemin/vers/mon.tar');
$p['monfichier.txt'] = 'salut';
$p['monfichier2.txt'] = 'salut';
$p1 $p->compress(Phar::GZ); // copie vers /chemin/vers/mon.phar.gz
$p2 $p->compress(Phar::BZ2); // copie vers /chemin/vers/mon.phar.bz2
$p3 $p2->compress(Phar::NONE); // exception: /chemin/vers/mon.phar existe déjà
?>

Voir aussi

  • Phar::compress() - Compresse l'archive Phar complète en utilisant la compression Gzip ou Bzip2



PharData::compressFiles

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::compressFilesCompresse tous les fichiers de l'archive tar/zip courante

Description

bool PharData::compressFiles ( int $compression )

Pour les archives basées sur tar, cette méthode soulève une exception BadMethodCallException car la compression individuelle des fichiers d'une archive tar n'est pas supportée par ce format de fichiers. Utilisez PharData::compress() pour compresser une archive basée sur tar complète.

Pour les archives basées sur Zip, cette méthode compresse tous les fichiers de l'archive en utilisant la compression spécifiée. Les extensions zlib ou bzip2 doivent être activées pour tirer parti de cette fonctionnalité. De plus, si au moins un fichier est déjà compressé en utilisant la compression bzip2/zlib, l'extension adéquate être activée pour décompresser les fichiers avant de les re-compresser.

Liste de paramètres

compression

La compression doit être Phar::GZ ou Phar::BZ2 pour appliquer une compression, ou Phar::NONE pour l'enlever.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Erreurs / Exceptions

Soulève une exception BadMethodCallException si la variable INI phar.readonly est à on, si l'extension zlib n'est pas disponible ou si au moins un fichier est compressé via bzip2 et que l'extension bzip2 n'est pas activée.

Exemples

Exemple #1 Un exemple avec PharData::compressFiles()

<?php
$p 
= new Phar('/chemin/vers/mon.phar'0'mon.phar');
$p['monfichier.txt'] = 'salut';
$p['monfichier2.txt'] = 'salut';
foreach (
$p as $file) {
    
var_dump($file->getFileName());
    
var_dump($file->isCompressed());
    
var_dump($file->isCompressed(Phar::BZ2));
    
var_dump($file->isCompressed(Phar::GZ));
}
$p->compressFiles(Phar::GZ);
foreach (
$p as $file) {
    
var_dump($file->getFileName());
    
var_dump($file->isCompressed());
    
var_dump($file->isCompressed(Phar::BZ2));
    
var_dump($file->isCompressed(Phar::GZ));
}
?>

L'exemple ci-dessus va afficher :

string(14) "monfichier.txt"
bool(false)
bool(false)
bool(false)
string(15) "monfichier2.txt"
bool(false)
bool(false)
bool(false)
string(14) "monfichier.txt"
int(4096)
bool(false)
bool(true)
string(15) "monfichier2.txt"
int(4096)
bool(false)
bool(true)

Voir aussi



PharData::__construct

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::__constructConstruit un objet d'archive tar ou zip non-exécutable

Description

PharData::__construct ( string $fname [, int $flags [, string $alias [, int $format = Phar::TAR ]]] )

Liste de paramètres

fname

Chemin vers une archive tar/zip existante ou à créer

flags

Drapeaux à passer à la classe parente Phar RecursiveDirectoryIterator.

alias

L'alias de l'archive Phar à utiliser lors des appels aux fonctionnalités de flux.

format

Une des constantes de format de fichier disponible dans la classe Phar.

Erreurs / Exceptions

Soulève une exception BadMethodCallException si appelée deux fois, une exception UnexpectedValueException si l'archive phar ne peut pas être ouverte.

Exemples

Exemple #1 Un exemple avec PharData::__construct()

<?php
try {
    
$p = new PharData('/chemin/vers/mon.tar'CURRENT_AS_FILEINFO KEY_AS_FILENAME);
} catch (
UnexpectedValueException $e) {
    die(
'Ne peut pas ouvrir mon.tar');
} catch (
BadMethodCallException $e) {
    echo 
'techniquement, ça ne peut pas arriver';
}
echo 
file_get_contents('phar:///chemin/vers/mon.tar/exemple.txt');
?>



PharData::convertToData

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::convertToDataConvertit une archive phar en une archive tar ou zip non-exécutable

Description

PharData PharData::convertToData ([ int $format [, int $compression [, string $extension ]]] )

Cette méthode est utilisée pour convertir une archive non exécutable tar ou zip en un autre format non-exécutable.

Si aucun changement n'est demandé, cette méthode, cette méthode soulève une exception BadMethodCallException. Cette méthode doit être utilisée pour convertir une archive tar au format zip et vice-versa. Bien qu'il soit possible de changer la compression d'une archive tar avec cette méthode, il est préférable d'utiliser la méthode PharData::compress() pour rester cohérent au niveau de la logique.

En cas de succès, cette méthode crée une nouvelle archive sur le disque et retourne un objet PharData. L'ancienne archive n'est pas effacée du disque, ceci devant être fait manuellement une fois le traitement terminé.

Liste de paramètres

format

Le format doit être Phar::TAR ou Phar::ZIP. S'il vaut NULL, le format de fichier actuel sera conservé.

compression

La compression doit être Phar::NONE pour éviter la compression de l'archive complète, Phar::GZ pour la compression basée sur zlib, et Phar::BZ2 pour la compression basée sur bzip.

extension

Ce paramètre est utilisé pour écrase l'extension de fichier par défaut de l'archive convertie. Notez que .phar ne peut pas être utilisé n'importe où dans le nom de fichier d'une archive tar ou zip non-exécutable.

En cas de conversion vers une archive phar basée sur tar, les extensions par défaut sont .tar, .tar.gz et .tar.bz2 selon la compression spécifiée. Pour les archives basées sur zip, l'extension par défaut est .zip.

Valeurs de retour

Cette méthode retourne un objet PharData en cas de succès et soulève une exception en cas d'échec.

Erreurs / Exceptions

Cette méthode soulève une exception BadMethodCallException quand elle est incapable de compresser, quand une méthode de compression inconnue a été spécifiée, quand l'archive demandée est mise en tampon avec Phar::startBuffering() et qu'elle n'a pas été conclue avec Phar::stopBuffering(), et soulève une exception PharException si un quelconque problème est rencontré lors de la création du phar.

Exemples

Exemple #1 Un exemple avec PharData::convertToData()

Utilisons PharData::convertToData():

<?php
try {
    
$tarphar = new PharData('monphar.tar');
    
// notez que monphar.tar n'est *pas* effacé
    // le convertir au format tar non-exécutable
    // crée monphar.zip
    
$zip $tarphar->convertToData(Phar::ZIP);
    
// crée monphar.tbz
    
$tgz $zip->convertToData(Phar::TARPhar::BZ2'.tbz');
    
// crée monphar.phar.tgz
    
$phar $tarphar->convertToData(Phar::PHAR); // soulève une exceptions
} catch (Exception $e) {
    
// les erreurs sont traitées ici
}
?>

Voir aussi



PharData::convertToExecutable

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::convertToExecutableConvertit une archive tar/zip non-exécutable en une archive phar exécutable

Description

Phar PharData::convertToExecutable ([ int $format [, int $compression [, string $extension ]]] )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Cette méthode est utilisée pour convertit une archive tar ou zip non-exécutable en une archive phar exécutable. N'importe lequel des trois formats de fichier (phar, tar ou zip) peut être utilisé et la compression de l'archive complète est aussi possible.

Si aucun changement n'est demandé, cette méthode soulève une exception BadMethodCallException.

En cas de succès, cette méthode crée une nouvelle archive sur le disque et retourne un objet Phar. L'ancienne archive n'est pas effacée du disque, ceci devant être fait manuellement une fois le traitement terminé.

Liste de paramètres

format

Le format doit être Phar::PHAR, Phar::TAR ou Phar::ZIP. S'il vaut NULL, le format de fichier actuel sera conservé.

compression

La compression doit être Phar::NONE pour éviter la compression de l'archive complète, Phar::GZ pour la compression basée sur zlib, et Phar::BZ2 pour la compression basée sur bzip.

extension

Ce paramètre est utilisé pour écrase l'extension de fichier par défaut de l'archive convertie. Notez que toute les archives basées sur tar et sur zip doivent contenir .phar dans leur extension de fichier pour pouvoir être traitées comme des archives phar.

En cas de conversion vers une archive basée sur phar, les extensions par défaut sont .phar, .phar.gz ou .phar.bz2 selon la compression spécifiée. Pour les archives phar basées sur tar, les extensions par défaut sont .phar.tar, .phar.tar.gz et .phar.tar.bz2. Pour les archives phar basées sur zip, l'extension par défaut est .phar.zip.

Valeurs de retour

Cette méthode retourne un objet Phar en cas de succès et soulève une exception en cas d'échec.

Erreurs / Exceptions

Cette méthode soulève une exception BadMethodCallException quand elle est incapable de compresser, quand une méthode de compression inconnue a été spécifiée, quand l'archive demandée est mise en tampon avec Phar::startBuffering() et qu'elle n'a pas été conclue avec Phar::stopBuffering(), soulève une exception UnexpectedValueException si le support en écriture est désactivé, et soulève une exception PharException si des problèmes ont été rencontrés lors de la création du phar.

Exemples

Exemple #1 Un exemple avec PharData::convertToExecutable()

Utilisons PharData::convertToExecutable() :

<?php
try {
    
$tarphar = new PharData('monphar.tar');
    
// le convertit au format de fichier phar
    // notez que monphar.tar n'est *pas* effacé
    
$phar $tarphar->convertToExecutable(Phar::PHAR); // crée monphar.phar
    
$phar->setStub($phar->createDefaultStub('cli.php''web/index.php'));
    
// crée monphar.phar.tgz
    
$compressed $tarphar->convertToExecutable(Phar::TARPhar::GZ'.phar.tgz');
} catch (
Exception $e) {
    
// les erreurs sont traitées ici
}
?>

Voir aussi



PharData::copy

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::copyCopie un fichier un fichier interne à l'archive phar vers un autre fichier au sein de la même archive

Description

bool PharData::copy ( string $oldfile , string $newfile )

Copie un fichier interne à l'archive tar/zip vers un autre fichier au sein de la même archive. C'est une alternative orientée objet à l'utilisation de copy() avec le gestionnaire de flux phar.

Liste de paramètres

oldfile

newfile

Valeurs de retour

retourne TRUE en cas de succès, mais il est plus sûr d'encadrer l'appel à la méthode dans un bloc try/catch est de considérer son succès si aucune exception n'est levée.

Erreurs / Exceptions

lève une exception UnexpectedValueException si le fichier source n'existe pas, si le fichier de destination existe déjà, si le support en écriture est désactivé, si l'ouverture d'un des deux fichiers échoue ou si la lecture du fichier source échoue; ou lève une exception PharException si l'écriture des changements de l'archive phar échoue.

Exemples

Exemple #1 Un exemple avec PharData::copy()

Cet exemple montre l'utilisation de PharData::copy() et de son équivalent en terme de gestionnaire de flux. La différence principale entre les deux façons de faire concerne la gestion des erreurs. Toutes les méthodes PharData soulèvent des exceptions, alors que le gestionnaire de flux utilise trigger_error().

<?php
try {
    
$phar = new PharData('monphar.tar');
    
$phar['a'] = 'salut';
    
$phar->copy('a''b');
    echo 
$phar['b']; // affiche "phar://myphar.tar/b"
} catch (Exception $e) {
    
// on traite les erreurs
}

// l'équivalent en terme de flux de l'exemple ci-dessus.
// des E_WARNINGS sont lancés en cas d'erreur à la place d'exceptions.
copy('phar://monphar.tar/a''phar//monphar.tar/c');
echo 
file_get_contents('phar://monphar.tar/c'); // affiche "salut"
?>



PharData::decompress

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::decompressDécompresse l'archive Phar entière

Description

object PharData::decompress ([ string $extension ] )

Décompresse l'archive entière, si c'est une archive tar.

Pour les archives Zip, cette méthode échoue et lève une exception. L'extension zlib doit être activée pour décompresser une archive compressée avec gzip et l'extension bzip2 doit être disponible pour décompresser une archive compressée avec bzip2.

De plus, cette méthode renomme automatiquement l'extension de fichier de l'archive, .tar par défaut. Sinon, une extension de fichier peut être spécifiée avec le second paramètre.

Liste de paramètres

extension

Pour décompresser, l'extension par défaut est .phar.tar. Utilisez ce paramètre pour spécifier une autre extension de fichier. Gardez à l'esprit que les archives non-exécutables ne peuvent pas contenir .phar dans leur nom de fichier.

Valeurs de retour

Un objet PharData est retourné.

Erreurs / Exceptions

Soulève une exception BadMethodCallException si l'extension zlib n'est pas disponible ou si l'extension bzip2 n'est pas activée.

Exemples

Exemple #1 Exemple avec PharData::decompress()

<?php
$p 
= new PharData('/chemin/vers/mon.tar'0'mon.tar.gz');
$p['monfichier.txt'] = 'salut';
$p['monfichier2.txt'] = 'salut';
$p3 $p2->decompress(); // crée /chemin/vers/mon.tar
?>

Voir aussi



PharData::decompressFiles

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::decompressFilesDécompresse tous les fichiers de l'archive zip courante

Description

bool PharData::decompressFiles ( void )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Pour les archives basées sur tar, cette méthode soulève une exception BadMethodCallException, car la compression individuelle des fichiers au sein d'une archive tar n'est pas supportée par le format de fichier. Utilisez PharData::compress() pour compresser une archive basée sur tar complète.

Pour les archives basées sur Zip, cette méthode décompresse tous les fichiers de l'archive. Les extensions zlib ou bzip2 doivent être activées pour tirer parti de cette fonctionnalité si au moins un des fichiers est compressé avec bzip2/zlib.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Erreurs / Exceptions

Soulève une exception BadMethodCallException si l'extension zlib n'est pas disponible ou si au moins un des fichiers est compressé avec bzip2 et que l'extension bzip2 n'est pas activée.

Exemples

Exemple #1 Un exemple avec PharData::decompressFiles()

<?php
$p 
= new PharData('/chemin/vers/mon.zip');
$p['monfichier.txt'] = 'salut';
$p['monfichier2.txt'] = 'salut';
$p->compressFiles(Phar::GZ);
foreach (
$p as $file) {
    
var_dump($file->getFileName());
    
var_dump($file->isCompressed());
    
var_dump($file->isCompressed(Phar::BZ2));
    
var_dump($file->isCompressed(Phar::GZ));
}
$p->decompressFiles();
foreach (
$p as $file) {
    
var_dump($file->getFileName());
    
var_dump($file->isCompressed());
    
var_dump($file->isCompressed(Phar::BZ2));
    
var_dump($file->isCompressed(Phar::GZ));
}
?>

L'exemple ci-dessus va afficher :

string(14) "monfichier.txt"
int(4096)
bool(false)
bool(true)
string(15) "monfichier2.txt"
int(4096)
bool(false)
bool(true)
string(14) "monfichier.txt"
bool(false)
bool(false)
bool(false)
string(15) "monfichier2.txt"
bool(false)
bool(false)
bool(false)

Voir aussi



PharData::delMetadata

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::delMetadataEfface les méta-données globales d'une archive zip

Description

bool PharData::delMetadata ( void )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Efface les méta-données globales de l'archive zip

Liste de paramètres

Valeurs de retour

retourne TRUE en cas de succès, mais il est préférable de vérifier les exception soulevées et de considérer le succès si aucune ne l'est.

Erreurs / Exceptions

Soulève une exception PharException si des erreurs sont rencontrés lors de l'écriture des changements sur le disque.

Exemples

Exemple #1 Un exemple avec PharData::delMetaData()

<?php
try {
    
$phar = new PharData('monphar.zip');
    
var_dump($phar->getMetadata());
    
$phar->setMetadata("salut");
    
var_dump($phar->getMetadata());
    
$phar->delMetadata();
    
var_dump($phar->getMetadata());
} catch (
Exception $e) {
    
// on traite les erreurs
}
?>

L'exemple ci-dessus va afficher :

NULL
string(5) "salut"
NULL

Voir aussi



PharData::delete

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::deleteEfface un fichier au sein de l'archive tar/zip

Description

bool PharData::delete ( string $entry )

Efface un fichier au sein de l'archive. C'est l'équivalent fonctionnel de l'appel à unlink() à l'aide du gestionnaire de flux phar, comme montré dans l'exemple ci-dessous.

Liste de paramètres

entry

Chemin du fichier à effacer au sein de l'archive.

Valeurs de retour

retourne TRUE en cas de succès, mais il est préférable de vérifier les exception soulevées et de considérer le succès si aucune ne l'est.

Erreurs / Exceptions

Soulève une exception PharException si des erreurs sont rencontrés lors de l'écriture des changements sur le disque.

Exemples

Exemple #1 Un exemple avec PharData::delete()

<?php
try {
    
$phar = new PharData('monphar.zip');
    
$phar->delete('efface/moi.php');
    
// c'est l'équivalent de :
    
unlink('phar://monphar.phar/efface/mon.php');
} catch (
Exception $e) {
    
// on traite les erreurs
}
?>

Voir aussi



PharData::extractTo

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::extractToExtrait le contenu d'une archive tar/zip vers un répertoire

Description

bool PharData::extractTo ( string $pathto [, string|array $files [, bool $overwrite = false ]] )

Extrait tous les fichiers d'une archive tar/zip vers le disque. Les fichiers et les répertoires extraits conservent les permissions telles qu'au sein de l'archive. Les paramètres optionnels permettent un éventuel contrôle sur quels fichiers seront extraits et si les fichiers déjà présents sur le disque peuvent être écrasés. Le second paramètre files peut être le nom d'un fichier ou d'un répertoire à extraire, ou tableau de nom de fichiers et de répertoires à extraire. Par défaut, cette méthode n'écrasera aucun fichier déjà existant, à moins que le troisième paramètre soit à TRUE. Cette méthode est identique à ZipArchive::extractTo().

Liste de paramètres

pathto

Chemin au sein de l'archive des fichiers à effacer.

files

Le nom d'un fichier ou d'un répertoire à extraire, ou un tableau de fichiers/répertoires à extraire

overwrite

Le passer à TRUE pour activer l'écrasement des fichiers déjà existants

Valeurs de retour

retourne TRUE en cas de succès, mais il est préférable de vérifier les exception soulevées et de considérer le succès si aucune ne l'est.

Erreurs / Exceptions

Soulève une exception PharException si des erreurs sont rencontrés lors de l'écriture des changements sur le disque.

Exemples

Exemple #1 Un exemple avec PharData::extractTo()

<?php
try {
    
$phar = new PharData('monphar.tar');
    
$phar->extractTo('/chemin/complet'); // extrait tous les fichiers
    
$phar->extractTo('/un/autre/chemin''fichier.txt'); // extrait seulement fichier.txt
    
$phar->extractTo('/ce/chemin',
        array(
'fichier1.txt''fichier2.txt')); // extrait seulement 2 fichiers
    
$phar->extractTo('/troisieme/chemin'nulltrue); // extrait tous les fichiers, en écrasant
} catch (Exception $e) {
    
// on traite les erreurs
}
?>

Voir aussi



PharData::isWritable

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::isWritableVérifie si l'archive tar/zip peut être modifiée

Description

bool PharData::isWritable ( void )

Cette méthode retourne TRUE si l'archive tar/zip sur le disque n'est pas en lecture seule. Contrairement à Phar::isWritable(), les archives tar/zip de données peuvent être modifiées même si phar.readonly est à 1.

Liste de paramètres

Aucun paramètre.

Valeurs de retour

Retourne TRUE si l'archive tar/zip peut être modifiée

Voir aussi

  • Phar::canWrite() - Détermine si l'extension phar supporte la création et l'écriture des phars
  • Phar::isWritable() - Retourne TRUE si l'archive phar peut être modifiée



PharData::offsetSet

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::offsetSetremplit un fichier au sein de l'archive tar/zip avec le contenu d'un fichier externe ou d'une chaîne de caractères

Description

void PharData::offsetSet ( string $offset , string $value )

C'est une implémentation de l'interface ArrayAccess permettant la manipulation directe du contenu d'une archive tar/zip en utilisant les crochets, opérateurs d'accès au tableau. offsetSet est utilisé pour modifier un fichier existant ou pour ajouter un nouveau fichier à l'archive tar/zip.

Liste de paramètres

offset

Le chemin (relatif) du fichier à modifier au sein de l'archive tar ou zip.

value

Contenu du fichier.

Valeurs de retour

Aucune valeur de retour.

Erreurs / Exceptions

Soulève une exception PharException si des problèmes ont été rencontrés lors de l'écriture sur le disque des changements de l'archive tar/zip.

Exemples

Exemple #1 Un exemple avec PharData::offsetSet()

offsetSet ne doit pas être accédé directement, mais plutôt utilisé via l'opérateur [].

<?php
$p 
= new PharData('/chemin/vers/mon.tar');
try {
    
// appelle offsetSet
    
$p['fichier.txt'] = 'Salut';
} catch (
Exception $e) {
    echo 
'Ne peut pas modifier fichier.txt:'$e;
}
?>

Voir aussi

  • Phar::offsetSet() - met le contenu d'un fichier interne à l'archive à l'identique du contenu d'un fichier externe



PharData::offsetUnset

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::offsetUnsetefface un fichier d'une archive tar/zip

Description

bool PharData::offsetUnset ( string $offset )

C'est une implémentation de l'interface ArrayAccess permettant la manipulation directe du contenu d'une archive tar/zip en utilisant les crochets, opérateurs d'accès au tableau. offsetUnset est utilisé pour effacer un fichier existant et est appelé par la construction de langage unset().

Liste de paramètres

offset

Le chemin (relatif) du fichier à modifier au sein de l'archive tar ou zip.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Erreurs / Exceptions

Soulève une exception PharException si des problèmes ont été rencontrés lors de l'écriture sur le disque des changements de l'archive tar/zip.

Exemples

Exemple #1 Un exemple avec PharData::offsetUnset()

<?php
$p 
= new PharData('/chemin/vers/mon.zip');
try {
    
// efface fichier.txt de mon.zip en appelant offsetUnset
    
unset($p['fichier.txt']);
} catch (
Exception $e) {
    echo 
'Ne peut pas effacer fichier.txt: '$e;
}
?>

Voir aussi



PharData::setAlias

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::setAliasfonction inutile (Phar::setAlias n'est pas valide pour PharData)

Description

bool PharData::setAlias ( string $alias )

Les archives tar/zip non exécutables ne peuvent pas avoir d'alias, donc cette méthode ne fait que soulever une exception.

Liste de paramètres

alias

Une courte chaîne de caractères à laquelle se référer pour faire appel à l'archive via le gestionnaire de flux phar. Ce paramètre est ignoré.

Valeurs de retour

Erreurs / Exceptions

Soulève une exception PharException lors de l'appel à la méthode

Voir aussi



PharData::setDefaultStub

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::setDefaultStubfonction inutile (Phar::setDefaultStub n'est pas valide pour PharData)

Description

bool PharData::setDefaultStub ([ string $index [, string $webindex ]] )

Les archives tar/zip non-exécutables ne peuvent pas avoir de conteneur de chargement, donc cette méthode ne fait que soulever une exception.

Liste de paramètres

index

Chemin relatif au sein de l'archive phar à exécuter en cas d'accès à partir de la ligne de commande

webindex

Chemin relatif au sein de l'archive phar à exécuter en cas d'accès à partir d'un navigateur

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Erreurs / Exceptions

Soulève une exception PharException lors de l'appel à la méthode

Voir aussi

  • Phar::setDefaultStub() - Utilisé pour fixer le chargeur PHP ou le conteneur de chargement d'une archive Phar en tant que chargeur par défaut



Phar::setMetadata

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::setMetadataFixe les méta-données de l'archive

Description

void Phar::setMetadata ( mixed $metadata )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Phar::setMetadata() doit être utilisé pour stocker des méta-données personnalisées qui décrivent quelque chose à propos de l'archive phar en tant qu'entité complète. PharFileInfo::setMetadata() doit être utilisé pour les méta-données spécifiques aux fichiers. Les méta-données peuvent dégrader les performances de chargement d'une archive phar si les données sont trop lourdes.

Les méta-données peuvent être utilisées pour spécifier quel fichier au sein de l'archive doit être utilisé pour charger l'archive ou l'emplacement d'un fichier de manifeste comme le fichier package.xml de » PEAR. De manière générale, n'importe quelle donnée utile décrivant l'archive phar peut être stockée.

Liste de paramètres

metadata

N'importe quelle variable PHP contenant de l'information à stocker pour décrire l'archive phar

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Un exemple avec Phar::setMetadata()

<?php
// on s'assure que le phar n'existe pas
@unlink('nouveauphar.phar');
try {
    
$p = new Phar(dirname(__FILE__) . '/nouveauphar.phar'0'nouveauphar.phar');
    
$p['fichier.php'] = '<?php echo "salut"';
    
$p->setMetadata(array('chargement' => 'fichier.php'));
    
var_dump($p->getMetadata());
} catch (
Exception $e) {
    echo 
'Ne peut pas créer/modifier le phar:'$e;
}
?>

L'exemple ci-dessus va afficher :

array(1) {
  ["chargement"]=>
  string(11) "fichier.php"
}

Voir aussi



Phar::setSignatureAlgorithm

(PHP >= 5.3.0, PECL phar >= 1.1.0)

Phar::setSignatureAlgorithmAssigne l'algorithme de signature d'un phar et l'applique

Description

void Phar::setSignatureAlgorithm ( int $sigtype )

Note:

Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Assigne l'algorithme de signature d'un phar et l'applique. L'algorithme de signature doit être Phar::MD5, Phar::SHA1, Phar::SHA256, Phar::SHA512, ou Phar::PGP (PGP n'est pas encore supporté et implique Phar::SHA1).

Liste de paramètres

sigtype

Un algorithme parmi Phar::MD5, Phar::SHA1, Phar::SHA256, Phar::SHA512, or Phar::PGP

Valeurs de retour

Aucune valeur n'est retournée.

Erreurs / Exceptions

Soulève une exception UnexpectedValueException pour beaucoup d'erreurs, une exception BadMethodCallException si l'appel est fait pour une archive phar basée sur tar ou sur zip, une exception PharException si des problèmes sont rencontrés lors de l'écriture des changements sur le disque.

Voir aussi



PharData::setStub

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::setStubfonction inutile (Phar::setStub n'est pas valide pour PharData)

Description

bool PharData::setStub ( string $stub )

Les archives tar/zip non-exécutables ne peuvent pas avoir de conteneur de chargement, donc cette méthode ne fait que soulever une exception.

Liste de paramètres

stub

Une chaîne de caractères ou un gestionnaire de flux ouvert à utiliser en tant que conteneur de chargement exécutable pour l'archive phar. Ce paramètre est ignoré.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Erreurs / Exceptions

Soulève une exception PharException lors de tout appel à la méthode

Voir aussi

  • Phar::setStub() - Utilisé pour spécifier le chargeur PHP ou le conteneur de chargement d'une archive Phar


Sommaire



La classe PharFileInfo

(No version information available, might only be in SVN)

Introduction

La classe PharFileInfo fournit une interface de haut niveau pour accéder au contenu et aux attributs d'un fichier contenu dans une archive phar.

Synopsis de la classe

PharFileInfo extends SplFileInfo {
/* Propriétés */
/* Méthodes */
void chmod ( int $permissions )
bool compress ( int $compression )
__construct ( string $entry )
bool decompress ( void )
bool delMetadata ( void )
int getCRC32 ( void )
int getCompressedSize ( void )
mixed getMetadata ( void )
int getPharFlags ( void )
bool hasMetadata ( void )
bool isCRCChecked ( void )
bool isCompressed ([ int $compression_type = 9021976 ] )
bool isCompressedBZIP2 ( void )
bool isCompressedGZ ( void )
bool setCompressedBZIP2 ( void )
bool setCompressedGZ ( void )
void setMetadata ( mixed $metadata )
bool setUncompressed ( void )
}

PharFileInfo::chmod

(PHP >= 5.3.0, PECL phar >= 1.0.0)

PharFileInfo::chmodFixe les bits de permission spécifiques aux fichiers

Description

void PharFileInfo::chmod ( int $permissions )

PharFileInfo::chmod() permet de fixer les bits d'exécution des fichiers, ainsi que ceux de lecture seule. Ceux d'écriture sont ignorés car fixés au démarrage par la variable INI phar.readonly. Comme avec toutes les fonctionnalités qui modifient le contenu d'un phar, la variable INI phar.readonly doit être à off pour réussir si le fichier est au sein d'une archive Phar. Les fichiers au sein d'une archive PharData n'ont pas cette restriction.

Liste de paramètres

permissions

les permissions (voir chmod())

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Un exemple avec PharFileInfo::chmod()

<?php
// on s'assure que le phar n'existe pas
@unlink('nouveauphar.phar');
try {
    
$p = new Phar('nouveauphar.phar'0'nouveauphar.phar');
    
$p['fichier.sh'] = '#!/usr/local/lib/php
    <?php echo "salut"; ?>'
;
    
// met le bit d'exécution
    
$p['fichier.sh']->chmod(0555);
    
var_dump($p['fichier.sh']->isExecutable());
} catch (
Exception $e) {
    echo 
'Ne peut pas créer/modifier le phar: '$e;
}
?>

L'exemple ci-dessus va afficher :

bool(true)



PharFileInfo::compress

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharFileInfo::compressCompresse l'entrée Phar courante avec une des compressions zlib ou bzip2

Description

bool PharFileInfo::compress ( int $compression )

Cette méthode compresse le fichier au sein de l'archive Phar en utilisant l'une des compressions bzip2 ou zlib. Les extensions bzip2 ou zlib doivent être activées pour tirer parti de cette fonctionnalité. De plus, si le fichier est déjà compressé, l'extension adéquate doit être activée pour le décompresser. Comme avec toutes les fonctionnalités qui modifient le contenu d'un phar, la variable INI phar.readonly doit être à off pour réussir si le fichier est au sein d'une archive Phar. Les fichiers au sein d'archives PharData n'ont pas cette restriction.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Erreurs / Exceptions

Soulève une exception BadMethodCallException si la variable INI phar.readonly est à on, ou si l'extension bzip2/zlib n'est pas disponible.

Exemples

Exemple #1 Un exemple avec PharFileInfo::compress()

<?php
try {
    
$p = new Phar('/chemin/vers/mon.phar'0'mon.phar');
    
$p['monfichier.txt'] = 'salut';
    
$file $p['monfichier.txt'];
    
var_dump($file->isCompressed(Phar::BZ2));
    
$p['monfichier.txt']->compress(Phar::BZ2);
    
var_dump($file->isCompressed(Phar::BZ2));
} catch (
Exception $e) {
    echo 
'Ne peut pas créer/modifier mon.phar : '$e;
}
?>

L'exemple ci-dessus va afficher :

bool(false)
bool(true)

Voir aussi



PharFileInfo::__construct

(PHP >= 5.3.0, PECL phar >= 1.0.0)

PharFileInfo::__constructConstruit un objet d'entrée Phar

Description

PharFileInfo::__construct ( string $entry )

Cette méthode ne doit pas être appelé directement. A la place, un objet PharFileInfo est initialisé en appelant Phar::offsetGet() via un accès de type tableau.

Liste de paramètres

entry

L'URL complète pour récupérer un fichier. Si vous voulez récupérer les informations du fichier mon/fichier.php du phar boo.phar, vous devrez préciser phar://boo.phar/mon/fichier.php.

Erreurs / Exceptions

Soulève une exception BadMethodCallException si __construct() est appelé deux fois. Soulève une exception UnexpectedValueException si l'URL du phar demandé est mal formée, si le phar ne peut pas être ouvert ou si le fichier ne peut pas être trouvé au sein du phar.

Exemples

Exemple #1 Exemple avec PharFileInfo::__construct()

<?php
try {
    
$p = new Phar('/chemin/vers/mon.phar'0'mon.phar');
    
$p['fichierdetest.txt'] = "salut\nmon\npote";
    
$file $p['fichierdetest.txt'];
    foreach (
$file as $line => $text) {
        echo 
"ligne numéro $line$text";
    }
    
// ceci marche aussi
    
$file = new PharFileInfo('phar:///chemin/vers/mon.phar/fichierdetest.txt');
    foreach (
$file as $line => $text) {
        echo 
"ligne numéro $line$text";
    }
} catch (
Exception $e) {
    echo 
'L'opération Phar a échoué ', $e;
}
?>

L'exemple ci-dessus va afficher :

ligne numéro 1: salut
ligne numéro 2: mon
ligne numéro 3: pote
ligne numéro 1: salut
ligne numéro 2: mon
ligne numéro 3: pote



PharFileInfo::decompress

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharFileInfo::decompressDécompresse l'entrée Phar courante au sein du phar

Description

bool PharFileInfo::decompress ( void )

Cette méthode décompresse le fichier au sein de l'archive Phar. Selon la façon dont le fichier est compressé, les extensions bzip2 ou zlib doivent être activées pour tirer parti de cette fonctionnalité. Comme avec toutes les fonctionnalités qui modifient le contenu d'un phar, la variable INI phar.readonly doit être à off pour réussir si le fichier est dans une archive Phar. Les fichiers au sein d'archives PharData n'ont pas cette restriction.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Erreurs / Exceptions

Soulève une exception BadMethodCallException si la variable INI phar.readonly est à on, ou si l'extension bzip2/zlib n'est pas disponible.

Exemples

Exemple #1 Exemple avec PharFileInfo::decompress()

<?php
try {
    
$p = new Phar('/chemin/vers/mon.phar'0'mon.phar');
    
$p['monfichier.txt'] = 'salut';
    
$file $p['monfichier.txt'];
    
$file->compress(Phar::GZ);
    
var_dump($file->isCompressed());
    
$p['monfichier.txt']->decompress();
    
var_dump($file->isCompressed());
} catch (
Exception $e) {
    echo 
'Ne peut pas créer/modifier mon.phar: '$e;
}
?>

L'exemple ci-dessus va afficher :

int(4096)
bool(false)

Voir aussi



PharFileInfo::delMetadata

(PHP >= 5.3.0, PECL phar >= 1.2.0)

PharFileInfo::delMetadataEfface les métadonnées de l'entrée

Description

bool PharFileInfo::delMetadata ( void )

Efface les métadonnées de l'entrée, s'il y en a.

Liste de paramètres

Pas de paramètres.

Valeurs de retour

Retourne TRUE en cas de succès, FALSE si l'entrée ne possédait pas de métadonnées. Comme avec toutes les fonctionnalités qui modifient le contenu d'un phar, la variable INI phar.readonly doit être à off pour réussir si le fichier est au sein d'une archive Phar. Les fichiers au sein d'archives PharData n'ont pas cette restriction.

Erreurs / Exceptions

Soulève une exception PharException si des erreurs ont été rencontrées lors de l'écriture des changements sur le disque, et une exception BadMethodCallException si l'accès en écriture est désactivé.

Exemples

Exemple #1 Un exemple avec PharFileInfo::delMetaData()

<?php
try {
    
$a = new Phar('monphar.phar');
    
$a['salut'] = 'salut';
    
var_dump($a['salut']->delMetadata());
    
$a['salut']->setMetadata('mon pote');
    
var_dump($a['salut']->delMetadata());
    
var_dump($a['salut']->delMetadata());
} catch (
Exception $e) {
    
// on traite les erreurs
}
?>

L'exemple ci-dessus va afficher :

bool(false)
bool(true)
bool(false)

Voir aussi



PharFileInfo::getCRC32

(PHP >= 5.3.0, PECL phar >= 1.0.0)

PharFileInfo::getCRC32Retourne le code CRC32 ou soulève une exception si le CRC n'a pas été vérifié

Description

int PharFileInfo::getCRC32 ( void )

Retourne la somme de contrôle crc32() du fichier au sein de l'archive Phar.

Valeurs de retour

La somme de contrôle crc32() du fichier au sein de l'archive Phar.

Erreurs / Exceptions

Soulève une exception BadMethodCallException si le CRC32 du fichier n'a pas encore été vérifié. Ceci n'arrive normalement pas, car le CRC est vérifié à l'ouverture du fichier en lecture ou en écriture.

Exemples

Exemple #1 Exemple avec PharFileInfo::getCRC32()

<?php
try {