是否在每个站点上设置PHP包含路径?

时间:2020-03-05 18:42:29  来源:igfitidea点击:

我可以在php.ini中设置PHP包含路径:

include_path = /path/to/site/includes/

但是随后其他网站也受到影响,因此没有好处。

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

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

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

因此,我可以对其进行包含,然后将其包含到每个文件中:

include 'includes/config.php';

或者

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

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

有没有更好的办法?有关系吗?

解决方案

回答

如果我们将apache用作网络服务器,则可以使用.htaccess文件覆盖(如果允许)设置。有关详细信息,请参见PHP手册。

基本上,我们在网站根目录中放置了一个名为.htaccess的文件,其中包含一些PHPini值。如果我们将Apache配置为允许替代,则此站点将使用PHP配置中的所有值,以及我们在.htaccess文件中指定的值。

Can be used only with PHP_INI_ALL and PHP_INI_PERDIR type directives

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

回答

我们也可以在php.ini文件中设置include_path。我是一个perl家伙,所以我希望能够加载include并让include正确地做。我的所有包含项都位于一个特定的目录中,该目录已添加到" include_path"中。我可以做类似的事情

require_once "ClassName.php";

我不必担心文件的相对路径或者位置。

我还编写了自己的CustomRequire来执行类似

function CustomRequire ($file) {
    if(defined('MYINCLUDEPATH')) {
        require_once MYINCLUDEPATH . "/$file";
    } else {
        require_once $file;
    }
}

这样一来,我可以在以后更改我的收录方式。当然,我们仍然需要找到一种方法来包含自己的包含代码:)

回答

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

回答

埃里克·范·布拉克尔(Erik Van Brakel)给恕我直言,这是最好的答案之一。

另外,如果我们使用的是Apache和虚拟主机,则可以直接在其中包含主机。使用此方法,我们将不必记住将php_admin命令保留在.htaccess中。

回答

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

php_value include_path "wherever"

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

回答

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

回答

我们为什么认为追加包含路径是错误的做法?

根脚本顶部附近的这段代码应该不会那么糟糕...

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

恕我直言,主要优点是它具有可移植性,不仅与Apache兼容

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