Deprecazione dei comandi PHP e rimozione dell’interprete PHP integrato in 4D

Tradotto automaticamente da Deepl

PHP ha svolto un ruolo cruciale nello sviluppo web ed è stato introdotto in 4D v12 per offrire funzionalità non facilmente disponibili nel linguaggio nativo, come ad esempio le funzionalità zip, hash o LDAP. Nel corso del tempo, 4D ha incorporato molte di queste caratteristiche PHP nelle sue funzionalità principali. Di conseguenza, abbiamo deciso di rimuovere l’interprete PHP integrato in 4D v20 R3 e di iniziare il processo di deprezzamento dei comandi PHP nella v21.

Anche se non elimineremo completamente i comandi PHP da 4D, vi invitiamo a utilizzare i worker di sistema per eseguire codice PHP in futuro.

Questo post del blog vi guiderà attraverso questo processo di transizione, dimostrando come utilizzare un interprete esterno attraverso PHP Execute e spiegando come eseguire efficacemente il codice PHP con un system worker.

Primo passo: rimozione dell’interprete PHP integrato in 4D

Il primo cambiamento avverrà in 4D v20 R3 con la rimozione dell’interprete PHP integrato in 4D. PHP Execute continuerà a funzionare, ma solo con un interprete PHP esterno. Se non avete familiarità con l’uso di un interprete PHP esterno, seguite questo tutorial.

Utilizzo di PHP Execute con un interprete PHP esterno

L’uso di un interprete PHP esterno consente di aggiornare in qualsiasi momento le nuove versioni di PHP e di installare le patch di sicurezza non appena vengono rilasciate. Inoltre, consente di utilizzare un maggior numero di moduli PHP.

Creare un file php.ini personalizzato

Il file php.ini è usato per inizializzare l’interprete PHP. Questo file viene creato automaticamente e utilizzato quando si chiama PHP Execute con l’interprete interno. Per l’interprete esterno, questo file deve essere creato e passato manualmente. Richiamando una volta PHP Execute, il file verrà creato nella cartella delle risorse del progetto: si consiglia vivamente di utilizzare questo file per inizializzare l’interprete PHP esterno, modificandolo se necessario.

Eseguire una versione CGI di PHP.

Esistono due modi per eseguire PHP: Con un’interfaccia a riga di comando (CLI) o attraverso l’interfaccia Common Gateway (CGI). PHP Execute utilizza l’interfaccia Common Gateway, quindi è necessario eseguire una versione CGI di PHP.
Per Windows, è possibile scaricare PHP dal sito ufficiale di PHP. Questa versione contiene sia la versione CLI che quella CGI di PHP.
Attualmente, la versione sul sito ufficiale non carica il pacchetto mbstring per impostazione predefinita. Per farlo, è necessario aggiungere queste righe al file php.ini:

extension_dir = "./ext/"
extension=mbstring

Su Mac, la questione è un po’ più complicata. Apple ha smesso di distribuire macOS con PHP installato (per ragioni simili, noi abbiamo smesso di distribuirne uno). Il sito ufficiale di PHP non fornisce una versione precompilata per Mac. È possibile trovare versioni precostituite su alcuni siti, ma di solito non sono mantenute o raccomandate. Per facilitare la transizione, 4D fornisce il PHP integrato in 4D v20 come binario separato nella pagina di download del prodotto. Si noti che questo binario non sarà mantenuto da 4D. Se in futuro avrete bisogno di aggiornare PHP su Mac, dovrete costruirvelo da soli. Vi spiegherò come farlo più avanti in questo post.

È quindi necessario lanciare PHP attraverso il terminale, richiamando questo comando all’interno della cartella PHP:

php-cgi -b <indirizzo:porta> -c <percorso_a_php.ini_file_inside_alla_cartella_risorse_del_progetto>.

Oppure se si usa il PHP integrato in 4Dv20:

