包含一个php库,无法从另一个php页面访问它

时间:2011-07-21 20:01:29

标签: php parsing rss simplepie

我将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页面上同时包含这两个代码块,那么一切正常。

我只是不理解某事,请帮助。

4 个答案:

答案 0 :(得分:2)

这里有几件事可能是错的:

  1. 代码顺序不正确 意识到当你requireinclude PHP文件时,该文件的整个代码将在那时执行。换句话说:将命令require_once解释为“在此处插入文件内容”,并检查代码行的顺序是否仍然正确。

  2. 您在单独的请求中调用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');