2012-10-06 3 views
2

이 사용자 서식이 있습니다. 사용자가 데이터를 제출합니다. 그런 다음 그 데이터를 바탕으로 그 데이터를 백그라운드에서 실행될 PHP 스크립트로 보내려고합니다. 이유는 스크립트에 많은 수면 등이 있기 때문이며 사용자를 기다리게하고 싶지 않습니다.매개 변수가있는 백그라운드에서 PHP 코드 실행

그래서 내 질문의 기본 : 백그라운드에서 PHP 스크립트를 어떻게 실행할 수 있으며 어떻게 GET과 같은 매개 변수를 전달할 수 있습니까? 이 같은

답변

0

exec을 사용하여 백그라운드 스크립트를 실행할 수 있습니다. 당신이 배열 $argv

+0

하나의 매개 변수 만 있습니다. 그래서 param을 참조 할 때 나는 단지 $ argv [0]를 사용합니까? 첫 번째 스크립트에서 $ param1이 어떻게 설정되는지 예제를 통해 알 수 있다면 감사하겠습니다. – user1687621

+0

첫 번째 인수를 얻기 위해'$ argv [1]'을 사용하십시오. '$ argv [0]'은 호출 된 스크립트의 이름을 포함합니다. 'exec'를 호출하기 전에'$ param1 = 'some_string';을 설정하십시오. – air4x

+0

그래서 $ param1 = "My Value Here" – user1687621

0

뭔가

http://gearman.org/index.php?id=manual:job_server

일을하지만, 왜 당신이 당신의 스크립트에 너무 많은 잠을 할 것인가? JSON 또는 XML에 의해 발송에 실패하는 http://www.w3schools.com/php/php_ajax_intro.asp

는 AJAX에서 페이지 새로 고침하지 않으며 결과 :

+0

내 사이트의 무료 사용자는 결과를 얻기 전에 1 분 정도 기다려야합니다. 페이지에 대기하는 대신에 나중에 다시 올 수 있습니다. 60 초 수면을 가진 백그라운드에서 코드를 실행 한 다음 제출 한 직후 성공 페이지로 보냅니다. 또한, 너무 복잡해 보입니다. shell_exec과 관련된 답변이 필요했지만 매개 변수를 전달할 수있는 능력이 필요했습니다. – user1687621

+0

그런 단순한 것을 찾고 있다면, 잠자기 모드가 아닌 페이지를 업데이트하고 오랫동안 기다리지 않은 무료 사용자 요청을 거부하고 아약스를 통해 요청을 수행하십시오. –

0

는 AJAX를 사용하려고, 간단한 예제가 자바 스크립트와 XML 비동기입니다.

-1

무엇 타임 아웃 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(); 
} 
관련 문제