ОШИБКА 500 Require_once

Это мой кусок кода PHP:

<?php
require_once 'php/Classes/User/UserDataBaseManager.php';
require_once 'facebook/src/facebook.php';
?>

И когда я пытаюсь просмотреть этот код в http:/mydomain/myfile.php, браузер возвращает ошибку 500.

Журнал Apache говорит:

[Wed Apr 18 20:38:07 2012] [error] [client 190.50.81.189] PHP Fatal error: require_once() [<a href='function.require'>function.require</a>]: Failed opening required 'php/classes/DataBase/DataBaseManager.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/virtuales/blyxo.com/php/Classes/User/UserDataBaseManager.php

Решения?

4 ответа

Решение

Для меня это выглядит так, что файл UserDatabaseManager.php пытается включить DataBaseManager.php, но предоставляет неверный путь. Ваша ошибка apache указывает на то, что она сначала заглянет в . то есть текущий каталог тогда /usr/share/pear затем /usr/share/php

Ваш файл DataBasemanger.php отсутствует ни в одном из последних двух. Когда он пытается посмотреть в текущем каталоге, он включает ваш относительный путь. Поэтому, когда ваш файл UserDataBaseManager.php (который находится в php/Classes/User/) обеспечивает этот путь, тогда Apache в конечном итоге ищет ваш файл DataBaseManager.php в php/Classes/User/php/classes/DataBase/DataBaseManager.php

Есть несколько способов подойти к этому. Вы можете получить корень документа и добавить его к каждому включению, как это

$root = $_SERVER['DOCUMENT_ROOT'];
require_once($root . "/php/classes/DataBase/DataBaseManager.php");

Или, если это приложение находится в контролируемой среде, и вы можете редактировать файл php.ini, вы можете определить путь включения, чтобы также посмотреть /var/www/virtuales/blyxo.com/php/Classes/ и просто включите файл с

require_once("Database/DataBaseManager.php");

Лучшим решением может быть определение функции __autoload, которая будет вызываться каждый раз, когда вы пытаетесь создать экземпляр нового объекта, и заставить его использовать некоторую логику для поиска включаемого файла. Это решение займет немного больше реструктуризации, но вы можете рассмотреть это. Вот документация по определению вашего собственного автозагрузчика http://us2.php.net/manual/en/function.autoload.php

Я знаю, что есть и другие способы сделать это. Дайте мне знать, что работает для вас!

Ты можешь попробовать

<?php require_once(dirname(__FILE__) . "php/Classes/User/UserDataBaseManager.php");?>

Пытаться

echo getcwd();

найти рабочий путь для устранения проблем, связанных с путями.

я проверил апач error.logи нашел проблему с моим dbnameв dbconn.php,

      PHP Fatal error:  Uncaught PDOException: SQLSTATE[HY000] [1049] Unknown database 'study_db' 

Затем я исправил имя базы данных, и она заработала.

Другие вопросы по тегам