PHP

Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuis Php)
Aller à : navigation, rechercher
Page d'aide sur les redirections « PHP » redirige ici. Pour les autres significations, voir PHP (homonymie).
PHP
Logo.

Apparu en 1994
Auteur Rasmus Lerdorf
Développeurs The PHP Group
Dernière version 5.6.2 (16 octobre 2014) [+/−]
Paradigmes Impératif, orienté objet, fonctionnel, procédural, réflexif.
Langage interprété
Typage Dynamique, Faible
Influencé par Perl
C/C++
Java[1]
Système d'exploitation Multiplate-forme
Licence Licence libre :
Licence PHP[2]
Site web www.php.net

PHP: Hypertext Preprocessor[3], plus connu sous son sigle PHP (acronyme récursif), est un langage de programmation libre[4] principalement utilisé pour produire des pages Web dynamiques via un serveur HTTP[3], mais pouvant également fonctionner comme n'importe quel langage interprété de façon locale. PHP est un langage impératif orienté objet comme C++

Historique[modifier | modifier le code]

Le langage PHP fut créé en 1994 par Rasmus Lerdorf pour son site web. C'était à l'origine une bibliothèque logicielle en C[5] dont il se servait pour conserver une trace des visiteurs qui venaient consulter son CV. Au fur et à mesure qu'il ajoutait de nouvelles fonctionnalités, Rasmus a transformé la bibliothèque en une implémentation capable de communiquer avec des bases de données et de créer des applications dynamiques et simples pour le 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 Personal Home Page 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 à la version 3 de PHP, devenu alors PHP: Hypertext Preprocessor. Peu de temps après, Andi Gutmans et Zeev Suraski commencèrent la réécriture du moteur interne de PHP. Ce fut ce nouveau moteur, appelé Zend Engine - le mot Zend est la contraction de ZEev et aNDi - qui servit de base à la version 4 de PHP[6].

En 2002, PHP est utilisé par plus de 8 millions de sites Web à travers le monde[7], en 2007 par plus de 20 millions[8] et en 2013 par plus de 244 millions[9].

La version actuelle est la version 5, sortie le 13 juillet 2004[10]. Elle utilise Zend Engine 2 et introduit une modélisation objet plus performante, 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 ainsi que des moyens de manipuler des fichiers et des structures XML basés sur libxml2 :

  • une 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 XSL ;
  • une bien meilleure gestion des objets par rapport à PHP 4, avec des possibilités qui tendent à se rapprocher de celles de Java.

La dernière mise à jour est la 5.6.2 datant du 16 octobre 2014[11].

Depuis juin 2011 et le nouveau processus de livraison de PHP, le cycle de livraison de PHP est d'une mise à jour annuelle comportant des changements fonctionnels importants, la durée de vie d'une branche est de 3 ans et trois branches stables sont maintenues. Cela signifie que lorsqu'une nouvelle version de PHP 5.x sort, la version 5.x-3 n'est plus supportée

Depuis la sortie de PHP 5.6, la configuration est :

  • branche de développement : 5.7
  • branches encore supportées (corrections de bugs et de la sécurité) : 5.6, 5.5
  • branche en obsolescence et ne recevant que des correctifs de sécurité : 5.4
  • toutes les branches < 5.4 ne sont plus supportées

