所以我的项目使用了一个 MVC 框架,并且我有一个带有 Ajax 脚本的页面,我运行该脚本来从服务器获取内容。当在 Ajax 脚本中调用 PHP 脚本时,我想访问我的库中已有的类以在 PHP 脚本中使用。为此,我使用我所谓的 ajaxBootstrap 来调用适当的函数,然后实例化该特定 Ajax 脚本所需的对象。
要从我的库中加载这些类,我的 ajaxBootstrap 中有一个自动加载功能,因此我不需要使用一堆 require 和 include 语句。我的问题是由于自动加载功能的路径问题而没有加载这些文件。当我使用具有相同路径的 require 语句时,类加载没有问题,只有当我尝试使用自动加载功能加载它们时,才会收到 500 内部服务器错误。
这是我的 ajaxBootstrap 文件:
// This file routes Ajax requests made in JS files and instantiates a specific object to carry out the actions needed for that particular Ajax operation
// Autoload any classes that are required
function autoLoad($classToLoad)
{
if(file_exists('../library/' . $classToLoad . 'class.php')) // File in the library folder
{
require('../library/' . $classToLoad . '.class.php');
}
else if(file_exists('../../app/models/' . $classToLoad . 'class.php')) // File in the models folder
{
require('../../app/models/' . $classToLoad . '.class.php');
}
}
spl_autoload_register('autoLoad');
// Determine which function to call based on the url that's listed in the Ajax request
switch($_GET['action'])
{
case 'pageOne':
pageOne();
break;
case 'pageTwo':
pageTwo();
break;
}
function pageOne()
{
$test = new Test();
$test->funcThatReturnStuff();
}
function pageTwo()
{
$test2 = new Test2();
$test2->funcThatReturnStuff();
}
就像我之前提到的,如果我使用 require 语句,例如:
require('../library/Test.class.php');
$test = new Test();
$test->funcThatReturnStuff();
类加载和工作得很好。但是在自动加载器函数中使用相同的路径会引发错误。真正奇怪的是,如果我在自动加载器中放置一个 else if 语句,该语句从我的 ajaxBootstrap 所在的文件夹中加载一个类,它也可以正常工作......
我知道我可以只使用 require 语句并解决问题,但我希望能够扩展项目并且将来不需要使用大量的 require 语句。顺便说一句,我使用“../”从我的 ajaxBootstrap 文件所在的位置获取到我的其他文件夹。
另外,为了添加到我之前的帖子中,我尝试../
使用绝对路径替换define('ROOT', dirname(__FILE__) . '/')
,define('ROOT', $_SERVER['DOCUMENT_ROOT'] . '/path/to/folder/')
但两者都不起作用,仍然给我 Firebug 中的内部服务器错误。此外,我的错误日志中也没有收到任何错误。