Outils pour utilisateurs

Outils du site


informatique:php:php

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édentesRévision précédente
Prochaine révision
Révision précédente
informatique:php:php [2018/11/13 22:25] – ↷ Page déplacée de informatique:php à informatique:php:php alexisinformatique:php:php [2022/09/29 03:00] (Version actuelle) alexis
Ligne 1: Ligne 1:
 +{{tag>php}}
 +
 ====== PHP ====== ====== PHP ======
 +[[https://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php?rq=1|Liste]] pour la compréhension des opérateurs parce que c'est impossible de les rechercher dans un moteur, par exemple ''...''.
 ===== Utiliser la ligne de commande ===== ===== Utiliser la ligne de commande =====
 +<WRAP prewrap>
 <code bash> <code bash>
 # Afficher la version # Afficher la version
Ligne 20: Ligne 24:
 php -a php -a
 </code> </code>
 +</WRAP>
 +
 +===== Fonctions méconnues =====
 +
 +  * [[http://php.net/manual/en/function.array-reduce.php|array_reduce]] réduit un tableau en une valeur unique.
 +  * [[http://php.net/manual/en/function.checkdate|checkdate]] indique si la date saisie est une date valide.
 +  * [[http://php.net/manual/en/function.escapeshellcmd.php|escapeshellcmd]] corrige une chaîne de caractère destinée à être utilisée avec [[http://php.net/manual/en/function.exec.php|exec]].
 +  * [[http://php.net/manual/en/function.eval.php|eval]] permet d'évaluer une chaîne de caractères comme du code PHP. ⚠ Il faut être conscient des problèmes de sécurités inhérents à cette fonction et de ne l'exécuter que sur une chaîne qui ne provient pas directement de l'utilisateur.
 +  * [[http://php.net/manual/en/function.get-defined-vars.php|get_defined_vars]] affiche un tableau multi-dimension de l'ensemble des variables disponibles dans la portée de la fonction.
 +  * [[http://php.net/manual/en/function.highlight-string.php|highlight_string]] affiche du code PHP colorisé dans une page.
 +  * [[http://php.net/manual/en/function.http-build-query.php|http_build_query]] transforme un tableau associatif en une chaîne de paramètres à utiliser dans une URL.
 +  * [[http://php.net/manual/en/function.levenshtein.php|levenshtein]] calcule la [[https://fr.wikipedia.org/wiki/Distance_de_Levenshtein|distance de Levenshtein]] entre deux chaînes de caractères.
 +  * [[http://php.net/manual/en/function.pack.php|pack]] compacte des données dans une chaîne binaire.
 +  * [[http://php.net/manual/en/function.parse-url.php|parse_url]] extrait les informations contenues dans une URL.
 +  * [[http://php.net/manual/en/function.php-strip-whitespace.php|php_strip_whitespace]] enlève l'ensemble des commentaires et des espaces en trop d'un fichier source.
 +  * [[http://php.net/manual/en/function.sscanf|sscanf]] permet de d'extraire des variables d'une chaîne de caractères en fonction d'un motif de chaîne.
 +  * [[http://php.net/manual/en/function.str-word-count.php|str_word_count]] compte le nombre de mots dans une chaîne de caractères.
 +  * [[http://php.net/manual/en/function.unpack.php|unpack]] décompacte des données depuis une chaîne binaire.
 +  * [[http://php.net/manual/en/function.wordwrap.php|wordwrap]] effectue la césure d'une chaîne de caractèrs.
 +
 +===== array_pop vs. array_shift =====
 +La fonction ''array_pop'' permet d'extraire le dernier élément d'un tableau tandis que ''array_shift'' permet d'extraire le premier élément d'un tableau.
 +La finalité de ces fonctions est similaire mais il faut prêter attention aux performances car ''array_shift'' doit recalculer les index, ce qui n'est pas le cas de ''array_pop''.
 +Pour un tableau de petite taille, la différence est imperceptible mais quand sa taille augmente, cette différence se fait bien sentir.
 +En effet, la complexité de ''array_pop'' est de ''O(1)'' tandis que celle de ''array_shift'' est de ''O(n)''.
 +
 +Voici un exemple pour s'en convaincre :
 +<WRAP prewrap>
 +<code php benchmark.php>
 +<?php
 +
 +$shift = array_fill(0, 1000000, uniqid());
 +$pop = $shift;
 +
 +echo 'array_shift processing: ';
 +$shiftStart = microtime(true);
 +while (null !== array_shift($shift)) {
 +}
 +echo (microtime(true) - $shiftStart), PHP_EOL, 'array_pop processing: ';
 +$popStart = microtime(true);
 +while (null !== array_pop($pop)) {
 +}
 +echo (microtime(true) - $popStart), PHP_EOL;
 +
 +</code>
 +</WRAP>
 +
 +===== PCRE et UTF-8 =====
 +Il est possible de gérer des chaînes de caractères UTF-8 sans avoir besoin de recompiler PHP en activant le drapeau PCRE UTF-8. Pour faire cela, il suffit d'utiliser les options natives de la bibliothèque PCRE.
 +
 +En ajoutant le motif **(*UTF8)** à l'expression rationnelle, **preg_match** sera capable de trouver le caractère **é**.
 +
 +Pour plus d'information, voir [[http://www.php.net/manual/en/function.preg-match.php#95828|les commentaires de la fonction preg_match]].
 +
 +===== Convertir un tableau en CSV =====
 +Il n'y a pas de fonction pour faire ça directement. Mais il est quand même possible de le faire en combinant certains outils de PHP.
 +<WRAP prewrap>
 +<code php>
 +// Ouverture d'un fichier mémoire en lecture/écriture ...
 +$fp = fopen('php://temp', 'r+');
 +// ... Écriture du tableau dans le fichier mémoire ...
 +$length += fputcsv($fp, $input, $delimiter, $enclosure);
 +// ... Retour au début du fichier mémoire que l'on vient d'écrire ...
 +rewind($fp);
 +// ... Lecture du fichier mémoire dans une variable ...
 +$data = fread($fp, $length);
 +// ... Fermeture du fichier mémoire ...
 +fclose($fp);
 +</code>
 +</WRAP>
 +
 +===== Utiliser le client SOAP avec un certificat =====
 +Certains services web demandent de s'authentifier avec un certificat.
 +
 +En lisant la documentation, on se rend compte que le client SOAP accepte des options pour définir le certificat du client ainsi que son mot de passe. Malheureusement, je n'ai pas réussi à le faire fonctionner de cette manière.\\
 +Heureusement, il existe une autre façon de faire en injectant le certificat du client ainsi que son mot de passe directement dans la requête SSL.
 +
 +<WRAP prewrap>
 +<code php>
 +$wsdl = "<URL du fichier de description du service web>";
 +
 +// Ici on configure les options de la requête SSL
 +$context = stream_context_create([
 +    'ssl' => [
 +        'local_cert' => "<chemin d'accès au certificat>", // uniquement au format PEM
 +        'passphrase' => "<mot de passe du certificat>",
 +    ],
 +]);
 +
 +// Ici on configure les options du client SOAP
 +$soap_options = [
 +    'stream_context' => $context, // injection des options de la requête SSL
 +];
 +
 +// Ici on cré le client SOAP avec les options SOAP et SSL
 +$soap_client = new \SoapClient($wsdl, $soap_options);
 +</code>
 +</WRAP>
 +
 +===== Curiosités =====
 +==== Quine ====
 +<WRAP prewrap>
 +<code php>
 +<?php
 +readfile(__FILE__);
 +</code>
 +</WRAP>
 +
 +==== Boucle "for" sans paramètres ====
 +Cette boucle est une boucle infinie.
 +<WRAP prewrap>
 +<code php>
 +for (;;) {
 +    // ...
 +}
 +</code>
 +</WRAP>
 +Elle est équivalente à cette autre boucle infinie :
 +<WRAP prewrap>
 +<code php>
 +while (true) {
 +    // ...
 +}
 +</code>
 +</WRAP>
  
 +====== Obsolète ======
 ===== Utiliser plusieurs versions de PHP sur la version serveur de Ubuntu 12.04 LTS ===== ===== Utiliser plusieurs versions de PHP sur la version serveur de Ubuntu 12.04 LTS =====
 Par défaut, la version de PHP installée sur cette version est la version 5.3.10. Voici les différentes étapes pour pouvoir utiliser plusieurs versions de PHP simultanement avec Apache. Par défaut, la version de PHP installée sur cette version est la version 5.3.10. Voici les différentes étapes pour pouvoir utiliser plusieurs versions de PHP simultanement avec Apache.
 ==== Installation des bibliothèques nécessaires ==== ==== Installation des bibliothèques nécessaires ====
 +<WRAP prewrap>
 <code bash> <code bash>
 # Bibliothèques pour la compilation # Bibliothèques pour la compilation
Ligne 42: Ligne 173:
 libapache2-mod-fastcgi libapache2-mod-fastcgi
 </code> </code>
 +</WRAP>
 +
 ==== Compilation de PHP ==== ==== Compilation de PHP ====
 +<WRAP prewrap>
 <code bash> <code bash>
 # récupération du code source # récupération du code source
Ligne 83: Ligne 217:
 sudo cp php.ini-production /etc/php55/php.ini sudo cp php.ini-production /etc/php55/php.ini
 </code> </code>
 +</WRAP>
  
 **Notes** : **Notes** :
   * ''%%--with-mysql%%'' ne doit plus être utilisé car l'extension n'est plus supportée (([[https://wiki.php.net/rfc/mysql_deprecation|Request for Comments: ext/mysql deprecation]])).   * ''%%--with-mysql%%'' ne doit plus être utilisé car l'extension n'est plus supportée (([[https://wiki.php.net/rfc/mysql_deprecation|Request for Comments: ext/mysql deprecation]])).
   * ''%%--with-mysqli%%'' et ''%%--with-pdo-mysql%%'' utilisent par défaut la bibliothèque //libmysqlclient//. Il est possible de la remplacer par la bibliothèque //mysqlnd// qui est native (([[http://php.net/manual/en/mysqlinfo.library.choosing.php|Choosing a library]])).   * ''%%--with-mysqli%%'' et ''%%--with-pdo-mysql%%'' utilisent par défaut la bibliothèque //libmysqlclient//. Il est possible de la remplacer par la bibliothèque //mysqlnd// qui est native (([[http://php.net/manual/en/mysqlinfo.library.choosing.php|Choosing a library]])).
 +
 ==== Configuration de Apache - FastCGI ==== ==== Configuration de Apache - FastCGI ====
 Il faut commencer par activer le module FastCGI dans Apache. Il faut commencer par activer le module FastCGI dans Apache.
  
 Ensuite, il faut créer le fichier ///var/www/cgi-bin/php-cgi-5.5// : Ensuite, il faut créer le fichier ///var/www/cgi-bin/php-cgi-5.5// :
 +<WRAP prewrap>
 <code bash> <code bash>
 #!/bin/sh #!/bin/sh
Ligne 101: Ligne 238:
 exec /usr/local/php55/bin/php-cgi exec /usr/local/php55/bin/php-cgi
 </code> </code>
 +</WRAP>
  
 Puis rendre ce fichier exécutable. Puis rendre ce fichier exécutable.
 +
 ==== Configuration de Apache - VirtualHost ==== ==== Configuration de Apache - VirtualHost ====
 Il faut configurer normalement le VirtualHost pour le site que nous voulons servir. Il faut cependant ajouter quelques instructions spécifiques à l'utilisation de FastCGI. Il faut configurer normalement le VirtualHost pour le site que nous voulons servir. Il faut cependant ajouter quelques instructions spécifiques à l'utilisation de FastCGI.
  
-  - Il faut ajouter l'option d'exécution de CGI<code apache>+  - Il faut ajouter l'option d'exécution de CGI<WRAP prewrap><code apache>
 Options Indexes FollowSymLinks MultiViews ExecCGI Options Indexes FollowSymLinks MultiViews ExecCGI
-</code> +</code></WRAP
-  - Il faut ajouter la méthode que l'on va utiliser pour manipuler les fichiers php :<code apache>+  - Il faut ajouter la méthode que l'on va utiliser pour manipuler les fichiers php :<WRAP prewrap><code apache>
 AddHandler fastcgi .php AddHandler fastcgi .php
-</code> +</code></WRAP
-  - ll faut configurer la méthode que l'on va utiliser pour manipuler les fichiers php :<code apache>+  - ll faut configurer la méthode que l'on va utiliser pour manipuler les fichiers php :<WRAP prewrap><code apache>
 Action fastcgi /cgi-bin/php-cgi-5.5 Action fastcgi /cgi-bin/php-cgi-5.5
-</code> +</code></WRAP
-  - Il faut configurer l'alias utilisé à l'étape précédente :<code apache>+  - Il faut configurer l'alias utilisé à l'étape précédente :<WRAP prewrap><code apache>
 ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
-</code> +</code></WRAP
-  - Il faut configurer le dossier dans lequel se trouve les scripts utilisés par le module FastCGI :<code apache>+  - Il faut configurer le dossier dans lequel se trouve les scripts utilisés par le module FastCGI :<WRAP prewrap><code apache>
 <Directory /var/www/cgi-bin/> <Directory /var/www/cgi-bin/>
     AllowOverride All     AllowOverride All
Ligne 125: Ligne 264:
     Allow from all     Allow from all
 </Directory> </Directory>
-</code>+</code></WRAP>
 Le résultat final devrait ressembler à ce qui suit : Le résultat final devrait ressembler à ce qui suit :
 +<WRAP prewrap>
 <code apache> <code apache>
 <VirtualHost *:80> <VirtualHost *:80>
Ligne 160: Ligne 300:
 </VirtualHost> </VirtualHost>
 </code> </code>
 +</WRAP>
 **Attention**, pour que cette configuration fonctionne, il faut que le module actions soit activé. Il est également important de noter que cette configuration peut cohabiter avec le module php. **Attention**, pour que cette configuration fonctionne, il faut que le module actions soit activé. Il est également important de noter que cette configuration peut cohabiter avec le module php.
 +
 ==== Liens utiles ==== ==== Liens utiles ====
   * [[http://linuxplayer.org/2011/05/intall-multiple-version-of-php-on-one-server|Intall multiple version of php on one server]]   * [[http://linuxplayer.org/2011/05/intall-multiple-version-of-php-on-one-server|Intall multiple version of php on one server]]
Ligne 171: Ligne 313:
   * [[https://github.com/c9s/phpbrew|c9s/phpbrew]]   * [[https://github.com/c9s/phpbrew|c9s/phpbrew]]
   * [[https://github.com/fpoirotte/phpfarm|fpoirotte/phpfarm]]   * [[https://github.com/fpoirotte/phpfarm|fpoirotte/phpfarm]]
- 
-===== Fonction méconnues ===== 
-  * [[http://php.net/manual/en/function.array-reduce.php|array_reduce]] réduit un tableau en une valeur unique. 
-  * [[http://php.net/manual/en/function.checkdate|checkdate]] indique si la date saisie est une date valide. 
-  * [[http://php.net/manual/en/function.escapeshellcmd.php|escapeshellcmd]] corrige une chaîne de caractère destinée à être utilisée avec [[http://php.net/manual/en/function.exec.php|exec]]. 
-  * [[http://php.net/manual/en/function.eval.php|eval]] permet d'évaluer une chaîne de caractères comme du code PHP. ⚠ Il faut être conscient des problèmes de sécurités inhérents à cette fonction et de ne l'exécuter que sur une chaîne qui ne provient pas directement de l'utilisateur. 
-  * [[http://php.net/manual/en/function.get-defined-vars.php|get_defined_vars]] affiche un tableau multi-dimension de l'ensemble des variables disponibles dans la portée de la fonction. 
-  * [[http://php.net/manual/en/function.highlight-string.php|highlight_string]] affiche du code PHP colorisé dans une page. 
-  * [[http://php.net/manual/en/function.http-build-query.php|http_build_query]] transforme un tableau associatif en une chaîne de paramètres à utiliser dans une URL. 
-  * [[http://php.net/manual/en/function.levenshtein.php|levenshtein]] calcule la distance levenshtein((https://fr.wikipedia.org/wiki/Distance_de_Levenshtein)) entre deux chaînes de caractères. 
-  * [[http://php.net/manual/en/function.parse-url.php|parse_url]] extrait les informations contenues dans une URL. 
-  * [[http://php.net/manual/en/function.php-strip-whitespace.php|php_strip_whitespace]] enlève l'ensemble des commentaires et des espaces en trop d'un fichier source. 
-  * [[http://php.net/manual/en/function.str-word-count.php|str_word_count]] compte le nombre de mots dans une chaîne de caractères. 
- 
-===== PCRE et UTF-8 ===== 
-Il est possible de gérer des chaînes de caractères UTF-8 sans avoir besoin de recompiler PHP en activant le drapeau PCRE UTF-8. Pour faire cela, il suffit d'utiliser les options natives de la bibliothèque PCRE. 
- 
-En ajoutant le motif **(*UTF8)** à l'expression rationnelle, **preg_match** sera capable de trouver le caractère **é**. 
- 
-Pour plus d'information, voir [[http://www.php.net/manual/en/function.preg-match.php#95828|les commentaires de la fonction preg_match]]. 
- 
-===== Convertir un tableau en CSV ===== 
-Il n'y a pas de fonction pour faire ça directement. Mais il est quand même possible de le faire en combinant certains outils de PHP. 
-<code php> 
-// Ouverture d'un fichier mémoire en lecture/écriture ... 
-$fp = fopen('php://temp', 'r+'); 
-// ... Écriture du tableau dans le fichier mémoire ... 
-$length += fputcsv($fp, $input, $delimiter, $enclosure); 
-// ... Retour au début du fichier mémoire que l'on vient d'écrire ... 
-rewind($fp); 
-// ... Lecture du fichier mémoire dans une variable ... 
-$data = fread($fp, $length); 
-// ... Fermeture du fichier mémoire ... 
-fclose($fp); 
-</code> 
- 
-===== Utiliser le client SOAP avec un certificat ===== 
-Certains services web demandent de s'authentifier avec un certificat. 
- 
-En lisant la documentation, on se rend compte que le client SOAP accepte des options pour définir le certificat du client ainsi que son mot de passe. Malheureusement, je n'ai pas réussi à le faire fonctionner de cette manière.\\ 
-Heureusement, il existe une autre façon de faire en injectant le certificat du client ainsi que son mot de passe directement dans la requête SSL. 
- 
-<code php> 
-$wsdl = "<URL du fichier de description du service web>"; 
- 
-// Ici on configure les options de la requête SSL 
-$context = stream_context_create([ 
-    'ssl' => [ 
-        'local_cert' => "<chemin d'accès au certificat>", // uniquement au format PEM 
-        'passphrase' => "<mot de passe du certificat>", 
-    ], 
-]); 
- 
-// Ici on configure les options du client SOAP 
-$soap_options = [ 
-    'stream_context' => $context, // injection des options de la requête SSL 
-]; 
- 
-// Ici on cré le client SOAP avec les options SOAP et SSL 
-$soap_client = new \SoapClient($wsdl, $soap_options); 
-</code> 
- 
-===== Curiosités ===== 
-==== Quine ==== 
-<code php> 
-<?php 
-readfile(__FILE__); 
-</code> 
- 
-==== Boucle "for" sans paramètres ==== 
-Cette boucle est une boucle infinie. 
-<code php> 
-for (;;) { 
-    // ... 
-} 
-</code> 
-Elle est équivalente à cette autre boucle infinie : 
-<code php> 
-while (true) { 
-    // ... 
-} 
-</code> 
- 
  
 ===== Installer HHVM sur Ubuntu 15.10 ===== ===== Installer HHVM sur Ubuntu 15.10 =====
 +<WRAP prewrap>
 <code bash> <code bash>
 # Gère les dépôts utilisés pour installer des programmes (common) # Gère les dépôts utilisés pour installer des programmes (common)
Ligne 272: Ligne 332:
 sudo apt-get install hhvm sudo apt-get install hhvm
 </code> </code>
 +</WRAP>
 Pour plus d'informations, voir la [[https://docs.hhvm.com/hhvm/installation/linux#ubuntu-15.10-wily-werewolf|page officielle]]. Pour plus d'informations, voir la [[https://docs.hhvm.com/hhvm/installation/linux#ubuntu-15.10-wily-werewolf|page officielle]].
 +
informatique/php/php.1542176739.txt.gz · Dernière modification : 2018/11/13 22:25 de alexis