【问题标题】:php include path changing based on filephp包含基于文件更改的路径
【发布时间】:2009-11-07 20:47:51
【问题描述】:

我是 php 的新手,我正在尝试使用我网站中的一些包含,但不知道如何使它们全部正常工作。 我的网站结构如下

/ROOT/
   Config.php
   Index.php
   /ADMINISTRATION/
      Index.php
      mustInclude.php
      /USERS/
         Index.php

如果“mustInclude.php”包含“Config.php”并且Index.php包含“mustInclude.php”一切正常,但只要我尝试将“mustInclude.php”包含到/USERS/Index.php中中断是因为“mustInclude.php”使用像 include '../config.php'; 这样的路径,并且 /USERS/Index.php 的相对路径与 /ADMINISTRATION/Index.php 的相对路径不同

我不太确定在这里做什么。

现在在我的本地机器上。使用$_SERVER['DOCUMENT_ROOT'] 会出错,因为它输出的是我的文件结构(/Users/James/Sites)而不是我的网络结构(http://localhost/mysite

帮助?

【问题讨论】:

    标签: php include


    【解决方案1】:

    IMO 在应用程序目录结构中包含来自任何位置的文件的最佳方法是将应用程序的根文件夹添加到 PHP 包含路径:

    <?php
    set_include_path(get_include_path().PATH_SEPARATOR."/Users/James/Sites/app_name");
    

    然后,只需使用相对于应用程序根文件夹的路径来包含文件,例如:

    <?php
    require_once('ADMINISTRATION/USERS/Index.php');
    

    【讨论】:

    • 我不确定这是否是最好的方式。它可能导致潜在的歧义,因为像“ADMINISTRATION/USERS/Index.php”这样的名称不是完全限定的。你可以有 '/a/x.php' 和 '/b/x.php' - 将 '/a/' 和 '/b/' 放到包含路径中并猜测 x "include 'x.php'" 指的是哪个到...
    • 您能再解释一下吗?我需要从哪里运行此代码?每个文件都有包含?一旦进入我的 index.php?
    • Pselus:每次运行脚本都需要这样做,因为它不会永久更改未来脚本的包含路径。
    • Joonas:这实际上不是问题,除非您已经在 php.ini 的 include_path 变量中设置了其他应用程序。例如,如果 PEAR 在包含路径上,那么您只需避免将目录命名为与 PEAR 模块相同的名称,这无论如何都是愚蠢的。
    • 诚然,这可能不是一个大问题,但是有些 PEAR 包的名称非常通用,例如“Cache”、“File”和“Log”。我宁愿不必记住我不应该为我的目录命名的内容。
    【解决方案2】:

    我建议定义某种“全局基本路径”并从那里推导出其他路径。喜欢,

    define('BASE_PATH', '/home/me/');
    ...
    include(BASE_PATH . 'Config.php');
    include(BASE_PATH . 'subdirectory/other.php');
    

    等等。这种(半)绝对路径不如包含大量../s 的相对路径脆弱。 (并不是说相对路径有什么根本上的错误,但它们更难正确处理并且更容易崩溃。如果/a 包括b/cb/c 包括../d/e,那么相对于/b/ 或相对于/,还是取决于我们是从/a 开始还是直接调用b/c?我什至不知道。最好使用绝对路径,它们简单明了:-)。

    【讨论】:

      【解决方案3】:

      不要使用 '../config.php' 尝试使用

      dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'config.php'
      

      这样您将始终知道上一级是当前文件的上一级。

      【讨论】:

        【解决方案4】:

        你可以使用__FILE__

        【讨论】:

        • 有人愿意解释为什么这张海报被否决了吗?我真的很想了解 php 的优点和缺点。
        • 我猜它被否决是因为它的简洁性。使用“文件”?它是什么?如何使用它?从本质上讲,这个答案(可能)与上述 Aprikot 的答案相同,但描述得非常糟糕。
        • 很抱歉我没有时间写一篇完整的帖子,但它是在 Aprikot 的答案之前发布的,这是正确的答案。
        猜你喜欢
        • 1970-01-01
        • 2013-10-10
        • 1970-01-01
        • 1970-01-01
        • 2012-06-27
        • 2011-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多