2009-09-02 130 views
1

我正在編輯我的mashup,通過他們的API(xml)獲取last.fm數據。本地主機上的PHP Simplexml失敗

出於某種原因,我的本地主機無法連接到該文件:它給出了以下錯誤。

未能打開流:連接 嘗試失敗,因爲連接 方沒有正確 一段時間後響應或已建立 連接失敗,因爲連接主機 未能響應。在 C:\網絡\ Apache的\的Apache2 \ htdocs中\ soctfm \ user.php的 上線35

I/O警告:未能加載外部 實體

問題是,它在我的主服務器上正常工作。當我嘗試從本地主機獲取xml時,它失敗。

allow_url_fopen對於兩臺服務器都處於開啓狀態。所以不是這樣。這可能是PHP版本錯誤。

在我的本地主機上使用PHP 5.1.4。

在我的主服務器上使用PHP 5.2.5。

我必須補充,我認爲這可能是問題,我正在從我的大學互聯網工作。這意味着,我們必須通過代理連接到互聯網。

你看,最後,一切都應該正常工作。 XML和代碼完美地工作在我的主服務器上,但設法在我的本地主機上失敗,我不知道爲什麼。

有沒有更多的調試我可以做?它可能是代理嗎?

回答

3

這幾乎可以肯定是你的代理服務器。 如果您使用curl,則可以將其設置爲通過代理。

+0

謝謝,尚未使用捲曲。將閱讀它。 –

3

如果像你說的那樣,你在代理之後,你的simplexml_load_file可能會失敗:PHP將無法直接連接到遠程服務器,並且將無法下載該XML文件。

兩個可能的解決方案:

  • 首先,取數據,用別的東西(如捲曲,configureg使用代理;見你可以curl_setopt使用的選項);然後才使用simplexml_load_string
  • 或者,使用stream_context_create來配置使用代理的流。
    • 關於這一點,你可以看到my answer there:這是您所遇到
    • 雖然同樣的問題,你可能必須先獲取XML數據,與file_get_contents,並且,只有到那時,用simplexml_load_string加載它,因爲simplexml_load_file似乎並不接受流上下文參數:-(

第二個解決方案應該工作相當不錯,我想,不應該要求太多的工作:只是流上下文來配置當你在本地主機上時
這意味着更少的工作比處理捲曲,我想;-)

玩得開心!

+0

好的答案,儘管我不同意你的意思,即「不得不處理捲曲」是困難的。 – GZipp

相關問題