Il est à noter qu'historiquement PHP disposait d'une configuration par défaut privilégiant la souplesse à la sécurité (par exemple register globals, qui a été activé par défaut jusqu'à PHP 4.2[12]). Cette souplesse à permis à de nombreux développeurs d'apprendre PHP mais le revers de la médaille a été que de nombreuses applications PHP étaient mal sécurisées. Le sujet a bien été pris en main par le PHPGroup qui à mis en place des configurations par défaut mettant l'accent sur la sécurité. Il en résultait une réputation de langage peu sécurisé, réputation d'insécurité qui n'a plus de raison d'être.

Historique des versions[modifier | modifier le code]

Code des couleurs
Rouge Ancienne version, non supportée
Orange Ancienne version, correctifs de sécurité uniquement
Vert Version actuelle, améliorations et correctifs de sécurité
Bleu Version future
Historique des versions
Version majeure Version mineure Date de sortie Notes
1.0 1.0.0 8 juin 1995 Appelé officiellement "Personal Home Page Tools (PHP Tools)", outils pour page personnelle. C'est la première apparition du nom "PHP"[13].
2.0 2.0.0 12 novembre 1997
3.0 3.0.0 6 juin 1998 Passage d'une personne à une équipe de développeurs. Zeev Suraski et Andi Gutmans réécrivent la base de cette version[13].
4.0 4.0.0 22 mai 2000 Ajoute système d'analyseur syntaxique plus avancé appelé le Zend engine. Ce moteur procède en deux étapes d'analyse puis d'exécution.[14]
4.1.0 10 décembre 2001 Introduit les superglobals ($_GET, $_POST, $_SESSION, etc.)[14]
4.2.0 22 avril 2002 Désactive register_globals par default. Les données en provenance du réseau ne sont plus insérées directement dans l'espace de nom global, réduisant ainsi les possibilités de failles de sécurité[14]
4.3.0 27 décembre 2002 Introduit le CLI, en addition au CGI[14].
4.4.0 11 juillet 2005 Ajout du manuel (pages accessibles par la commande man) pour les scripts phpize et php-config[14].
4.4.8 3 janvier 2008 Correction de bugs et de failles de sécurité. Devait être la dernière correction de PHP 4.4. Mises à jour de sécurité uniquement jusqu'au 8 août 2008 si nécessaire[15].
4.4.9 7 août 2008 Plus de sécurité et résolution de bugs. Dernière version de PHP 4.4[16],[17].
5.0 5.0.0 13 juillet 2004 Zend Engine II avec un nouveau modèle objet[18].
5.1 5.1.0 24 novembre 2005 Amélioration de performances par l'introduction de variables de compilation dans un moteur PHP repensé[18].
5.2 5.2.0 2 novembre 2006 Activation par défaut de l'extension «filter»[18].
5.2.8 8 décembre 2008[19] Correction urgente d'un bug[19]
5.2.9 26 février 2009[20]
5.2.10 18 juin 2009[21]
5.2.11 17 septembre 2009[22]
5.2.12 17 décembre 2009[23]
5.2.13 25 février 2010[24]
5.2.14 22 juillet 2010[25] Dernière version de la branche 5.2, hors correction de problèmes concernant la sécurité.
5.2.15 9 décembre 2010[26]
5.2.16 16 décembre 2010[27] Arrêt du support de la branche 5.2
5.2.17 6 janvier 2011[28] Correction d'un bug de stabilité critique.
5.3 5.3.0 30 juin 2009[29] Support des espaces de noms ; Late Static Bindings (résolution statique à la volée) ; étiquettes de saut (goto limité) ; fermetures (closures) ; Native PHP archives (phar) ; ramasse-miettes de références cycliques ; connexion persistante avec MySQLi, sqlite3 ; ajout de fileinfo en tant que remplacement de mime_magic pour un meilleur support de MIME ; raccourci pour l’opérateur ternaire (?:) ; fonctions anonymes ; nombreuses corrections de bug[30]...
5.3.1 19 novembre 2009[31] Correction d'un problème au niveau du téléchargement de fichier pouvant être utilisé pour effectuer une attaque par déni de service[32].
5.3.2 4 mars 2010[33] Correction d'un grand nombre de bugs[34]
5.3.3 22 juillet 2010[35] Introduit PHP-FPM[36]
5.3.4 10 décembre 2010[37] Mise à jour de sécurité et correction de bugs
5.3.5 6 janvier 2011[28] Correction d'un bug de stabilité critique.
5.3.6 17 mars 2011[28] Mise à jour de sécurité et correction de bugs.
5.3.7 18 août 2011[38] Mise à jour de sécurité et correction de bugs.
5.3.8 23 août 2011[39] Correction express de deux bug de sécurité introduits dans PHP 5.3.7.
5.3.9 10 janvier 2012[40] Correction d'un grand nombre de bugs[41]
5.3.10 2 février 2012[42] Correction d'un bug[43]
5.3.11 26 avril 2012 Corrections de bugs
5.3.12 3 mai 2012 Mise à jour de sécurité
5.3.13 8 mai 2012 Mise à jour de sécurité
5.3.14 14 juin 2012 Corrections de bugs et mise à jour de sécurité
5.3.15 19 juillet 2012 Corrections de bugs et mise à jour de sécurité
5.3.16 16 août 2012 Corrections de bugs
5.3.17 13 septembre 2012 Corrections de bugs
5.3.18 18 octobre 2012 Corrections de bugs
5.3.19 22 novembre 2012 Corrections de bugs
5.3.20 20 décembre 2012 Corrections de 13 bugs[44].
5.3.21 17 janvier 2013 Corrections de 5 bugs[45].
5.3.22 21 février 2013 Corrections de 6 bugs[46].
5.3.23 14 mars 2013 Corrections de 7 bugs[47].
5.3.24 11 avril 2013 Corrections de 6 bugs[48].
5.3.25 9 mai 2013 Corrections de 6 bugs[49].
5.3.26 6 juin 2013 Correction de 8 bugs[50].
5.3.27 11 juillet 2013 Correction de bogues[51].
5.3.28 12 décembre 2013 Correction de 2 bugs de sécurité relatifs à l'intégration d'OpenSSL[52].
5.3.29 14 août 2014 Dernière version de la branche 5.3 qui ne sera plus maintenue [53].
5.4 5.4.0 1er mars 2012 Support des traits ; syntaxe courte des tableaux introduite ; accès aux index de tableaux en sortie de fonctions ; les fermetures supportent $this ; <?= toujours disponible ; accès aux attributs d'un objet dès l'instanciation ; ajout syntaxe Class::{expr}() ; ajout format de nombres binaires ; suivi des envois de fichiers via l'extension de session ; serveur web embarqué en CLI[54] dédié au développement ; support de Dtrace ; suppression des extensions magic quotes, safe_mode, register_globals et register_long_array[54].
5.4.1 26 avril 2012 Corrections de bugs
5.4.2 3 mai 2012 Mise à jour de sécurité
5.4.3 8 mai 2012 Mise à jour de sécurité
5.4.4 14 juin 2012 Corrections de bugs et mise à jour de sécurité
5.4.5 19 juillet 2012 Corrections de bugs et mise à jour de sécurité
5.4.6 16 août 2012 Corrections de bugs
5.4.7 13 septembre 2012 Corrections de bugs
5.4.8 18 octobre 2012 Corrections de bugs
5.4.9 22 novembre 2012 Correction de bugs
5.4.10 20 décembre 2012 Correction de 18 bugs[55].
5.4.11 14 janvier 2013 Correction de 10 bugs[56].
5.4.12 21 février 2013 Correction de 17 bugs[57].
5.4.13 14 mars 2013 Correction de 13 bugs[58].
5.4.14 11 avril 2013 Correction de 11 bugs[59].
5.4.15 9 mai 2013 Correction de 6 bugs[60].
5.4.16 6 juin 2013 Correction de 16 bugs[61].
5.4.17 4 juillet 2013 Correction de 20 bugs.
5.4.18 15 août 2013 Corrections de bugs.
5.4.19 22 août 2013 Corrections de bugs.
5.4.20 19 septembre 2013 Corrections de bugs.
5.4.21 17 octobre 2013 Corrections de bugs.
5.4.22 14 novembre 2013 Corrections de bugs.
5.4.23 12 décembre 2013 Corrections de bugs.
5.4.24 9 janvier 2014 Corrections de bugs.
5.4.25 6 février 2014 Corrections de bugs.
5.4.26 6 mars 2014 Corrections de bugs. Ajout de ldap_modify_batch()
5.4.27 3 avril 2014 Corrections de bugs.
5.4.28 1 mai 2014 Corrections de bugs.
5.4.29 29 mai 2014 Corrections de bugs.
5.4.30 26 juin 2014 Corrections de bugs.
5.4.31 24 juillet 2014 Corrections de bugs.
5.4.32 21 août 2014 Corrections de bugs.
5.5 5.5.0 20 juin 2013 Support des générateurs et des coroutines ; ajout d'une API de hachage des mots de passe ; intégration en standard du système de cache Zend OPcache[62] ; correction de nombreux bugs ; arrêt du support de Windows XP et Windows Server 2003 ; mise à jour de la bibliothèque GD ; les fonctions mysql_ sont maintenant considérées comme obsolètes (mise en avant de mysqli_ et de PDO_MySQL).
5.5.1 18 juillet 2013 Correction de 25 bugs.
5.5.2 18 juillet 2013 Correction d'une vingtaine de bugs.
5.5.3 22 août 2013 Correction d'un bug.
5.5.4 19 septembre 2013 Corrections de bugs, amélioration de fputcsv().
5.5.5 17 octobre 2013 Corrections de bugs, nouvelle fonction opcache_compile_file(), support du système GNU Hurd, ajout tu type Mime application/pdf dans le server de développement.
5.5.6 14 novembre 2013 Corrections de bugs et amélioration des performanves de array_merge et func_get_args().
5.5.7 12 décembre 2013 Corrections de bugs, ajout du support de getallheaders() dans le serveur de dev, ajout de apache_response_headers(), ajout de types Mime dans le serveur de dev.
5.5.8 9 janvier 2014 Corrections de bugs.
5.5.9 6 février 2014 Corrections de bugs.
5.5.10 6 mars 2014 Corrections de bugs. Passage à PCRE 8.34. Ajout de ldap_modify_batch()
5.5.11 2 avril 2014 Corrections de bugs. Améliorations mineures.
5.5.12 30 avril 2014 Corrections de bugs.
5.5.13 29 mai 2014 Corrections de bugs. Ajout des types Mime xsl/xml au serveur de développement intégré.
5.5.14 29 juin 2014 Corrections de bugs.
5.5.15 24 juillet 2014 Corrections de bugs.
5.5.16 21 août 2014 Corrections de bugs.
5.6 5.6.0 28 août 2014 Nouvelle syntaxe pour les fonctions à paramètres variables et dépaquetage de paramètres, importation de fonctions au sein d'espaces de noms, intégration du débogueur phpdbg en standard, amélioration de l'extension zip, expressions acceptées pour la définition de constantes, amélioration de la gestion des données POST, support de la surcharge d'opérateurs dans le Zend Engine. Nouvelle méthode magique __debugInfo() fournissant des informations de débogage sur les objets. Améliorations diverses sur le support de SSL/TLS. Ajout de l'opérateur de puissance « ** ». Téléchargement montant supérieurs à 2 Go désormais supportés.

PHP 6 et Unicode[modifier | modifier le code]

En 2005, le projet de faire de PHP un langage supportant et fonctionnant nativement en Unicode a été lancé par Andrei Zmievski, ceci en s'appuyant sur la bibliothèque International Components for Unicode (ICU) et en utilisant UTF-16 pour représenter les chaînes de caractères dans le moteur[63].

Étant donné que cela représentait un changement majeur tant dans le fonctionnement du langage que dans le code PHP créé par ses utilisateurs, il fut décidé d'intégrer cela dans une nouvelle version 6.0 avec d'autres fonctionnalités importantes alors en développement[64]. Toutefois, le manque de développeurs experts en Unicode ainsi que les problèmes de performance résultant de la conversion des chaînes de et vers UTF-16 (rarement utilisé dans un contexte web), ont conduit au report récurrent de la livraison de cette version[65]. Par conséquent, une version 5.3 fut créée en 2009 intégrant de nombreuses fonctionnalités non liées à Unicode qui était initialement prévues pour la version 6.0, notamment le support des espaces de nommage (namespaces) et des fonctions anonymes. En mars 2010, le projet 6.0 intégrant unicode fut abandonné et la version 5.4 fut préparée afin d'intégrer la plupart des fonctionnalités non liées à l'unicode encore dans la branche 6.0, telles que les traits ou l'extension des closures au modèle objet[66].

Le projet est depuis passé à un cycle de livraison prévisible (annuel) contenant des avancées significatives mais contenues tout en préservant au maximum la rétro-compatibilité avec le code PHP existant (5.4 en 2012, 5.5 en 2013, 5.6 prévue pour l'été 2014). Depuis janvier 2014[67], l'idée d'une nouvelle version majeure introduisant Unicode mais se basant sur UTF-8 (largement devenu depuis le standard du Web pour l'Unicode) et permettant certains changements pouvant casser la rétro-compatibilité avec du code PHP ancien est de nouveau discutée et les RFC sont maintenant triées selon leur implémentation en 5.x (évolutions ne causant pas ou marginalement de cassure de la rétro-compatibilité) ou dans la future version majeure (évolutions majeures du moteur et évolutions impliquant une non-compatibilité ascendante).

PHP 7[modifier | modifier le code]

En juillet 2014, la communauté PHP décida que la prochaine version de PHP serait la 7 [68]et non pas 6, afin de ne pas être confondue avec la version 6 abandonnée en 2010 dont les bases techniques étaient différentes. Cette version 7 est construite à partir du travail important de réécriture du code (refactoring) par la société Zend dans la branche PHPNG visant à augmenter significativement les performances de PHP et créer les bases nécessaires à la compilation à la volée (JIT) [69].

Présentation[modifier | modifier le code]

PHP est un langage de script utilisé le plus souvent côté serveur : dans cette architecture, le serveur interprète le code PHP des pages web demandées et génère du code (HTML, XHTML, CSS par exemple) et des données (JPEG, GIF, PNG par exemple) pouvant être interprétés et rendues par un navigateur. PHP peut également générer d'autres formats comme le WML, le SVG, le PDF.

Il a été conçu pour permettre la création d'applications dynamiques, le plus souvent développées pour le Web. PHP est le plus souvent couplé à un serveur Apache bien qu'il puisse être installé sur la plupart des serveurs HTTP tel que 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 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 correspondants effectuée sur le serveur. La force la plus évidente de ce langage est qu'il a permis au fil du temps la résolution aisée de problèmes autrefois compliqués et est devenu par conséquent un composant incontournable des offres d'hébergements.

Il est multiplate-forme : autant sur Linux qu'avec Windows il permet aisément de reconduire le même code sur un environnement à peu près semblable (prendre en compte les règles d'arborescences de répertoires qui peuvent changer).

