PHP의 비동기 쉘 exec


Answers

나는 이것을 위해, 독립적 인 과정을 정말로 시작하기 때문에 이것을 사용 했습니다 .

<?php
    `echo "the command"|at now`;
?>
Question

쉘 스크립트를 호출해야하지만 출력에 대해서는 전혀 신경 쓰지 않는 PHP 스크립트가 있습니다. 쉘 스크립트는 SOAP 호출을 많이하고 완료하기가 느려서 응답을 기다리는 동안 PHP 요청을 늦추고 싶지 않습니다. 사실, PHP 요청은 쉘 프로세스를 종료하지 않고 종료 할 수 있어야합니다.

다양한 exec() , shell_exec() , pcntl_fork() 등의 함수를 pcntl_fork() 그 중 아무 것도 내가 원하는 것을 정확하게 제공하지 않는 것 같습니다. (또는, 그들이하는 경우, 어떻게 나에게 명확하지 않다.) 어떤 제안?




Symfony Process Component도 유용합니다.

use Symfony\Component\Process\Process;

$process = new Process('ls -lsa');
// ... run process in background
$process->start();

// ... do other things

// ... if you need to wait
$process->wait();

// ... do things after the process has finished

그것의 GitHub repo 에서 어떻게 작동하는지보십시오.




Linux에서는 명령 끝에 앰퍼샌드를 추가하여 새로운 독립 스레드에서 프로세스를 시작할 수 있습니다

mycommand -someparam somevalue &

Windows에서 "시작"DOS 명령을 사용할 수 있습니다

start mycommand -someparam somevalue



PHP 스크립트를 데몬 이나 cronjob 으로 실행할 수도 있습니다 : #!/usr/bin/php -q




나는 이것을 사용했다 ...

/** 
 * Asynchronously execute/include a PHP file. Does not record the output of the file anywhere.  
 * Relies on the PHP_PATH config constant.
 *
 * @param string $filename  file to execute
 * @param string $options   (optional) arguments to pass to file via the command line
 */ 
function asyncInclude($filename, $options = '') {
    exec(PHP_PATH . " -f {$filename} {$options} >> /dev/null &");
}

(여기서 PHP_PATHdefine('PHP_PATH', '/opt/bin/php5') 또는 그와 유사하게 정의 된 const 임)

인수는 명령 행을 통해 전달됩니다. PHP에서 이들을 읽으려면 argv 참조하십시오.




모든 Windows 사용자에게 : 비동기 PHP 스크립트를 실행하는 좋은 방법을 찾았습니다. 실제로는 거의 모든 것이 작동합니다.

이것은 popen () 및 pclose () 명령을 기반으로합니다. Windows 및 Unix에서 잘 작동합니다.

function execInBackground($cmd) {
    if (substr(php_uname(), 0, 7) == "Windows"){
        pclose(popen("start /B ". $cmd, "r")); 
    }
    else {
        exec($cmd . " > /dev/null &");  
    }
} 

원본 코드 : http://php.net/manual/en/function.exec.php#86329






Links