我将php rss解析库simplepie加载到我的网站上,并将其包含在header.php文件中,如下所示:
<?php
// Make sure that SimplePie is loaded
require_once('inc/simplepie.inc');
$feed = new SimplePie('rss.com'); <-- This is a example url
// Make sure the content is being served out to the browser properly.
$feed->handle_content_type();
?>
然后我尝试从另一个名为page.php的页面访问该对象,它给了我这个错误:
Fatal error: Call to a member function get_items() on a non-object in /home/callofdu/public_html/wp-content/themes/Starkers/page.php on line 13
我从这行代码中得到错误:
<?php
foreach ($feed->get_items() as $item)
{}
?>
它很奇怪,因为如果我在同一个php页面上同时包含这两个代码块,那么一切正常。
我只是不理解某事,请帮助。
答案 0 :(得分:2)
这里有几件事可能是错的:
代码顺序不正确
意识到当你require
或include
PHP文件时,该文件的整个代码将在那时执行。换句话说:将命令require_once
解释为“在此处插入文件内容”,并检查代码行的顺序是否仍然正确。
您在单独的请求中调用page.php
如果您在上一页完成后使用浏览器手动浏览page.php,$feed
将不再存在。如果您希望它在请求之间生效,请执行以下操作:
一个。将$feed
的所有实例替换为$_SESSION['feed']
湾在您浏览的每个文件的第一行(所以不是require'd文件)中,放置session_start();
答案 1 :(得分:2)
php中的require和include调用基本上取了该文件的内容并使用了slap。
因此,如果您遵循php在运行脚本时所采用的线性路径,则必须确保在使用它之前调用该库。
基本上在实践中,如果您将page.php作为独立执行,那么您也需要在该脚本中要求它,但是,如果page.php包含在您提到的第一个脚本中,那么您不需要再次要求它,但确保在page.php之前包含库
即
<?php
// Make sure that SimplePie is loaded
require_once('inc/simplepie.inc');
$feed = new SimplePie('rss.com');
// Make sure the content is being served out to the browser properly.
$feed->handle_content_type();
require_once "page.php";
?>
中不需要
对于require和include调用之间的差异,请查看 http://www.php.net/manual/en/language.control-structures.php
编辑: 看到这与Wordpress相关后,请记住变量scoop。变量不是函数父级所固有的。所以在page.php中尝试:
<?php
global $feed;
foreach ($feed->get_items() as $item)
{}
?>
答案 2 :(得分:1)
您需要在每个使用库函数的页面上包含库。
答案 3 :(得分:0)
我认为这是相对路径问题。尝试使用绝对路径。或者检查rss.com
的路径是否正常。您可能需要以其他方式调用它:$feed = new SimplePie('../rss.com');