我在帶有PHP 5.3的Windows Server上運行IIS。我有兩個腳本;我們稱他們爲initiator.php和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);
在worker.php我有以下拿起從initiator.php通過$輸入變量。
$aCliOpts = getopt('a:');
$input_from_initiator = $aCliOpts['a'];
This works great。 initiator.php的$輸入變量已成功傳遞給worker.php,它會將其拾取並且initiator.php保持突出狀態。然而,worker.php然後將它自己的$ input_from_initiator變量,通過它自己的一些快速代碼運行,並創建第三個變量$ output_from_worker。正是這個變量,我需要發起者.php閱讀一些處理它的方法。這是我掛斷的地方。
我試過將變量從worker.php傳回給initiator.php,就像它在開始時傳遞的變量一樣,並沒有工作。我也試過使用:
header('Location: initiator.php?var=value')
使用HTTP GET參數但無濟於事。
我最後的手段是爲worker.php寫這個變量的值到磁盤,然後從磁盤讀取initiator.php。由於潛在的磁盤I/O,我討厭這樣做。速度對此腳本非常重要。
有沒有辦法讓兩個PHP進程可以在內存中相互傳遞變量?
爲什麼你首先運行一個單獨的腳本?你爲什麼要用COM對象來做到這一點?你確定將'$ input'插入到字符串中是安全的嗎?在沒有涉及HTTP的情況下,HTTP頭怎麼能工作? –
默認情況下,據我所知,沒有辦法做到這一點。多個php腳本作爲單獨的進程運行。您可以共享一些變量的唯一方法是使用pcntl fork,它將基本複製您當前的進程並在單獨的進程中從此運行它。但要小心文件描述符和外部服務的連接,因爲這些服務在進程之間共享,並且一旦某個進程關閉連接,就會在其他進程中出錯。 – Xnoise
下nix *容易,在windows _ a db下?做一些關於php *守護進程的研究*提供了一個答案 – 2012-12-31 02:19:21