2011-09-04 231 views
2

我想讀取託管在另一臺服務器上的外部文件,但遇到問題。PHP無法讀取外部文件

在這裏,我找出變量:

$variable1 = "test"; 
$variable2 = "testing"; 

在這裏,我找出網址爲:

$url = "http://test.com/page.php?v1=" . $variable1 . "&v2=" . $variable2; 

在這裏,我讀的外部文件:

$content = file($url); 
$reading = $content[0]; 
echo $reading; 

的奇怪的是沒有出來。我嘗試輸入實際的URL,但它確實有效,但是,當PHP嘗試這樣做時,它顯示爲空白。

我知道這不是一個致命的錯誤,因爲我試着在那裏放一些常規文本。所以,有一些錯誤,只是沒有正確讀取文件。此外,我還確保閱讀服務器不被服務器上的文件阻塞。

任何建議,將不勝感激。

+1

我建議用'urlencode'和'print_r'來包裝你的變量,看內容數組是否以空行開始。您可能還會考慮'file_get_contents',具體取決於您的最終目標。 –

+2

確保allow_url_fopen設置爲true。您可以使用ini_get() –

回答

0

此外,我確定讀取服務器沒有被服務器上的文件阻塞。

你是怎麼確定


首先,確保allow_url_fopenphp.inion

如果是on,請嘗試設置用戶代理。遠程文件可能期望有效的用戶代理。

ini_set('user_agent', 'Your browser\'s user agent or whatever'); 

如果是off,請嘗試使用cURL library請求遠程文件。您也可以使用cURL來設置用戶代理。

+0

來測試Allow_url_fopen是否開啓。我嘗試用代理「Mozilla/5.0(Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9)Gecko/20071025 Firefox/2.0.0.9」設置用戶代理。「不幸的是,這並沒有奏效。 :(任何其他技巧? – Jacob

+0

@Jacob Weird。遠程服務器可能期望所有典型的* browser *頭文件。你試過cURL嗎?你能夠公開遠程URL以便我可以測試嗎? – alex

0

你可以試試PHP的功能的file_get_contents

echo file_get_contents($url); 
+0

'file_get_contents() '會通過'file()'的路由,所以如果'file()'不起作用,我懷疑任何本地的PHP文件函數都會。 – alex

0

如果使用URL作爲文件名,allow_url_fopen選項必須在php.ini中啓用。我會從那裏開始。

0

如果您正在提取某個網站,並且它以<html>之類的內容開頭,則從瀏覽器查看時,不會顯示$ content [0]的回顯。

嘗試:

echo htmlentities($content[0]); 

或者:

print_r($content); 
0

file()將數據加載到一個數組。然後您只回顯此文檔的第一行(echo $reading[0])。該第一行很可能只是一個<html>標記或可能是文檔類型聲明。

如果你只是想回聲出文件的全部內容,然後執行:

echo file_get_contents($url); 

,其獲取指定的URL,並返回一個字符串 - 無行解析,沒有陣列創建。只需一個包含整個文件的普通字符串即可。