Obsolescencia de los comandos PHP y eliminación del intérprete PHP integrado en 4D

PHP ha jugado un papel crucial en el desarrollo web y fue introducido en 4D v12 para ofrecer funcionalidades no disponibles fácilmente en el lenguaje nativo, como las funcionalidades zip, hash o LDAP. Con el tiempo, 4D ha integrado muchas de estas funcionalidades PHP en su funcionalidad principal. Como resultado, hemos decidido eliminar el intérprete PHP integrado en 4D v20 R3 y comenzar el proceso de obsolecencia de los comandos PHP en v21.

Aunque no vamos a eliminar por completo los comandos PHP de 4D, le recomendamos especialmente que utilice los workers del sistema para ejecutar código PHP en el futuro.

Esta entrada de blog le guiará a través de este proceso de transición, demostrando cómo utilizar un intérprete externo con PHP Execute y explicando cómo ejecutar código PHP efectivamente con un worker del sistema.

Primer paso: eliminación del intérprete PHP inTEGRAdo en 4D

El primer cambio ocurrirá en 4D v20 R3 al remover el intérprete PHP integrado en 4D. PHP Execute continuará funcionando pero sólo con un intérprete PHP externo. Si no está familiarizado con el uso de un intérprete PHP externo, por favor siga este tutorial.

Utilizar PHP Execute con un intérprete PHP externo

El uso de un intérprete PHP externo le permitirá actualizarse en cualquier momento a nuevas versiones de PHP e instalar los correctivos de seguridad tan pronto como sean publicados. También le permitirá utilizar más módulos PHP.

Crear un archivo php.ini personalizado

El archivo php.ini se utiliza para inicializar el intérprete PHP. Este archivo se crea y utiliza automáticamente cuando se llama a PHP Execute con el intérprete interno. Para el intérprete externo, este archivo debe ser creado y pasado manualmente. Llamar PHP Execute una vez creará el archivo en la carpeta recursos de su proyecto: le sugerimos especilmente que utilice este archivo para inicializar el intérprete PHP externo, modificándolo si es necesario.

Ejecutar una versión CGI de PHP.