Libre, gratuit, simple d'utilisation et d'installation, ce langage nécessite comme tout langage de programmation une bonne compréhension des principales fonctions usuelles ainsi qu'une connaissance aiguë des problèmes de sécurité liés à ce langage.

La version 5.3 a introduit de nombreuses fonctionnalités : les espaces de noms — un élément fondamental de l'élaboration d'extensions, de bibliothèques et de frameworks structurés, les fonctions anonymes, les fermetures, etc.

Fonctionnement[modifier | modifier le code]

PHP appartient à la grande famille des descendants du C, dont la syntaxe est très proche. En particulier, sa syntaxe et sa construction ressemblent à celles des langages Java et Perl, à la différence que du code PHP peut facilement être mélangé avec du code HTML au sein d'un fichier PHP.

Dans une utilisation Web, l'exécution du code PHP se déroule ainsi : lorsqu'un visiteur demande à consulter une page Web, son 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 .php), le serveur appelle l'interprète PHP qui va traiter et générer le code final de la page (constitué généralement d'HTML ou de XHTML, mais aussi souvent de CSS et de JS). Ce contenu est renvoyé au serveur HTTP, qui l'envoie finalement au client.

Ce schéma explique ce fonctionnement :

Php arch shema.png

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 SGBD voulu, lui transmet des requêtes et en récupère le résultat, avant de fermer la connexion.

