2010-05-20 69 views
1

我有一個我正在使用的基於CGI的表單,我希望能夠在生成的結果中包含一些PHP代碼。但是,當我這樣做時,PHP似乎沒有得到處理,只是最終顯示在生成的網頁中。您可以將PHP代碼嵌入到CGI腳本的輸出中嗎?

我正在做的事實際上可能或者我錯過了什麼?

謝謝。

回答

2

不,這是不可能的。但是,您可以在PHP腳本中使用include('http://url.to/cgi/script');,然後將瀏覽器指向PHP腳本而不是CGI腳本。這將導致PHP打開到服務器的新連接,執行CGI腳本,然後將其輸出解析爲PHP腳本。

EDIT2:這裏是你如何能與POSTDATA包括文件上傳做到這一點:

// Edit to match your CGI URI: 
$url_to_cgi = "http://{$_SERVER['SERVER_NAME']}/cgi-bin/something.cgi"; 

$curl = curl_init($url_to_cgi); 
curl_setopt($curl,CURLOPT_POST, true); 
curl_setopt($curl,CURLOPT_RETURNTRANSFER, true); 

// Pass POSTDATA along to the CGI script: 
$postdata = $_POST; 

// If we have file uploads, pass those along too: 
if(is_array($_FILES)) foreach($_FILES as $key => $file) 
    $post[$key] = "@{$file['tmp_name']}"; 

curl_setopt($curl,CURLOPT_POSTFIELDS, $postdata); 

$file = tempnam('/tmp','php-curl-'); 
file_put_contente($file, curl_exec($curl); 

include($file); 

unlink($file); 

請注意,是未經測試...

+0

這讓我獲得最多的方式。有一種簡單的方法可以將表單POST中的數據傳遞給上述方法嗎? – 2010-05-20 20:33:24

+0

@Joe:好的。現在這將變得更加棘手。您需要使用[PHP的捲曲函數](http://us.php.net/manual/en/function.curl-exec.php)等方式生成完整的請求,然後「包含」結果。如果它可以適合查詢字符串,這將工作... – Josh 2010-05-20 20:39:28

+0

@Joe:請參閱我編輯的答案 – Josh 2010-05-20 20:52:34

1

確保PHP代碼被放置在頁面之前它擊中了PHP解析器。

我已經成功地使用PHP來執行CGI腳本並將其輸出到頁面,但您通常必須評估返回的代碼或沿着這些行的內容。

您可以通過從PHP中包含CGI腳本來做一些技巧。假設PHP運行時會接受並且您的腳本返回有效的PHP代碼,那麼應該這樣做(在腳本完全解析之前腳本將運行並返回代碼,因此應該正確處理您的代碼)。

可能有更好的官方方式來處理它,但那些已經爲我工作。

2

否PHP是一種服務器端語言。 PHP代碼必須在服務器上執行。如果將它包含在輸出中,那麼代碼將通過TCP連接發送到用戶的Web瀏覽器。

而不是打印PHP,請嘗試調用php可執行文件,例如通過system("php myscript.php")

請注意,PHP喜歡在其輸出中顯示一整套HTTP頭文件,因此如果您在CGI輸出中間執行它,您可能無法獲得您想要的內容。

0

最終。 Apache2有一些稱爲過濾器的東西。 mod_ext_filter可能能夠獲取CGI輸出並再次通過PHP。

但是,我不確定這是你想要的。如果,如何配置它。 但只是看看這裏:http://httpd.apache.org/docs/2.2/filter.html

相關問題