2012-06-12 62 views
0

我想避免在我的網站上做任何不必要的HTTP請求來提高性能。所以,我想使用cURL在我的服務器上包含本地PHP,而不使用。問題是,我打電話的PHP期望通過HTTP GET傳遞一些參數。我想保持這種方式,因爲我也希望能夠從其他地方訪問這些PHP文件。包含本地PHP文件和傳遞參數

這樣做的最好方法是什麼?我可以訪問本地PHP文件的輸出,同時給它GET參數嗎?

+0

看看你是否從php.ini啓用了'allow_url_fopen'。 – Sarfraz

+0

@Sarfraz即使他這麼做,該命令也不會包含腳本,它會包含腳本的輸出。另外,你也需要允許'allow_url_include'以使其工作。另外,你應該永遠不要通過HTTP包含東西。永遠。 – DaveRandom

+0

@DaveRandom:這是正確的,我只是把重點放在他的錯誤:) – Sarfraz

回答

2

我想避免這樣做我的網站上的任何不必要的HTTP請求來提高性能

include也使得HTTP請求時您提供的HTTP URI吧,所以不是客戶端的異步包含(例如,使用AJAX或iframe),您可以在服務器上同步執行該操作,從而使頁面加載速度更慢。

所以,雖然包括可能按預期工作(你想包括輸出,對吧?),它絕對不會加快你的網站。

我打電話的PHP期望通過HTTP GET傳遞一些參數。我想保持這種方式,因爲我也希望能夠從其他地方訪問這些PHP文件。

然後在包含它們之前改變這些文件並設置適當的變量。甚至更好,重構它的功能。例如,如果你想要的文件,包括如下所示:

$username = $_GET['username']; 
print "User: $username"; 

然後重構爲一個單獨的文件中的函數和存儲:

function PrintUsername($username) 
{ 
    print "User: $username"; 
} 

,並適當地調用它:

include('printusername.php'); 
PrintUsername($_GET['username']); 

(你可能想在這裏和那裏扔一個isset()。)現在你可以改變你的代碼,也需要這個輸出:

include('printusername.php'); 
PrintUsername($someOtherVariable); 

現在,您不必依賴URL或$_GETinclude魔法,只需使用所有功能。

+0

是否有另一種包含輸出的方式。目前我已經在使用cURL,它非常慢(每個請求訪問3個PHP)。 – Hassan

+0

@Hassan是的,通過使用來自客戶端的AJAX請求。 – CodeCaster

+0

任何從服務器獲取它們的方法?畢竟他們坐在一起! – Hassan

0

這是醜陋的,但工程。

$_GET['foo'] = 1; 
$_GET['bar'] = 2; 
include '/path/to/file.php'; 
+0

是的,這是我問我一個相關的(但不同的)問題時的答案。在我的情況下的實現正是你描述它的方式:醜陋。 – Hassan

+0

這在許多方面都是錯誤的,在最新的PHP版本中甚至都不支持。如果你這樣做,你會得到一個錯誤。 – rid

+0

但是,無論如何謝謝您的回覆... – Hassan

2

假設你在Linux中,你可以執行的是劇本,拿起輸出的東西,如:

exec ("php myPhpFile.php arg1 arg2 arg3 > myPhpOutput.html");

然後打開輸出文件進行讀取。但是爲了使這個工作起來(而且很醜!),你需要修改myPhpFile並實現一個測試$ _GET參數的方法。如果它沒有找到它們,然後使用argv


改進加載屬性(我在想懶洋洋:))

了shell_exec將返回輸出爲字符串。所以
$filecontents = shell_exec("php yourfile.php arg1 arg2 arg3...");
將返回一個PHP文件的處理輸出。

+0

exec的第二個參數也可以給出用輸出行填充數組。所以這取決於你想如何返回你的輸出。 [shell_exec](http://uk.php.net/manual/en/function.shell-exec.php) [exec](http://uk.php.net/manual/en/function.exec。php) –

+0

這裏可能是最有趣的答案。謝謝,我也會考慮這個! – Hassan

+0

你是velkom! Spotted [this](http://stackoverflow.com/questions/4186392/php-passing-get-in-linux-command-prompt)。最常見的答案是使用[getOpt()](http://php.net/manual/en/function.getopt.php)捕獲參數的方法很好, –