Descontinuação de comandos PHP & Remoção do interpretador PHP embutido 4D

PHP tem desempenhado um papel crucial no desenvolvimento web, e foi introduzido em 4D v12 para oferecer características não prontamente disponíveis na linguagem nativa, como zip, hash, ou funcionalidade LDAP. Com o tempo, 4D incorporou muitas dessas características PHP em sua funcionalidade principal. Como resultado, decidimos remover o interpretador PHP integrado em 4D v20 R3 e começar o processo de depreciação para comandos PHP na v21.

Enquanto não removeremos completamente os comandos PHP de 4D, encorajamos fortemente a usar os trabalhadores do sistema para executar código PHP no futuro.

Este post de blog vai guiá-lo através deste processo de transição, demonstrando como usar um interpretador externo através do PHP Execute e explicando como executar código PHP efetivamente com um system worker.

Primeiro passo: remoção do interpretador PHP embutido em 4D

A primeira mudança vai acontecer em 4D v20 R3 removendo o interpretador PHP embutido em 4D. PHP Execute continuará a funcionar mas apenas com um interpretador PHP externo. Se não está familiarizado com o uso de um interpretador PHP externo, por favor siga esse tutorial.

Usando o PHP Execute com um interpretador PHP externo

O uso de um interpretador PHP externo permitirá que você atualize sempre que quiser para versões mais recentes do PHP e instale patches de segurança assim que eles forem lançados. Ele também permite que você use mais módulos PHP.

Criar um ficheiro php.ini personalizado

O arquivo php.ini é utilizado para inicializar o interpretador PHP. Esse arquivo foi criado automaticamente e usado ao chamar o PHP Execute com o interpretador interno. Para o interpretador externo, esse arquivo deve ser criado e passado manualmente. Chamar o PHP Execute uma vez criará o arquivo na pasta de recursos do seu projeto: nós sugerimos fortemente que você use este arquivo para inicializar o interpretador PHP externo, modificando-o se necessário.

Executar uma versão CGI do PHP.

Há 2 maneiras de executar o PHP: Com uma interface de linha de comando (CLI) ou através da interface de gateway comum (CGI). O PHP Execute usa a interface de gateway comum, então você deve executar uma versão CGI do PHP.
Para Windows, você pode baixar o PHP no site oficial do PHP. Esta versão contém as versões CLI e CGI do PHP.
Atualmente, a versão no site oficial não carrega o pacote mbstring por padrão. Para isso, é necessário adicionar estas linhas ao arquivo php.ini:

extension_dir = "./ext/"
extension=mbstring

No Mac, isto é um pouco mais complicado. A Apple parou de enviar o macOS com o PHP instalado (por razões semelhantes, nós paramos de enviar um). O site oficial do PHP não fornece uma versão pré-compilada para Mac. Pode encontrar versões pré-construídas em alguns sites, mas normalmente não são mantidas ou recomendadas. Para ajudá-lo na transição, 4D fornece seu 4D v20 PHP embutido como um binário separado na página de download do produto. Note que esse binário não será mantido por 4D. Se precisar atualizar o PHP em um Mac no futuro, terá que construir o seu próprio. Eu detalharei como fazer isso mais tarde nesse post do blog.

Você então precisa iniciar o PHP através do terminal chamando esse comando dentro do diretório PHP:

php-cgi -b <address:port> -c <path_to_php.ini_file_inside_the_project_resources_folder>

Ou se usar o PHP embutido no 4Dv20:

php-fcgi-4d -b <address:port> -c <path_to_php.ini_file_inside_the_project_resources_folder>
Não se esqueça, quando digitar um caminho, de escapar caracteres especiais (como \ e “) adicionando um \ logo antes (\\ e \”).
Como precisa rodar PHP na mesma máquina que 4D, o endereço deve ser 127.0.0.1. A porta padrão do PHP é 8002, que também é a porta padrão que 4D usa. Nós o encorajamos a usar os
trabalhadores do sistema para iniciar e parar o PHP para que não precise executá-lo manualmente.

Por exemplo, para executar o PHP com um system worker, pode usar este código:

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 depois encerrar o PHP com:

worker.terminate()

Configure as definições 4D para conectar ao seu PHP externo

Abra a aba PHP das configurações de estrutura e insira o endereço IP e a porta do seu servidor PHP. Depois, reabra seu projeto.

Opções padrão da aba PHP das configurações de estrutura.
8002 é a porta PHP padrão, e como o servidor PHP precisa rodar na mesma máquina que 4D, precisa usar o endereço 127.0.0.1.

Chame o PHP Execute

Agora que seu servidor PHP está iniciado e 4D configurado corretamente, pode usar PHP Execute com a mesma sintaxe que usou no passado. Não há necessidade de mudar nada em seu código desde que use 4D v20 R3 ou mais recente. Para usar o conceito explicado acima em versões mais antigas, use SET DATABASE PARAMETER(PHP use an external interpreter;1) – que agora é a configuração padrão para 4D. Note que o mesmo comando permite definir o IP ou porta do PHP por código se não quiser defini-lo via interface, como explicado acima.


Segundo passo: Depreciação do PHP Execute

A segunda mudança vai acontecer em 4D v21: a descontinuação do PHP Execute. O comando permanecerá funcional, e não pretendemos removê-lo de 4D. Se decidir usar PHP em sua aplicação no futuro, usar os system workers para executar seu código PHP é fortemente aconselhado.

