0

在 crontab 中,我添加了一个 php 脚本名称,从 CLI SAPI 模式运行此脚本,因此没有 max_execution_time 问题。

我可以使用空格传递几个参数。

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

但是我需要传递一个数组作为参数是shell脚本并分解数组。

例如,

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;
}

这应该为您的输出对象提供一个类似“4 param1 param2 param3 param4”的列表

然后,您只需在 bash 脚本中使用 ARGV 读取这些变量。

或者,您也可以使用字段分隔列表,将其作为一个参数读取,然后使用字段分隔符上的拆分拆分每个数组元素。

于 2012-08-23T15:54:53.727 回答