2012-03-05 133 views
12

將網站移動到新域後,我遇到了file_get_contents的一些奇怪問題。我必須建立一個新的域和IP地址(使用Plesk)來獲得一個新的SSL證書。現在我的file_get_contents在同一個域上調用腳本給我這個:file_get_contents - 無法打開流:HTTP請求失敗! HTTP/1.1 404 Not Found

未能打開流:HTTP請求失敗! HTTP/1.1 404未找到

如果我把使用它工作正常,另一臺服務器上的file_get_contents相同的URL,如果我叫www.google.com從服務器這就是失敗的作品,所以它只是似乎是如果我在同一臺服務器上調用一個url!

我有一種感覺,它可能有兩個IP在一臺服務器上有兩個不同的SSL證書,當我從服務器的服務器的file_get_contents /(索引頁)我得到的Plesk'這是一個新域名「頁面,所以它像apache一樣不會在從它自己的服務器調用時查找正確的虛擬主機。

爲了澄清(希望!):

在託管域名服務器:

file_get_contents('https://mydomain.com?limit=4&offset=0&s_date=2012-02-05&e_date=2012-03-13&order=release_date&dir=desc&cid=12'); 

給 「未能打開流:HTTP請求失敗,HTTP/1.1 404未找到」

file_get_contents('http://www.google.com'); 

正常工作

在另一臺服務器:

file_get_contents('https://mydomain.com?limit=4&offset=0&s_date=2012-02-05&e_date=2012-03-13&order=release_date&dir=desc&cid=12'); 

工作正常。

我已經嘗試關閉ssl,我仍然遇到同樣的問題。

+2

發佈完整的代碼將幫助您更好地得到正確的答案 – 2012-03-05 21:20:27

+0

ňEW乙EE是正確的,我我不知道我明白這一點。 – Jack 2012-03-05 21:34:21

+0

你可以在腳本中測試echo gethostbyname('mydomain.com');'嗎?並向我們​​展示您的虛擬主機conf。 – soju 2012-03-06 08:00:12

回答

5

我也有這個問題,當我在家裏的一個小測試服務器上工作。域名解析爲您的外部IP地址,併發送請求。但由於請求來自網絡內部,因此路由器無法將其識別爲正常請求。它可能有一個用於配置它的Web界面,並嘗試從自己的管理系統返回一個頁面,然後在您指定的路徑中找不到該頁面。

在這種情況下,我正在使用Windows PC,我可以通過將我正在測試的域添加到我的hosts文件中,將127.0.0.1指定爲IP地址(或IP地址服務器,如果它是同一網絡中的另一臺機器)。在Linux中,我認爲應該有類似的解決方案。

問題不在於PHP或您的服務器,而在於您的路由器。

+0

這似乎是這個問題(在我的情況相同),運行echo gethostbyname('mydomain.com');並從我的電腦ping了2個不同的IP地址 – Jonathan 2012-03-22 23:48:07

4

大多數主機提供了現在阻止furl_open參數,它允許您使用file_get_contents()從外部URL加載數據。

可以使用CURLPHP客戶端庫像Guzzle

0

嘗試這樣做:

file_get_contents('https://mydomain.com?'.urlencode('limit=4&offset=0&s_date=2012-02-05&e_date=2012-03-13&order=release_date&dir=desc&cid=12')); 
相關問題