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
//....
我确实收到了此脚本的响应,因为它只显示 "here i am" 字符串。当我在 $argv 上使用 var_dump() 时,它说它是 NULL。我也尝试传递简单的参数,如 "foo" 和 "bar",但 $argv 似乎总是等于 NULL。
此外,我看到很多处理后台脚本的用法:在命令末尾加上“&”,或者把“| at now”代替。我应该使用哪一个?
我想我肯定做错了,但我仍然看不出在哪里可以解决问题。
对我来说这个简单的代码有效
$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[=16= 来进行检查]
我在网上找了很久,但找不到解决问题的办法。我是 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
//....
我确实收到了此脚本的响应,因为它只显示 "here i am" 字符串。当我在 $argv 上使用 var_dump() 时,它说它是 NULL。我也尝试传递简单的参数,如 "foo" 和 "bar",但 $argv 似乎总是等于 NULL。
此外,我看到很多处理后台脚本的用法:在命令末尾加上“&”,或者把“| at now”代替。我应该使用哪一个?
我想我肯定做错了,但我仍然看不出在哪里可以解决问题。
对我来说这个简单的代码有效
$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[=16= 来进行检查]