【问题标题】:Referring to the public root in PHP - best practices引用 PHP 中的公共根目录 - 最佳实践
【发布时间】:2010-06-08 16:06:40
【问题描述】:

我一直在使用 $_SERVER["DOCUMENT_ROOT"] 环境变量来引用我的应用程序中的公共根目录。现在我意识到这不是很可靠。我正在考虑一种方法,在我的 index.php 中基于魔法常数定义一个常数。类似的东西:

define("PUBILC", __DIR__."/");

不过我不确定。

你会推荐什么方法?

【问题讨论】:

    标签: php


    【解决方案1】:

    如果所有请求都通过您的 index.php,定义一个常量将是一个很好且经常使用的想法。我还看到使用(虚拟)主机配置或 .htaccess 定义环境变量的设置,但我认为它的透明度和可移植性较差。经常使用设置变量中的硬编码路径,但不像人们希望的那样“自动更改”。总而言之,我同意你的想法。

    【讨论】:

    • 非常感谢!如果可以的话,还有一个问题。您认为什么是指公共根的常量的准确而简短的名称?我不确定“公共”。
    • 是的,所有请求都通过我的 index.php。
    • YOURAPPNAME_ROOT 将是最适用的,并且与其他包中定义的另一个常量的变化最小。假设您的项目有一个相对独特的名称。
    • 安全性和可读性胜过短板,如果您不想一次又一次地输入,让您的编辑器自动完成。
    【解决方案2】:

    绝对不要在您的应用程序中散布$_SERVER['DOCUMENT_ROOT']。 Apache 可以配置为使用 VirtualDocumentRoot,这会将文档根目录设置为该目录,但不会更改可能导致站点损坏的 DOCUMENT_ROOT 环境变量。

    根据您的方法,我喜欢在我的应用顶部定义DOC_ROOT,并在需要引用文档根目录的任何地方使用它。

    【讨论】:

      【解决方案3】:

      在一个操作系统我的项目中,我使用以下几行(以及一些其他行)进行了配置:

      // set the root directory for the files
      define('ROOT_DIR', "/path/to/my/htdocs/project_name/");
      // set the root path for URLs
      define('ROOT_PATH', "http://".$_SERVER['HTTP_HOST']."/project_name/");
      

      在每个 php 文件中,我使用这一行包含这个 config.php:

      require_once($_SERVER['DOCUMENT_ROOT'].'/config_project_name.php');
      

      正如您所看到的,使用配置文件的前缀,您可以将它们全部放入您的根目录,并且您仍然足够灵活,可以在不同的 PC 或服务器上拥有相同的项目。

      【讨论】:

        【解决方案4】:

        你可以做类似的事情,但把它放在一些常见的包含文件中,该文件会包含在你的所有页面中。这适用于直接访问您网站上的页面而无需通过主索引页面的访问者。

        例如,如果您的doc_root/inc 文件夹中有utilities.php,并且它包含在您的所有网站页面中,它可能看起来像这样:

        <?php
        function GetDocumentRoot()
        {
            return dirname(dirname(__FILE__));
        }
        
        function WriteHeader()
        {
            //...
        }
        
        // more utility functions...
        ?>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-19
          • 2015-03-03
          • 1970-01-01
          • 2013-05-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多