Usando system workers para executar código PHP

Instalar ou compilar o PHP

No Windows, você pode baixar o PHP no site oficial do PHP.
No Mac, você precisará compilar o PHP como um interpretador PHP embutido 4D que só vem com a versão CGI rápida, enquanto você precisará da versão CLI do PHP. Eu detalharei como fazer isso mais tarde neste post do blog.

Chame PHP com system workers.

Vou dar dois exemplos de como executar seu código PHP com system workers.

O primeiro exemplo interpreta um arquivo PHP e recupera a saída na variável $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

O segundo exemplo executa o PHP como uma shell interactiva, por isso podemos pedir-lhe para interpretar diretamente algum código PHP. Esta forma de executar código PHP é mais otimizada se tiver de fazer muitas chamadas PHP, uma vez que só inicia o PHP uma vez.

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

//A chamada de retorno onData anexará o resultado da execução à variável de dados
var $options : Objeto
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()

O resultado da execução é recuperado na variável de dados, neste caso, Hello World!


Obtendo PHP no Mac

A solução mais simples para obter o PHP no Mac é usar o Homebrew. Infelizmente, ele só vai colocar o PHP na sua máquina, e você não vai poder distribuí-lo. Se você quiser distribuir o PHP com sua aplicação, você deve compilá-lo.

Usando o Homebrew para compilar o PHP

Instalar o Homebrew

Você pode encontrar um pacote para instalar o Homebrew no GitHub.

Caso contrário, você pode instalá-lo através do terminal. Primeiro, você precisará das ferramentas do Xcode. Chame este comando para instalá-las:

xcode-select --install

Você pode então instalar o Homebrew com este comando:

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

Instalar o PHP

Pode então instalar o PHP com este comando:

brew install php

Compilando PHP no Mac

Se precisar distribuir sua aplicação 4D no Mac, precisará de uma versão embutida do PHP. Para criá-la, precisa compilar uma. Aqui está o procedimento completo para fazer isso:

Instalar Homebrew

Para instalar Homebrew, precisará das ferramentas Xcode. Chame este comando para instalá-las:

xcode-select --install

Pode então instalar o Homebrew com este comando:

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

Instalar programas utilitários

Para compilar o PHP, você precisará do groff e do pkg-config. Você pode instalá-los usando estes comandos:

brew install groff
brew install pkg-config

Compilar a biblioteca OpenLDAP

Descarregue a biblioteca OpenLDAP.
Extraia o conteúdo do arquivo compactado:

tar -zxf <nome_do_arquivo>

Configurar para a instalação:

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

Compilar as dependências:

make depend

Compilar a biblioteca:

make

Instalar na pasta de destino:

make install

Compilar a biblioteca OpenSSL

Descarregar a biblioteca OpenSSL.
Extraia o conteúdo do arquivo compactado:

tar -zxf <nome_do_arquivo>

Configure para a instalação:

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

Compilar a biblioteca:

make

Instalar na pasta de destino:

make install

Compilar o PHP

Descarregar o PHP.
Extraia o conteúdo do arquivo compactado:

tar -zxf <nome_do_arquivo>

Configurar para instalação:

./configure --prefix="<caminho_da_pasta_de_destino>" --disable-all --enable-cgi --enable-shared=no --enable-static=yes --with-openssl="<caminho_da_pasta_de_destino_do_OpenSSL>" --with-ldap="<caminho_da_pasta_de_destino_do_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 a biblioteca:

make

Instalar na pasta de destino:

make install

Dentro da pasta de destino do PHP, você encontrará tanto uma versão CGI rápida do PHP quanto uma versão CLI do PHP. A versão CGI rápida pode ser usada como um servidor PHP externo com o PHP Execute. A versão CLI pode ser usada com os trabalhadores do sistema.

Utilize o fórum se tiver alguma dúvida

Queremos garantir que a sua transição seja tão suave quanto possível. Compreendemos que pode exigir algum esforço e estamos aqui para o ajudar em cada passo do caminho. Não hesite em contactar o nosso fórum com quaisquer questões ou comentários; teremos todo o gosto em fornecer respostas e orientações.

Se decidir iniciar uma nova discussão sobre PHP no fórum, lembre-se de incluir a etiqueta “PHP”. Isto facilitará a localização e o envolvimento de todos no seu tópico.

Nicolas Brachfogel
• Proprietário do produto e Desenvolvedor Senior -Nicolas Brachfogel entrou a 4D em 2017 como Senior Developer (4D Server e Networking). Como Product Owner para gerenciar o lançamento de Apple Silicon, está a cargo de escrever as histórias dos usuários e depois traduzi-las em especificações funcionais, além de garantir que as implementações de funcionalidade cumpram com as necessidades do cliente. Diplomado pelo Instituto Superior de Informática Aplicada (INSIA), Nicolas começou sua carreira como desenvolvedor de software em 2001. Depois de vários anos codificando em Java e C++, passou a especializar-se no desenvolvimento cliente-servidor para empresas de videogames. Como desenvolvedor/arquiteto de servidores, trabalhou com sucesso nas arquiteturas de servidores de muitos jogos (Dofus Arena, Drakerz, Trivial Pursuit Go!)