如何在 .htaccess 中将路径附加到 PHP include_path

Posted

技术标签:

【中文标题】如何在 .htaccess 中将路径附加到 PHP include_path【英文标题】:How to append a path to PHP's include_path in .htaccess 【发布时间】:2010-11-11 05:39:18 【问题描述】:

目前在我的网站上,我使用的语句如下:

include 'head.php';
include '../head.php';
include '../../head.php';

取决于我有多少嵌套文件夹。我确信有更好的方法来做到这一点。

我确信.htaccess 是解决方案,但我不确定如何实施它。如果我插入:

php_value include_path "public/html/root"

...我失去了其余的路径(/usr/lib/php 等)。我天真地尝试过:

php_value include_path $include_path . "(path)"

但这当然没有用。如何使用 .htaccess 在此列表中添加或附加单个路径?

【问题讨论】:

【参考方案1】:

在子子目录中创建一个包含内容的文件.htaccess

php_value include_path '../../includes'

或任何适合该目录的include_path

优点:

    没有具有不同深度的多个包含的丑陋 hack。只需include 'head.php'。 不依赖于编辑php.ini。 在包含之前无需使用set_include_path()。 不依赖于包含像include INCLUDE_PATH . 'head.php' 这样的常量。

支付价格:

您在每个子目录中乱扔文件.htaccess

【讨论】:

我喜欢它,并欣赏这篇文章清楚地表达了收益和成本。我不喜欢乱扔垃圾,但我正在这样做。谢谢! :) 我非常喜欢这种方法,因为 a) 它将我的应用程序配置与我的应用程序逻辑分离(没有 set_include_path() 调用),但我的应用程序配置仍保留在我的应用程序中,并且 b) 它分离了我的应用程序配置从我的应用程序环境(php.inihttpd.conf 或其他任何内容没有更改)。当然,对于每个 Web 请求,您将“遭受”每个目录的额外读取操作,但那又如何呢?一个中等大小的 PHP 应用程序无论如何都会在每个请求中包含几十个或更多 PHP,除非它通过 ScriptJoiner 之类的东西部署到 prod。 此规则不是追加而是删除所有之前定义的包含路径。但是如何使用 .htaccess 附加新路径? 好问题。我不知道。【参考方案2】:

如果您无法编辑 php.ini 文件本身,您可以添加

set_include_path(get_include_path() . PATH_SEPARATOR . $path_to_add);

在您的 include 声明之前。

但是,如果您发现自己遇到了 includerequire 问题,则可能是代码异味。最好的解决方案是具有良好__autoload 功能的面向对象设计。

【讨论】:

不幸的是,我现在在一个有很多其他站点的服务器上......我不想把 path_to_add 放在每个文件中,因为它有点像 /home/12345678/public_html ...我只想以最简单的方式将“public_html”添加到包含路径中。在网站转移时进行搜索和替换似乎很笨拙。 你能不能用php_info()get_include_path()查找当前的phpinclude_path然后加上php_value include_path "public/html/root:/first/old/path:/second/old/路径”到您的.htaccess。你只需要做一次。 没错,但我希望有一个更优雅的解决方案。希望他们不会很快重新配置服务器。无论如何感谢您的帮助,这可能是它所能得到的最好的。

以上是关于如何在 .htaccess 中将路径附加到 PHP include_path的主要内容,如果未能解决你的问题,请参考以下文章

apache_conf 在.htaccess中将PHP版本升级到7.0

.htaccess 中的 301 重定向将旧文件路径/名称附加到新 url

如何通过 .htaccess 设置 PHP 包含路径?

在 Yii2 .htaccess 中将 http 重定向到 https

.htaccess 搞砸了 .php 扩展名?

如何在 PHP 中将单个附加参数传递给 array_map 回调?