Capture d'écran de Vim 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 ou de script en ligne de commande sans utiliser de serveur HTTP ni de navigateur. Il permet alors d'utiliser de nombreuses fonctions du langage C et plusieurs autres sans nécessiter de compilation à chaque changement du code source.

Pour réaliser en Linux/UNIX un script PHP exécutable en ligne de commande, il suffit comme en Perl ou en Bash d'insérer dans le code en première ligne le shebang : #! /usr/bin/php[70]. Sous un éditeur de développement comme SciTE, même en Windows, une première ligne <?php suffit, si le fichier possède un type .php.

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 GTK+, ou encore son alternative WinBinder.

PHP possède un grand nombre de fonctions permettant des opérations sur le système de fichiers, la gestion des bases de données, des fonctions de tri et hachage, le traitement de chaînes de caractères, la génération et la modification d'images, des algorithmes de compression...

Le moteur de Wikipédia, MediaWiki, est écrit en PHP et interagit avec une base MySQL ou PostgreSQL.

Syntaxe[modifier | modifier le code]

Hello world[modifier | modifier le code]

Quelques exemples du traditionnel Hello world :

<?php
    // forme la plus simple, recommandée
    echo 'Hello World';
?>

echo étant une structure du langage, il est possible – et même recommandé – de ne pas mettre de parenthèses, ce qui lui permet en plus d'accepter plusieurs paramètres :

