Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
php [Le 16/05/2018, 14:13]
krodelabestiole + erreurs 403 404 500 503
php [Le 12/01/2019, 18:09]
krodelabestiole + chapitre phpinfo
Ligne 1: Ligne 1:
-{{tag>​Xenial php serveur}}+{{tag>​Xenial ​Bionic ​php serveur}}
  
 ====== PHP ====== ====== PHP ======
Ligne 8: Ligne 8:
  
 ===== Installation ===== ===== Installation =====
- 
-==== Installation minimale ==== 
  
 <note tip>Pour installer PHP avec Apache et MySQL ou MariaDB, reportez-vous de préférence à la [[:​LAMP|page LAMP]].</​note>​ <note tip>Pour installer PHP avec Apache et MySQL ou MariaDB, reportez-vous de préférence à la [[:​LAMP|page LAMP]].</​note>​
Ligne 36: Ligne 34:
 Ce comportement a été corrigé sous [[:Bionic]] (18.04), qui rejoint celui de Debian.</​note>​ Ce comportement a été corrigé sous [[:Bionic]] (18.04), qui rejoint celui de Debian.</​note>​
  
-==== Installation ​des modules ​complémentaires ====+PHP est alors installé. Cependant la plupart des scripts PHP ([[:CMS]], forums, applications web en tout genre) utilisent ​des modules ​de PHP pour bénéficier de certaines fonctionnalités.
  
-PHP est alors installéeCependant la plupart des scripts PHP ([[:CMS]], forums, applications web en tout genre) utilisent des modules ​de PHP pour bénéficier de certaines fonctionnalités.+===== Modules ===== 
 + 
 +Les modules de PHP lui permette d'​étendre ses fonctionnalitésDe très nombreux ​modules PHP sont disponibles sur les dépôts officiels d'​Ubuntu.
  
 Voici comment installer rapidement les modules les plus courants : Voici comment installer rapidement les modules les plus courants :
