PHP Execute
PHP Execute ( scriptPath {; functionName {; phpResult {; param} {; param2 ; ... ; paramN}}} ) -> 戻り値
引数 | 型 | 説明 | |
---|---|---|---|
scriptPath | テキスト | 🡒 | PHPスクリプトへのパスまたは "" でPHP関数を実行 |
functionName | テキスト | 🡒 | 実行するPHP関数 |
phpResult | 演算子, 変数, フィールド | 🡘 | PHP関数実行結果または結果を受け取らない場合* |
param | テキスト, ブール, 実数, 倍長整数, 日付, 時間 | 🡒 | PHP関数の引数 |
戻り値 | ブール | 🡐 | True = 正しく実行された False = 実行時にエラーがあった |
説明
PHP ExecuteコマンドはPHPスクリプトや関数を実行するために使用します。.
scriptPath引数には、実行するPHPスクリプトのパス名を渡します。ファイルがデータベースストラクチャと同階層に存在する場合、相対パス名を指定できます。そうでなければ完全パスです。パス名はシステムシンタックスあるいはPOSIXシンタックスで表現できます。
標準のPHP関数を直接実行したい場合は、scriptPathに空の文字列 ("") を渡します。関数名は二番目の引数に渡さなければなりません。
scriptPathスクリプト内の特定の関数を実行したい場合、functionName引数にPHP関数名を渡します。この引数に空の文字列を渡したりfunctionName引数を省略した場合、スクリプト全体が実行されます。
Note: PHPの関数名は大文字小文字を区別します。括弧は使用せず、関数名のみを入力してください。
phpResult引数はPHP関数の実行結果を受け取ります。以下のいずれかを渡せます:
- 結果を受け取る変数、配列、またはフィールド
- 関数が結果を返さないか、結果を受け取る必要がない場合、* 文字。
phpResultにはテキスト、倍長整数、実数、ブール、または日付型、および (配列を除く) BLOBや時間型のフィールドを渡すことができます。4Dは 後述の返されるデータの変換で説明する原則に基づき、データの変換と必要な調整を実行します。
- functionName引数に関数名を渡すと、phpResultはPHPの開発者が関数のコードからreturnコマンドで返す値を受け取ります。
- functionName引数に関数名を渡さずにコマンドを使用した場合、phpResultはPHPの開発者がechoや類似のコマンドで返す値を受け取ります。
引数を期待するPHP関数を呼び出す場合、1つ以上の値を渡すためにparam1...Nを使用します。値はセミコロンで分けられなければなりません。文字、テキスト、ブール、実数、整数、倍長整数、日付、時間タイプの値を渡すことができます。ピクチャとBLOBとオブジェクト型は渡せません。配列を送信することができます。この場合、PHP Executeコマンドには配列へのポインタを渡さなければなりません。そうしない場合、配列のカレントのインデックスが整数として送信されます (例題参照)。コマンドはポインタ、ピクチャおよび2D配列を除き、すべてのタイプの配列へのポインタを受け入れます。
param1...N引数はUTF-8のJSONフォーマットでPHPに送信されます。これらの引数はPHPのfunctionName関数に渡される前に、PHPのjson_decodeコマンドで自動でデコードされます。
注: 技術的な理由で、FastCGIプロトコル経由で渡す引数のサイズは64KBを超えてはなりません。テキスト型の引数を使用する際にはこの制限を考慮にいれる必要があります。
4D側でコマンドが正しく実行できると、言い換えれば実行環境の起動、スクリプトの オープン、そしてPHPインタープリターとの通信に成功すると、コマンドからTrueが返されます。 そうでない場合、ON ERR CALLでとらえることができ、GET LAST ERROR STACKで解析できるエラーが生成されます。
さらにスクリプト自身がPHPエラーを生成するかもしれません。この場合PHP GET FULL RESPONSEコマンドを使用してエラーの発生元を解析しなければなりません (例題4参照)。
注 : PHPを使用してエラー管理を設定できます。詳細は例えば以下のページを参照してください: http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting.
返されるデータの変換
以下の表はphpResult引数の型に基づき、返されるデータが4Dによりどのように解釈され変換されるかを説明しています。
phpResult引数の型 | 4Dによる処理 | 例 |
---|---|---|
BLOB | 4Dは受信したデータを変更せずに取り出します(*)。 | |
テキスト | 4DはUTF-8でエンコードされたデータを期待します (*)。PHPの開発者はPHPのutf8_encodeコマンドを使用する必要があるか もしれません。 | PHPスクリプトの例: echo utf8_encode(myText) |
日付 | 4Dは (PHPでときにDATE_ATOMと呼ばれる) RFC 3339フォーマットの文字列として送信される日付を期待します。このフォーマットは"YYYY-MM-DDTHH:MM:SS"という形式で、例えば2005-08-15T15:52:01+00:00のようになります。4Dは時間部を無視し、UTCの日付を返します。 | |
Time | 4DはRFC 3339フォーマットの文字列として送信される時間を期待します (日付型参照)。4Dは日付部を無視し、ローカルタイムゾーンの日付を考慮した上で、0時からの経過秒数を返します。 | 2時間30分45秒を送信するPHPスクリプトの例: echo date( DATE_ATOM, mktime( 2,30,45)) |
整数または実数 | 4Dは数字や+、-、およびeに続く指数で表現された数値を解釈します。'.'や','文字はすべて小数区切り文字として解釈されます。 | PHPスクリプトの例: echo -1.4e-16; |
ブール | PHPから文字列"true"または非ヌルと数値評価される値を受け取ると4DはTrueを返します。 | PHPスクリプトの例: echo (a==b); |
配列 | 4Dは、PHP配列がJSONフォーマットで返されるものと見なします。 | 2つのテキストを返すPHPスクリプトの例: echo json_encode( array( "hello", "world")); |
(*) デフォルトでHTTPヘッダーは返されません:
- functionName引数に関数名を渡してPHP Executeを使用すると、phpResultにHTTPヘッダーが返されることはありません。ヘッダーはPHP GET FULL RESPONSEコマンドを使用してのみ取得できます。
- 関数名なし (functionName引数を省略するかからの文字列を渡す) でPHP Executeを使用するとき、PHP SET OPTIONコマンドを使用してPHP Raw resultオプションをTrueに設定することでHTTPヘッダーを返すことができます。
注: PHPを使用して大量のデータを取得する必要がある場合、通常関数の戻り値を使用するよりも、(echoや同等のコマンドを使用して) stdOutバッファーを経由した方が効率的です。詳細はPHP GET FULL RESPONSEコマンドの説明を参照してください。
環境変数を使用する
SET ENVIRONMENT VARIABLEコマンドを使用してスクリプトが使用する環境変数を指定できます。警告: LAUNCH EXTERNAL PROCESS やPHP Execute を呼出した後、一連の環境変数は消去されます。
特別な関数
4Dは以下の特別な関数を提供します:
- quit_4d_php: PHPインタープリターとそのすべての子プロセスを終了するために使用します。スクリプトを実行中の子プロセスが一つでも存在していると、インタープリターは終了せず、PHP ExecuteコマンドはFalseを返します。
- relaunch_4d_php: PHPインタープリターを再起動するために使用します。
PHP Executeから最初のリクエストが送信されると、インタープリターが自動で再起動されることに留意してください。
例題 1
"myPhpFile.php"スクリプトを関数指定なしで呼び出します。スクリプトは以下の通りです:
以下の4Dコードを実行すると:
var $result : Text
var $isOK : Boolean
$isOK:=PHP Execute("C:\\php\\myPhpFile.php";"";$result)
ALERT($Result)
カレントのPHP バージョンが表示されます。
例題 2
"myNewScript.php"内のmyPhpFunction関数を引数付きで呼び出します。スクリプトは以下の通りです:
関数を呼び出します:
var $result : Text
var $param1 : Text
var $param2 : Text
var $isOk : Boolean
$param1 :="Hello"
$param2 :="4D world!"
$isOk:=PHP Execute("C:\\MyFolder\\myNewScript.php";"myPhpFunction";$result;$param1;$param2)
ALERT($result) // "Hello 4D world!"が表示される
例題 3
PHPインタープリターを終了します:
$ifOk:=PHP Execute("";"quit_4d_php")