如何在 .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.ini
或 httpd.conf
或其他任何内容没有更改)。当然,对于每个 Web 请求,您将“遭受”每个目录的额外读取操作,但那又如何呢?一个中等大小的 PHP 应用程序无论如何都会在每个请求中包含几十个或更多 PHP,除非它通过 ScriptJoiner 之类的东西部署到 prod。
此规则不是追加而是删除所有之前定义的包含路径。但是如何使用 .htaccess 附加新路径?
好问题。我不知道。【参考方案2】:
如果您无法编辑 php.ini
文件本身,您可以添加
set_include_path(get_include_path() . PATH_SEPARATOR . $path_to_add);
在您的 include
声明之前。
但是,如果您发现自己遇到了 include
或 require
问题,则可能是代码异味。最好的解决方案是具有良好__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