2012-12-31 1 views
0

PHP 5.3이 설치된 Windows 서버에서 IIS를 실행하고 있습니다. 두 개의 스크립트가 있습니다. initiator.php와 worker.php라고 부르 자. 사용자가 initiator.php를 호출하고이 스크립트에서 변수가 정의됩니다. $ input이라고 부르 자. 그래서 같은 worker.php이 $ 입력 변수를 가지고 그것을 통과하고 싶습니다 : 나는 initiator.php에서 전달 된 $ 입력 변수를 데리러 다음 한 worker.php에서병렬로 실행되는 스크립트간에 변수를 전달하는 방법

$oShell = new COM('Wscript.Shell'); 
$oShell->Run("\"C:/Program Files (x86)/PHP/v5.3/php/worker.php -a $input",0,False); 

.

$aCliOpts = getopt('a:'); 
$input_from_initiator = $aCliOpts['a']; 

위대한 작품입니다. initiator.php의 $ input 변수가 worker.php에 성공적으로 전달되고 initiator.php는 chugging을 유지합니다. 그러나 worker.php는 자신의 $ input_from_initiator 변수를 가지고 있으며, 자신의 일부 빠른 코드를 실행하고 $ output_from_worker라는 세 번째 변수를 만듭니다. 이 변수는 initiator.php가 약간의 방법으로 그것을 읽는 것을 필요로합니다. 내가 끊어 버린 곳이야.

worker.php에서 변수를 처음으로 전달한 변수와 동일한 방식으로 initiator.php에 다시 전달하려고 시도했지만 작동하지 않았습니다. 나는 또한 사용하려고했습니다

header('Location: initiator.php?var=value') 

HTTP GET PARAMS하지만 아무 소용에 사용.

마지막 수단은 worker.php가이 변수의 값을 디스크에 쓰고 디스크에서 initiator.php를 읽는 것입니다. 내가 잠복 디스크 I/O로 인해이 일을 싫어. 속도는이 스크립트에서 매우 중요합니다.

두 개의 PHP 프로세스가 메모리에서 서로간에 변수를 전달할 수있는 방법이 있습니까?

+0

왜 처음에는 별도의 스크립트를 실행하고 있습니까? 왜 COM 객체를 사용하여이 작업을 수행합니까? 이 문자열에'$ input'을 삽입하는 것이 안전할까요? HTTP가 관련되지 않은 경우 HTTP 헤더가 어떻게 작동할까요? –

+0

기본적으로, 내가 아는 한이를 수행 할 방법이 없습니다. 여러 PHP 스크립트는 별도의 프로세스로 실행됩니다. 몇 가지 변수를 공유 할 수있는 유일한 방법은 pcntl fork를 사용하는 것입니다.이 포크는 현재 프로세스를 복사하여 별도의 프로세스에서 실행합니다. 그러나 외부 서비스에 대한 파일 설명자 및 연결은 프로세스간에 공유되므로 예를 들어 한 프로세스가 연결을 닫으면 다른 프로세스에서 오류가 발생하므로주의해야합니다. – Xnoise

+0

nix *에서 쉽게, windows _ db 아래에? php * daemons *에 대한 조사를 수행하면 대답을 얻을 수 있습니다. –

답변

0

URL을 전달할 수있는 file_get_contents()http://php.net/file_get_contents을 확인하십시오.

$var = file_get_contents('http://site.tld/worker.php?input='.$input); 

그리고 worker.php에서

는, 단순히 결과를 에코 : 그래서 당신은 같은 쿼리 문자열을 사용할 수 있습니다.

0

* nix의 sys5 extension이 놀랍기 때문에 Windows에서 실행하는 것은 부끄러운 일입니다!

항상 통신을 위해 파일이나 데이터베이스 등을 사용할 수 있습니다.

0

원래의 질문과 약간 다른 것을했지만 결국 도움을 주셔서 감사합니다. 다른 cURL 요청을 실행하려고했습니다. curl_multi_exec()가 나를 위해 위대한 작업을 마감했습니다.

관련 문제