PHP a joué un rôle crucial dans le développement web, et il a été introduit dans 4D v12 pour offrir des fonctionnalités qui n’étaient pas facilement disponibles dans le langage natif, telles que les fonctionnalités zip, hash ou LDAP. Au fil du temps, 4D a intégré un grand nombre de ces fonctions PHP dans ses fonctionnalités de base. Par conséquent, nous avons décidé de supprimer l’interpréteur PHP intégré dans 4D v20 R3 et de commencer le processus de dépréciation des commandes PHP dans la v21.
Bien que nous ne supprimions pas entièrement les commandes PHP de 4D, nous vous encourageons vivement à utiliser les system worker pour exécuter du code PHP à l’avenir.
Ce billet de blog vous guidera dans ce processus de transition, en montrant comment utiliser un interpréteur externe avec PHP Execute et en expliquant comment exécuter du code PHP de manière efficace avec un system worker.
Première étape : suppression de l’interpréteur PHP intégré à 4D
Le premier changement se produira dans 4D v20 R3 en supprimant l’interpréteur PHP intégré à 4D. PHP Execute continuera à fonctionner mais seulement avec un interpréteur PHP externe. Si vous n’êtes pas familier avec l’utilisation d’un interpréteur PHP externe, veuillez suivre ce tutoriel.
Utiliser PHP Execute avec un interpréteur PHP externe
L’utilisation d’un interpréteur PHP externe vous permet de mettre à jour à tout moment les nouvelles versions de PHP et d’installer les correctifs de sécurité dès qu’ils sont publiés. Il vous permet également d’utiliser plus de modules PHP.
Créer un fichier php.ini personnalisé
Le fichier php.ini est utilisé pour initialiser l’interpréteur PHP. Ce fichier était automatiquement créé et utilisé lors de l’appel à PHP Execute avec l’interpréteur interne. Pour l’interpréteur externe, ce fichier doit être créé et passé manuellement. Appeler PHP Execute une fois créera le fichier dans le dossier ressources de votre projet : nous vous suggérons fortement d’utiliser ce fichier pour initialiser l’interpréteur PHP externe, en le modifiant si nécessaire.
Exécuter une version CGI de PHP.
Il y a deux façons d’exécuter PHP : Avec une interface de ligne de commande (CLI) ou à travers la Common Gateway Interface (CGI). PHP Execute utilise la Common Gateway Interface, vous devez donc utiliser une version CGI de PHP.
Pour Windows, vous pouvez télécharger PHP sur le site officiel de PHP. Cette version contient à la fois les versions CLI et CGI de PHP.
Actuellement, la version sur le site officiel ne charge pas le paquet mbstring par défaut. Pour ce faire, vous devez ajouter ces lignes au fichier php.ini :
extension_dir = "./ext/"
extension=mbstring
Sur Mac, c’est un peu plus compliqué. Apple a arrêté de livrer macOS avec PHP installé (pour des raisons similaires à celles qui nous poussent à arrêter d’en livrer un). Le site officiel de PHP ne fournit pas de version pour Mac. Vous pouvez trouver des versions déjà compilées sur certains sites, mais en général, elles ne sont pas maintenues ou recommandées. Pour vous aider à faire la transition, 4D fournit l’interpréteur PHP intégré de 4D v20 sous la forme d’un binaire séparé sur product download. Notez que ce binaire ne sera pas maintenu par 4D. Si vous avez besoin de mettre à jour PHP sur Mac dans le futur, vous devrez construire votre propre binaire. Je détaillerai comment le faire plus loin dans ce billet.
Vous devez ensuite lancer PHP à travers le terminal en appelant cette commande à l’intérieur du répertoire PHP :
Sur Windows :
php-cgi -b <adresse:port> -c <chemin_vers_le_fichier_ini_de_php_à_l'extérieur_du_dossier_ressources_du_projet>.
Sur Mac :
./php-cgi -b <adresse:port> -c <chemin_vers_le_fichier_ini_de_php_à_l'extérieur_du_dossier_ressources_du_projet>.
Ou si vous utilisez le PHP intégré de 4Dv20 :
Sur Windows :
php-fcgi-4d -b <adresse:port> -c <chemin_vers_php.ini_fichier_inside_le_dossier_des_ressources_du_projet>
Sur Mac :
./php-fcgi-4d -b <adresse:port> -c <chemin_vers_php.ini_fichier_inside_le_dossier_des_ressources_du_projet>
N’oubliez pas, lorsque vous tapez un chemin, d’échapper les caractères spéciaux (comme \ et « ) en ajoutant un \ juste avant (\ et \ »).
Comme vous devez exécuter PHP sur la même machine que 4D, l’adresse doit être 127.0.0.1. Le port par défaut de PHP est 8002, qui est également le port par défaut utilisé par 4D. Nous vous encourageons à utiliser les system worlers pour démarrer et arrêter PHP afin de ne pas avoir à le lancer manuellement.
Par exemple, pour lancer PHP avec un system worker, vous pouvez utiliser ce code :
var worker : 4D.SystemWorker
worker:=4D.SystemWorker.new("<path_to_php_cgi_executable> -b <address:port> -c <path_to_php.ini_file_inside_the_project_resources_folder>")
Et plus tard, terminez PHP avec :
worker.terminate()
Configurer les paramètres de 4D pour se connecter à votre PHP externe
Ouvrez l’onglet PHP des paramètres de la structure et entrez l’adresse IP et le port de votre serveur PHP. Ensuite, rouvrez votre projet.
Options par défaut de l’onglet PHP des paramètres de structure.
8002 est le port PHP par défaut, et comme le serveur PHP doit tourner sur la même machine que 4D vous devez utiliser l’adresse 127.0.0.1.
Appeler PHP Execute
Maintenant que votre serveur PHP est démarré et que 4D est correctement configuré, vous pouvez utiliser PHP Execute avec la même syntaxe que par le passé. Il n’est pas nécessaire de changer quoi que ce soit dans votre code tant que vous utilisez 4D v20 R3 ou une version plus récente. Pour utiliser le concept expliqué ci-dessus dans les versions antérieures, utilisez SET DATABASE PARAMETER(PHP use external interpreter;1) – qui est maintenant le paramètre par défaut de 4D. Notez que la même commande vous permet de définir l’IP ou le port de PHP par code si vous ne souhaitez pas le faire via l’interface comme expliqué ci-dessus.
Deuxième étape : Dépréciation de PHP Execute
Le deuxième changement se produira pour 4D v21 : la dépréciation de PHP Execute. La commande restera fonctionnelle, et nous n’avons pas l’intention de la supprimer de 4D. Si vous décidez d’utiliser PHP dans votre application à l’avenir, il est fortement conseillé d’utiliser les system workers pour exécuter votre code PHP.
Utiliser les system workers pour exécuter du code PHP
Installer ou compiler PHP
Sous Windows, vous pouvez télécharger PHP sur le site officiel de PHP.
Sur Mac, vous devrez compiler PHP car l’interpréteur PHP intégré 4D n’est fourni qu’avec la version fast CGI, alors que vous aurez besoin de la version CLI de PHP. Je détaillerai comment le faire plus loin dans ce billet.
Appeler PHP avec les system workers.
Laissez-moi vous donner 2 exemples de la façon d’exécuter votre code PHP avec des system workers.
Le premier exemple interprète un fichier PHP et récupère le résultat dans la variable $result.
var $worker : 4D.SystemWorker
var $result : Text
$worker:=4D.SystemWorker.new("<path_to_php_executable> -f <path_to_php_file> -c <path_to_php.ini_file_inside_the_project_resources_folder>")
$result:=$worker.wait().response
Le deuxième exemple exécute PHP en mode interactive shell, ce qui nous permet de lui envoyer directement le code PHP à interpréter. Cette façon d’exécuter du code PHP est plus optimisée si vous devez faire de nombreux appels à PHP car vous ne démarrez PHP qu’une seule fois.
var $worker : 4D.SystemWorker
var data : Texte
//Le callback onData ajoutera le résultat de l'exécution à la variable data
var $options : Objet
var $onData : 4D.Function
$onData:=Formule(data+=$2.data)
$options:=Nouvel objet("onData" ; $onData)
$worker:=4D.SystemWorker.new("<path_to_php_executable> -a -c <path_to_php.ini_file_inside_the_project_resources_folder>" ; $options)
$worker.wait(1)
data:=""
$worker.postMessage("echo \"Hello World!\";\r\n")
$worker.wait(1)
$worker.terminate()
Le résultat de l’exécution est récupéré dans la variable data, dans ce cas, Hello World !
Obtenir PHP sur Mac
La solution la plus simple pour récupérer PHP sur Mac est d’utiliser Homebrew. Malheureusement, cette solution ne permet d’obtenir PHP que sur votre machine, et vous ne pourrez pas le distribuer. Si vous voulez distribuer PHP avec votre application, vous devrez le compiler.
Utiliser Homebrew pour compiler PHP
Installer Homebrew
Vous pouvez trouver un pachage pour installer Homebrew sur GitHub.
Sinon, vous pouvez l’installer via le terminal. Tout d’abord, vous aurez besoin des Xcode tools. Appelez cette commande pour les installer :
xcode-select --install
Vous pouvez ensuite installer Homebrew avec cette commande :
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Installer PHP
Vous pouvez ensuite installer PHP avec cette commande :
brew install php
Compilation de PHP sur Mac
Si vous souhaitez distribuer votre application 4D sur Mac, vous aurez besoin d’une version embarquée de PHP. Pour la créer, vous devez en compiler une. Voici la procédure complète pour le faire :
Installer Homebrew
Pour installer Homebrew, vous aurez besoin des Xcode tools. Appelez cette commande pour les installer :
xcode-select --install
Vous pouvez ensuite installer Homebrew à l’aide de cette commande :
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Installer les programmes utilitaires
Pour compiler PHP, vous aurez besoin de groff et de pkg-config. Vous pouvez les installer en utilisant ces commandes :
brew install groff
brew install pkg-config
Compiler la bibliothèque OpenLDAP
Téléchargez la bibliothèque OpenLDAP.
Extrayez le contenu du fichier compressé :
tar -zxf <nom_de_l'archive>
Allez dans le dossier OpenLDAP et configurez l’installation :
./configure --prefix="<chemin_du_dossier_de_destination>" --disable-backends --enable-ldap --without-fetch --without-cyrus-sasl --enable-shared=no --enable-static=yes
Compilez les dépendances :
make depend
Compilez la bibliothèque :
make
Installez dans le dossier de destination :
make install
Compiler la bibliothèque OpenSSL
Télécharger la bibliothèque OpenSSL.
Extrayez le contenu du fichier compressé :
tar -zxf <nom_de_l'archive>
Allez dans le dossier OpenSSL et configurez l’installation :
./config --prefix="<chemin_du_dossier_de_destination>"
Compilez la bibliothèque :
make
Installez dans le dossier de destination :
make install
Compiler PHP
Télécharger PHP.
Extrayez le contenu du fichier compressé :
tar -zxf <nom_de_l'archive>
Allez dans le dossier PHP et configurez l’installation :
./configure --prefix="<chemin_du_dossier_de_destination>" --disable-all --enable-cgi --enable-shared=no --enable-static=yes --with-openssl="<chemin_du_dossier_de_destination_OpenSSL>" --with-ldap="<chemin_du_dossier_de_destination_OpenLDAP>" --enable-bcmath --enable-calendar --enable-exploit="<chemin_du_dossier_de_destination>"."--enable-bcmath --enable-calendar --enable-exif --enable-ftp --enable-mbstring --disable-mbregex --enable-sockets --with-sqlite3 --disable-posix --enable-ctype --enable-fileinfo --enable-filter --enable-pdo --with-pdo-sqlite --enable-phar --enable-session --enable-tokenizer --disable-opcache
Compilez la bibliothèque :
make
Installez dans le dossier de destination :
make install
Dans le dossier de destination de PHP, vous trouverez à la fois une version CGI et une version CLI de PHP. La version CGI peut être utilisée comme serveur PHP externe avec PHP Execute. La version CLI peut être utilisée avec les system workers.
Utilisez le forum si vous avez des questions
Nous voulons nous assurer que votre transition se passe le mieux possible. Nous comprenons que cela peut demander un certain effort, et nous sommes là pour vous aider à chaque étape. N’hésitez pas à utiliser le forum pour poser vos questions ou faire part de vos commentaires ; nous serons ravis de vous fournir des réponses et des conseils.
Si vous décidez de lancer une nouvelle discussion sur PHP sur le forum, n’oubliez pas d’inclure la balise « PHP ». Cela permettra à tout le monde de localiser plus facilement votre sujet.