4D v16.3

PHP Execute

Accueil

 
4D v16.3
PHP
PHP Execute

PHP Execute 


 

PHP Execute ( cheminScript {; nomFonction {; résultatPHP {; param} {; param2 ; ... ; paramN}}} ) -> Résultat 
Paramètre Type   Description
cheminScript  Texte in Chemin d’accès au script PHP ou "" pour exécuter une fonction PHP
nomFonction  Texte in Fonction PHP à exécuter
résultatPHP  Opérateur, Variable, Champ in Résultat d’exécution de la fonction PHP ou * pour ne pas recevoir de résultat
param  Texte, Booléen, Réel, Entier long, Date, Heure in Paramètre(s) de la fonction PHP
Résultat  Booléen in Vrai = exécution correcte, Faux = erreur d’exécution

La commande PHP Execute permet d’exécuter un script ou une fonction PHP. 

Passez dans le paramètre cheminScript le chemin d’accès du fichier de script PHP à exécuter. Il peut s’agir d’un chemin d’accès relatif si le fichier est situé à côté de la structure de la base ou d’un chemin absolu. Le chemin d’accès peut être exprimé en syntaxe système ou Posix.
Si vous souhaitez exécuter directement une fonction PHP standard, passez une chaîne vide ("") dans cheminScript. Le nom de la fonction doit être passé en deuxième paramètre. 

Passez dans le paramètre nomFonction un nom de fonction PHP si vous souhaitez exécuter une fonction spécifique dans le script cheminScript. Si vous passez une chaîne vide ou omettez le paramètre nomFonction, le script est exécuté entièrement.

Note : PHP tient compte de la casse des caractères dans le nom de la fonction. N’utilisez pas de parenthèses, saisissez uniquement le nom de la fonction.

Le paramètre résultatPHP reçoit le résultat de l’exécution de la fonction PHP. Vous pouvez passer soit :

  • une variable, un tableau ou un champ afin de recevoir le résultat,  
  • le caractère * si la fonction ne retourne pas de résultat ou si vous ne souhaitez pas le récupérer.

résultatPHP peut être de type texte, entier long, réel, booléen, date ainsi que (hormis pour les tableaux) BLOB et heure. 4D effectuera la conversion des données et les ajustements nécessaires suivant les principes décrits dans le paragraphe Conversion of data returned ci-dessous. 

  • Si vous avez passé un nom de fonction dans nomFonction, résultatPHP recevra ce que le développeur PHP a retourné avec la commande return depuis le corps de la fonction. 
  • Si vous utilisez la commande sans passer de nom de fonction dans nomFonction, résultatPHP recevra ce que le développeur PHP a retourné avec la commande echo (ou une commande similaire).

Si vous appelez une fonction PHP qui attend des arguments, utilisez le(s) paramètre(s) param1...N pour passer une ou plusieurs valeur(s). Les valeurs doivent être séparées par des points-virgules. Vous pouvez passer des valeurs de type alpha, texte, booléen, réel, entier, entier long, date ou heure. Les images, BLOBs et objets ne sont pas admis. Vous pouvez envoyer un tableau, il est nécessaire dans ce cas de passer un pointeur sur le tableau à la commande PHP Execute, sinon c'est l'index courant du tableau qui est envoyé sous forme d'entier (cf. exemple). La commande accepte tous les types de tableaux sauf les tableaux pointeur, les tableaux image et les tableaux 2D.
Les paramètres param1...N sont envoyés au PHP au format JSON en utf-8. Ils sont automatiquement décodés avec la commande PHP json_decode avant d'être passés à la fonction PHP nomFonction.

Note : Pour des raisons techniques, la taille des paramètres passés via le protocole fast cgi ne doit pas dépasser 64 Ko. Vous devez tenir compte de cette limitation si vous utilisez des paramètres de type Texte.

