4D v16.3

PHP Execute

Home

 
4D v16.3
PHP
PHP Execute

PHP Execute 


 

PHP Execute ( SkriptPfad {; FunktionName {; * | phpErgebnis {; Param} {; Param2 ; ... ; ParamN}}} ) -> Funktionsergebnis 
Parameter Typ   Beschreibung
SkriptPfad  Text in Pfadname des PHP Skript oder "" zum Ausführen einer PHP Funktion
FunktionName  Text in Auszuführende PHP Funktion
* | phpErgebnis  Operator, Variable, Feld in Ergebnis der Ausführung der PHP Funktion oder *, um kein Ergebnis zu erhalten.
Param  Text, Boolean, Zahl, Lange Ganzzahl, Datum, Zeit in Parameter der PHP Funktion
Funktionsergebnis  Boolean in Wahr = Ausführung korrekt, Falsch = Fehler bei der Ausführung

Die Funktion PHP Execute ermöglicht, ein PHP Skript bzw. Funktion auszuführen.

Im Parameter SkriptPfad übergeben Sie den Pfadnamen des auszuführenden PHP Skript. Das kann ein relativer Pfad sein, wenn die Datei neben der Struktur der Datenbank liegt, oder ein absoluter Pfad. Der Pfadname lässt sich entweder in System Syntax oder in POSIX Syntax ausdrücken.

Um eine standardmäßige PHP Funktion direkt auszuführen, übergeben Sie einen leeren String ("") in SkriptPfad. Der Funktionsname muss im zweiten Parameter übergeben werden.

Übergeben Sie einen PHP Funktionsnamen in FunktionName, wenn Sie in SkriptPfad eine spezifische Funktion ausführen wollen. Übergeben Sie einen leeren String oder lassen den Parameter FunktionName weg, wird das Skript vollständig ausgeführt.

Hinweis: PHP berücksichtigt Klein- und Großschreibung für Funktionsnamen. Verwenden Sie keine Klammern, sondern geben nur den Funktionsnamen ein.

Der Parameter phpErgebnis empfängt das Ergebnis der Ausführung der PHP Funktion. Sie können folgendes übergeben:

  • Variable, Array oder Feld zum Empfangen des Ergebnisses  
  • Das Zeichen *, wenn die Funktion kein Ergebnis zurückgibt oder Sie es nicht ausfindig machen wollen
Sie können eine Variable, ein Array oder ein Feld vom Typ Text, Lange Ganzzahl, Ganzzahl, Boolean oder Datum sowie (außer für Arrays) ein Feld vom Typ BLOB oder Zeit übergeben. 4D führt die Konvertierung der Daten und alle benötigten Anpassungen aus, wie im Absatz unten beschrieben.
  • Haben Sie im Parameter FunktionName einen Funktionsnamen übergeben, empfängt phpErgebnis das, was der PHP Entwickler mit dem Befehl return im Hauptteil der Funktion zurückgegeben hat.
  • Verwenden Sie den Befehl, ohne im Parameter FunktionName einen Funktionsnamen zu übergeben, empfängt phpErgebnis das, was der PHP Entwickler mit dem Befehl echo (oder einem ähnlichen Befehl) zurückgegeben hat.

Rufen Sie eine PHP Funktion auf, die Argumente erwartet, übergeben Sie einen oder mehrere Werte in Param1...N. Die Werte müssen durch Strichpunkte voneinander getrennt sein. Sie können vom Typ Alpha, Text, Boolean, Zahl, Ganzzahl, Lange Ganzzahl, Datum oder Zeit sein. Bilder, BLOBs und Objekte werden nicht akzeptiert. Sie können ein Array senden, dazu müssen Sie in der Funktion PHP Execute einen Zeiger auf das Array übergeben. Ansonsten wird der aktuelle Index des Array als Ganzzahl gesendet (siehe Beispiel). Der Befehl akzeptiert alle Arten von Arrays, außer für Zeiger, Bild und 2D Arrays.
Die Parameter param1...N werden in PHP im Format JSON in UTF-8 gesendet. Sie werden automatisch mit dem PHP Befehl json_decode entschlüsselt, bevor sie an die PHP Funktion FunktionName gesendet werden.

Hinweis: Aus technischen Gründen dürfen Parameter, die über das Protokoll Fast CGI übergeben werden, nicht größer als 64 KB sein. Sie müssen diese Beschränkung insbesondere bei Parametern vom Typ Text berücksichtigen.