php-fcgi-4d -b <indirizzo:porta> -c <percorso_a_php.ini_file_inside_alla_cartella_risorse_del_progetto>
Non dimenticate, quando digitate un percorso, di sfuggire ai caratteri speciali (come \ e “) aggiungendo una \ subito prima (\ e \”).
Poiché è necessario eseguire PHP sulla stessa macchina di 4D, l’indirizzo deve essere 127.0.0.1. La porta predefinita di PHP è 8002, che è anche la porta predefinita di 4D. Si consiglia di utilizzare i
worker di sistema per avviare e arrestare PHP, in modo da non doverlo eseguire manualmente.

Ad esempio, per eseguire PHP con un system worker, si può usare questo codice:

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>")

E successivamente terminare PHP con:

worker.terminate()

Configurare le impostazioni di 4D per connettersi al PHP esterno

Aprite la scheda PHP delle impostazioni della struttura e inserite l’indirizzo IP e la porta del vostro server PHP. Quindi, riaprite il progetto.

Opzioni predefinite della scheda PHP delle impostazioni della struttura.
8002 è la porta PHP predefinita e, poiché il server PHP deve essere eseguito sulla stessa macchina di 4D, è necessario utilizzare l’indirizzo 127.0.0.1.

Chiamare l’esecuzione di PHP

Ora che il server PHP è avviato e 4D è configurato correttamente, si può usare PHP Execute con la stessa sintassi usata in passato. Non è necessario modificare nulla nel codice, purché si utilizzi 4D v20 R3 o più recente. Per utilizzare il concetto sopra spiegato nelle versioni precedenti, utilizzare SET DATABASE PARAMETER(PHP use an external interpreter;1) – che ora è l’impostazione predefinita per 4D. Si noti che lo stesso comando consente di impostare l’IP o la porta di PHP tramite codice, se non si desidera impostarli tramite interfaccia, come spiegato sopra.


Secondo passo: Deprecazione di PHP Execute

Il secondo cambiamento avverrà con 4D v21: la deprecazione di PHP Execute. Il comando rimarrà funzionante e non abbiamo intenzione di rimuoverlo da 4D. Se in futuro si deciderà di utilizzare PHP nella propria applicazione, si consiglia vivamente di utilizzare i system worker per eseguire il codice PHP.

Usare i system worker per eseguire il codice PHP

Installare o creare PHP

Su Windows, è possibile scaricare PHP dal sito ufficiale di PHP.
Su Mac, è necessario costruire PHP come interprete PHP integrato in 4D, che viene fornito solo con la versione CGI veloce, mentre è necessaria la versione CLI di PHP. Vi spiegherò come farlo più avanti in questo post.

Chiamare PHP con i worker di sistema.

Vi fornisco due esempi di come eseguire il codice PHP con i system worker.

Il primo esempio interpreta un file PHP e recupera l’output nella variabile $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

Il secondo esempio esegue PHP come una shell interattiva, in modo da poterle chiedere di interpretare direttamente del codice PHP. Questo modo di eseguire il codice PHP è più ottimizzato se si devono fare molte chiamate a PHP, poiché si avvia PHP una sola volta.

var $worker : 4D.SystemWorker
var data : Text

//Il callback onData aggiungerà il risultato dell'esecuzione alla variabile dati
var $options : Oggetto
var $onData : 4D.Function
$onData:=Formula(data+=$2.data)
$options:=Nuovo oggetto("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()

Il risultato dell’esecuzione viene recuperato nella variabile dati, in questo caso Hello World!


Ottenere PHP su Mac

La soluzione più semplice per recuperare PHP su Mac è usare Homebrew. Sfortunatamente, questa soluzione permette di ottenere PHP solo sulla propria macchina e non è possibile distribuirlo. Se volete distribuire PHP con la vostra applicazione, dovete compilarlo.

Usare Homebrew per compilare PHP

Installare Homebrew

È possibile trovare un pacchetto per installare Homebrew su GitHub.

Altrimenti, potete installarlo tramite il terminale. Innanzitutto, sono necessari gli strumenti di Xcode. Per installarli, eseguire questo comando:

xcode-select --install

Potete quindi installare Homebrew con questo comando:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)".

