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

问题描述 投票:9回答:3

我用了:

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文件的文件?

php .htaccess
3个回答
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

Update

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

php_value auto_prepend_file "./file.php"

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_prep end_file.PHP

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

现在它应该在本地和实时服务器上工作,无论物理路径或网站提供每个网站使用相同的文件名append.php和prepend.php。


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"
© www.soinside.com 2019 - 2024. All rights reserved.