я использовал:
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
?
Файл должен находиться внутри include_path
PHP. Поэтому вы должны либо установить каталог файла в include_path
внутри php.ini, либо сделать это в .htaccess с помощью инструкции php_value
.
php_value include_path ".:/path/to/file_directory" php_value auto_prepend_file "file.php"
Если вы используете вышеуказанный метод в .htaccess, обязательно скопируйте include_path
из php.ini и добавьте :/path_to/file_directory
чтобы не потерять уже необходимые.
Кроме того, просто добавьте :/path/to/file_directory
в include_path
непосредственно в php.ini
Если вы не можете изменить include_path, вы можете попробовать указать относительный путь к auto_prepend_file
. Это должно работать, поскольку отправленный путь файла обрабатывается одинаково, как если бы он вызывался с require()
:
php_value auto_prepend_file "./file.php"
В вашем .htaccess
php_value auto_prepend_file /auto_prepend_file.php php_value auto_append_file /auto_append_file.php
Далее создайте 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.
Я также хотел бы добавить, что если вы не знаете жестких относительных путей сервера (как и для общего хостинга и / или PaaS, которые динамически генерируют пути при перезагрузке / развертывании), вы можете сделать это:
php_value include_path ./:../:../../:../../../:../../../../ php_value auto_prepend_file "prepend.php"
По сути, это псевдо-динамический метод / хак / обходной путь для достижения относительного отношения .htaccess DOCUMENT_ROOT (что НЕ возможно в Apache) следующим образом:
php_value include_path "%{DOCUMENT_ROOT}/"
Для обеспечения безопасности в prepend.php тогда можно повторно объявить путь include следующим образом (к любым подходящим путям, подходящим для приложения):
ini_set('open_basedir',$_SERVER['DOCUMENT_ROOT'].'/':<etc.>);
Может также выглядеть следующим образом, если последние несколько каталогов предсказуемы:
php_value include_path ../../../path/to/www/ php_value auto_prepend_file "prepend.php"