<?php
    echo 'Hello ', 'World';
?>

Il est aussi possible d'utiliser la version raccourcie :

<?='Hello World'?>

Résultat affiché :

  Hello World

Balises[modifier | modifier le code]

Le code PHP doit être inséré entre des balises <?php et ?>.

Il existe des notations raccourcies : <? et ?>, voire la notation ASP <% et %>, mais celles-ci sont déconseillées, car elles peuvent être désactivées dans la configuration du serveur (php.ini ou .htaccess) : la portabilité du code est ainsi réduite.

Il existe aussi cette syntaxe, peu courante : <script language="php"> et </script>.

Instructions[modifier | modifier le code]

Les instructions sont séparées par des ";" (il n'est pas obligatoire après la dernière instruction) et les sauts de ligne ne modifient pas le fonctionnement du programme. Il serait donc possible d'écrire :

<?php echo 'Hello World'; echo 'Comment allez-vous ?'; echo 'Il fait beau non ?' ?>

Pour des raisons de lisibilité, il est néanmoins recommandé d'écrire une seule instruction par ligne. Il est aussi préférable d'écrire le dernier ";".

Structures de contrôle[modifier | modifier le code]

Le code PHP est composé par des appels à des fonctions, dans le but d'attribuer des valeurs à des variables, le tout encadré dans des conditions, des boucles. Exemple :

<?php
    // la fonction strtolower renvoie en minuscules la chaîne de caractères passée en paramètre
    $lang = strtolower($_POST['lang']);
    if ($lang === 'fr')
        echo 'Vous parlez français !';
    elseif ($lang === 'en')
        echo 'You speak English!';
    else
        echo 'Je ne vois pas quelle est votre langue !';
?>

Une condition est appliquée quand l'expression entre parenthèses est évaluée à 'true', et elle ne l'est pas dans le cas de 'false'. Sous forme numérique, 0 représente le 'false', et 1 (et tous les autres nombres) représentent le 'true'.

Le code précédent pourrait aussi être écrit de cette manière :

<?php
    $lang = strtolower($_POST['lang']);
    $is_lang_fr = $lang === 'fr';
    $is_lang_en = $lang === 'en';
 
    if ($is_lang_fr)
        echo 'Vous parlez français !';
    elseif ($is_lang_en)
        echo 'You speak English!';
    else
        echo 'Je ne vois pas quelle est votre langue !';
?>

Ici on teste l'égalité entre $lang et "fr", mais pas directement dans le if : le test retourne un boolean (c'est-à-dire soit true, soit false) qui est stocké dans la variable $is_lang_fr. On entre ensuite cette variable dans le if et celui-ci, selon la valeur de la variable, effectuera ou non le traitement.

Les blocs if, elseif et else sont généralement délimités par les caractères "{" et "}", qui peuvent être omis, comme dans les codes précédents, lorsque ces blocs ne contiennent qu'une instruction.

