在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 &')
答案 0 :(得分: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);
}
请注意,仅当您的数组是非关联数据时,此方法才有效 您需要编写另一个函数来检索关联参数
答案 1 :(得分:0)
你无法直接传递阵列。理想情况下,您要做的是将数组的每个成员作为单独的参数传递出来,然后将它们读回来在您的脚本中使用。您还可以传递要读取到脚本的参数数量。 IE。
$out = sizeof($array);
foreach ($array as $arg){
$out = $out . ' ' . $arg;
}
这应该给你的out对象一个像“4 param1 param2 param3 param4”这样的列表
然后你只需要在bash脚本中使用ARGV来阅读这些变量。
或者,您也可以使用字段分隔列表,将其作为一个参数读取,然后使用字段分隔符上的拆分将每个数组元素拆分出来。