如何加载由php呈现的rss提要的内容?

问题描述:

Wordpress正在渲染一个RSS提要http://myurl.com/feed/rss/,但当然实际上并没有一个文件。我正在编写脚本来读取和渲染RSS,但将XML文件加载失败,因为那里实际上没有文件。我写:如何加载由php呈现的rss提要的内容?

$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给了我这个错误:

Warning: file_get_contents(/news/feed/rss/) [function.file-get-contents]: failed to open stream: No such file or directory

该文件不存在,因为该网址被重定向,但你试图以文件的形式访问它。假设你有正确的fopen封装(每个人都一样),尝试用SimpleXML打开的网址:

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

这听起来像是最好的解决方案,谢谢。该网站的主机说:“在服务器配置中禁用URL文件访问”。所以我现在正在与之争论。 – Corey 2010-01-25 15:51:05

+0

这很奇怪,我从来没有遇到过禁用Fopen包装的主机 – 2010-01-25 15:52:18

+0

Bah,它是最好的。转到WordPress支持论坛,询问如何获取RSS。当然有一个函数会返回给你,并且不会导致处理额外HTTP请求的性能损失。 – 2010-01-25 19:53:27

最好的办法是使用卷曲(http://us2.php.net/manual/en/book.curl.php),用于加载外部内容,因为你可以用头操纵等,它也支持重定向等。

例如,如果mod_security被安装在apache上 - 你将无法在不传递用户代理头等的情况下抓取内容,但Curl肯定会帮助它。

+1

您也可以使用流上下文为fopen包装器设置标题,否定卷曲。此外,OP不需要任何头文件。 – 2010-01-25 12:19:23

+0

对不起,但什么是“OP”? – Kirzilla 2010-01-25 12:26:06

+0

原始海报。我第二次发表评论,你很少需要使用卷曲。 HTTP包装器可以让你做任何事情。 http://docs.php.net/manual/en/context.http.php – 2010-01-25 15:18:50