Outils pour utilisateurs

Outils du site


informatique:php:php

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

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.
  • sscanf permet de d'extraire des variables d'une chaîne de caractères en fonction d'un motif de chaîne.
  • 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.
  • 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 :

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;

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) {
    // ...
}

Obsolète

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 :

  • --with-mysql ne doit plus être utilisé car l'extension n'est plus supportée 1).
  • --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 2).

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.

  1. Il faut ajouter l'option d'exécution de CGI
    Options Indexes FollowSymLinks MultiViews ExecCGI
  2. Il faut ajouter la méthode que l'on va utiliser pour manipuler les fichiers php :
    AddHandler fastcgi .php
  3. ll faut configurer la méthode que l'on va utiliser pour manipuler les fichiers php :
    Action fastcgi /cgi-bin/php-cgi-5.5
  4. Il faut configurer l'alias utilisé à l'étape précédente :
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
  5. 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

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.

informatique/php/php.txt · Dernière modification : 2022/09/29 03:00 de alexis