Автоматический предварительный php-файл с использованием htaccess относительно файла 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 ?

Файл должен находиться внутри 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"