4D v16.3

PHP Execute

Página Inicial

 
4D v16.3
PHP
PHP Execute

PHP Execute 


 

PHP Execute ( rotaScript {; nomeFuncao {; resultadoPHP {; param} {; param2 ; ... ; paramN}}} ) -> Resultado 
Parâmetro Tipo   Descrição
rotaScript  Texto in Rota de acesso ao script PHP ou "" para executar a função PHP
nomeFuncao  Texto in Função PHP a ser executada
resultadoPHP  Operador, Variável, Campo in Resultado da função PHP executada ou * para não receber nenhum resultado
param  Texto, Booleano, Real, Inteiro longo, Data, Hora in Parâmetros da função PHP
Resultado  Booleano in True =execução correta; False = erro de execução

O comando PHP Execute permite executar um script ou uma função PHP.

Passe no parâmetro rutaScript a rota de acesso do arquivo de script PHP a executar. Pode ser uma rota de acesso relativa se o arquivo está localizado junto à estrutura do banco ou de uma rota absoluta. A rota de acesso pode ser expressa em sintaxe sistema ou POSIX.
Se deseja executar diretamente uma função PHP padrão, passe uma string vazia ("") em rotaScript. O nome da função deve ser passada no segundo parâmetro.

Passe no parâmetro nomFunção um nome de função PHP se quer executar uma função específica no script rotaScriptSe passa uma string vazia ou omite o parâmetro nomFunção, o script se executa completamente.

Nota: PHP considera as maiúsculas e minúsculas dos caracteres no nome da função. Não utilize parênteses, introduza unicamente o nome da função.

O parâmetro resultPHP recebe o resultado da execução da função PHP. Pode passar:

  • uma variável, um array ou um campo para receber o resultado,  
  • o caractere * se a função não devolve nenhum resultado ou se não quer recuperar o resultado.

O parâmetro resultPHP pode ser de tipo texto, inteiro longo, real, booleano ou data assim como também (exceto para arrays) BLOB ou hora. 4D efetuará a conversão dos dados e os ajustes necessários seguindo os princípios descritos na seção a continuação.

  • se passa um nome de função no parâmetro nomFuncao, resultPHP receberá o que o desenvolvedor PHP devolve com o comando return do corpo da função.
  • Se utiliza o comando sem passar um nome de função no parâmetro nomFuncao, resultPHP receberá o que o desenvolvedor PHP devolveu com o comando echo ( ou um comando similar).

Se chama a uma função PHP que espera argumentos, utilize os parâmetros param1...N para passar um ou vários valores. Os valores devem estar separados por ponto e vírgula. Pode passar valores de tipo alfa, texto, booleano, real, inteiro, inteiro longo, data ou hora. As imagens e os BLOBs não são aceitos. Pode enviar um array; neste caso deve passar um ponteiro no array ao comando PHP Execute, do contrário o índice atual do array se enviará como um inteiro (ver o exemplo). O comando aceita todos os tipos de arrays exceto os arrays ponteiro, os arrays imagem e os arrays 2D.
Os parâmetros param1...N são enviados em PHP no formato JSON em UTF-8. Eles são codificados automaticamente com o comando  PHP json_decode antes de ser enviados à função PHP  nomeFunçao.

Nota: por razões técnicas, o tamanho dos parâmetros passados através do protocolo FastCGI não deve passar os 64 KB. Deve considerar esta limitação se utiliza parâmetros de tipo Texto.

O comando devolve True se a execução for realizada corretamente do lado de 4D, em outras palavras, se o lançamento do ambiente de execução, a abertura do script e o estabelecimento da comunicação com o intérprete PHP foram exitosos. Do contrário, se gera um erro, que pode interceptar com o comando ON ERR CALL e analizar com GET LAST ERROR STACK.
Além disso, o script mesmo pode gerar erros PHP. Neste caso, deve utilizar o comando PHP GET FULL RESPONSE para analizar a fonte do erro (ver exemplo 4).

Nota: PHP permite configurar a gestão de erros. Para maior informação, consulte por exemplo a página: http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting.

A tabela a seguir especifica como 4D interpreta e converte os dados devolvidos em função do tipo do parâmetro resultPHP.

