我用过:
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
文件的文件?
答案 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"