ОШИБКА 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'
Затем я исправил имя базы данных, и она заработала.