我想知道是否有一种方法可以从每个需要包含或请求AJAX的文件中创建主文件夹(index.php所在的位置)的相对路径。
我想结合使用AJAX和PHP包括第一次使用PHP加载页面,然后能够使用AJAX刷新部分页面,但文件是相同的并且位于子文件夹中。
我遇到了路径问题,虽然我可以设置绝对路径,但每次服务器更改时都必须更改它。我想要一个相对路径到我的项目所在的位置,但不是DOCUMENT_ROOT,因为那个不能使用别名。 (或者你知道如何使用别名吗?)
谢谢!
编辑* 以下是我的目录结构的外观:
[main_dir] /index.php - 主索引文件
[main_dir] / phpinc - php包含文件 - 仅适用于include(不对它们进行AJAX调用)
[main_dir] / modules - 模块是页面的一部分,可以包含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";
}
在每个模块的开头?
希望这个澄清是足够好的。
答案 0 :(得分:0)
我建议使用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.php的类。 CAutoloadManager搜索./includes/用于其他类。
PHP的autoload()函数使用如下:
function __autoload($class_name) {
include $class_name . '.php';
}
每次无法加载类时,PHP都会调用它。
Actuall,这非常好用 - 虽然只用于课程。