是否在每个站点上设置PHP包含路径?
我可以在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