设置PHP包含每个站点的路径?

时间:2008-08-23 21:39:55

标签: php include

我可以在php.ini

中设置PHP包含路径
include_path = /path/to/site/includes/

但其他网站受到影响,这是不好的。

我可以在每个文件的开头设置PHP include:

$path = '/path/to/site/includes/';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);

但这似乎是不好的做法,并使事情变得混乱。

所以我可以将其包含在内,然后将其包含在每个文件中:

include 'includes/config.php';

include '../includes/config.php';

这就是我现在正在做的事情,但config.php的包含路径会根据包含的内容而改变。

有更好的方法吗?这有关系吗?

7 个答案:

答案 0 :(得分:16)

如果您使用apache作为网络服务器,则可以使用 .htaccess 文件覆盖(如果允许)设置。有关详细信息,请参阅the PHP manual

基本上,您在网站根目录中放置了一个名为 .htaccess 的文件,其中包含一些PHP ini值。如果您将Apache配置为允许覆盖,则此站点将使用PHP配置中的所有值,+您在 .htaccess 文件中指定的值。

  

只能与PHP_INI_ALLPHP_INI_PERDIR类型指令一起使用

如我链接的页面中所述。如果单击查看完整列表,则会看到包含路径是PHP_INI_ALL指令。

答案 1 :(得分:7)

Erik Van Brakel给了恕我直言,这是最好的答案之一。

更多,如果您正在使用Apache&虚拟主机,您可以直接在其中设置。使用此方法,您不必记住在.htaccess中保留php_admin命令。

答案 2 :(得分:4)

如果您的设置使用 PHP 作为 CGI ,则在网站 root 中使用 php.ini 文件(共享主机上最常见的情况),其语法与服务器范围 php.ini 相同;如果您将PHP作为Apache模块,请将其放入.htaccess(如果不确定,请执行phpinfo()):

php_value include_path "wherever"

请注意,每个文件夹php.ini does不会影响子文件夹

答案 3 :(得分:3)

为什么你认为追加包含路径是不好的做法?

接近根脚本顶部的代码不应该那么糟糕......

$path = '/path/to/site/includes/';
set_include_path($path . PATH_SEPARATOR . get_include_path());

恕我直言,其主要优势在于它的便携性和兼容性不仅适用于Apache

编辑:我看到了这种方法的缺点:性能影响小。见http://www.geeksengine.com/article/php-include-path.html

答案 4 :(得分:1)

根据主机的设置方式,可能会允许您使用额外的配置指令在主目录的根目录中放置php.ini文件。

答案 5 :(得分:1)

您的应用程序应该有一个用PHP编写的配置文件。然后将相关页面包含在程序的每个页面中。该配置文件将包含一个变量,用于包含目录,模板目录,图像目录等的路径。

答案 6 :(得分:0)

您也可以在php.ini文件中设置include_path。我是一个perl人,所以我希望能够加载包含并让include做正确的事情。我将所有包含在特定目录中,并添加到include_path。我可以做像

这样的事情
require_once "ClassName.php";

我不需要担心文件的相对路径或位置。

我也写了自己的CustomRequire来做像

这样的事情
function CustomRequire ($file) {
    if(defined('MYINCLUDEPATH')) {
        require_once MYINCLUDEPATH . "/$file";
    } else {
        require_once $file;
    }
}

这样我就可以改变以后的做法。当然,您仍然需要找到一种方法来包含您的包含代码:)