Ceci est une ancienne révision du document !
Table des matières
PHP
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
# Afficher la version php -v # Afficher la configuration php -i # Afficher les modules compilés php -m # Afficher les fichiers de configuration utilisés php --ini # Vérifier la syntaxe d'un fichier php -l <fichier> # Lancer PHP en mode interactif php -a
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.
Installation des bibliothèques nécessaires
# Bibliothèques pour la compilation apt-get install libxml2-dev \ libssl-dev \ libbz2-dev \ libcurl4-openssl-dev \ libpng-dev \ libjpeg-dev \ libmcrypt-dev \ libicu-dev \ libldap2-dev \ autoconf \ g++ # Bibliothèques pour l'installation apt-get install chkconfig \ libapache2-mod-fastcgi
Compilation de PHP
# récupération du code source wget http://ca3.php.net/get/php-5.5.12.tar.bz2/from/a/mirror # extraction de l'archive tar -xjf php-5.5.12.tar.bz2 cd php-5.5.12 # configuration des paramètres de compilation ./configure --prefix=/usr/local/php55 \ --with-config-file-path=/etc/php55 \ --with-config-file-scan-dir=/etc/php55/php.d \ --with-mysql \ --with-mysqli \ --with-pdo-mysql \ --with-bz2 \ --with-curl \ --with-gettext \ --with-iconv-dir \ --with-openssl \ --with-mcrypt \ --with-gd \ --with-pcre-regex \ --with-zlib \ --disable-rpath \ --enable-mbstring \ --enable-soap \ --enable-fpm \ --with-fpm-user=www-data \ --with-fpm-group=www-data \ --with-pear \ --with-ldap=shared \ --enable-ftp \ --enable-intl make -j4 && sudo make install sudo mkdir /etc/php55 sudo cp php.ini-production /etc/php55/php.ini
Notes :
Configuration de Apache - FastCGI
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 :
#!/bin/sh PHP_FCGI_CHILDREN=3 export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_MAX_REQUESTS exec /usr/local/php55/bin/php-cgi
Puis rendre ce fichier exécutable.
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 ajouter l'option d'exécution de CGI
Options Indexes FollowSymLinks MultiViews ExecCGI
- Il faut ajouter la méthode que l'on va utiliser pour manipuler les fichiers php :
AddHandler fastcgi .php
- ll faut configurer la méthode que l'on va utiliser pour manipuler les fichiers php :
Action fastcgi /cgi-bin/php-cgi-5.5
- Il faut configurer l'alias utilisé à l'étape précédente :
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
- Il faut configurer le dossier dans lequel se trouve les scripts utilisés par le module FastCGI :
<Directory /var/www/cgi-bin/> AllowOverride All Options None Order allow,deny Allow from all </Directory>
Le résultat final devrait ressembler à ce qui suit :
<VirtualHost *:80> ServerName project ServerAdmin webmaster@localhost DocumentRoot /var/www/project <Directory /var/www/project> Options Indexes FollowSymLinks MultiViews ExecCGI AllowOverride All AddHandler fastcgi .php Action fastcgi /cgi-bin/php-cgi-5.5 Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" <Directory /var/www/cgi-bin/> AllowOverride All Options None Order allow,deny Allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/project.error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/project.access.log combined </VirtualHost>
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
Fonctions méconnues
- array_reduce réduit un tableau en une valeur unique.
- checkdate indique si la date saisie est une date valide.
- escapeshellcmd corrige une chaîne de caractère destinée à être utilisée avec exec.
- 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.
- get_defined_vars affiche un tableau multi-dimension de l'ensemble des variables disponibles dans la portée de la fonction.
- highlight_string affiche du code PHP colorisé dans une page.
- http_build_query transforme un tableau associatif en une chaîne de paramètres à utiliser dans une URL.
- levenshtein calcule la distance de Levenshtein entre deux chaînes de caractères.
- pack compacte des données dans une chaîne binaire.
- parse_url extrait les informations contenues dans une URL.
- php_strip_whitespace enlève l'ensemble des commentaires et des espaces en trop d'un fichier source.
- str_word_count compte le nombre de mots dans une chaîne de caractères.
- unpack décompacte des données depuis une chaîne binaire.
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 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.
// 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);
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.
$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);
Curiosités
Quine
<?php readfile(__FILE__);
Boucle "for" sans paramètres
Cette boucle est une boucle infinie.
for (;;) { // ... }
Elle est équivalente à cette autre boucle infinie :
while (true) { // ... }
Installer HHVM sur Ubuntu 15.10
# Gère les dépôts utilisés pour installer des programmes (common) sudo apt-get install software-properties-common # Ajoute la clé publique sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0x5a16e7281be7a449 # Ajout des dépôts de HHVM à la liste existante sudo add-apt-repository "deb http://dl.hhvm.com/ubuntu $(lsb_release -sc) main" # Mise à jour des dépots sudo apt-get update # Installe HHVM sudo apt-get install hhvm
Pour plus d'informations, voir la page officielle.