0

crontab に php スクリプト名を追加し、このスクリプトを CLI SAPI モードから実行しているので、max_execution_time の問題はありません。

スペースを使用していくつかのパラメーターを渡すことができます。

system('/path/of/your/script.php param1 param2 > scriptlog.txt &')

しかし、パラメータがシェルスクリプトであるため配列を渡し、配列を分解する必要があります。

例えば、

system('/path/of/your/script.php array > scriptlog.txt &')
4

2 に答える 2

3

systemアプリでキャストするときはimplode、パラメーターが必要です。
次のように引数を連続して渡すだけです

system('/path/of/your/script.php param[0] param[1] > scriptlog.txt &')

これは次のようになります

system('/path/of/your/script.php '.implode(" ",$params).' > scriptlog.txt &')

引用符がある場合は、 escapeshellargを見ることができます

system('/path/of/your/script.php '.implode(" ",array_map("escapeshellarg",$params)).' > scriptlog.txt &')

次に、でscript.phpパラメーターをキャッチします

$args = $argv;
array_shift($args); //Because $args[0] is 'script.php'

でキャッチ> scriptlog.txt &している場合はscript.php、代わりにこれを使用します。

$args = $argv;
if (false !== ($pos = array_search(">",$args))) {
    $args = array_slice($args,1,$pos-1);
} else {
    array_shift($args);
}

これは、配列が非連想の場合にのみ機能することに注意してください。
連想パラメータを取得するには、別の関数を作成する必要があります

于 2012-08-23T15:48:24.577 に答える
0

配列を直接渡すことはできません。理想的には、配列の各メンバーを個別のパラメーターとして渡し、それらを読み戻してスクリプトで作業することです。スクリプトに読み取るパラメーターの数を渡すこともできます。IE。

$out = sizeof($array);
foreach ($array as $arg){
    $out = $out . ' ' . $arg;
}

これにより、outオブジェクトに「4param1param2param3param4」のようなリストが表示されます。

次に、bashスクリプトでARGVを使用する際に、これらの変数を読み取る必要があります。

または、フィールド区切りリストを使用して、それを1つの引数として読み取り、フィールド区切り文字の分割を使用して各配列要素を分割することもできます。

于 2012-08-23T15:54:53.727 に答える