【问题标题】:Paths when both including and requesting AJAX包含和请求 AJAX 时的路径
【发布时间】:2011-02-10 13:54:21
【问题描述】:

我想知道是否有一种方法可以从 AJAX 需要包含或请求的每个文件中创建到主文件夹(index.php 所在的位置)的相对路径。

我想结合 AJAX 和 PHP 包含,所以第一次使用 PHP 加载页面时,然后能够使用 AJAX 刷新页面的某些部分,但文件是相同的并且位于子文件夹中。

我的路径有问题,虽然我可以设置绝对路径,但每次服务器更改时我都必须更改它。我想要一个指向我的项目所在位置的相对路径,但不是 DOCUMENT_ROOT,因为该路径不适用于别名。 (或者你知道如何使它与别名一起使用吗?)

谢谢!

编辑* 这是我的目录结构的样子:

[main_dir]/index.php - 主索引文件

[main_dir]/phpinc - php 包含文件 - 仅适用于包含(对它们没有 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";
}

在每个模块的开头?

【问题讨论】:

  • 你能举一个你正在尝试的例子吗?
  • 好的。我会尽力。我将编辑问题描述以添加它。

标签: php ajax path include relative-path


【解决方案1】:

我建议使用 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 都会调用它。

实际上,这非常好用 - 尽管仅适用于课程。

【讨论】:

    猜你喜欢
    • 2013-08-03
    • 2021-04-21
    • 2019-05-30
    • 2015-01-14
    • 2014-03-30
    • 2018-07-05
    • 1970-01-01
    • 2014-03-12
    • 2011-07-30
    相关资源
    最近更新 更多