Il également possible d'écrire else if en deux mots, comme en C/C++.

Génération de code HTML[modifier | modifier le code]

On peut tout à fait générer du code HTML avec le script PHP, comme ceci par exemple :

<?php
    $nom = 'Albert';
    echo "<div>Bonjour " . $nom . " !</div>";
?>

Il est également possible d'utiliser une syntaxe alternative pour la structure if/else :

<?php
    $nomsAutorises = array('Albert', 'Bertrand');
    $nomEnCours    = 'Eve';
?>
 
<?php if (in_array($nomEnCours, $nomsAutorises)) : ?>
 
    <!-- code HTML -->
    <p>Bonjour <?php echo $nomEnCours; ?> !</p>
 
<?php else : ?>
 
    <!-- code HTML -->
    <p>Vous n'êtes pas un utilisateur autorisé !</p>
 
<?php endif ?>

Une autre approche pour générer du code HTML est de concaténer l'intégralité du code HTML dans une variable et de réaliser un echo de la variable en fin de fichier :

<?php
    $out = '';
 
    // On fait des echos
    $out .= 'a' . 'b' . 'c' . "\n";
    $out .= 'd' . 'e' . 'f' . "\n";
 
    // On affiche le contenu des echos
    echo $out;
?>

Dans le cas où l'utilisateur aura préféré l'utilisation de la commande echo à la concaténation, il lui sera possible de capturer le flux en utilisant les fonctions ob_start() et ob_get_clean() :

<?php
    // On place le flux dans un buffer
    ob_start();
 
    // On fait des echos
    echo 'a', 'b', 'c', "\n";
    echo 'd', 'e', 'f', "\n";
    require_once 'fichier.php'; // Plein de echos dans ce fichier
 
    // On stoppe la mise en buffer, on récupère son contenu et on met le buffer à vide (pour une éventuelle prochaine bufferisation)
    $out = ob_get_clean();
 
    // On affiche le contenu du buffer
    echo $out;
?>

PHP, tout comme JavaScript, permet aussi de construire un modèle objet de document (DOM)[71], ce qui permet de créer ou modifier un document (X)HTML sans écrire de HTML, comme le montre l'exemple suivant :

<?php
    $doctype = DOMImplementation::createDocumentType('html', "-//W3C//DTD HTML 4.01//EN","http://www.w3.org/TR/html4/strict.dtd");
    $dom = DOMImplementation::createDocument(null, "html", $doctype);
    $html = $dom->documentElement;
    $html->head = $dom->createElement("head");
    $html->appendChild($html->head);
    $html->head->title = $dom->createElement("title");
    $html->head->title->nodeValue = "Exemple de HTML";
    $html->head->appendChild($html->head->title);
    $html->head->charset = $dom->createElement("meta");
    $html->head->charset->setAttribute("http-equiv", "Content-Type");
    $html->head->charset->setAttribute("content", "text/html; charset=utf-8");
    $html->head->appendChild($html->head->charset);
    $html->body = $dom->createElement("body");
    $html->appendChild($html->body);
    $html->body->p = $dom->createElement("p");
    $html->body->p->nodeValue = "Ceci est un paragraphe.";
    $html->body->appendChild($html->body->p);
    $html->body->p->br = $dom->createElement("br");
    $html->body->p->appendChild($html->body->p->br);
    $html->body->p->a = $dom->createElement("a");
    $html->body->p->a->nodeValue = "Ceci est un lien.";
    $html->body->p->a->setAttribute("href", "cible.html");
    $html->body->p->appendChild($html->body->p->a);
    print($dom->saveHTML());
?>

Qui crée le code HTML suivant :

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Exemple de HTML</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body><p>Ceci est un paragraphe.<br/><a href="cible.html">Ceci est un lien.</a></p></body>
</html>

Programmation orientée objet (POO)[modifier | modifier le code]

Comme en C++, les versions actuelles de PHP (à partir de PHP 5) permettent de programmer en orienté objet, en créant des classes contenant des attributs et des méthodes, des instances de classes. L'héritage entre les classes existe aussi. Voici un exemple de création d'une classe :

<?php 
    class Perso {
        const PV_initial = 2000;
        private $PV;
 
        public function __construct($PV = 'N/A') { // Paramètre optionnel
            if (!is_numeric($PV) || !($PV > 0 && $PV < 100000000)) 
                $this->PV = self::PV_initial;
            else 
                $this->PV = $PV;  
        }
        public function getPV() { 
            // Accesseurs
            return $this->PV;
        }
 
        public function isDead(){
            return $this->PV == 0;
        }
    }
 
    // Création d'une classe enfant de Perso 
    class Magicien extends Perso { 
        private $magie;
    }
 
    // Création d'une instance de classe 
    $perso = new Perso(1000);
 
    // Utilisation de l'objet 
    echo 'Votre personnage a ' . $perso->getPV() . ' PV.' . PHP_EOL;
 
    // Constantes de classes  
    echo 'Le PV par défaut attribué à un nouveau personnage est de ' . Perso::PV_initial . '.';
 
    // Destruction de l'objet 
    unset($perso);
