php - 错误 500 Require_once

标签 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

解决方案?

最佳答案

在我看来,文件 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 函数,每次尝试实例化新对象时都会调用该函数,并让它使用一些逻辑来查找要包含的文件。该解决方案需要更多的重组,但您可以考虑一下。这是定义您自己的自动加载器的文档 https://www.php.net/manual/en/function.autoload.php

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

关于php - 错误 500 Require_once,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10220882/

相关文章:

php - 创建复选框以更改输出文本颜色

php - 对SEO URL的POST请求被禁止

apache - htaccess设置单个文件的模仿类型

php - 需要一次停止脚本

php - Joomla组件开发导入PHP代码

数据库的 PHP OOP 问题

php - Blade 模板可能无法在 Laravel 4.1 中工作?

javascript - ajax提交表单为什么不能回显$_POST

java - Solr 空白建议器/查询分析器

php - 将模块的 PHP 代码拆分为单独的包含文件