2013-01-23 65 views
2

我在PHP中使用curl來返回PHP文件的內容。我想在本地執行此操作,因爲我將在同一個腳本中訪問多個PHP文件,所以直接打開文件會更快。使用curl在本地獲取.php文件

但是,我希望能夠將參數推送到PHP文件(將它們完全當作Web上的PHP文件,但是在本地抓取它們),因爲我想將參數推入腳本中,這將生成額外的動態內容,當我抓住它。

如果我在本地調用文件,這可能嗎?我試過使用file:///,直接調用這個文件,但是這不會運行在這些文件中找到的PHP代碼。

任何想法?

編輯

很抱歉的混亂: - 這是當前正在運行一個Web服務器,而我目前調用HTTP://(而不是文件:///),所以包含在那些PHP文件可以被執行。但是,我發現這很慢,因爲我生成多次curl()調用,實際上多次調用服務器本身。

+0

使用'HTTP:/ /'?像'http:// localhost/file.php'? – Peter

+3

不只是使用'require' /'include'的原因是什麼? – hank

+0

您必須像訪問網絡服務器一樣訪問它。然而,很少有這樣做的好理由。如果你有本地文件,爲什麼不直接包含? – datasage

回答

1

我相信你會想在你的本地機器上安裝一個web服務器(例如Apache),所以你可以去http://localhost/script.php?param1=foo&param2=bar而不是file:///path/to/script.php。所不同的是,當你做file:///時,文件只是打開,但是如果你經過Apache,腳本實際上是執行

至於將參數傳遞給腳本,請使用該查詢字符串(例如?param1=foo等)。

我不知道你爲什麼要做你在做什麼,但希望能幫助你做到。

+0

謝謝,我實際上在網絡服務器上運行這個(對不起,沒有提到這一點)。我目前正在運行的是http://,但這通常很慢,因爲我打電話給多個PHP頁面以逐一獲取他們的內容。基本上我正在尋找file:///的速度,同時仍然獲得http的執行和參數化。 – Prusprus

5

你可以做的伎倆,如:

function php_to_string($php_file, $new_GET = false, $new_POST = false) { 
    // replacing $_GET, $_POST if necessary 
    if($new_GET) { 
     $old_GET = $_GET;    
     $_GET = $new_GET; 
    } 
    if($new_POST) { 
     $old_POST = $_POST;    
     $_POST = $new_POST; 
    } 
    ob_start(); 
    include($php_file); 
    // restoring $_GET, $_POST if necessary 
    if(isset($old_GET)) { 
     $_GET = $old_GET; 
    } 
    if(isset($old_POST)) { 
     $_POST = $old_POST; 
    } 
    return ob_get_clean(); 
} 

$content = php_to_string('my_file.php'); 
$content = php_to_string('my_file.php', Array('id'=>23)); // http://localhost/my_fie.php?id=23 

但請介意它可能會覆蓋現有的變數,從而導致錯誤(例如重複定義)等,所以您可以使用sandbox solution

+0

我認爲這應該工作。我會放棄它。謝謝。 – Prusprus