4D v14.3

PHP Executer

Accueil

 
4D v14.3
PHP
PHP Executer

PHP Executer 


 

PHP Executer ( 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 Executer 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 des données retournées 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 et les BLOBs 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 Executer, 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 APPELER SUR ERREUR et analyser avec LIRE PILE DERNIERE ERREUR.
En outre, le script lui-même peut générer des erreurs PHP. Dans ce cas, vous devez utiliser la commande PHP LIRE REPONSE COMPLETE 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 Executer 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 LIRE REPONSE COMPLETE.
- si vous utilisez PHP Executer 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 Résultat brut à Vrai à l'aide de la commande PHP FIXER 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 LIRE REPONSE COMPLETE.

Vous pouvez utiliser la commande FIXER VARIABLE ENVIRONNEMENT pour définir des variables d’environment utilisées par le script. Attention : après un appel à LANCER PROCESS EXTERNE ou PHP Executer, 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 Executer 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 Executer.

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

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

Le code 4D suivant :

 C_TEXTE($result)
    C_BOOLEEN($isOK)
    $isOK:=PHP Executer("C:\\php\\myPhpFile.php";"";$result)
    ALERTE($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_TEXTE($result)
 C_TEXTE($param1)
 C_TEXTE($param2)
 C_BOOLEEN($isOk)
 $param1:="Hello"
 $param2 :="4D world !"
 $isOk:=PHP Executer("C:\\MonDossier\\myNewScript.php";"myPhpFunction";$result;$param1;$param2 )
 ALERTE($result// Affiche "Hello 4D world!"

Faire quitter l’interpréteur PHP :

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

Gestion des erreurs :

    // Installation de la méthode de getion d’erreurs
 phpCommError:="" // Modifiée par PHPErrorHandler
 $T_saveErrorHandler :=Methode appelee sur erreur
 APPELER SUR ERREUR("PHPErrorHandler")
 
     // Exécution du script
 C_TEXTE($T_result)
 Si(PHP Executer("C:\\MyScripts\\MiscInfos.php";"";$T_result))
              // Pas d’erreur, $T_Result contient le résultat
 Sinon
              // Une erreur a été détectée, gérée par PHPErrorHandler
          Si(phpCommError="")
             ... // erreur PHP, utilisez PHP LIRE REPONSE COMPLETE
          Sinon
             ALERTE(phpCommError)
          Fin de si
 Fin de si
 
  // Désinstallation de la méthode
 APPELER SUR ERREUR($T_saveErrorHandler)

La méthode PHP_errHandler est la suivante :

 phpCommError:=""
 LIRE PILE DERNIERE ERREUR(tabCodes;tabComps;tabLibellés)
 Boucle($i;1;Taille tableau(tabCodes))
       phpCommError:=phpCommError+Chaine(tabCodes{$i})+" "+tabComps{$i}+" "+tabLibellés{$i}+Caractere(Retour chariot)
 Fin de boucle

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

 DOCUMENT VERS BLOB("C:\\Scripts\\MonScript.php";$blobDoc)
 Si(OK=1)
       $strDoc:=BLOB vers texte($blobDoc;UTF8 texte sans longueur)
       
       $strPosition:=Position("function2Rename";$strDoc)
       
       $strDoc:=Inserer chaine($strDoc;"_v2";Longueur("function2Rename")+$strPosition)
       
       TEXTE VERS BLOB($strDoc;$blobDoc;UTF8 texte sans longueur)
       BLOB VERS DOCUMENT("C:\\Scripts\\MonScript.php";$blobDoc)
       Si(OK#1)
          ALERTE("Erreur à la création du script")
       Fin de si
 Fin de si

Le script est ensuite exécuté :

 $err:=PHP Executer("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 Executer("C:\php_scripts\ReturnDate.php";"";$phpResult_date)
     //$phpResult_date vaut !05/04/2009 !
 
 C_HEURE($phpResult_time)
 $result :=PHP Executer("C:\php_scripts\ReturnDate.php";"";$phpResult_time)
 
     //$phpResult_time vaut ?01 :02 :03 ?

Répartition de données dans des tableaux :

 TABLEAU TEXTE($arText ;0)
 TABLEAU ENTIER LONG($arLong ;0)
 $p1 :=","
 $p2 :="11,22,33,44,55"
 $phpok :=PHP Executer("";"explode";$arText;$p1;$p2)
 $phpok :=PHP Executer("";"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 :

 TABLEAU TEXTE($arText ;0)
 $phpok :=PHP Executer("";"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 :

 TABLEAU ENTIER($arInt;0)
 $phpok :=PHP Executer("";"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_TEXTE($T_String)
 $T_String:="   Bonjour  "
 C_BOOLEEN($B)
 $B:=PHP Executer("";"trim";$T_String;$T_String)

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

 
PROPRIÉTÉS 

Produit : 4D
Thème : PHP
Numéro : 1058
Nom intl. : PHP Execute

 
HISTORIQUE 

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

 
VOIR AUSSI  

Exécuter des scripts PHP dans 4D
PHP FIXER OPTION
PHP LIRE REPONSE COMPLETE

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v12.4)
4D - Langage ( 4D v14 R2)
4D - Langage ( 4D v14 R3)
4D - Langage ( 4D v13.5)
4D - Langage ( 4D v14.3)
4D - Langage ( 4D v14 R4)