2009-09-02 60 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