PHP将参数传递给后台脚本

时间:2016-07-12 15:32:47

标签: php ajax shell background-process shell-exec

我一直在互联网上寻找一段时间,但我无法找到解决问题的方法。我是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。

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

我想我肯定会以错误的方式做事,但我仍然无法确定在哪里解决问题。

1 个答案:

答案 0 :(得分:0)

对我来说,这个简单的代码可以使用

  $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 替换/opt/plesk/php/5.6/bin/php-cgi进行检查