PHP: Hypertext Preprocessor 2350 31826991 2008-07-23T17:53:18Z 90.59.45.51 /* Historique */ {{Redirect|PHP}} {{Infobox Langage de programmation | nom = PHP | logo = [[Image:PHP logo.svg|180px|PHP]] | paradigme = [[Programmation impérative]], [[Programmation orientée objet|orientée objet]], [[Programmation fonctionnelle|fonctionnelle]] | développeur = The PHP Group | dernière version = 5.2.6 | date = {{Date|1|mai|2008}} | typage = [[Typage dynamique]] et [[Typage fort|faible]] | influencé par = [[Perl (langage)|Perl]], [[C (langage)|C]], [[C++]] | système d'exploitation = [[Multiplate-forme]] | licence = [[Licence PHP]] - [http://cvs.php.net/viewvc.cgi/ source] | site web = http://www.php.net/ }} '''PHP''' ([[acronyme récursif]] pour ''PHP: Hypertext Preprocessor''<ref name="manpreface">{{Lien web | url=http://www.php.net/manual/fr/preface.php | titre=Manuel PHP : Préface | site=[http://www.php.net/ PHP.net] | consulté le=7 novembre 2007}}</ref>), est un [[langage de script]]s [[logiciel libre|libre]]<ref name="fsfphplicense">{{en}} {{Lien web | url=http://www.fsf.org/licensing/licenses/index_html#GPLIncompatibleLicenses | titre=La license de PHP est reconnue libre par la ''Free Software Foundation'' | consulté le=7 novembre 2007}}</ref> principalement utilisé pour produire des [[Page web dynamique|pages web dynamiques]] via un [[serveur HTTP]]<ref name="manpreface" />, mais pouvant également fonctionner comme n'importe quel [[langage interprété informatique|langage interprété]] de façon locale, en exécutant les programmes en ligne de commande. PHP est un [[Programmation impérative|langage impératif]] disposant depuis la version 5 de fonctionnalités de modèle objet complètes<ref name="poophp5">{{Lien web | url=http://www.php.net/manual/fr/migration5.oop.php | titre=Nouveau modèle objet de PHP 5 | site=[http://www.php.net/ PHP.net] | consulté le=7 novembre 2007}}</ref>. En raison de la richesse de sa [[Bibliothèque logicielle|bibliothèque]], on désigne parfois PHP comme une plate-forme plus qu'un simple langage. ==Historique== Le langage PHP est créé en [[1994]] par [[Rasmus Lerdorf]] pour son [[site Web]]. C'était à l'origine une [[bibliothèque logicielle]] en [[Perl (langage)|Perl]] dont il se servait pour conserver une trace des visiteurs qui venaient consulter son [[Curriculum vitæ|CV]]. Au fur et à mesure qu'il ajoutait de nouvelles fonctionnalités, Rasmus a transformé la bibliothèque en une implémentation en [[langage C]], capable de communiquer avec des bases de données et de créer des applications dynamiques et simples pour le [[World Wide Web|Web]]. Rasmus décida alors en [[1995]] de publier son code, pour que tout le monde puisse l'utiliser et en profiter. PHP s'appelait alors PHP/FI (pour '''''P'''ersonal '''H'''ome '''P'''age Tools/Form Interpreter''). En [[1997]], deux étudiants, [[Andi Gutmans]] et [[Zeev Suraski]], redéveloppèrent le cœur de PHP/FI. Ce travail aboutit un an plus tard avec ''[[Zend Engine]]'', le nouveau cœur de PHP/FI, devenu alors ''PHP: Hypertext Preprocessor'' en version 3.<ref name="histoirephp">{{Lien web | url=http://www.php.net/manual/fr/history.php | titre=Histoire de PHP | site=[http://www.php.net/ PHP.net] | consulté le=7 novembre 2007}}</ref> En [[2002]], PHP est utilisé par plus de 8 millions de sites web à travers le monde<ref name="netcraft2002-02">{{en}} {{Lien web | url=http://survey.netcraft.com/index-200202.html | titre=Netcraft web Server Survey - février 2002 | consulté le=7 novembre 2007}}</ref>, {{référence souhaitée|et en [[2004]] par plus de 15 millions}}. Un indicateur paradoxal de la popularité de PHP est le nombre de [[vulnérabilité (informatique)|failles de sécurité]] concernant des applications PHP et listées avec un identifiant [[Common Vulnerabilities and Exposures|CVE]] sur la base de données américaine des vulnérabilités (National Vulnerability Database). Ces failles représentent 12% du total en 2003, 20% en 2004, 28% en 2005, 43% en 2006, 36% en 2007, 38% sur les deux premiers mois de 2008. Plus d'un quart des vulnérabilités répertoriées sur cette base concerne des applications PHP, plus d'un tiers ces dernières années, et la plupart peuvent être exploitées à distance<ref>{{Lien web|titre=Vulnérabilités liées à PHP sur la ''National Vulnerability Database''|url=http://www.coelho.net/php_cve.html}}</ref>. Ces vulnérabilités s'expliquent par de mauvaises habitudes de programmation (souvent un défaut de validation des entrées) alliées à des caractéristiques douteuses du langage lui-même (par exemple ''register globals'', maintenant déconseillé<ref>{{Lien web|titre=Register Globals|url=http://www.php.fr/doku.php/php.fr/security.globals.html}}</ref>). La version actuelle est la version 5, sortie le [[13 juillet]] [[2004]]<ref name="releasesphp">{{en}} {{Lien web | url=http://www.php.net/releases/ | titre=Historique des sorties de PHP | site=[http://www.php.net/ PHP.net] | consulté le=7 novembre 2007}}</ref>. Elle utilise ''Zend Engine 2'' et introduit un véritable [[Programmation orientée objet|modèle objet]], une gestion des erreurs fondée sur le modèle des exceptions, ainsi que des fonctionnalités de gestion pour les entreprises. PHP 5 apporte beaucoup de nouveautés, telles que le support de [[SQLite]], qui est un système léger de gestion de bases de données embarqué, au détriment de la bibliothèque cliente de [[MySQL]], plus puissante mais qui n'est désormais plus activée par défaut, ainsi que des moyens de manipuler des fichiers et des structures [[Extensible Markup Language|XML]] basés sur ''libxml2'' : * une [[Application Programming Interface|API]] simple nommée [[SimpleXML]], * une API [[Document Object Model]] assez complète, * une interface [[XPath]] utilisant les objets DOM et SimpleXML, * intégration de libxslt pour les transformations [[XSLT]] via l'extension [[Extensible stylesheet language|XSL]], * une bien meilleure gestion des objets par rapport à PHP 4, avec des possibilités équivalentes à celles de [[Java (langage)|Java]]. La dernière mise a jour est la 5.2.6 datant du [[1er mai]] [[2008]]<ref name="actualreleasephp">{{en}} {{Lien web | url=http://www.php.net/downloads.php | titre=Dernière sortie de PHP en date | site=[http://www.php.net/ PHP.net] | consulté le=10 novembre 2007}}</ref>. La version 4.4.x n'est plus maintenue depuis le [[31 décembre]] [[2007]]<ref name="releasesphp" />{{,}}<ref name="findephp4">{{en}} {{Lien web | url=http://www.php.net/archive/2007.php#2007-07-13-1 | titre=PHP 4 end of life announcement | site=[http://www.php.net/ PHP.net] | consulté le=7 novembre 2007}}</ref>. Seuls les patchs de sécurité critiques seront encore développés jusqu'à la date du [[8 août]] [[2008]]<ref name="findephp4" />. La prochaine version de PHP : PHP 6 est encore en développement et sera peut être disponible fin 2008. == Présentation == Le langage PHP est utilisé principalement en tant que [[langage serveur|langage de script côté serveur]], ce qui veut dire que c'est le [[serveur web|serveur]] (la machine qui héberge la page web en question) qui va interpréter le code PHP et générer du code (constitué généralement d'[[XHTML]] ou d'[[Hypertext Markup Language|HTML]], de [[Feuilles de style en cascade|CSS]], et parfois de [[JavaScript]]) qui pourra être interprété par un [[Navigateur web|navigateur]]. PHP peut également générer d'autres formats en rapport avec le Web, comme le [[Wireless Markup Language|WML]], le [[Scalable Vector Graphics|SVG]], le [[Portable Document Format|format PDF]], ou encore des images bitmap telles que [[JPEG]], [[GIF]] ou [[PNG]]. Il a été conçu pour permettre la création d'applications dynamiques, le plus souvent dédiées au [[Web]]. PHP est très majoritairement installé sur un serveur Apache, mais peut être installé sur les autres principaux [[Serveur HTTP|serveurs HTTP]] du marché, par exemple [[IIS]]. Ce couplage permet de récupérer des informations issues d'une base de données, d'un [[système de fichiers]] (contenu de fichiers et de l'arborescence) ou plus simplement des données envoyées par le [[Navigateur web|navigateur]] afin d'être interprétées ou stockées pour une utilisation ultérieure. C'est un langage peu typé et souple et donc facile à apprendre par un débutant mais, de ce fait, des failles de sécurité peuvent rapidement apparaître dans les applications. Pragmatique, PHP ne s'encombre pas de théorie et a tendance à choisir le chemin le plus direct. Néanmoins, le nom des fonctions (ainsi que le passage des arguments) ne respecte pas toujours une logique uniforme, ce qui peut être préjudiciable à l'apprentissage. Son utilisation commence avec le traitement des formulaires puis par l'accès aux bases de données. L'accès aux bases de données est aisé une fois l'installation des modules correspondant effectuée sur le serveur. La force la plus évidente de ce langage est qu'il est devenu au fil du temps un incontournable des offres d'hébergement. Libre, gratuit, simple d'utilisation et d'installation, ce langage nécessite comme tout langage de réseau une bonne compréhension des mécanismes sous-jacents ainsi qu'une connaissance des problèmes de sécurité. La version 5.3 permettra d'utiliser les [[Espace de noms|espaces de noms]], un élément fondamental de l'élaboration d'[[Extension (logiciel)|extensions]], de [[Bibliothèque logicielle|bibliothèques]] et de [[Framework|frameworks]] structurés. La version 6 introduira en interne la bibliothèque [[International Components for Unicode|ICU]] donnant au langage la faculté de traiter [[Unicode]] de manière native. == Fonctionnement == Sa [[syntaxe]] et sa construction ressemblent à celles des langages [[Java (langage)|Java]] et [[Perl (langage)|Perl]], à la différence que le PHP peut être intégré dans du code [[Hypertext Markup Language|HTML]]. PHP appartient par ailleurs à la grande famille des descendants du [[C (langage)|C]], dont la syntaxe est très proche. Dans une utilisation Web, l'exécution du code PHP se déroule ainsi : lorsqu'un visiteur demande à consulter une [[page web]], son [[navigateur web|navigateur]] envoie une requête au [[serveur HTTP]] correspondant. Si la page est identifiée comme un script PHP (généralement grâce à l'extension <code>.php</code>), le serveur appelle l'[[interprète (informatique)|interprète]] PHP qui va traiter et générer le code final de la page (constitué généralement d'[[Hypertext Markup Language|HTML]] ou de [[XHTML]], mais aussi souvent de [[Feuilles de style en cascade|CSS]] et de [[JavaScript|JS]]). Ce contenu est renvoyé au serveur HTTP, qui l'envoie finalement au client. Ce schéma explique ce fonctionnement : [[Image:Php_arch_shema.png|600px|center|Schéma du fonctionnement de PHP]] Une étape supplémentaire est souvent ajoutée : celle du dialogue entre PHP et la [[base de données]]. Classiquement, PHP ouvre une connexion au serveur de [[Système de gestion de base de données|SGBD]] voulu, lui transmet des requêtes et en récupère le résultat, avant de fermer la connexion. [[Image:Php ligne de commandes script exemple hdparm.png|thumbnail|right|Capture d'écran de [[vi (unix)|vi]] en fond, affichant un script PHP, et à droite le résultat du script interprété par PHP]]L'utilisation de PHP en tant que générateur de pages web dynamiques est la plus répandue, mais il peut aussi être utilisé comme [[langage de programmation]] en ligne de commande sans utiliser de serveur HTTP ni de navigateur. Pour réaliser un script PHP exécutable en ligne de commande, il suffit comme en [[Perl (langage)|Perl]] ou en [[Bourne-Again shell|Bash]] d'insérer dans le code en première ligne le ''[[shebang]]'' : <code>#!/usr/bin/php</code> (<code>/usr/bin/</code> est le répertoire standard des fichiers binaires exécutables sur la plupart des distributions). Il existe aussi une extension appelée '''[[PHP-GTK]]''' permettant de créer des applications clientes graphiques sur un ordinateur disposant de la bibliothèque graphique [[GIMP Toolkit|GTK]]. PHP possède un grand nombre de fonctions permettant des opérations sur le [[système de fichiers]], la gestion des [[base de données|bases de données]], des fonctions de [[Algorithme de tri|tri]] et [[Fonction de hash|hachage]], le traitement de [[chaînes de caractères]], la génération et la modification d'images, des [[Algorithmique|algorithmes]] de [[compression de données|compression]]... Le moteur de [[Wikipédia]] est écrit en PHP avec une base [[MySQL]]. Il s'intègre donc dans une plateforme [[LAMP]]. == Syntaxe == Un exemple du traditionnel [[Hello World]] : <source lang="php"> <?php echo 'Hello, World'; ?> </source> ou <source lang="php"> <?php print ('Hello, World'); ?> </source> ou encore (obsolète, peu recommandée) <source lang="php"> <?='Hello, World' ?> </source> <source lang="php"> <?php echo <<<EOT Hello, World EOT; ?> </source> Résultat affiché : Hello, World PHP interprète uniquement le code qui est délimité par <code><?php</code> et <code>?></code>. D'autres balises d'ouvertures et de fermetures existent, notamment les balises courtes <code><?</code> et <code>?></code>, mais elles sont fortement déconseillées car elles dépendent du fichier de configuration <code>php.ini</code> ; la portabilité du code en est alors diminuée.<ref name="phpshorttags">{{Lien web | url=http://www.php.net/manual/fr/language.basic-syntax.php#id2532996 | site=[http://www.php.net/ PHP.net] | titre = Balises d'ouvertures et de fermetures PHP | consulté le=8 novembre 2007}}</ref> == Mascotte == [[Image:Elephpant.gif|left|thumb|L'ÉléPHPant, mascotte non-officielle de PHP]]PHP est souvent accompagné de l'éléPHPant, dessiné par El Roubio<ref>[http://www.elroubio.net/?p=elephpant Présentation des éléPHPants par El Roubio]</ref>. Il s'est inspiré de la ressemblance des lettres PHP avec un éléphant, d'où le nom. Toutes ses œuvres sont distribuées sous licence [[GNU/GPL]]. Il existe aussi des origamis et des peluches ''ÉléPHPant''.{{clr}} == Quelques exemples d'application == <!-- Le nombre d'exemples est limité à 3 par type d'application. --> * [[Wiki]] ([[MediaWiki]], [[WikiNi]], [[DokuWiki]]...) * [[Forum Internet|Forums de discussion]] ([[phpBB]], [[Invision Power Board|IPB]], [[punBB]]...) * Systèmes de gestion de [[weblog]] (blog) ([[Dotclear]], [[WordPress]]...) * [[Système de gestion de contenu|Systèmes de gestion de contenu]] (appelés aussi ''CMS'') ([[Système de publication pour l'internet partagé|Spip]], [[Drupal]], [[Xoops]]...) * [[SGBD|Administration de bases de données]] ([[phpMyAdmin]], [[phpPgAdmin]], [[Eskuel]]...) * [[Framework]]s ([[Zend_Framework]], [[CakePHP]], [[Symfony]], [[Liste de frameworks PHP|etc.]]) == Différentes plates-formes == Un serveur web moderne est généralement caractérisé par son [[système d'exploitation]], son [[serveur HTTP]], son [[langage serveur]] et enfin son [[système de gestion de base de données]] (SGBD), ceci constituant une plate-forme. Dans le cas de PHP comme langage serveur, les combinaisons les plus courantes sont celles d'une plateforme [[LAMP]] (pour '''L'''inux '''A'''pache '''M'''ySQL '''P'''HP) et [[WAMP]] ('''W'''indows '''A'''pache '''M'''ySQL '''P'''HP). Une plate-forme WAMP s'installe généralement par le biais d'un seul logiciel qui intègre Apache, MySQL et PHP, comme par exemple [[EasyPHP]], [[VertrigoServ]] ou [[WampServer]]. Il existe le même type de logiciels pour les plate-formes MAMP ('''M'''ac OS '''A'''pache '''M'''ySQL '''P'''HP), à l'exemple du logiciel [[MAMP]]. Il existe d'autres variantes, par exemple les plate-formes LAPP (le M de MySQL est remplacé par le P de [[PostgreSQL]]) ou encore le logiciel [[XAMPP]] ('''A'''pache '''M'''ySQL '''P'''erl '''P'''HP ; le X indique que le logiciel est multi-plate-formes), un kit de développement multi-plate-formes. Bien entendu, on peut décliner une grande variété d'acronymes sous cette forme. Des confusions peuvent parfois exister entre la plate-forme en elle-même et le logiciel permettant de l'installer, si elles ont le même nom. Il faut également remarquer que la grande majorité des logiciels « tout en un » sont destinés au développement d'applications web en local, et non à être installés sur des serveurs Web. == Annexes == === Articles connexes === * [[Afup|AFUP]] : Association Française des Utilisateurs de PHP * [[Paamayim Nekudotayim]] : nom de l'opérateur <code>::</code> en PHP * [[Liste de frameworks PHP]] : liste des cadres de développement (Frameworks) en PHP * [[Asynchronous JavaScript And XML|AJAX]] * [[PHP Québec]] * [[phpbb]] === Bibliographie === * {{Ouvrage| éditeur=[[Micro Application]]| collection=La Bible Micro Application| titre=PHP 5| auteurs=Laurent Guédon, Damien Heute, Thomas Heute, Pierre-Emmanuel Muller| année=2005| mois=01| jour=19| pages=1320| isbn=2-7429-3608-4| présentation en ligne=http://www.microapp.com/livre_php_5_4608.html}} * ''Pratique de MySQL et PHP'', 3{{e}} édition - Edition O'Reilly ISBN 2-84177-338-8 * ''PHP 5'', 3{{e}} édition - Edition Campus Press ISBN 2-7440-2100-8 * ''PHP 5 et MySQL 5'', 1{{re}} édition - Edition Micro Application ISBN 2-7429-6676-5 * ''PHP 5 Cours et exercices'', 1{{re}} édition - Edition Eyrolles ISBN 2-212-11407-9 * ''PHP et MySQL pour les nuls'', 1e Edition - Edition First Interactive ISBN 2-84427-832-9 * ''PHP 5 avancé'', 4{{e}} édition - Edition Eyrolles ISBN 2-212-12004-4 * ''Le Grand Livre de PHP 5'', 1{{re}} édition - Edition Dunod ISBN 2-10-049118-0 * ''[http://php.openstates.com/ Best practices PHP 5]'', 1{{re}} édition française - Edition Eyrolles ISBN 2-212-11676-4 * ''[http://livre.hello-design.fr/ PHP & MySQL - MySQLi - PDO, Construisez votre application]'', 1{{re}} édition française - Editions ENI ISBN 978-2-7460-4121-9 | EAN : 9782746041219 | Ref. ENI : SO5PHP === Liens externes === {{Wiktionnaire|PHP|PHP}} {{Wikibooks|Programmation PHP|la programmation PHP}} * {{en}} [http://www.php.net/ Site officiel] * {{ODP|/World/Français/Informatique/Programmation/Langages/PHP/|PHP}} === Notes et références === {{Références|colonnes=2}} {{Langages de programmation 2}} {{Portail|Logiciels libres|programmation informatique}} [[Catégorie:PHP|*]] [[Catégorie:Langage de programmation|Php hypertext preprocessor]] [[Catégorie:Langage impératif|Php hypertext preprocessor]] [[Catégorie:Langage de script|Php hypertext preprocessor]] [[Catégorie:Logiciel libre]] [[af:PHP]] [[als:PHP]] [[an:PHP]] [[ar:بي.إتش.بي]] [[az:PHP]] [[bar:PHP]] [[bat-smg:PHP]] [[bg:PHP]] [[bn:পিএইচপি]] [[br:Areg PHP]] [[bs:PHP]] [[ca:PHP]] [[cs:PHP]] [[cy:PHP]] [[da:PHP]] [[de:PHP]] [[el:PHP]] [[en:PHP]]{{Lien BA|en}} [[eo:PHP]] [[es:PHP]] [[et:PHP]] [[eu:PHP]] [[fa:زبان برنامه‌نویسی پی‌اچ‌پی]] [[fi:PHP]] [[gl:PHP]] [[he:PHP]] [[hi:पीएचपी]] [[hr:PHP]] [[hu:PHP]] [[id:PHP]] [[is:PHP]] [[it:PHP]] [[ja:PHP: Hypertext Preprocessor]] [[ka:PHP]] [[kk:PHP]] [[km:PHP]] [[ko:PHP]] [[ku:PHP]] [[la:PHP]] [[lb:PHP]] [[lt:PHP]] [[lv:PHP]] [[mk:PHP]] [[ml:പി.എച്ച്.പി.]] [[ms:PHP]] [[nl:PHP]] [[no:PHP]] [[pl:PHP]] [[pt:PHP]] [[ro:PHP]] [[ru:PHP]] [[sh:PHP]] [[simple:PHP]] [[sk:PHP (programovací jazyk)]] [[sl:PHP]] [[sq:PHP]] [[sr:PHP]] [[sv:PHP]] [[tg:PHP]] [[th:ภาษาพีเอชพี]] [[tl:PHP]] [[tr:PHP]] [[uk:PHP]] [[ur:PHP]] [[uz:PHP]] [[vi:PHP]] [[vls:PHP]] [[zh:PHP]] [[zh-min-nan:PHP]] [[zh-yue:PHP]]