错误500 Require_once

时间:2012-04-19 02:33:12

标签: php apache 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 个答案:

答案 0 :(得分:2)

对我来说这是因为UserDatabaseManager.php文件试图包含DataBaseManager.php,但它提供了错误的路径。您的apache错误表示它将首先查看.,即当前目录,然后/usr/share/pear然后/usr/share/php

您的DataBasemanger.php文件不在最后两个文件中。当它试图查看当前目录时,它包含您的相对路径。因此,当您的UserDataBaseManager.php文件(位于php/Classes/User/中)提供该路径时,apache最终会在php/Classes/User/php/classes/DataBase/DataBaseManager.php

中查找您的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

的文档

我知道还有其他方法可以做到这一点。让我知道什么对你有用!

答案 1 :(得分:0)

尝试

echo getcwd();

找到解决任何路径相关问题的工作路径。

答案 2 :(得分:0)

你可以尝试

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

答案 3 :(得分:0)

我检查了 Apache error.log,发现 dbname 中的 dbconn.php 存在问题,

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

然后我更正了数据库名称,它开始工作了。