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.