Der Befehl gibt Wahr zurück, wenn die Ausführung auf 4D Seite korrekt ausgeführt wurde, d.h. wenn Starten der Ausführungsumgebung, Öffnen des Skripts und Herstellen der Kommunikation mit dem PHP Interpreter erfolgreich waren. Andernfalls wird ein Fehler erzeugt, den Sie mit ON ERR CALL abfangen und mit GET LAST ERROR STACK analysieren können.
Darüberhinaus kann auch das Skript selbst PHP Fehler erzeugen. In diesem Fall müssen Sie PHP GET FULL RESPONSE zur Analyse der Fehlerquelle einsetzen (siehe Beispiel 4).

Hinweis: Über PHP lässt sich die Fehlerverwaltung konfigurieren. Weitere Informationen dazu finden Sie unter http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting.

Nachfolgende Tabelle gibt an, wie 4D Daten gemäß dem Typ phpErgebnis interpretiert und konvertiert.

Typ des Parameters phpErgenbisBearbeitung durch 4DBeispiel
BLOB4D übernimmt die empfangenen Daten ohne Änderungen(*).
Text4D erwartet Daten codiert in UTF-8 (*). Der PHP Entwickler muss u.U. den PHP Befehl utf8_encode verwenden.Beispiel für PHP Skript:
echo utf8_encode(myText)
Datum4D erwartet ein Datum, das als String im Format RFC 3339 übergeben wird (manchmal in PHP DATE_ATOM genannt). Dieses Format ist vom Typ "YYYY-MM-DDTHH:MM:SS", zum Beispiel: 2005-08-15T15:52:01+00:00. 4D ignoriert den Zeit-Teil und gibt das Datum in UTC zurück.
Zeit4D erwartet eine Zeit, gesendet als String im Format RFC 3339 (siehe Typ Datum). 4D ignoriert den Datumsteil und gibt die ab Mitternacht abgelaufenen Sekunden zurück, während das Datum in der lokalen Zeitzone bewertet wird. Beispiel für PHP Skript zum Senden von 2h30'45":
echo date( DATE_ATOM, mktime( 2,30,45))
Ganzzahl oder Zahl4D interpretiert den numerischen Wert, ausgedrückt in Zahlen mit vorangestelltem + oder - Zeichen bzw. 'e' für Exponent. Ein '.' oder ',' Zeichen wird als Dezimaltrenner interpretiert.Beispiel des PHP Skript:
echo -1.4e-16;
Boolean4D gibt Wahr zurück, wenn es den String "true" von PHP erhält oder wenn die numerische Bewertung einen Wert gibt, der nicht Null ist.Beispiel für PHP Skript:
echo (a==b);
Array4D wertet, dass das PHP Array im JSON Format zurückgegeben wurde.Beispiel für PHP Skript zum Zurückgeben eines Array mit zwei Texten:
echo json_encode( array( "hello", "world"));

(*) Standardmäßig werden keine HTTP zurückgegeben:
- Verwenden Sie PHP Execute mit Übergeben einer Funktion im Parameter FunktionName, werden in phpErgebnis nie HTTP Header zurückgegeben. Sie sind nur über den Befehl PHP GET FULL RESPONSE verfügbar.
- Verwenden Sie PHP Execute ohne einen Funktionsnamen (der Parameter FunktionName wird weggelassen oder enthält einen leeren String), können Sie HTTP Header zurückgeben, wenn Sie die Option PHP Raw result auf Wahr setzen oder den Befehl PHP SET OPTION verwenden.

Hinweis: Müssen Sie über PHP große Datenmengen übernehmen, ist es in der Regel effizienter, über den Puffer stdOut zu gehen (Befehl echo oder ähnlich) anstatt über die Funktion return. Weitere Information dazu finden Sie in der Beschreibung zum Befehl PHP GET FULL RESPONSE.

Mit dem Befehl SET ENVIRONMENT VARIABLE können Sie die vom Skript verwendeten Umgebungsvariablen definieren.
Warnung: Nach Aufrufen von LAUNCH EXTERNAL PROCESS oder PHP Execute wird der Satz Umgebungsvariablen wieder entfernt.

