包括和请求Ajax时的路径
题
我想知道是否有一种方法可以从Ajax包含或需要包含或要求的每个文件中通往主文件夹(index.php所在的位置)。
我想将Ajax和PHP同时结合使用,因此第一次使用PHP加载页面,然后能够用Ajax刷新页面的部分,但是文件是相同的,并位于子文件夹中。
我在路径上遇到问题,尽管我可以设置一个绝对的路径,但是每次服务器更改时,我都必须更改它。我想要一条相对的路径,而不是document_root,因为那是不适合别名的。 (或者您知道如何使其与别名一起使用?)
谢谢 !
编辑*这是我的目录结构的外观:
main_dir]/index.php-主索引文件
main_dir]/phpinc- php包含文件 - 仅与include一起使用(无ajax呼叫)
main_dir]/模块 - 模块是页面的一部分,可以包含在php或从任何地方调用的ajax包含(没关系,它们都会作为单个HTML文件加载,因此PHP中的路径相对于位置相对于位置该模块位置位置。
当您将它们包含在PHP中时,它们通常会采用[main_dir]路径(因为index.php包括它们)
因此,我的问题是:从模块文件中,我想在phpinc文件夹中包含一些文件,但它可能是../phpinc/file.php或phpinc/file.php。
有没有更优雅的方式,而不仅仅是放置
if (is_dir("phpinc")) {
$inc_path = "phpinc";
} else if (is_dir("../phpinc")) {
$inc_path = "../phpinc";
}
在每个模块的开头?
希望这种澄清足够好。
解决方案
我建议使用PHP的自动加载器:
我创建了一个具有此方法的cautoloadmanager:
static public addRepositoryForFilePattern( String $aPath, String $sPattern ) {}
在index.php中我打电话
AutoloadManager::addRepositoryForFilePattern( './actions/', 'C*Action.inc.php' );
AutoloadManager::addRepositoryForFilePattern( './includes/', '*.inc.php' );
要指示自动加载量首先尝试在./actions/中找到一个类别的cshowwelcomeaction.inc.php或cloginaction.inc.inc.php之类的名称。 cautoloadmanager搜索了./includes/其他班级。
php的autoDOD()函数是这样使用的:
function __autoload($class_name) {
include $class_name . '.php';
}
PHP每次无法加载类时都称其为调用。
Actuall,这起作用非常好 - 尽管仅适用于课程。