Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
PHP Execute
|
PHP Execute ( SkriptPfad {; FunktionName {; * | phpErgebnis {; Param} {; Param2 ; ... ; ParamN}}} ) -> Funktionsergebnis | ||||||||
Parameter | Typ | Beschreibung | ||||||
SkriptPfad | Text |
![]() |
Pfadname des PHP Skript oder "" zum Ausführen einer PHP Funktion | |||||
FunktionName | Text |
![]() |
Auszuführende PHP Funktion | |||||
* | phpErgebnis | Operator, Variable, Feld |
![]() |
Ergebnis der Ausführung der PHP Funktion oder *, um kein Ergebnis zu erhalten. | |||||
Param | Text, Boolean, Zahl, Lange Ganzzahl, Datum, Zeit |
![]() |
Parameter der PHP Funktion | |||||
Funktionsergebnis | Boolean |
![]() |
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:
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 phpErgenbis | Bearbeitung durch 4D | Beispiel |
BLOB | 4D übernimmt die empfangenen Daten ohne Änderungen(*). | |
Text | 4D 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) |
Datum | 4D 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. | |
Zeit | 4D 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 Zahl | 4D 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; |
Boolean | 4D 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); |
Array | 4D 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:
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 die aktuelle PHP Version an.
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.
PHP GET FULL RESPONSE
PHP SET OPTION
PHP Skripte in 4D ausführen
Produkt: 4D
Thema: PHP
Nummer:
1058
Erstellt: 4D v12
Geändert: 4D v12.1
4D Programmiersprache ( 4D v20 R7)