【问题标题】:How do I load the contents of an rss feed rendered by php?如何加载由 php 呈现的 rss 提要的内容?
【发布时间】:2010-01-25 12:07:41
【问题描述】:

Wordpress 正在http://myurl.com/feed/rss/ 处呈现 RSS 提要,但当然那里实际上并没有文件。我正在编写一个脚本来读取和呈现 RSS,但是将“文件”作为 XML 加载失败,因为那里实际上没有文件。我写:

$rss = simplexml_load_file('/news/feed/rss/');

我得到这个错误:

Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "/news/feed/rss/"

即使使用 file_get_contents 也会给我这个错误:

警告:file_get_contents(/news/feed/rss/) [function.file-get-contents]:打开流失败:没有这样的文件或目录

【问题讨论】:

    标签: file-io simplexml php


    【解决方案1】:

    该文件不存在,因为 URL 被重定向,但您正尝试将其作为文件访问。假设您有正确的 fopen 包装器(每个人都有),请尝试使用 simplexml 打开网址:

    $rss = simplexml_load_file('http://myurl.com/news/feed/rss/');
    

    【讨论】:

    • 这听起来是最好的解决方案,谢谢。该网站的主机说,“在服务器配置中禁用了 URL 文件访问”。所以我现在正在争论。
    • 这很奇怪,我从来没有遇到过禁用 fopen 包装器的主机
    • 呸,这是最好的。访问 WordPress 支持论坛并询问如何获取其 RSS。肯定有一个函数会为您返回它,并且不会因处理额外的 HTTP 请求而导致性能损失。
    【解决方案2】:

    最好的方法是使用 Curl (http://us2.php.net/manual/en/book.curl.php) 来加载外部内容,因为您可以使用标题等进行操作,它还支持重定向等。

    例如,如果在 apache 上安装了 mod_security - 如果不传递用户代理标头等,您将无法获取内容,但 Curl 肯定会有所帮助。

    【讨论】:

    • 您还可以使用流上下文使用 fopen 包装器设置标头,从而无需 curl。此外,OP 不需要任何标题。
    • 原始海报。我支持该评论,您很少需要使用 curl。 HTTP 包装器让您几乎可以做任何事情。 docs.php.net/manual/en/context.http.php
    • 谢谢!我不知道 HTTP Wrapper。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    相关资源
    最近更新 更多