包含和请求AJAX时的路径

时间:2010-04-21 12:08:13

标签: php ajax path include relative

我想知道是否有一种方法可以从每个需要包含或请求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";
}

在每个模块的开头?
希望这个澄清是足够好的。

1 个答案:

答案 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,这非常好用 - 虽然只用于课程。