이 사용자 서식이 있습니다. 사용자가 데이터를 제출합니다. 그런 다음 그 데이터를 바탕으로 그 데이터를 백그라운드에서 실행될 PHP 스크립트로 보내려고합니다. 이유는 스크립트에 많은 수면 등이 있기 때문이며 사용자를 기다리게하고 싶지 않습니다.매개 변수가있는 백그라운드에서 PHP 코드 실행
그래서 내 질문의 기본 : 백그라운드에서 PHP 스크립트를 어떻게 실행할 수 있으며 어떻게 GET과 같은 매개 변수를 전달할 수 있습니까? 이 같은
이 사용자 서식이 있습니다. 사용자가 데이터를 제출합니다. 그런 다음 그 데이터를 바탕으로 그 데이터를 백그라운드에서 실행될 PHP 스크립트로 보내려고합니다. 이유는 스크립트에 많은 수면 등이 있기 때문이며 사용자를 기다리게하고 싶지 않습니다.매개 변수가있는 백그라운드에서 PHP 코드 실행
그래서 내 질문의 기본 : 백그라운드에서 PHP 스크립트를 어떻게 실행할 수 있으며 어떻게 GET과 같은 매개 변수를 전달할 수 있습니까? 이 같은
exec
을 사용하여 백그라운드 스크립트를 실행할 수 있습니다. 당신이 배열 $argv
뭔가
http://gearman.org/index.php?id=manual:job_server
일을하지만, 왜 당신이 당신의 스크립트에 너무 많은 잠을 할 것인가? JSON 또는 XML에 의해 발송에 실패하는 http://www.w3schools.com/php/php_ajax_intro.asp
는 AJAX에서 페이지 새로 고침하지 않으며 결과 :
내 사이트의 무료 사용자는 결과를 얻기 전에 1 분 정도 기다려야합니다. 페이지에 대기하는 대신에 나중에 다시 올 수 있습니다. 60 초 수면을 가진 백그라운드에서 코드를 실행 한 다음 제출 한 직후 성공 페이지로 보냅니다. 또한, 너무 복잡해 보입니다. shell_exec과 관련된 답변이 필요했지만 매개 변수를 전달할 수있는 능력이 필요했습니다. – user1687621
그런 단순한 것을 찾고 있다면, 잠자기 모드가 아닌 페이지를 업데이트하고 오랫동안 기다리지 않은 무료 사용자 요청을 거부하고 아약스를 통해 요청을 수행하십시오. –
는 AJAX를 사용하려고, 간단한 예제가 자바 스크립트와 XML 비동기입니다.
무엇 타임 아웃 file_get_contents()
약에서 전달 된 매개 변수를 얻을 수 있습니다 bg.php 스크립트에서
exec('php -f bg_script.php -- '.escapeshellarg($param1).' '.escapeshellarg($param2).' > /dev/null & ');
같은 것을 사용합니다.
if (isset($_GET['async'])) {
for($i = 0 ; $i <= 5 ; $i++)
{
append_log(date('l jS \of F Y h:i:s A') . ': background process. parameter ' . $i . ': ' . $_GET[$i] . '<br />');
sleep(1);
}
exit;
}
header('Content-type: text/html; charset=utf-8');
$parameters = array('async' => true, 1 => 'one', 2 => 'two', 3 => 'three', 4 => 'four', 5 => 'five');
pseudo_async($parameters); // this runs this php script in the backbround
echo 'Begin ...<br />';
for($i = 0 ; $i <= 5 ; $i++)
{
output_buffer('appended to the log <br />');
append_log(date('l jS \of F Y h:i:s A') . ': main process.<br />');
sleep(1);
}
echo 'End ...<br />';
function pseudo_async($query) {
$timeout = array('http' => array('timeout' => 0.01));
$context = stream_context_create($timeout);
@file_get_contents(selfurl() . '?' . http_build_query($query), false, $context);
}
function append_log($msg) {
$file = __DIR__ . '/log.html';
file_put_contents($file, $msg, FILE_APPEND);
}
function selfurl() {
$pageURL = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";
if ($_SERVER["SERVER_PORT"] != "80")
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
else
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
return $pageURL;
}
function output_buffer($str) {
echo $str;
flush();
ob_flush();
}
하나의 매개 변수 만 있습니다. 그래서 param을 참조 할 때 나는 단지 $ argv [0]를 사용합니까? 첫 번째 스크립트에서 $ param1이 어떻게 설정되는지 예제를 통해 알 수 있다면 감사하겠습니다. – user1687621
첫 번째 인수를 얻기 위해'$ argv [1]'을 사용하십시오. '$ argv [0]'은 호출 된 스크립트의 이름을 포함합니다. 'exec'를 호출하기 전에'$ param1 = 'some_string';을 설정하십시오. – air4x
그래서 $ param1 = "My Value Here" – user1687621