-<code bash>​sudo apt install php-curl php-gd php-intl php-json php-mbstring ​php-mcrypt ​php-xml php-zip</​code>​+<code bash>​sudo apt install php-curl php-gd php-intl php-json php-mbstring php-xml php-zip</​code>​ 
 +<note important>​ 
 +Pour les versions récentes d'​Ubuntu,​ ne spécifiez pas le numéro de version de PHP dans les noms des paquets qui le concernent, le système installera la dernière version… 7.* :\\   
 +\\  
 + 
 +par exemple ''​php5-curl''​ sous [[:​trusty|Ubuntu 14.04 Trusty]] devient ''​php7.0-curl''​ sur [[:​xenial|Ubuntu 16.04 Xenial]], plus simplement accessible par ''​php-curl''​ que ce soit sur Xenial (pour PHP 7.0), ou sur [[:​bionic|Ubuntu 18.04 Bionic]] (pour PHP 7.2). 
 +</​note>​ 
 + 
 +==== Modules installés par défaut ==== 
 + 
 +[[https://​packages.ubuntu.com/​bionic/​amd64/​php7.2-common/​filelist|Certains modules]] sont installés par défaut avec PHP via le paquet **[[apt>​php-common]]**. 
 + 
 +  * [[http://​php.net/​manual/​fr/​book.calendar.php|Calendar]] 
 +  * [[http://​php.net/​manual/​fr/​book.ctype.php|ctype]] 
 +  * [[http://​php.net/​manual/​fr/​book.exif.php|Exif]] 
 +  * [[http://​php.net/​manual/​fr/​book.fileinfo.php|FileInfo]] 
 +  * [[http://​php.net/​manual/​fr/​book.ftp.php|FTP]] 
 +  * [[http://​php.net/​manual/​fr/​book.gettext.php|Gettext]] 
 +  * [[http://​php.net/​manual/​fr/​book.iconv.php|iconv]] 
 +  * [[http://​php.net/​manual/​fr/​book.pdo.php|PHP Data Objects]] 
 +  * [[http://​php.net/​manual/​fr/​book.phar.php|Phar]] 
 +  * [[http://​php.net/​manual/​fr/​book.shmop.php|Mémoire partagée]] 
 +  * [[http://​php.net/​manual/​fr/​book.sockets.php|Sockets]] 
 +  * [[http://​php.net/​manual/​fr/​book.tokenizer.php|Tokenizer]] 
 + 
 +D'​autres modules peuvent être installés individuellement via [[:APT]]. 
 + 
 +==== Modules courants ====
  
-Pour plus de détails, voir la page dédiée aux [[:modules_php|modules PHP]].+Voici une liste des modules les plus couramment utilisés ​:
  
 +^ Nom ^ Paquet ^ Description ^
 +| [[http://​php.net/​manual/​fr/​book.curl.php|cURL]] | [[apt>​php-curl]] | Support de [[wpfr>​cURL]],​ qui permet de se connecter et de communiquer avec d'​autres serveurs en HTTP, HTTPS, FTP, gopher, telnet, DICT, file ou LDAP. |
 +| [[http://​php.net/​manual/​fr/​book.image.php|GD]] | [[apt>​php-gd]] | Outil de traitement d'​images. |
 +| [[http://​php.net/​manual/​fr/​book.intl.php|intl]] | [[apt>​php-intl]] | Fonctions d'​internationalisation. |
 +| [[http://​php.net/​manual/​fr/​book.json.php|JSON]] | [[apt>​php-json]] | Implémente le format d'​échange de données [[wpfr>​JavaScript Object Notation]]. |
 +| [[http://​php.net/​manual/​fr/​book.mcrypt.php|Mcrypt]] | [[apt>​php-mcrypt]] | Implémente des algorithmes de chiffrement. Ce module **n'​existe plus depuis PHP 7.2** ([[:​Bionic]]). Il faut maintenant utiliser [[http://​php.net/​manual/​fr/​book.sodium.php|Sodium]] ou [[http://​php.net/​manual/​fr/​book.openssl.php|OpenSSL]]. |
 +| [[http://​php.net/​manual/​fr/​book.mbstring.php|mbstring]] | [[apt>​php-mbstring]] | Implémente des jeux de  caractères très grands pour certaines langues. |
 +| [[http://​php.net/​manual/​fr/​book.xml.php|XML]] | [[apt>​php-xml]] | Analyseur syntaxique XML (permet à PHP de "​comprendre"​ du XML ou du HTML). |
 +| [[http://​php.net/​manual/​fr/​book.zip.php|Zip]] | [[apt>​php-zip]] | Offre la possibilité de lire et d'​écrire des archives compressées ZIP, et d'​accéder aux fichiers et dossiers s'y trouvant. |
 +| [[http://​php.net/​manual/​fr/​book.imagick.php|ImageMagick]] | [[apt>​php-imagick]] | Outil de traitement d'​images. |
 +| [[http://​php.net/​manual/​fr/​book.imap.php|IMAP]] | [[apt>​php-imap]] | Implémentations des protocoles IMAP, NNTP, et POP3 pour les [[:​courriel|courriels]]. |
 +| [[http://​php.net/​manual/​fr/​book.apcu.php|APCu]] | [[apt>​php-apcu]] | Fournit des fonctionnalités supplémentaires au système de cache implémenté nativement dans PHP ([[#​OPcache]]). |
  
-=== Association avec un serveur de base de données ===+==== Association avec un serveur de base de données ​====
  
 PHP permet de se connecter à différents types de serveurs de base de données. Pour cela il est également nécessaire d'​installer des modules complémentaires. PHP permet de se connecter à différents types de serveurs de base de données. Pour cela il est également nécessaire d'​installer des modules complémentaires.
-<note important>​Il est important de souligner que l'​installation d'un de ces modules PHP est indépendante de l'​installation du serveur de base de données correspondant,​ ces serveurs n'​étant pas nécessairement déployés localement.</​note>​+<note important>​Il est important de souligner que l'​installation d'un de ces modules PHP est indépendante de l'​installation du serveur de base de données correspondant ​(hormis SQLite), ces serveurs n'​étant pas nécessairement déployés localement.</​note>​
  
-  * Le support de [[:​mysql|MySQL]] ou [[:​mariadb|MariaDB]] ​par PHP se fait via [[:tutoriel:​comment_installer_un_paquet|l'​installation du paquet]] [[apt://php-mysql|php-mysql]]+^ Nom ^ Paquet ^ Description ^ 
-  * Le support de [[:​postgresql|PostgreSQL]] ​par PHP se fait via [[:tutoriel:​comment_installer_un_paquet|l'​installation du paquet]] [[apt://php-pgsql|php-pgsql]]+| [[http://​php.net/​manual/​fr/​ref.pdo-mysql.php|MySQL (PDO)]] et [[http://​php.net/​manual/​fr/​book.mysqli.php|MySQLi]] | [[apt>​php-mysql]] | support de [[:​mysql|MySQL]] ou [[:​mariadb|MariaDB]] ​
-  * Le support de [[:​sqlite|SQLite]] ​par PHP se fait via [[:tutoriel:​comment_installer_un_paquet|l'​installation du paquet]] [[apt://php-sqlite|php-sqlite]]+[[http://​php.net/​manual/​fr/​book.pgsql.php|PostgreSQL]] [[apt>php-pgsql]] support de [[:​postgresql|PostgreSQL]] ​
-  * Le support de Sybase / MS SQL server par PHP se fait via [[:tutoriel:​comment_installer_un_paquet|l'​installation du paquet]] [[apt://php-sybase|php-sybase]].+[[http://​php.net/​manual/​fr/​book.sqlite.php|SQLite]] [[apt>php-sqlite3]] support de [[:​sqlite|SQLite]] ​
 +[[http://​php.net/​manual/​fr/​set.mongodb.php|MongoDB]] [[apt>php-mongodb]] support de [[:MongoDB]] 
 + 
 +==== Lister les modules ==== 
 + 
 +Vous pouvez lister la plupart des modules PHP disponibles dans les dépôts officiels avec la commande 
 +<​code>​apt list php-\*</​code>​ 
 + 
 +Vous pouvez lister les modules installés sur votre système grâce à la commande 
 +<​code>​php -m</​code>​ 
 + 
 +Attention cependant au fait que les modules PHP activés en ligne de commande et via votre serveur HTTP ne sont pas nécessairement les mêmes. La fonction PHP //​[[#​phpinfo|phpinfo()]]// vous montrera les modules activés sur votre serveur web.
  
 ===== Configuration ===== ===== Configuration =====
Ligne 97: Ligne 147:
 Pour un site en production, mieux vaut désactiver l'​affichage des erreurs et se référer uniquement au log d'​erreur du serveur HTTP : Pour un site en production, mieux vaut désactiver l'​affichage des erreurs et se référer uniquement au log d'​erreur du serveur HTTP :
 <file - .htaccess>​php_flag display_errors off</​file>​ <file - .htaccess>​php_flag display_errors off</​file>​
 +
 +==== phpinfo() ====
 +
 +La fonction //​[[http://​php.net/​manual/​fr/​function.phpinfo.php|phpinfo()]]//​ permet d'​obtenir des informations sur sa configuration de PHP en situation. C'est utile en particulier parce que les configurations de PHP peuvent être différentes entre son utilisation en ligne de commande, en module d'​apache ou en fastCGI.
 +
 +La méthode est de créer un fichier ''​phpinfo.php''​ à la racine de l'​hôte virtuel, donc par ex. ''/​var/​www/​example/​phpinfo.php''​ contenant ceci :
 +
 +<file phpinfo.php>​
 +<?php phpinfo(); ?>
 +</​file>​
 +
 +On appelle ensuite ce script depuis un navigateur web : [[http://​example/​phpinfo.php]]
 +
 +==== OPcache ====
 +
 +[[http://​php.net/​manual/​fr/​book.opcache.php|OPcache]] était à la base un module permettant d'​implémenter des fonctionnalités de cache à PHP, ce qui permet d'​accélérer l'​execution des scripts et d'​alléger leur charge côté serveur.\\ ​
 +Il est désormais intégré nativement à PHP depuis la version 5.5.
 +
 +OPcache est activé par défaut sur Ubuntu.
  
 ===== Problèmes courants ===== ===== Problèmes courants =====
 +
 +<note tip>
 +Si vous utilisez Apache, consultez également les [[:​apache2#​problemes_courants|problèmes courants liés à ce serveur HTTP]] afin d'​obtenir des solutions pour les erreurs 403, 404, 500, 503, etc.
 +</​note>​
  
 ==== Page blanche ==== ==== Page blanche ====
Ligne 106: Ligne 179:
 Vous pouvez [[#​activer_le_rapport_d_erreur|activer le rapport d'​erreur]],​ ou consulter le log d'​erreur de votre serveur HTTP pour en savoir plus sur le problème rencontré. Vous pouvez [[#​activer_le_rapport_d_erreur|activer le rapport d'​erreur]],​ ou consulter le log d'​erreur de votre serveur HTTP pour en savoir plus sur le problème rencontré.
  
-==== Erreur 403, 404, 500 ====+==== Code source visible dans le navigateur ​====
  
-Les erreurs de ce type ne sont a priori ​pas liées ​directement ​à PHP, mais au serveur HTTP. Si vous utilisez Apache consultez [[:​apache2#​problemes_courants|la documentation ​à ce sujet]].+Ce problème survient lorsque PHP n'​est ​pas interprété par le serveur web. Le serveur envoie dans ce cas au navigateur ​directement ​le code PHP comme s'il s'​agissait de texteet le navigateur cherche généralement ​à l'​interpréter comme du HTML, puisque c'​est ​ce qu'il attend par défaut.\\  
 +En plus de rendre l'​application ou le site non fonctionnel,​ cela peut poser des problèmes de sécurité (fuite d'​informations éventuellement sensibles).
  
-==== Attente puis erreur 503 "​service indisponible" ​====+Il faut dans ce cas revoir votre installation de PHP et sa configuration avec votre serveur Web. 
 + 
 +Si vous utilisez [[:​apache2#​mod_php|PHP en tant que module d'​Apache]] : 
 +  * vérifiez l'​installation du paquet [[apt>​libapache2-mod-php]] 
 +  * s'il est bien installé, activez le module : 
 +sur [[:​bionic|Bionic 18.04]] : 
 +<​code>​sudo a2enmod php7.2</​code>​ 
 +sur [[:​xenial|Xenial 16.04]] : 
 +<​code>​sudo a2enmod php7.0</​code>​ 
 +Puis relancez Apache : 
 +<​code>​sudo systemctl restart apache2</​code>​ 
 + 
 +==== Conflits potentiels entre plusieurs versions de PHP ==== 
 + 
 +Il est possible que plusieurs versions de PHP soient installées simultanément,​ par ex. après une mise à jour majeure d'​ubuntu si vous avez spécifié le numéro de version de PHP lors de l'​installation des paquets, ou si vous avez ajouté un PPA exotique pour installer une version spécifique de PHP (mauvaise idée, il vaut mieux dans ce cas utiliser [[:​docker_lamp|docker]]).\\ 
 +Cela peut par ex. rendre des modules de PHP inaccessibles alors qu'ils semblent bien installés. 
 + 
 +Vous pouvez vérifier cela avec cette commande : 
 +<​code>​apt list \*php\* | grep install</​code>​ 
 +Si vous voyez apparaître plusieurs versions de PHP, par ex. //php7.2// et //php7.0// ou //php5.6//, vous avez un problème. Dans ce cas supprimez les versions de PHP qui ne correspondent pas à la version proposée par les dépôts officiels d'​ubuntu (//php7.0// sur [[:​xenial|Xenial 16.04]], //php7.2// sur [[:​bionic|Bionic 18.04]]), [[:​ppa#​la_methode_propre_les_paquets_de_gestion_automatiqueppa-purge_launchpad-getkeys|désinstallez le PPA exotique]] si il existe, puis réinstallez les paquets absents si nécessaire sans spécifier de numéro de version ([[apt>​libapache2-mod-php]],​ etc).
  
-Cette erreur indique que le serveur HTTP est dans les choux. Le service existe mais prend  apparemment un temps interminable à répondre.\\ 
-  * En premier lieu redémarrez le serveur HTTP (et PHP si vous l'​utilisez en FastCGI). 
-  * Si le problème se pose toujours, cela peut par exemple être dû au fait qu'un script entre dans une boucle infinie. En plus de surcharger le processeur, ce problème ne génèrera pas de message d'​erreur ce qui en fait malheureusement un problème particulièrement compliqué à débugger. Si votre CMS ou application web utilise un système de cache, vous pouvez essayer de le vider et de le désactiver. Puis essayer de désinstaller les plugins installés récemment, défaire les mortifications récentes ou restaurer une sauvegarde de votre application PHP. 
 ===== Voir aussi ===== ===== Voir aussi =====
  
Ligne 120: Ligne 210:
   * [[http://​php.net/​manual/​fr/​|documentation officielle]]   * [[http://​php.net/​manual/​fr/​|documentation officielle]]
   * [[https://​www.youtube.com/​watch?​v=US9JCsnAVTU|vidéo expliquant en quoi PHP est différent des autres langages de programmation]]   * [[https://​www.youtube.com/​watch?​v=US9JCsnAVTU|vidéo expliquant en quoi PHP est différent des autres langages de programmation]]
 +
 +//​Contributeurs : [[utilisateurs:​krodelabestiole]]//​
  • php.txt
  • Dernière modification: Le 05/01/2024, 21:53
  • par krodelabestiole