2012-02-16 46 views
0

我試圖使用file_get_contents來檢索瀏覽器將從同一個域上的另一個文件接收的輸出。 我已經移動到另一臺服務器,現在它總是超時。 下面是我想要做的一個例子。file_get_contents在同一個域上執行http請求

的index.php

<?php 
echo file_get_contents('http://'.$_SERVER['SERVER_NAME'].'/sample.php'); 
?> 

sample.php

<?php 
echo 'test'; 
?> 

任何想法可能是這個問題的原因是什麼?

編輯 我們的服務器管理器中提到一些有關阿帕奇不響應爲localhost,它也許有印象嗎?

謝謝

+0

爲什麼要通過HTTP做什麼呢?文件系統操作比HTTP請求的開銷小得多。 – GordonM 2012-02-16 10:07:11

+0

對你的編輯:是的,它確實響了。這就是我在答案的最後一句中提到的。這確實意味着你不可能對此做任何事情,這是可靠的,不會令人生畏的。告訴服務器管理器讓Apache響應本地主機請求。爲什麼會被禁用呢? – 2012-02-16 18:51:09

+0

@GrodonM,認爲它是一個實驗。 – user6 2012-02-17 07:52:12

回答

1

您確定網址實際上是正確的嗎?您是否嘗試過使用$_SERVER ['HTTP_HOST']?在運行PHP的機器上,主機從生成的URL中解析到什麼?您的Web服務器(Apache?)是否已設置在localhost界面上偵聽?

+1

「SERVER_NAME」變量並不總是適用於所有體系結構。 – 2012-02-16 10:44:06

+0

該URL有效。輸出時我可以通過瀏覽器訪問它。 – user6 2012-02-16 10:53:54

0

可以使用的fsockopen做同樣的,隨着你可以指定超時

<?php 
$fp = fsockopen($_SERVER['SERVER_NAME'], 80, $errno, $errstr, 30/*timeout*/); 
if (!$fp) { 
    echo "$errstr ($errno)<br />\n"; 
} else { 
    $out = "GET /sample.php HTTP/1.1\r\n"; 
    $out .= "Host: www.example.com\r\n"; 
    $out .= "Connection: Close\r\n\r\n"; 
    fwrite($fp, $out); 
    while (!feof($fp)) { 
     echo fgets($fp, 128); 
    } 
    fclose($fp); 
} 
?> 

檢查文檔瞭解更多信息

http://php.net/manual/en/function.fsockopen.php