2012-06-12 46 views
1

我一直想這樣做,因爲我的網站每頁加載大約3個HTTP請求,因爲每個PHP的輸出都用cURL檢索。這太慢了,我想避免使用cURL。我發現堆棧溢出this question,它基本上做我想要的。接受的答案建議是使用ob_start();開始獲取輸出,然後使用ob_get_clean();將輸出放入一個變量。我現在的問題是我試圖捕獲的PHP腳本輸出需要使用HTTP Get傳遞給它們的變量。訪問這樣的變量:如何捕獲PHP輸出到變量

$term = $_GET['term']; 

而且我不想改變這種狀況,因爲雖然我會從另一個PHP腳本訪問這些PHP腳本的輸出,我還訪問它們計劃從其他地方。那麼,有沒有辦法將這些PHP腳本通過Get來接受一些參數,然後用上面提到的方法捕獲它們的輸出?

回答

1

而且我不想改變這種狀況,因爲雖然我要訪問這些PHP腳本的輸出來自另一個PHP腳本,我也計劃從別處訪問它們。那麼,有沒有辦法將這些PHP腳本通過Get來接受一些參數,然後用上面提到的方法捕獲它們的輸出?

你的問題有點不清楚爲爲什麼你在第一時間使用捲曲。如果你的腳本是在同一臺服務器上,你可以簡單地設置正確的$_GET變量和使用:

<?php 
ob_start(); 
// include the file. 
$_GET['foo'] = 'bar'; 
include 'the_file.php'; 

$output = ob_get_clean(); 

如果你的腳本位於另一臺服務器,其中包括是不可行的,你會總是要做一個HTTP請求來獲得他們的內容,不管你是用cURL還是Ajax,還是我關心的所有套接字。

+0

這正是我所需要的,謝謝。 – Hassan

+0

最受歡迎。 :) –

0

你可以從任何加載的腳本訪問$ _GET,只要它在URI中,變量$ term可以用在任何腳本中。您也可以包含腳本。

當您包含腳本時,您可以在包含之後訪問其中的一些內容。

+0

獲取參數被髮送到特定的PHP文件。試圖從另一個文件訪問它們是*不*我想要做的。 – Hassan

+0

從表單提交? – Eli

+0

不,來自另一個PHP文件。 – Hassan

2

你可以從任何php腳本中獲取$ _GET變量,如果它設置了(使用isset來檢查)。然後只是捲曲到這樣的網址將工作。

如果您之前已將方法更改爲POST,則可以使用CURLOPT_HTTPGET。有關更多詳細信息,請參閱curl_setopt函數頁面(http://www.php.net/manual/en/function.curl-setopt.php)。

對於非cURL方法,請使用jQuery ajax。使用起來相當簡單,只需閱讀文檔here

編輯:這是你想要的東西(還沒有檢查雖然代碼)

<?php 

function get_include_contents($filename, $get) { 
if (is_file($filename)) { 
    ob_start(); 
    $_GET = array(); 
    while (list($key, $val) = each($get)) { 
     $_GET[$key]=$val; 
    } 
    include $filename; 
    return ob_get_clean(); 
} 
return false; 
} 

$string = get_include_contents('somefile.php', array('param1'=>'x', 'param2'=>'y')); 

?> 
+0

其實我試圖避免使用cURL,因爲它很慢。這是我的問題的重點。 – Hassan

+0

@Hassan你其實說你在你的問題的第一行使用cURL。無論如何,你可以使用'jQuery ajax'。只需將您想要發送的值作爲'get'值發送到$ .ajax的'data'參數中,您的輸出將在成功函數中接收。 – gopi1410

+0

是的,我正在使用cURL,但這正是我的問題。 – Hassan