Включите библиотеку php и не можете получить к ней доступ с другой страницы php - PullRequest
1 голос
/ 22 июля 2011

Я загружаю библиотеку разбора 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 ]

2 голосов
/ 22 июля 2011

Здесь может быть что-то не так:

  1. Неправильный порядок кодов.
    Поймите, что когда вы require или include файл PHP, весь код этого файла будет выполняться в этот момент . Другими словами: интерпретируйте команду require_once как «Вставьте сюда содержимое файла» и проверьте, правильный ли порядок строк кода.

  2. Вы вызываете page.php в отдельном запросе.
    Если вы используете браузер для ручного перехода на страницу page.php после завершения предыдущей страницы, $feed больше не будет существовать. Если вы хотите, чтобы он работал между запросами, сделайте следующее:

    а. Заменить все экземпляры $feed на $_SESSION['feed']
    б. В первой строке каждого файла, к которому вы обращаетесь (поэтому файлы не требуются), введите session_start();

2 голосов
/ 22 июля 2011

Вызовы require и include в php в основном принимают содержимое этого файла и шлепают его по месту.

Так что, если вы следуете линейному пути, который использует 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";
?>

не требуется в обоих

Что касается различий между запросом и включением проверки вызовов http://www.php.net/manual/en/language.control-structures.php

EDIT: Увидев, что это связано с Wordpress, запомните переменную scoop. Переменные не присущи родительским функциям. Так что в page.php попробуйте:

<?php
global $feed;

foreach ($feed->get_items() as $item)
{}
?>
1 голос
/ 22 июля 2011

Вам нужно включить библиотеки на КАЖДУЮ страницу, на которой вы используете функции библиотеки.

0 голосов
/ 22 июля 2011

Я думаю, что это вопрос относительных путей.Попробуйте использовать абсолютные пути.Или проверьте, что путь к rss.com в порядке.Может быть, вам нужно позвонить по-другому: $feed = new SimplePie('../rss.com');

...