PHP:将脚本移动到另一个目录会弄乱它的包含

PHP:将脚本移动到另一个目录会弄乱它的包含,php,include,directory,Php,Include,Directory,无论当前文件在目录结构中的位置如何,如何始终包含其他源文件?设置;这样,您的include将在当前脚本位置不变的情况下出现。设置;这样,您的include将在当前脚本位置不变的情况下出现。使用绝对路径而不是相对路径。最好在配置的某个地方使用baseURL设置。使用绝对路径而不是相对路径。最好是在配置文件中的某个地方使用baseURL设置。对于PHP项目,我总是为我的项目设置一个文档根目录,例如“/home/project”,然后包含相对于该文档根目录的所有包含。对于PHP项目,我总是为我的项目设

无论当前文件在目录结构中的位置如何,如何始终包含其他源文件?

设置;这样,您的include将在当前脚本位置不变的情况下出现。

设置;这样,您的include将在当前脚本位置不变的情况下出现。

使用绝对路径而不是相对路径。最好在配置的某个地方使用baseURL设置。

使用绝对路径而不是相对路径。最好是在配置文件中的某个地方使用baseURL设置。

对于PHP项目,我总是为我的项目设置一个文档根目录,例如“/home/project”,然后包含相对于该文档根目录的所有包含。

对于PHP项目,我总是为我的项目设置一个文档根目录,例如“/home/project”,然后包含与该文档根目录相关的所有包含项。

要获得最佳的根目录路径,您应该在视图文件中定义一个常量,即(index.php),并使其跨平台兼容

在多年从事PHP和多平台应用程序的工作后,我发现实现这一点的最佳方法是结合使用以下原生PHP函数和常量:

  • 定义
  • stru_替换
  • 肮脏的
  • \uuuuuuuuuuuuu文件
以下是我们使用这些函数的原因:

  • 我们使用define的原因是允许文档根保持在全局范围内
  • str_replace
    的原因是将斜杠更改为跨平台兼容
  • 之所以使用
    dirname
    ,是为了帮助确定根视图文件的相对路径
  • \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
我们可以对PHP5使用
\uuuuuu DIR\uuuuuu
,但是
\uuuuuu FILE\uuuuuuu
更好,因为它支持以前版本的windows

完全合并后,您将拥有视图文件的有效相对路径

define("ROOT_PATH",str_repalce("\\","/",dirname(__FILE__)));
这将生成到索引目录的完美相对路径,而不带尾随斜杠,然后您应该像这样包含文件:

require_once ROOT_PATH . "/system/classes/some.class.php";

在windows中,
/
\
都是有效的,而对于其他操作系统,它们只是
/
,因此通常您应该始终使用
/
作为目录分隔符来构建应用程序。

要获得最佳的根路径,您应该在视图文件中定义一个常量,即(index.php)你应该让它跨平台兼容

在多年从事PHP和多平台应用程序的工作后,我发现实现这一点的最佳方法是结合使用以下原生PHP函数和常量:

  • 定义
  • stru_替换
  • 肮脏的
  • \uuuuuuuuuuuuu文件
以下是我们使用这些函数的原因:

  • 我们使用define的原因是允许文档根保持在全局范围内
  • str_replace
    的原因是将斜杠更改为跨平台兼容
  • 之所以使用
    dirname
    ,是为了帮助确定根视图文件的相对路径
  • \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
我们可以对PHP5使用
\uuuuuu DIR\uuuuuu
,但是
\uuuuuu FILE\uuuuuuu
更好,因为它支持以前版本的windows

完全合并后,您将拥有视图文件的有效相对路径

define("ROOT_PATH",str_repalce("\\","/",dirname(__FILE__)));
这将生成到索引目录的完美相对路径,而不带尾随斜杠,然后您应该像这样包含文件:

require_once ROOT_PATH . "/system/classes/some.class.php";

在windows中,
/
\
都是有效的,而对于其他操作系统,它们只是
/
,因此通常您应该始终使用
/
作为目录分隔符来构建应用程序。

在头文件中设置define变量。然后在需要时使用该定义变量 像


您可以定义$\u SERVER['DOCUMENT\u ROOT']来获取文档根路径。然后给出项目名称和该文件的路径。

在头文件中设置define变量。然后在需要时使用该定义变量 像


您可以定义$\u SERVER['DOCUMENT\u ROOT']来获取文档根路径。然后给出您的项目名称和该文件的路径。

使用单个入口点(例如,index.php始终是第一个加载的脚本),您的最佳选择确实是使用包含路径,并通过查找当前文件所在的目录来确定路径。这意味着您可以包含index.php文件中的相对文件,而无需使用常量。另一个好处是,当您移动所有脚本时,include_路径将设置为它的新位置。这是我要做的

<?php
set_include_path(
    dirname( __FILE__ ) . DIRECTORY_SEPARATOR . get_include_path( )
);
?>

现在,如果您没有单一的入口点(例如,直接请求contact.php),那么最好使用配置文件,它将执行与上面相同的操作:更改include_路径。这样做的缺点是您必须在每个文件中都包含该配置文件,但好处是您可以移动这些文件,而无需更改任何内容。只需将上述代码放在config.php中,并将其包含在每个公开访问的文件中

还有第三种方法,这是我通常用于库文件的方法,因为您无法确定它是否会被使用,也无法确定它所在的目录。使用相对绝对的文件包含。我知道这听起来很有趣,但我想说的是,如果你包含这样的文件,你永远不会有问题:

<?php
require_once realpath( dirname( __FILE__ ) )  . '/exception.php';

使用单个入口点(例如index.php始终是第一个加载的脚本),您最好使用include路径,并通过查找当前文件所在的目录来确定路径。这意味着您可以包含index.php文件中的相对文件,而无需使用常量。奥特