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 프로세스가 메모리에서 서로간에 변수를 전달할 수있는 방법이 있습니까?
왜 처음에는 별도의 스크립트를 실행하고 있습니까? 왜 COM 객체를 사용하여이 작업을 수행합니까? 이 문자열에'$ input'을 삽입하는 것이 안전할까요? HTTP가 관련되지 않은 경우 HTTP 헤더가 어떻게 작동할까요? –
기본적으로, 내가 아는 한이를 수행 할 방법이 없습니다. 여러 PHP 스크립트는 별도의 프로세스로 실행됩니다. 몇 가지 변수를 공유 할 수있는 유일한 방법은 pcntl fork를 사용하는 것입니다.이 포크는 현재 프로세스를 복사하여 별도의 프로세스에서 실행합니다. 그러나 외부 서비스에 대한 파일 설명자 및 연결은 프로세스간에 공유되므로 예를 들어 한 프로세스가 연결을 닫으면 다른 프로세스에서 오류가 발생하므로주의해야합니다. – Xnoise
nix *에서 쉽게, windows _ db 아래에? php * daemons *에 대한 조사를 수행하면 대답을 얻을 수 있습니다. –