?>

Mascotte[modifier | modifier le code]

L'éléPHPant, la mascotte de PHP.

Comme de nombreux projets Open Source, PHP possède une mascotte. Il s'agit de l'éléPHPant, dessiné en 1998 par El Roubio[72].

El Roubio s'est inspiré de la ressemblance des lettres PHP avec un éléphant et du fait que deux des lettres du langage soient déjà présentes dans ce mot, ce qui a permis de créer le néologisme éléPHPant. Toutes les œuvres d'El Roubio sont distribuées sous licence GNU GPL. Une peluche de l'ÉléPHPant[73] bleu existe. D'autres versions ont vu le jour ces dernières années (rose, jaune, rouge, violet et orange) sous l'impulsion de sociétés (PHP Architect ou Zend Technologies) ou de groupes utilisateurs comme PHP Women.

Quelques exemples d'application[modifier | modifier le code]

Différentes plates-formes[modifier | modifier le code]

Un serveur Web en architecture trois tiers est composé d'un système d'exploitation, un serveur HTTP, un langage serveur et enfin un système de gestion de base de données (SGBD), cela constituant une plate-forme.

Dans le cas de PHP comme langage serveur, les combinaisons les plus courantes sont celles d'une plateforme LAMP (pour Linux Apache MySQL PHP) et WAMP (Windows Apache MySQL PHP). Une plate-forme WAMP s'installe généralement par le biais d'un seul logiciel qui intègre Apache, MySQL et PHP, par exemple EasyPHP, VertrigoServ, WampServer ou UwAmp. Il existe le même type de logiciels pour les plates-formes MAMP (Mac OS Apache MySQL PHP), à l'exemple du logiciel MAMP.

Il existe d'autres variantes, par exemple les plates-formes LAPP (le M de MySQL est remplacé par le P de PostgreSQL) ou encore le logiciel XAMPP (Apache MySQL Perl PHP ; le X indique que le logiciel est multiplate-forme), un kit de développement multiplate-forme.

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. Une exception à cette règle est peut-être Zend Server, le serveur distribué par Zend Technologies, qui est prévu pour fonctionner aussi bien en environnement de développement que de production.

Accélération[modifier | modifier le code]

PHP est à la base un langage interprété, ce qui est au détriment de la vitesse d'exécution du code. Sa forte popularité associée à son utilisation sur des sites Web à très fort trafic (Yahoo, Facebook[74]) ont amené un certain nombre de personnes à chercher à améliorer ses performances pour pouvoir servir un plus grand nombre d'utilisateurs de ces sites Web sans nécessiter l'achat de nouveaux serveurs.

La réécriture du cœur de PHP, qui a abouti au Zend Engine pour PHP 4 puis au Zend Engine 2 pour PHP 5, est une optimisation. Le Zend Engine compile en interne le code PHP en bytecode exécuté par une machine virtuelle. Les projets open source APC et eAccelerator fonctionnent en mettant le bytecode produit par Zend Engine en cache afin d'éviter à PHP de charger et d'analyser les scripts à chaque requête. À partir de la version 5.5 de PHP, le langage dispose d'un cache d'opcode natif (appelé OpCache) rendant obsolète le module APC.

Il existe également des projets pour compiler du code PHP :

