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.