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 13/07/2018, 09:00]
krodelabestiole déplacement [Conflits potentiels entre plusieurs versions de PHP] depuis page LAMP
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, ne spécifiez pas de version, le système installera la dernière version… 7.*. \\ 
 +les modules préfixés par **php5** ont encore cours avec [[trusty]],
  
-Pour plus de détailsvoir la page dédiée aux [[:​modules_php|modules PHP]].+Par exemple //​php5-curl//​ sous trusty devient //​php7.0-curl//​plus simplement accessible par //​php-curl//​. 
 +</​note>​
  
 +==== Modules installés par défaut ====
  
-=== Association avec un serveur de base de données ===+[[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 ==== 
 + 
 +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-mbstring]] | 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 ​====
  
 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
 + 
 +^ Nom ^ Paquet ^ Description ^ 
 +| [[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]] | 
 +| [[http://​php.net/​manual/​fr/​book.pgsql.php|PostgreSQL]] | [[apt>​php-pgsql]] | support de [[:​postgresql|PostgreSQL]] | 
 +| [[http://​php.net/​manual/​fr/​book.sqlite.php|SQLite]] | [[apt>​php-sqlite]] | 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>
  
-  * 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]]. +Vous pouvez lister les modules installés sur votre système grâce à la commande 
-  * Le support ​de [[:​postgresql|PostgreSQL]] par PHP se fait via [[:​tutoriel:​comment_installer_un_paquet|l'​installation du paquet]] [[apt://php-pgsql|php-pgsql]]. +<​code>​php -m</​code>​ 
-  * Le support de [[:​sqlite|SQLite]] par PHP se fait via [[:​tutoriel:​comment_installer_un_paquet|l'​installation du paquet]] [[apt://php-sqlite|php-sqlite]]. +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 //[[http://php.net/manual/fr/function.phpinfo.php|phpinfo()]]// vous montrera les modules activés sur votre serveur web.
-  * 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]].+
  
 ===== Configuration ===== ===== Configuration =====
Ligne 97: Ligne 146:
 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>​
 +
 +==== 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 =====
Ligne 105: Ligne 161:
  
 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é.
 +
 +==== Code source visible dans le navigateur ====
 +
 +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 texte, et 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).
 +
 +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]]
 +  * si 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>​
  
 ==== Erreur 403, 404, 500 ==== ==== Erreur 403, 404, 500 ====
Ligne 114: Ligne 187:
 Cette erreur indique que le serveur HTTP est dans les choux. Le service existe mais prend  apparemment un temps interminable à répondre.\\ 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).   * 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.+  * 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 modifications ​récentes ou restaurer une sauvegarde de votre application PHP. 
 + 
 +==== 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.0//, //php7.2// 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]]) puis réinstallez les paquets absents si nécessaire ([[apt>​libapache2-mod-php]],​ etc). 
 ===== Voir aussi ===== ===== Voir aussi =====
  
Ligne 120: Ligne 203:
   * [[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