2011-04-29 58 views
1

我有一個Web服務端點需要調用另一個開發人員的CLI PHP腳本作爲其運行的一部分。僞像這樣:

function startCLI($input, $output){ 

    $cmd = escapeshellarg('php bin/startcli.php $input $output'); 
    exec($cmd, $output, $ret); 

    if ($output){ 
    print_r($output[0]); 
    } 
} 

現在,你可能會問:爲什麼不通過$_POST['var']clistart.php腳本?

那麼,當你從海外獲得你的遺留代碼時,你會得到你付出的代價,有時候,我需要拆分他們的系統並重新組合起來的時間比我必須實現整個方案。

因此,我們只是規定我不能將新變量添加到clistart.php腳本中,然後從中取出它。地獄,把它當作學術練習吧。從Web請求的PHP腳本執行的CLI腳本是否可以訪問$ _GET或$ _POST來運行?

更新:我已經嘗試將鍵添加到$ _ENV和getenv()putenv(),但結果是相同的 - 我可以更新當前腳本的環境以及它正在執行的作業的子腳本,但因爲這些作業是由一個擁有自己的$ _ENV上下文的持久進程運行的,似乎沒有辦法將該變量傳遞給持久化進程的上下文。

我不得不求助於數據庫或文件觸摸,除非有人有另一個想法。

+3

測試這個('print_r($ GLOBALS)')將會是微不足道的,並且肯定會比您寫出問題並等待答案消耗更少的時間。 – 2011-04-29 01:18:12

+0

我仍然缺少一些東西;你能舉出你從命令行中使用'clistart.php'的不同方式的例子嗎? – 2011-05-06 21:44:29

回答

1

$ _GET和$ _POST是腳本Web請求上下文的一部分,並且在CLI中不可用,它將自己填充上下文。

+0

這取決於所使用的php二進制文件的類型。如果您通過PHP-CGI變體運行第二個腳本,則由於QUERY_STRING位於環境中,因此將會填充「$ _GET」。轉移$ _POST也是可能的,但需要一些工作。 – mario 2011-04-29 01:19:40

0

不是沒有導出數組內容作爲環境變量 - 通過putenv。

但是,CLI腳本爲什麼要查看HTTP變量呢?只有CLI的腳本甚至不會看它們。

或通過CLI,你的意思是它的設計目的是作爲一個CGI腳本運行?

+0

CLI是一個通用的「工作流程」應用程序 - 它確保服務器的資源不會被徵稅(運行ffmpeg,除此之外,通過這種持久服務)。它只關心服務器上的負載,最初並沒有考慮到網絡。我正在添加一個Web組件。訪問$ _POST中的1-2個變量是關閉服務並使其恢復爲新配置的替代方法。 – 2011-04-29 01:42:24

+0

我在這裏失去了一些東西,CLI腳本尋找什麼變量,你不能作爲exec()或環境變量中的參數通過putenv傳遞? – 2011-04-29 15:01:07

+0

這個持久的作業管理代碼是陳舊的,脆弱的,超出了我的範圍。修改它以在創建排隊作業時接收新變量不值得它有可能中斷。我更喜歡黑盒子,並在內部工作,直到修復它的範圍。 :) – 2011-05-06 15:26:14

相關問題