相对于htaccess文件,使用htaccess自动预置PHP文件

时间:2012-01-28 13:06:17

标签: php .htaccess

我用过:

php_value auto_prepend_file "file.php"

位于.htaccess文件夹中的public_html

现在,当我运行public_html/sub/index.php时,我收到此错误:

Fatal error: Unknown: Failed opening required 'file.php'

如何使用auto_prepend_file标志包含相对于.htaccess文件的文件?

3 个答案:

答案 0 :(得分:11)

该文件必须位于PHP的include_path内。因此,您必须将文件的目录设置为php.ini中的include_path,或者使用php_value语句在.htaccess中进行。

php_value include_path ".:/path/to/file_directory"
php_value auto_prepend_file "file.php"

如果在.htaccess中使用上述方法,请务必从php.ini中复制include_path并添加:/path_to/file_directory,这样就不会丢失任何已经包含的内容。

或者,只需直接在php.ini

中将:/path/to/file_directory添加到include_path即可

更新

如果您无法修改include_path,则可以尝试指定auto_prepend_file的相对路径。这应该有效,因为发送的文件路径的处理方式与require()

一样
php_value auto_prepend_file "./file.php"

答案 1 :(得分:5)

在.htaccess中

php_value auto_prepend_file /auto_prepend_file.php
php_value auto_append_file /auto_append_file.php

接下来在root中创建2个文件

1)/auto_append_file.php

$appendFile = $_SERVER['DOCUMENT_ROOT'] . '/append.php';
require_once($appendFile);

2)/auto_prepend_file.php

$prependFile = $_SERVER['DOCUMENT_ROOT'] . '/prepend.php';
require_once($prependFile);

现在它应该可以在本地和实时服务器上运行,无论物理路径或网站如何,每个网站都使用相同的文件名append.php和prepend.php。

答案 2 :(得分:1)

我还想补充一点,如果您不了解硬相关服务器路径(如在重启/部署时动态生成路径的共享主机和/或PaaS),那么您可以这样做:

php_value include_path ./:../:../../:../../../:../../../../
php_value auto_prepend_file "prepend.php"

实质上,这是用于实现.htaccess相对DOCUMENT_ROOT包含的伪动态方法/ hack / workaround(在Apache中不可能),如下所示:

php_value include_path "%{DOCUMENT_ROOT}/"

为了安全起见,在prepend.php中,它可以重新/声明包含路径如下(适用于适合应用程序的任何适当路径):

ini_set('open_basedir',$_SERVER['DOCUMENT_ROOT'].'/':<etc.>);

如果最后几个目录是可预测的,也可能如下所示:

php_value include_path ../../../path/to/www/
php_value auto_prepend_file "prepend.php"