【问题标题】:Can I put a .user.ini file outside the document root in PHP?我可以在 PHP 的文档根目录之外放置一个 .user.ini 文件吗?
【发布时间】:2015-07-15 20:50:39
【问题描述】:

我有一个我创建的 PHP Web 应用程序,它组织在 src、vendor 和 web 等文件夹中,其中“web”被设置为我服务器上的文档根目录。这样做的原因是为了防止访问不在“网络”中的任何其他文件。

我正在使用 .user.ini 文件来简单地修改一些全局设置,但是当我将它放置在文档根目录(Web 的父级)的上一级时,配置集根本没有被触发。当我将它放在“网络”中时,一切正常。

这是什么原因? 有什么方法可以让 .user.ini 按照我的建议工作吗?

出于安全考虑,我宁愿这样做,而不是拒绝使用 .htaccess 在 web 中进行访问。

我正在使用 Fast CGI 作为我的 PHP 处理程序,并且不想更改它。

【问题讨论】:

    标签: php .htaccess security ini


    【解决方案1】:

    简短的回答,似乎您不能将文件放在指定目录之外。

    根据http://php.net/manual/en/configuration.file.per-user.php

    除了主 php.ini 文件外,PHP 还会扫描每个文件中的 INI 文件 目录,从请求的 PHP 文件的目录开始,以及 一直到当前文档根目录(如在 $_SERVER['DOCUMENT_ROOT'])。如果 PHP 文件不在 文档根目录,只扫描其目录。

    网络服务器不应提供点文件

    但是,您的网络服务器根本不应该提供 /^./ 文件。如果您的网络服务器阻止访问以点开头的文件,那么您就没有泄露该文件的风险。

    在代码中设置配置

    另一种选择是在源代码中而不是在 .user.ini 文件中设置 ini 设置。

    http://php.net/manual/en/ini.list.php 列出了您可以通过ini_set() 设置的所有 ini 设置。特别是标记为 ** PHP_INI_USER** 的选项。

    【讨论】:

    • 我正在使用 .user.ini 文件作为“auto_prepend_file”选项。比我包含一个配置文件,其中包含一些设置、内容和作曲家的自动加载供应商。我可能会选择以点开头的阻塞文件。谢谢。
    【解决方案2】:

    我这样做是为了我的数据库用户名、密码和数据库名称。我包含这样的ini文件:

    $parsed_ini_variables_array = parse_ini_file('/home/username/ini_folder/file_name.ini');
    

    然后,在ini文件里面:

    ;Comment
    [section name]
    key=value
    key2=value2
    

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-06-26
      • 2017-09-28
      • 1970-01-01
      • 2014-02-19
      • 2021-11-06
      • 2022-12-04
      • 2011-03-19
      • 1970-01-01
      • 2014-12-18
      相关资源
      最近更新 更多