PHP 将参数传递给后台脚本


PHP passing parameters to a background script

我一直在互联网上寻找一段时间,但我找不到解决问题的方法。我是PHP的新手,在后台运行php脚本时遇到了问题。

基本上,我从 JQuery ajax 获取 POST 数据,我在每个变量上使用 escapeshellarg() 将其放在一个长字符串中并用空格分隔,然后我调用我想在后台使用 exec() 或 shell_exec() 函数处理的脚本(我尝试了两者都没有任何成功......

$arg_list  = escapeshellarg($str_solution)." ";
$arg_list .= escapeshellarg($str_rubriques)." ";
$arg_list .= escapeshellarg($intervalle)." ";
$arg_list .= escapeshellarg($date_start)." ";
$arg_list .= escapeshellarg($date_end)." ";
$arg_list .= escapeshellarg($_SESSION['user_id'])." ";
$arg_list .= escapeshellarg($_SESSION['user_name']);
//BACKGROUND EXECUTION
$output = shell_exec("/opt/plesk/php/5.6/bin/php-cgi -q script_rapports_intervalle.php ".$arg_list." &");
print_r($output);

在script_rapports_intervalle.php文件上,我只做:

print_r($argv);
print_r("here i am");
die;
//HERE GOES THE SCRIPT
//....

确实得到了这个脚本的响应,因为它只显示"我在这里"字符串。当我在$argv上使用 var_dump() 时,它说它是 NULL。我也尝试传递简单的参数,如"foo"和"bar",但似乎$argv总是等于 NULL。

此外,我看到了处理后台脚本的许多用法:将"&"放在命令的末尾,或将"|现在"代替。我应该使用哪一个?

我想我肯定做错了事情,但我仍然看不到在哪里解决问题。

对我来说,这个简单的代码有效

  $params = array("function_name" => 'image_detect',"image_guid" => $image_guid);
  $query_string = http_build_query($params, "", " ");
 if (PHP_OS === "WINNT") {
    pclose(popen("start /B php " . $script_location . " " . $query_string, "r"));
 } else {
    exec("/opt/plesk/php/5.6/bin/php " . $script_location . " " . $query_string . " &> /dev/null &");
 }
因此,在您的情况下,您可以通过将/opt/plesk/php/5.6/bin/

php-cgi 替换为/opt/plesk/php/5.6/bin/php 来检查