2016-03-14 84 views
3

我正在研究一個簡單的python web服務器用於教育目的。我希望我的服務器能夠根據請求運行PHP腳本。我能夠通過創建一個像這個answer這樣的子進程來執行php代碼,並以字節形式獲取它的輸出。這可以幫助我執行大部分PHP內置函數。但我也想模擬$ _GET和$ _POST變量,例如,當用戶發送POST請求時,我希望它的參數在$ _POST全局變量中可用。我聽說在一個像Apache這樣的真正的Web服務器中,PHP從環境變量(通用網關接口標準,我認爲)中獲得這些變量的值。

但是,當我設置一個名爲QUERY_STRING的環境變量時,php沒有設置$ _GET的值。讓我告訴大圖片:

的index.php

<?php var_dump($_GET); ?> 

我在shell命令:

export QUERY_STRING="foo=bar" 
php index.php 

此命令剪斷不給我我想要的輸出(數組=> [ 'foo'] ='酒吧')。這裏是我的問題:

  • 在上面的代碼中,我的錯誤是什麼?
  • 如何將這兩個全局變量($ _GET和$ _POST)注入python中的PHP腳本?

我的Python版本是3.4.3,我使用Ubuntu 14.04

+1

末更多例子參見本【答案】(http://stackoverflow.com/questions/4186392/php-passing-get-in-linux-command-prompt) – frz3993

+2

你或者在命令行中編寫一個針對執行的PHP腳本,或者針對在Web服務器上運行的目標。不要做一個奇怪的混合物。如果它是CLI腳本,則通過參數或標準輸入傳遞參數,而不是模擬的Web請求。 – deceze

回答

1

試試這個:

$ php -f index.php foo=bar 

而在指數PHP做:

parse_str(implode('&', array_slice($argv, 1)), $_GET); 

後,你會得到這個rezult:

echo $_GET['foo'];// prints 'bar' 

中的page