PHP & .htaccess:为多个目录添加文件
Posted
技术标签:
【中文标题】PHP & .htaccess:为多个目录添加文件【英文标题】:PHP & .htaccess: prepend file for Multiple Directories 【发布时间】:2017-08-12 03:06:04 【问题描述】:我想使用.htaccess
自动添加 php 脚本。我知道有一个指令可以做到这一点。我在 web 根目录的 .htaccess
文件中有以下内容:
php_value auto_prepend_file "./init.php"
init.php
文件的内容包括:
<?php
$_SERVER['WEB_ROOT']=
str_replace($_SERVER['SCRIPT_NAME'],'',
$_SERVER['SCRIPT_FILENAME']);
这会计算 web 根的路径并将其放入超全局中。这是我能想到的唯一实用的方法来跟踪诸如包含之类的 Web 根目录。
问题在于这仅适用于 Web 根目录中的 PHP 脚本。如果脚本本身位于子目录中,则会出现错误,因为 init.php
文件不在当前目录中。我不想指定init.php
的绝对路径,因为目前的电流有点不稳定。
我能想到 2 个解决方案:
在使用相对路径 (../init.php
) 指向父目录的子目录中包含一个 .htaccess
文件
在所有子目录中包含一个init.php
文件
是否有另一种方法可以指定适用于所有子目录的前置文件?
如果做不到这一点,是否有另一种方法可以将 web 根放入超全局而不用这种废话?
【问题讨论】:
【参考方案1】:定义相对于自动前置文件 itsef 的路径。
init.php
define('WEBROOT', __DIR__);
然后,您应该能够在应用程序中的任何位置使用WEBROOT
。或者,如果您想坚持当前的方法:
$_SERVER['WEB_ROOT'] = __DIR__;
只是好奇。为什么不直接使用$_SERVER['DOCUMENT_ROOT']
。这不是指你的网络根吗?
【讨论】:
感谢您的回答。但是,它对我不起作用。我喜欢你使用__DIR__
的方法,这比我的要好,但问题首先在于init.php
文件。 .htaccess
文件位于 web 根目录中,init.php
文件也是如此,但如果我从子目录加载 init.php
文件位于错误位置。
恰如其分$_SERVER['DOCUMENT_ROOT']
,这似乎是主文档根目录。我有许多虚拟主机,这似乎没有引用它们。
@Manngo,我有点困惑。 __DIR__
返回当前文件的目录,因此如果您使用与auto_prepend_file
相同的init.php
,那么无论您实际运行哪个脚本,init.php
及其目录都不会改变。我错过了什么?
出于测试目的,我在init.php
中有print __DIR__;
。两者都在 web 根目录中。如果我从子目录执行 PHP 文件 (articles.php
),我会得到 Fatal error: Unknown: Failed opening required 'init.php' (include_path='.:/usr/share/pear:/usr/share/php') in Unknown on line 0
。我认为这是因为.htaccess
指示articles.php
文件将init.php
从相同的子目录中添加,该子目录不存在——仅在父根目录中。问题不在于init.php
文件本身,而在于从子目录中引用它。
@Manngo 哦,我明白了。不要在.htaccess
文件中设置auto_prepend_file
。改为在php.ini
中执行一次。记得重启服务器。以上是关于PHP & .htaccess:为多个目录添加文件的主要内容,如果未能解决你的问题,请参考以下文章