私はインターネットでかなり長い間探していましたが、私の問題の解決策を見つけることができません。私は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
//....
「hereiam」文字列のみが表示されるため、このスクリプトから応答があります。$ argvでvar_dump()を使用すると、NULLと表示されます。「foo」や「bar」のような単純な引数も渡そうとしましたが、$ argvは常にNULLに等しいようです。
さらに、バックグラウンドスクリプトを処理するための多くの使用法を見ました:コマンドの最後に「&」を置くか、代わりに「| atnow」を置きます。どちらを使うべきですか?
私は確かに間違ったやり方をしていると思いますが、それでも問題を解決する場所がわかりません。
私にとって、この単純なコードは機能します
$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に置き換えることで確認できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加