Installare PHP

È possibile installare PHP con questo comando:

brew install php

Compilazione di PHP su Mac

Se dovete distribuire la vostra applicazione 4D su Mac, avrete bisogno di una versione integrata di PHP. Per crearla, è necessario compilarne una. Ecco la procedura completa per farlo:

Installare Homebrew

Per installare Homebrew, sono necessari gli strumenti di Xcode. Per installarli, eseguire questo comando:

xcode-select --install

Potete quindi installare Homebrew con questo comando:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)".

Installare i programmi di utilità

Per compilare PHP, sono necessari sia groff che pkg-config. Si possono installare usando questi comandi:

brew install groff
brew install pkg-config

Compilare la libreria OpenLDAP

Scaricare la libreria OpenLDAP.
Estrarre il contenuto del file compresso:

tar -zxf <nome_dell_archivio>.

Configurare l’installazione:

./configure --prefix="<path_of_the_destination_folder>" --disable-backends --enable-ldap --without-fetch --without-cyrus-sasl --enable-shared=no --enable-static=yes

Compilare le dipendenze:

make depend

Compila la libreria:

make

Installare nella cartella di destinazione:

make install

Compilazione della libreria OpenSSL

Scaricare la libreria OpenSSL.
Estrarre il contenuto del file compresso:

tar -zxf <nome_dell_archivio>.

Configurare l’installazione:

./config --prefix="<percorso_della_cartella_di_destinazione>".

Compilare la libreria:

make

Installare nella cartella di destinazione:

make install

Compilare PHP

Scaricare PHP.
Estrarre il contenuto del file compresso:

tar -zxf <nome_dell_archivio>.

Configurare l’installazione:

./configure --prefix="<path_of_the_destination_folder>" --disable-all --enable-cgi --enable-shared=no --enable-static=yes --with-openssl="<path_of_the_OpenSSL_destination_folder>" --with-ldap="<path_of_the_OpenLDAP_destination_folder>"." --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

Compilare la libreria:

make

Installare nella cartella di destinazione:

make install

All’interno della cartella di destinazione di PHP, troverete sia una versione CGI veloce di PHP che una versione CLI di PHP. La versione CGI veloce può essere usata come server PHP esterno con PHP Execute. La versione CLI può essere utilizzata con i system worker.

Utilizzate il forum per qualsiasi domanda

Vogliamo assicurarci che la transizione avvenga nel modo più fluido possibile. Siamo consapevoli che potrebbe richiedere un certo sforzo e siamo qui per assistervi in ogni fase del processo. Non esitate a contattare il nostro forum per qualsiasi domanda o commento; siamo più che felici di fornire risposte e indicazioni.

Se decidete di iniziare una nuova discussione su PHP nel forum, ricordatevi di includere il tag “PHP”. In questo modo sarà più facile per tutti individuare e affrontare l’argomento.

Nicolas Brachfogel
- Proprietario del prodotto e sviluppatore senior - Nicolas Brachfogel è entrato in 4D nel 2017 come Senior Developer (4D Server e networking). In qualità di Product Owner per gestire il rilascio di Apple Silicon, si occupa di scrivere le storie degli utenti e di tradurle in specifiche funzionali, nonché di assicurarsi che le implementazioni delle funzionalità soddisfino le esigenze dei clienti. Diplomato all'Institut Supérieur d'Informatique Appliquée (INSIA), Nicolas ha iniziato la sua carriera come sviluppatore di software nel 2001. Dopo diversi anni di codifica in Java e C++, si è specializzato nello sviluppo di client-server per aziende di videogiochi. Come sviluppatore/architetto di server, ha lavorato con successo alle architetture server di molti giochi (Dofus Arena, Drakerz, Trivial Pursuit Go!).