Notes et références[modifier | modifier le code]

  1. Manuel PHP – Préface
  2. source
  3. a et b « Manuel PHP : Préface », sur PHP.net (consulté le 7 novembre 2007)
  4. (en) « La licence de PHP est reconnue libre par la Free Software Foundation » (consulté le 7 novembre 2007)
  5. Rasmus Lerdorf, « I wonder why people keep writing that PHP was ever written in Perl. It never was. #php » [html], Twitter,‎ 2012-07-20 (consulté le 2014-09-05)
  6. « Histoire de PHP », sur PHP.net (consulté le 7 novembre 2007)
  7. (en) « Netcraft web Server Survey - février 2002 » (consulté le 7 novembre 2007)
  8. http://www.php.net/usage.php
  9. http://news.netcraft.com/archives/2013/01/31/php-just-grows-grows.html
  10. (en) « Historique des sorties de PHP », sur PHP.net (consulté le 7 novembre 2007)
  11. (en) « Dernière sortie de PHP en date », sur PHP.net (consulté le 10 novembre 2007)
  12. « Register Globals »
  13. a et b (en) « History of PHP », The PHP Group (consulté le 18 juin 2010)
  14. a, b, c, d et e (en) « PHP: PHP 4 ChangeLog » (ArchiveWikiwixArchive.isGoogleQue faire ?), The PHP Group, 3 janvier 2008. Consulté le 22 février 2008
  15. (en) PHP: PHP 4.4.8 Release Announcement
  16. (en) PHP: Downloads
  17. (en) PHP: PHP 4.4.9 Release Announcement
  18. a, b et c (en) « PHP: PHP 5 ChangeLog », The PHP Group,‎ 8 novembre 2007 (consulté le 22 février 2008)
  19. a et b (en) PHP: News Archive - 2008
  20. (en) PHP 5.2.9 Released!
  21. (en) PHP 5.2.10 Released!
  22. (en) PHP 5.2.11 Released!
  23. (en) PHP 5.2.12 Released!
  24. (en) PHP 5.2.13 Released!
  25. (en) PHP 5.2.14 Released!
  26. (en) PHP 5.2.15 Released!
  27. (en) PHP 5.2.16 Released!
  28. a, b et c (en) PHP 5.3.5 and 5.2.17 Released!
  29. (en) PHP 5.3.0 Released!
  30. (en) PHP 5.3.0 Changelog
  31. (en) PHP 5.3.1 Released!
  32. (en) PHP 5.3.1 Changelog
  33. (en) PHP 5.3.2 Released!
  34. (en) PHP 5.3.2 Changelog
  35. (en) PHP 5.3.3 Released!
  36. (en) FPM in 5.3
  37. (en) PHP 5.3.4 Released!
  38. (en) 5.3.7 Released!
  39. (en) 5.3.8 Released!
  40. (en) 5.3.9 Released!
  41. (en) PHP 5.3.9 Changelog
  42. (en) 5.3.10 Released!
  43. (en) PHP 5.3.10 Changelog
  44. Annonce de la publication de la version 5.3.20 par PHP.net
  45. Annonce de la publication de la version 5.3.21 par PHP.net
  46. Annonce de la publication de la version 5.3.22 par PHP.net
  47. Annonce de la publication de la version 5.3.23 par PHP.net
  48. Annonce de la publication de la version 5.3.24 par PHP.net
  49. Annonce de la publication de la version 5.3.25 par PHP.net
  50. Annonce de la publication de la version 5.3.26 par PHP.net
  51. Annonce de la publication de la version 5.3.27 par PHP.net
  52. Annonce de la publication de la version 5.3.28 par PHP.net
  53. Annonce de la fin du support de la branche 5.3 par PHP.net
  54. a et b [1]
  55. Annonce de la publication de la version 5.4.10 par PHP.net
  56. Annonce de la publication de la version 5.4.11 par PHP.net
  57. Annonce de la publication de la version 5.4.12 par PHP.net
  58. Annonce de la publication de la version 5.4.13 par PHP.net
  59. Annonce de la publication de la version 5.4.14 par PHP.net
  60. Annonce de la publication de la version 5.4.15 par PHP.net
  61. Annonce de la publication de la version 5.4.16 par PHP.net
  62. La version 5.5.0 est disponible PHP.net
  63. Andrei Zmievski, « PHP Unicode support design document (mailing list post) »,‎ 2005-08-10 (consulté le 2014-02-09)
  64. « PHP 5.5 or 6.0 » (consulté le 2014-02-09)
  65. Andrei Zmievski, « The Good, the Bad, and the Ugly: What Happened to Unicode and PHP 6 » (consulté le 2014-02-09)
  66. Rasmus Lerdorf, « PHP 6 (mailing list post) »,‎ 2010-03-11 (consulté le 2014-02-07)
  67. Adam harvey, « Ruminations on PHP 5++ (message de liste de discussion) »,‎ 2010-03-11 (consulté le 2014-02-07)
  68. « Vote sur le numéro de version de PHP »
  69. (en) « PHP RFC: Move the phpng branch into master »,‎ 20 juillet 2014 (consulté le 22 août 2014)
  70. /usr/bin/ est le répertoire standard des fichiers binaires exécutables sur la plupart des distributions.
  71. http://php.net/manual/fr/book.dom.php
  72. Présentation des éléPHPants par El Roubio
  73. http://www.elephpant.com/
  74. Facebook looks to fix PHP performance with HipHop virtual machine
  75. HipHop for PHP: Move Fast, Haiping Zhao le 2 février 2010

Voir aussi[modifier | modifier le code]

Sur les autres projets Wikimedia :

Bibliographie[modifier | modifier le code]

  • (en) Luke Welling, Laura Thomson, PHP and MySQL Web development, Sams Publishing,‎ 2008, 4e éd. (ISBN 0-672-32916-6, OCLC 854795897)
  • Damien Seguy, Philippe Gamache, Sécurité PHP 5 et MySQL, 3ème édition, Eyrolles,‎ 1er décembre 2011, 277 p. (ISBN 2-212-13339-1)

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]