La commande retourne Vrai si l’exécution s’est déroulée correctement côté 4D, c’est-à-dire si le lancement de l’environnement d’exécution, l’ouverture du script et l’établissement de la communication avec l’interpréteur PHP ont été réussis. Dans le cas contraire, une erreur est générée, que vous pouvez intercepter avec la commande ON ERR CALL et analyser avec GET LAST ERROR STACK.
En outre, le script lui-même peut générer des erreurs PHP. Dans ce cas, vous devez utiliser la commande PHP GET FULL RESPONSE afin d’analyser la source de l’erreur (voir exemple 4).

Note : PHP permet de configurer la gestion d’erreurs. Pour plus d’informations, reportez-vous par exemple à la page http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting.

Le tableau suivant précise comment 4D interprète et convertit les données retournées en fonction du type du paramètre résultatPHP.

Type paramètre résultatPHPTraitement 4DExemple
BLOB4D récupère les données reçues sans aucune modification (*).
Texte4D attend des données encodées en utf-8 (*). Le développeur PHP peut avoir besoin d'utiliser la commande PHP utf8_encode.Exemple de script PHP :
echo utf8_encode(monTexte)
Date4D attend une date envoyée sous forme de chaîne au format RFC 3339 (appelé parfois DATE_ATOM en PHP). Ce format est de type "AAAA-MM-JJTHH:MM:SS", par exemple : 2005-08-15T15:52:01+00:00. 4D ignorera la partie heure et retournera la date en UTC.
Heure4D attend une heure envoyée sous forme de chaîne au format RFC 3339 (cf. type Date). 4D ignorera la partie date et retournera le nombre de secondes écoulées depuis minuit en considérant la date dans la zone horaire locale. Exemple de script PHP pour envoyer 2h30'45" :
echo date( DATE_ATOM, mktime( 2,30,45))
Entier ou Réel4D interprète le numérique exprimé avec des chiffres, signe - ou +, exposant préfixé par 'e'. Tout caractère '.' ou ',' est interprété comme un séparateur décimal.Exemple de script PHP :
echo -1.4e-16;
Booléen4D retournera Vrai s'il reçoit la chaine "true" depuis PHP ou si l'évaluation sous forme de numérique donne une valeur non nulle.Exemple de script PHP :
echo (a==b);
Tableau4D considère que le tableau PHP a été retourné au format JSON.Exemple de script PHP pour retourner un tableau de deux textes :
echo json_encode( array( "hello", "world"));

(*) Par défaut, les en-têtes HTTP ne sont pas retournés :
- si vous utilisez PHP Execute en passant une fonction dans le paramètre nomFonction, les entêtes HTTP ne sont jamais retournés dans résultatPHP. Ils ne sont accessibles que via PHP GET FULL RESPONSE.
- si vous utilisez PHP Execute sans nom de fonction (nomFonction omis ou contenant une chaîne vide), vous pouvez retourner les en-têtes HTTP en fixant l'option PHP raw result à Vrai à l'aide de la commande PHP SET OPTION.

Note : Si vous devez récupérer de gros volumes de données via PHP, il est généralement plus efficace de passer par le canal du buffer stdOut (commande echo ou similaire) que par le retour de fonction. Pour plus d'informations, reportez-vous à la description de la commande PHP GET FULL RESPONSE.

Vous pouvez utiliser la commande SET ENVIRONMENT VARIABLE pour définir des variables d’environment utilisées par le script. Attention : après un appel à LAUNCH EXTERNAL PROCESS ou PHP Execute, l’ensemble des variables d’environment est effacé.

4D propose les fonctions spéciales suivantes :

  • quit_4d_php : permet de quitter l’interpréteur PHP et tous ses process enfants. Si un process enfant au moins est en train d’exécuter un script, l’interpréteur ne quitte pas et la commande PHP Execute retourne Faux.
  • relaunch_4d_php permet de relancer l’interpréteur PHP.

A noter que l’interpréteur est relancé automatiquement à la première requête envoyée par PHP Execute.

Appel du script "myPhpFile.php" sans fonction. Voici le contenu du script :

<<?php
echo 'Version php courante : ' . phpversion();
?>