Hay dos formas de ejecutar PHP: con una interfaz de línea de comandos (CLI) o a través de la Common Gateway Interface (CGI). PHP Execute utiliza la Common Gateway Interface (CGI, por lo que debe ejecutar una versión CGI de PHP.
Para Windows, puede descargar PHP en el sitio web oficial de PHP. Esta versión contiene tanto la versión CLI como la versión CGI de PHP.
Actualmente, la versión en el sitio web oficial no carga el paquete mbstring por defecto. Para hacerlo, necesita añadir estas líneas al archivo php.ini:

extension_dir = "./ext/"
extension=mbstring

En Mac, esto es un poco más complicado. Apple ha dejado de distribuir macOS con PHP instalado (por razones similares, nosotros dejamos de distribuir uno). El sitio web oficial de PHP no ofrece una versión  para Mac. Puede encontrar versiones ya compiladas en algunos sitios, pero por lo general, no son mantenidas o recomendadas. Para ayudarle en la transición, 4D ofrece el interprete PHP integrado de 4D v20 PHP como un binario separado en la página de descarga del producto. Tenga en cuenta que este binario no será mantenido por 4D. Si necesita actualizar PHP en un Mac en el futuro, tendrá que construir su propio binario. Se detallará cómo hacerlo más adelante en este blog.

Debe lanzar PHP a través de la terminal llamando este comando dentro del directorio PHP:

php-cgi -b <dirección:puerto> -c <ruta_al_archivo_php.ini_dentro_de_la_carpeta_de_recursos_del_proyecto>

O si utiliza el PHP integrado en 4Dv20:

php-fcgi-4d -b <dirección:puerto> -c <ruta_a_php.ini_archivo_dentro_de_la_carpeta_de_recursos_del_proyecto>
No olvide, cuando escriba una ruta, escapar los caracteres especiales (como \ y «) añadiendo una \ justo antes (\\ y \»).
Como debe ejecutar PHP en la misma máquina que 4D, la dirección debe ser 127.0.0.1. El puerto por defecto de PHP es 8002, que es también el puerto por defecto que utiliza 4D. Le recomendamos utilizar los
workers del sistema para iniciar y detener PHP, de manera que no necesite ejecutarlo manualmente.

Por ejemplo, para ejecutar PHP con un worker del sistema, puede utilizar este código:

var worker : 4D.SystemWorker
worker:=4D.SystemWorker.new("<ruta_a_ejecutable_php_cgi> -b <dirección:puerto> -c <ruta_a_archivo_php.ini_dentro_de_la_carpeta_de_recursos_del_proyecto>")

Y posteriormente terminar PHP con:

worker.terminate()

Configurar los parámetros de 4D para conectarse a su PHP externo

Abra la pestaña PHP de los parámetros de la estructura e introduzca la dirección IP y el puerto de su servidor PHP. Luego, reabra su proyecto.

Opciones por defecto de la pestaña PHP de los parámetros de estructura.
8002 es el puerto PHP por defecto, y como el servidor PHP debe ejecutarse en la misma máquina que 4D, necesita utilizar la dirección 127.0.0.1.

Llamar a PHP Execute

Ahora que su servidor PHP está iniciado y que 4D está correctamente configurado, puede utilizar PHP Execute con la misma sintaxis que usó antes. No hay necesidad de cambiar nada en su código siempre y cuando utilice 4D v20 R3 o una versión más reciente. Para utilizar el concepto explicado arriba en versiones anteriores, utilice SET DATABASE PARAMETER(PHP use an external interpreter;1) – que es ahora la configuración por defecto de 4D. Note que el mismo comando le permite definir la IP o el puerto de PHP por código si no desea hacerlo vía la interfaz, como se explicó anteriormente.


Segundo paso: OBSOLESENCIA de PHP Execute

El segundo cambio ocurrirá en 4D v21: la desaparición de PHP Execute. El comando permanecerá funcional y no tenemos la intención de eliminarlo de 4D. Si decide utilizar PHP en su aplicación en el futuro, se recomienda utilizar los workers del sistema para ejecutar su código PHP.

Utilizar los system workers para ejecutar código PHP

Instalar o compilar PHP

En Windows, puede descargar PHP en el sitio web oficial de PHP.
En Mac, debe compilar PHP como intérprete PHP integrado 4D que solo viene con la versión rápida CGI, mientras que necesitará la versión CLI de PHP. Detallaré cómo hacerlo más adelante en esta entrada del blog.

Llamar a PHP con LOS system workers.

Permítame darle 2 ejemplos de cómo ejecutar su código PHP con system workers.

El primer ejemplo interpreta un archivo PHP y recupera la salida en 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

El segundo ejemplo ejecuta PHP en modo interactive shell, por lo que podemos pedirle que interprete directamente el código PHP. Esta forma de ejecutar código PHP está optimizada si se tienen que hacer muchas llamadas a PHP, ya que sólo se inicia PHP una vez.

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

//La retrollamada onData agregará el resultado de la ejecución a la variable data
var $options : Object
var $onData : 4D.Function
$onData:=Formula(data+=$2.data)
$options:=New object("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()

El resultado de la ejecución se recupera en la variable data, en este caso, Hello World !


Obtener PHP en Mac

La solución más simple para instalar PHP en Mac es utilizar Homebrew. Desafortunadamente, sólo obtendrá PHP en su máquina, y no podrá distribuirlo. Si desea distribuir PHP con su aplicación, debe compilarlo.

Utilizar Homebrew para compilar PHP

Instalar Homebrew

Puede encontrar un paquete para instalar Homebrew en GitHub.

Si no, puede instalarlo a través del terminal. Primero, necesitará las herramientas Xcode. Ejecute este comando para instalarlas:

xcode-select --install

A continuación, puede instalar Homebrew con este comando:

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

Instalar PHP

A continuación, puede instalar PHP con este comando:

brew install php

Compilación de PHP en Mac

Si necesita distribuir su aplicación 4D en Mac, necesitará una versión embebida de PHP. Para crearla, necesita compilar una. Aquí está el procedimiento completo para hacerlo:

Instalar Homebrew

Para instalar Homebrew, necesitará las herramientas Xcode. Llame a este comando para instalarlas:

xcode-select --install

Luego, puede instalar Homebrew con este comando:

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

Instalar los programas utilitarios

Para compilar PHP, necesitará tanto degroff como pkg-config. Puede instalarlos utilizando estos comandos:

brew install groff
brew install pkg-config

Compilar la librería OpenLDAP

Descargue la librería OpenLDAP.
Extraiga el contenido del archivo comprimido:

tar -zxf <nombre_del_archivo>

Configure la instalación:

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

Compilar dependencias:

make depend

Compilar la biblioteca:

make

Instalar en la carpeta de destino:

make install

Compilar la librería OpenSSL

Descargar la librería OpenSSL.
Extraer el contenido del archivo comprimido:

tar -zxf <nombre_del_archivo>

Configure para la instalación:

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

Compilar la biblioteca:

make

Instale en la carpeta de destino:

make install

Compilar PHP

Descargar PHP.
Extraer el contenido del archivo comprimido:

tar -zxf <nombre_del_archivo>

Configure la instalación:

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

Compile la librería:

make

Instale en la carpeta de destino:

make install

Dentro de la carpeta de destino de PHP, encontrará tanto una versión CGI como una versión CLI de PHP. La versión CGI puede ser utilizada como un servidor PHP externo con PHP Execute. La versión CLI puede ser utilizada con los system workers.

Utilice el foro si tiene alguna pregunta

Queremos asegurarnos de que su transición sea lo mejor posible. Entendemos que puede requerir algún esfuerzo, y estamos aquí para ayudarlo en cada etapa. No dude en dirigirse a nuestro foro si tiene alguna pregunta o comentario; estaremos encantados de ofrecerle respuestas y orientación.

Si prefiere iniciar una nueva discusión sobre PHP en el foro, recuerde incluir la etiqueta «PHP». Esto hará que sea más fácil para todos localizar y participar al respecto.

Nicolas Brachfogel
• Propietario de producto y Desarrollador Senior - Nicolas Brachfogel se unió a 4D en 2017 como Senior Developer (4D Server y networking). Como Product Owner para gestionar el lanzamiento de Apple Silicon, está a cargo de escribir historias de usuario y traducirlas en especificaciones funcionales, así como asegurarse de que las implementaciones de las funcionalidades satisfagan las necesidades del cliente. Diplomado por el Instituto Superior de Informática Aplicada (INSIA), Nicolas comenzó su carrera como desarrollador de software en 2001. Tras varios años codificando en Java y C++, pasó a especializarse en el desarrollo cliente-servidor para empresas de videojuegos. Como desarrollador/arquitecto de servidores, trabajó con éxito en las arquitecturas de servidores de muchos juegos (Dofus Arena, Drakerz, Trivial Pursuit Go!).