我想知道是否有一种方法可以从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,这起作用非常好 - 尽管仅适用于课程。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top