Le code 4D suivant :

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

... affichera "Version php courante : 5.3"

Appel de la fonction myPhpFunction dans le script "myNewScript.php" avec des paramètres. Voici le contenu du script :

<?php
//...code php...
function myPhpFunction($p1, $p2) {
    return $p1 . ' '. $p2;
}
// ...code php...
?>

Appel avec fonction :

 C_TEXT($result)
 C_TEXT($param1)
 C_TEXT($param2)
 C_BOOLEAN($isOk)
 $param1:="Hello"
 $param2 :="4D world !"
 $isOk:=PHP Execute("C:\\MonDossier\\myNewScript.php";"myPhpFunction";$result;$param1;$param2 )
 ALERT($result// Affiche "Hello 4D world!"

Faire quitter l’interpréteur PHP :

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

Gestion des erreurs :

    // Installation de la méthode de gestion d’erreurs
 phpCommError:="" // Modifiée par PHPErrorHandler
 $T_saveErrorHandler :=Method called on error
 ON ERR CALL("PHPErrorHandler")
 
     // Exécution du script
 C_TEXT($T_result)
 If(PHP Execute("C:\\MyScripts\\MiscInfos.php";"";$T_result))
              // Pas d’erreur, $T_Result contient le résultat
 Else
              // Une erreur a été détectée, gérée par PHPErrorHandler
          If(phpCommError="")
             ... // erreur PHP, utilisez PHP LIRE REPONSE COMPLETE
          Else
             ALERT(phpCommError)
          End if
 End if
 
  // Désinstallation de la méthode
 ON ERR CALL($T_saveErrorHandler)

La méthode PHP_errHandler est la suivante :

 phpCommError:=""
 GET LAST ERROR STACK(tabCodes;tabComps;tabLibellés)
 For($i;1;Size of array(tabCodes))
       phpCommError:=phpCommError+String(tabCodes{$i})+" "+tabComps{$i}+" "+tabLibellés{$i}+Caractere(Retour chariot)
 End for

Création dynamique par 4D d’un script avant son exécution :

 DOCUMENT TO BLOB("C:\\Scripts\\MonScript.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\\MonScript.php";$blobDoc)
       If(OK#1)
          ALERT("Erreur à la création du script")
       End if
 End if

Le script est ensuite exécuté :

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

Récupération directe d’une valeur de type date et heure. Voici le contenu du script :

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

Réception de la date côté 4D :

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

Répartition de données dans des tableaux :

 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 contient les valeurs alpha "11", "22", "33", etc.
        // $arLong contient les numériques, 11, 22, 33, etc.

Initialisation d’un tableau :

 ARRAY TEXT($arText ;0)
 $phpok :=PHP Execute("";"array_pad";$arText;->$arText;50;"indéfini")
        // Exécute en php : $arrTest = array_pad($arrTest, 50, ’indéfini’);
        // Remplit le tableau $arText avec 50 éléments "indéfini"

Passage de paramètres via un tableau :

 ARRAY INTEGER($arInt;0)
 $phpok :=PHP Execute("";"json_decode";$arInt;"[13,51,69,42,7]")
        // Exécute en php : $arInt = json_decode(’[13,51,69,42,7]’);
        // Remplit le tableau avec des valeurs initiales

Utilisation basique de la fonction trim de PHP permettant d'enlever les espaces et/ou caractères invisibles de part et d'autre d'une chaîne de caractères :

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

Pour plus d'informations sur la fonction trim, veuillez vous reporter à la documentation PHP.



Voir aussi  

Exécuter des scripts PHP dans 4D
PHP GET FULL RESPONSE
PHP SET OPTION

 
PROPRIÉTÉS 

Produit : 4D
Thème : PHP
Numéro : 1058

 
HISTORIQUE 

Créé : 4D v12
Modifié : 4D v12.1

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v16)
4D - Langage ( 4D v16.1)
4D - Langage ( 4D v16.2)
4D - Langage ( 4D v16.3)