4D bietet folgende Spezialfunktionen:

  • quit_4d_php: Um den PHP Interpreter und alle seine Kindprozesse zu verlassen. Führt mindestens ein Kindprozess ein Skript aus, beendet der Interpreter nicht und die Funktion PHP Execute gibt Falsch zurück.
  • relaunch_4d_php: Um den PHP Interpreter wieder zu starten.

Beachten Sie, dass der Interpreter automatisch gestartet wird, wenn PHP Execute die erste Anfrage sendet.

Das Skript "myPhpFile.php" ohne Funktion aufrufen. Sein Inhalt lautet:

<?php
echo 'Current PHP version: ' . phpversion();
?>

Der folgende 4D Code:

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

... zeigt an "Current PHP version: 5.3"

Die Funktion myPhpFunction im Skript "myNewScript.php" mit Parametern aufrufen. Der Inhalt des Skript lautet:

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

Aufruf mit Funktion:

 C_TEXT($result)
 C_TEXT($param1)
 C_TEXT($param2)
 C_BOOLEAN($isOk)
 $param1 :="Hallo"
 $param2 :="4D Welt!"
 $isOk:=PHP Execute("C:\MyFolder\myNewScript.php";"myPhpFunction";$result;$param1;$param2)
 ALERT($result// zeigt an "Hallo 4D Welt!"

PHP Interpreter beenden:

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

Fehlerverwaltung:

  // Installation der Fehlerverwaltungsmethode
 phpCommError:="" // Modified by PHPErrorHandler
 $T_saveErrorHandler :=Method called on error
 ON ERR CALL("PHPErrorHandler")</p><p> // Skriptausführung
 C_TEXT($T_result)
 If(PHP Execute("C:\MyScripts\MiscInfos.php";"";$T_result))
  // Kein Fehler, $T_Result enthält das Ergebnis
 Else
  // Ein Fehler wird gefunden, verwaltet von PHPErrorHandler
    If(phpCommError="")
       ... // PHP Fehler, verwende PHP GET FULL RESPONSE
    Else
       ALERT(phpCommError)
    End if
 End if
 
  // Methode deinstallieren
 ON ERR CALL($T_saveErrorHandler)

Die Methode PHP_errHandler lautet:

 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

Dynamische Skript-Erstellung von 4D vor seiner Ausführung:

 DOCUMENT TO BLOB("C:\Scripts\MyScript.php";$blobDoc)
 If(OK=1)
    $strDoc:=BLOB to text($blobDoc;UTF8 text without length)
    $strPosition:=Position("Funktion2Umbenennen";$strDoc)
    $strDoc:=Insert string($strDoc;"_v2";Length("Funktion2Umbenennen")+$strPosition)
 
    TEXT TO BLOB($strDoc;$blobDoc;UTF8 text without length)
    BLOB TO DOCUMENT("C:\Scripts\MyScript.php";$blobDoc)
    If(OK#1)
       ALERT("Fehler bei Skript-Erstellung")
    End if
 End if

Dann wird das Skript ausgeführt:

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

Wert vom Typ Datum und Zeit direkt ausfindig machen. Das Skript dafür lautet:

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

Datum auf 4D Seite empfangen:

 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?

Daten in Arrays verteilen:

 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 enthält die alphanumerischen Werte "11", "22", "33", etc.
  // $arLong enthält die Zahlen 11, 22, 33, etc.

Initialisation eines Array:

 ARRAY TEXT($arText ;0)
 $phpok :=PHP Execute("";"array_pad";$arText;->$arText;50;"undefined")
  // Execute in PHP: $arrTest = array_pad($arrTest, 50, ’undefined’);
  // Füllt das Array $arText mit 50 "undefinierten" Elementen

Parameter über ein Array übergeben:

 ARRAY INTEGER($arInt;0)
 $phpok :=PHP Execute("";"json_decode";$arInt;"[13,51,69,42,7]")
  // Execute in PHP: $arInt = json_decode(’[13,51,69,42,7]’);
  // Füllt das Array mit den Ausgangswerten

Einfaches Beispiel zur Trim Funktion, um zusätzliche Leerzeichen bzw. unsichtbare Zeichen von Anfang bis Ende eines String zu entfernen:

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

Weitere Informationen zur Trim Funktion finden Sie in der PHP Dokumentation.



Siehe auch 

PHP GET FULL RESPONSE
PHP SET OPTION
PHP Skripte in 4D ausführen

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: PHP
Nummer: 1058

 
GESCHICHTE 

Erstellt: 4D v12
Geändert: 4D v12.1

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)