PHP «auto_prepend_file» вызывает HTTP 200 ответов для каждого файла, включая несуществующие файлы - PullRequest
0 голосов
/ 28 апреля 2020

Мои настройки

У меня есть веб-сайт, размещенный на SiteGround с файлом php .ini , который находится в моей сети root и содержит только следующее:

auto_prepend_file = "${DOCUMENT_ROOT}/config.php"

Файл config. php содержит некоторые глобальные / stati c define () переменные, которые будут использоваться во всем моем решении, на которые я хочу ссылаться / загружать на каждой PHP странице, к которой обращаются посетители. Я хочу, чтобы этот файл не только работал с текущим каталогом, но и рекурсивно под ним. Чтобы добиться такого рекурсивного поведения, SiteGround отредактировал мой .htaccess файл в Интернете root, чтобы в нем была следующая строка:

SetEnv PHPRC /home/user/public_html/example.com/php.ini

Эти два файла работают вместе (php .ini и .htaccess ) достигают желаемого поведения для PHP файлов и страниц, загружаемых через браузер. Например, когда я go в /index.php (root индекс) или /some/folder/lower/index.php (индекс подпапки) файл конфигурации. php добавляется соответствующим образом и я могу получить доступ к значениям, которые я установил в этом файле, с помощью define ().

Моя проблема

Проблема, с которой я сталкиваюсь, заключается в том, что предварительно добавленный файл, по-видимому, «прикрепляется» к каждому файл в моих каталогах, а не просто PHP файлы, как я ожидал. Я впервые заметил это, когда выходные данные отладки моей страницы отправляли 3 сообщения на мою консоль, когда страница была загружена только один раз. После дальнейшего расследования выяснилось, что несуществующие файлы Favicon и CSS были источником ошибочных сообщений.

Эти пропущенные файлы должны иметь , отвечающие с 404 HTTP-статусом, но вместо этого они вернулись как 200 (предположительно, поскольку к нему был добавлен конфиг. php), и что на его месте было любопытно, что индекс моего веб root. php содержимого файла (независимо от глубины папки). Эти несуществующие файлы .ico и. css выглядят так, как будто к ним добавляется конфигурация. php, когда их не должно быть, а затем - по любой причине - включая индекс моей сети root. php содержание. Вместо этого коды состояния HTTP должны возвращаться клиенту как традиционные ошибки 404, а к , а не применяется конфигурация. php. Я так озадачен тем, в чем здесь проблема.

Мои вопросы

Я хочу знать следующее:

  1. Есть ли способ для в моем файле php .ini указать, что auto_prepend_file следует применять / выполнять / интерпретировать только для *. php файлов?

  2. это настройка сервера, которая скрыта от моего взгляда, что повлияет на это вообще? У меня еще нет настроенных обработчиков ErrorDocument.

  3. Может кто-нибудь объяснить или пролить свет на то, почему файл, отличный от PHP, будет иметь конфигурацию. php с добавлением к нему?

  4. Может кто-нибудь объяснить, почему для несуществующих файлов (это должны быть ответы HTTP 404) загружается индекс моей сети root. php контент?

...