PHP:将脚本移动到另一个目录会使其包含内容

时间:2011-01-17 08:49:18

标签: php include directory

无论当前目录结构中的电流位于何处,我如何始终包含其他源文件?

6 个答案:

答案 0 :(得分:1)

设置include_path;这样,您的包含将在当前脚本位置不变。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

现在,如果您没有单一的入口点(例如直接请求contact.php),您最好使用配置文件,这将与上面相同:更改include_path。这样做的缺点是你必须在每个文件中包含该配置文件,但好处是你可以移动文件而不改变任何东西。只需将上面的代码放在config.php中,并将其包含在公共平易近人的每个文件中。

还有第三种方法,那就是我一直用于库文件的方式,因为你无法确定它是否会被使用,而你无法确定它所在的目录。使用相对绝对的文件包含。我知道这听起来很有趣,但我想说的是,如果你包含这样的文件,你就不会遇到问题:

<?php
require_once realpath( dirname( __FILE__ ) )  . '/exception.php';
祝你好运!

答案 4 :(得分:-1)

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

在PHP和多平台应用程序工作多年后,我发现执行此操作的最佳方法是以下本机PHP函数和常量的组合:

  • 定义
  • str_replace函数
  • 目录名
  • __FILE__

这就是为什么我们使用这些功能:

  • 我们使用define的原因是允许文档根目录保持在全局范围内
  • str_replace的原因是将斜杠更改为跨平台兼容
  • dirname的原因是帮助提供根视图文件的相对路径
  • __FILE__的原因是发现dirname
  • 的视图文件

我们可以将__DIR__用于PHP5,但__FILE__更好,因为它支持以前版本的Windows。

完全组合后,您将拥有一个有效的视图文件相对路径。

define("ROOT_PATH",str_repalce("\\","/",dirname(__FILE__)));

这会产生索引目录的完美相对路径而不带斜杠,你应该像这样包含你的文件:

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

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

答案 5 :(得分:-1)

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

define('BASE_PATH', $_SERVER['DOCUMENT_ROOT'].'/project/modules/module.php');

您可以定义$ _SERVER ['DOCUMENT_ROOT']以获取文档根路径。然后提供您的项目名称和该文件的路径。