Tipo do parâmetro resultPHPProcesso 4DExemplo
BLOB4D recupera os dados recebidos sem nenhuma modificação(*).
Texto4D espera os dados codificados em UTF-8 (*). O desenvolvedor PHP pode necessitar utilizar o comando PHP utf8_encode.Exemplo de script PHP:
echo utf8_encode(meuTexto)
Data4D espera uma data enviada como uma string em formato RFC 3339 (também chamado DATE_ATOM em PHP). Este formato é de tipo "AAAA-MM-DDTHH:MM:SS", por exemplo: 2005-08-15T15:52:01+00:00. 4D ignora a parte hora e devolve a data em UTC.
Hora4D espera uma hora enviada em forma de string em formato RFC 3339 (ver o tipo Data). 4D ignora a parte data e devolve o número de segundos transcorridos desde a meia noite considerando a data na zona horária local. Exemplo de script PHP para enviar 2h30'45":
echo date( DATE_ATOM, mktime( 2,30,45))
Inteiro ou Real4D interpreta o valor numérico expresso com números, signo + ou - e/ou o exponente com o prefixo 'e'. Todo carácter '.' ou ',' se interpreta como um separador decimal.Exemplo de script PHP:
echo -1.4e-16;
Booleano4D devolve True se recebe a string "true" desde PHP ou se a avaliação numérica dá um valor não nulo.Exemplo de script PHP:
echo (a==b);
Array4D considera que o array PHP foi devolvido no formato JSON.Exemplo de script PHP para devolver um array dos textos:
echo json_encode( array( "ola", "mundo"));

(*) Por padrão, não são devolvidos os cabeçalhos HTTP:
- Se utiliza PHP Execute ao passar uma função no parâmetro nomFuncao, os cabeçalhos HTTP nunca são devolvidos em resultPHP. Só estão disponíveis através do comando PHP GET FULL RESPONSE.
- Se utiliza PHP Execute sem um nome de função (o parâmetro nomFunçao se omite ou contém uma string vazia), pode devolver os cabeçalhos HTTP fixando a opção PHP Raw result em True utilizando o comando PHP SET OPTION.

Nota: se precisar recuperar grandes volumes de dados utilizando PHP, é mais eficiente passar pelo canal do buffer stdOut (comando echo ou similar) que pelo retorno de função. Para maior informação, consulte a descrição do comando PHP GET FULL RESPONSE.

Pode utilizar o comando SET ENVIRONMENT VARIABLE para definir as variáveis de ambiente utilizadas pelo script. Atenção: depois de chamar LAUNCH EXTERNAL PROCESS ou PHP Execute, o conjunto das variáveis de ambiente se apaga.

4D oferece as seguintes funções especiais:

  • quit_4d_php: permite sair do intérprete PHP e de todos seus processos filhos. Se ao menos um dos processos filho está executando um script, o intérprete não sai e o comando PHP Execute devolve False.
  • relaunch_4d_php: permite relançar o intérprete PHP.

Note que o intérprete é relançado automaticamente quando a primeira petição é enviada por PHP Execute.

Chamada do script "myPhpFile.php" sem função. Este é o conteúdo do script:

<?php
echo 'Versão PHP atual: ' . phpversion();
?>

O código 4D a seguir:

 C_TEXT($result)
 C_BOOLEAN($isOK)
 $isOK:=PHP Execute("C:\php\myPhpFile.php";"";$result)
 ALERT($Result)

... mostrará "Versão PHP atual: 5.3"

Chamada da função myPhpFunction no script "myNewScript.php" com parâmetros. Este é o conteúdo do script:

<?php
// . . . código PHP. . .
function myPhpFunction($p1, $p2) {
    return $p1 . ' '. $p2;
}
// . . . código PHP.. . .
?>

