【发布时间】:2010-10-05 12:47:13
【问题描述】:
我必须处理复杂的目录层次结构,并且我面临着 PHP 包含路径的常见问题。
我在网上搜索过,但没有找到适合我需要的东西。
例如,我使用了一个永不失败的简单目录层次结构:站点根目录中没有 php 脚本,只有一层子目录,所有 php 脚本都在这个子目录中。为了包含一个 php 文件,我只是使用相对路径,总是以 '../' 开头,就像在这个例子中一样:
include( '../my_subdirectory/my_script.php' ) ;
这样,我就可以确定找到我想要的文件了……
但是有一些缺点:
- 我不能有超过一级的子目录(原因:当一个文件包含一个包含另一个文件的文件时,用于包含第三个文件的路径不是相对于第二个文件文件的路径,而是相对于第一个文件的路径)。
- 来自 C++ 背景(使用手工制作的 makefile),我一直认为这是一种肮脏的做法
所以我想要一种直接从 站点根目录 包含文件的方法(不是 $_SERVER['DOCUMENT_ROOT'] 因为我可能将独立网站放入此 document_root 的子目录)。
我希望它是:
- 仅集中在一个文件中
- 无需任何更改即可从一台服务器移植到另一台服务器(如果可能)
- 保持 php 的 include 简洁优雅,没有复杂的字符串 concat,应该这样工作:"include('directory_a/directory_b/my_php_script.php')"
使用包含以下内容的 .htaccess:
php_value include_path "/var/www/my_website/"
...除了路径被硬编码到 .htaccess 中之外,做得很好,由于某种原因很烦人:在我的情况下,我有网站的 prod、dev 和测试版本,并且 .htaccess 是版本化的(它包含许多其他的东西)。如果可能的话,我想要一个在任何地方都可以使用的 .htaccess。将 include_path 设置为此当前 .htaccess 的路径的东西会很好。
那么...在 PHP 中处理 include() 和复杂的目录层次结构的最佳实践是什么?
【问题讨论】:
-
您包括哪些类型的文件?也许有一种更好的方法可以做到这一点,或者使用集中的自定义
include_file()函数或自动加载