Chamada com função:

 C_TEXT($result)
 C_TEXT($param1)
 C_TEXT($param2)
 C_BOOLEAN($isOk)
 $param1 :="Olá"
 $param2 :="mundo 4D!"
 $isOk:=PHP Execute("C:\MyFolder\myNewScript.php";"myPhpFunction";$result;$param1;$param2)
 ALERT($result// Mostra "Olá mundo 4D!"

Sair do intérprete PHP:

 $ifOk:=PHP Execute("";"quit_4d_php")

Gestão de  erros:

  // Instalação do método de gestão de erros
 phpCommError:="" // Modificado por PHPErrorHandler
 $T_saveErrorHandler :=Method called on error
 ON ERR CALL("PHPErrorHandler")</p><p> // Execução do script
 C_TEXT($T_result)
 If(PHP Execute("C:\MyScripts\MiscInfos.php";"";$T_result))
  // Nenhum erro, $T_Result contém o resultado
 Else
  // Se detectou um erro, administrado por PHPErrorHandler
    If(phpCommError="")
       ... // error PHP, utilize PHP GET FULL RESPONSE
    Else
       ALERT(phpCommError)
    End if
 End if
 
  // Desinstalação do método
 ON ERR CALL($T_saveErrorHandler)

O método PHP_errHandler é o seguinte:

 phpCommError:=""
 GET LAST ERROR STACK(arrCodes;arrComps;arrLabels)
 For($i;1;Size of array(arrCodes))
    phpCommError:=phpCommError+String(arrCodes{$i})+" "+arrComps{$i}+" "+
    arrLabels{$i}+Char(Carriage return)
 End for

Criação dinâmica por 4D de um script antes de sua execução:

 DOCUMENT TO BLOB("C:\Scripts\MyScript.php";$blobDoc)
 If(OK=1)
    $strDoc:=BLOB to text($blobDoc;UTF8 text without length)
 
    $strPosition:=Position("function2Rename";$strDoc)
 
    $strDoc:=Insert string($strDoc;"_v2";Length("function2Rename")+$strPosition)
 
    TEXT TO BLOB($strDoc;$blobDoc;UTF8 text without length)
    BLOB TO DOCUMENT("C:\Scripts\MyScript.php";$blobDoc)
    If(OK#1)
       ALERT("Error on script creation")
    End if
 End if

Se executa o script:

 $err:=PHP Execute("C:\Scripts\MyScript.php";"function2Rename_v2";*)

Recuperação direta de um valor de tipo data e hora. Este é o conteúdo do script:

<?php
// . . . code php. . .
echo date(DATE_ATOM, mktime(1, 2, 3, 4, 5, 2009));
// . . . code php. . .
?>

Recepção da data do lado 4D:

 C_DATE($phpResult_date)
 $result :=PHP Execute("C:\php_scripts\ReturnDate.php";"";$phpResult_date)
  //$phpResult_date is !05/04/2009 !
 
 C_TIME($phpResult_time)
 $result :=PHP Execute("C:\php_scripts\ReturnDate.php";"";$phpResult_time)
  //$phpResult_time is ?01 :02 :03 ?

Distribuição de dados em arrays:

 ARRAY TEXT($arText ;0)
 ARRAY LONGINT($arLong ;0)
 $p1 :=","
 $p2 :="11,22,33,44,55"
 $phpok :=PHP Execute("";"explode";$arText;$p1;$p2)
 $phpok :=PHP Execute("";"explode";$arLong;$p1;$p2)
 
  // $arText contém os valores Alfa "11", "22", "33", etc.
  // $arLong contém os números, 11, 22, 33, etc.

Inicialização de um array:

 ARRAY TEXT($arText ;0)
 $phpok :=PHP Execute("";"array_pad";$arText;->$arText;50;"indefinido")
  // Execute em PHP: $arrTest = array_pad($arrTest, 50, ’indefinido’);
  // Preencher o array $arText com 50 elementos "indefinido"

Passo de parâmetros através de um array:

 ARRAY INTEGER($arInt;0)
 $phpok :=PHP Execute("";"json_decode";$arInt;"[13,51,69,42,7]")
  // Execute en PHP: $arInt = json_decode(’[13,51,69,42,7]’);
  // Preencha o array com os valores iniciais

Este é um exemplo da utilização básica da função trim, para eliminar espaços adicionais e/ou caracteres invisíveis de princípio a fim de uma cadeia:

 C_TEXT($T_String)
 $T_String:="   Hello  "
 C_BOOLEAN($B)
 $B:=PHP Execute("";"trim";$T_String;$T_String)

Para obter mais informação sobre a função trim, por favor, consulte a documentação de PHP.



Ver também 

Executar scripts PHP em 4D
PHP GET FULL RESPONSE
PHP SET OPTION

 
PROPRIEDADES 

Produto: 4D
Tema: PHP
Número 1058

 
HISTÓRIA 

Criado por: 4D v12
Modificado: 4D v12.1

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v16)
Manual de linguagem 4D ( 4D v16.1)
Manual de linguagem 4D ( 4D v16.2)
Manual de linguagem 4D ( 4D v16.3)