Как я понимаю, когда сервер (например, Apache) получает запрос, он ищет расширение имени файла, чтобы найти связанный MIME-тип. Затем он ищет обработчик, который обрабатывает этот тип (я утверждаю, что он основан на добавлении поддержки PHP в Apache). И вот мои вопросы:

  1. Является ли приведенное выше утверждение правильным?
  2. Если так, когда нет никакого обработчика для данного mime-типа, означает ли это поведение по умолчанию - то есть просто отправить файл клиенту?
  3. Если даже нет явного расширения - определена ассоциация mime-типа (например, .html), то снова действие по умолчанию - просто отправить файл клиенту?
  4. Согласно некоторым источникам , чтобы добавить поддержку PHP для Apache мы должны использовать addType директиву:AddType application/x-httpd-php .php в то время как другие говорят , что использовать addHandler директива:AddHandler application/x-httpd-php .php на мой взгляд , является единственный правильный, потому что addType должен использоваться только для статических документов. Так почему же версия addType по-прежнему верна?
  5. Я нашел где-то такие строки:

AddType text/html .php .phps
Приложение AddHandler /x-httpd-php .php
Приложение AddHandler /x-httpd-php-source .phps

Означает ли это, что директива AddType будет использоваться, если сервер не может найти обработчик для mime-типа application/x-httpd-php, а действие будет просто отправить исходный файл .php клиенту с text/html mime- введите ответ?

1 ответ1

3
  1. И да и нет. Всегда есть тип и обработчик. Если вы посмотрите на документацию для обработчиков, там говорится:

    Как правило, файлы имеют неявные обработчики, основанные на типе файла. Обычно все файлы просто обслуживаются сервером, но некоторые типы файлов обрабатываются отдельно.

Таким образом, вполне вероятно, что вы можете настроить обработчики отдельно от типа. Как и в моем первоначальном ответе, похоже, что это то, что сейчас предлагает файл PHP INSTALL.

  1. Если вы посмотрите на приведенную выше ссылку, то будет вызван обработчик по умолчанию, который, вероятно, просто отправляет файл, так как он наиболее часто используется для веб-сервера.

  2. Я не понимаю, что вы подразумеваете под этим. Если файл имеет расширение, но это расширение не имеет ассоциированного типа mime, используется тип mime по умолчанию. Если вы посмотрите на пост Как я могу сделать все нераспознанные типы файлов двоичными в Apache2? тип MIME по умолчанию должен быть text/plain согласно документации о модуле ядра.

  3. / Оригинальный ответ: Если вы ищете источник о том, как добавить поддержку PHP в Apache, почему бы просто не обратиться к файлу INSTALL, включенному в загрузку PHP?

В соответствии с этим для Apache 2.x с PHP 5.6.25 вы бы использовали SetHandler .

Теперь, если вы посмотрите на свой пример:

AddType text/html .php .phps
Приложение AddHandler /x-httpd-php .php
Приложение AddHandler /x-httpd-php-source .phps

Вы правы, что в соответствии с документацией Apache AddType он должен использоваться для статических файлов. Использование AddHandler с другой стороны может представлять угрозу безопасности. По крайней мере, это не рекомендуется для файла INSTALL из PHP, и в нем особо упоминается, что чистый AddType может привести к выполнению файла, который на самом деле не является PHP-файлом. Из пункта 8 файла УСТАНОВКА для Apache 2.x:

Скажите Apache для анализа определенных расширений как PHP. Например, давайте сделаем так, чтобы Apache анализировал файлы .php как PHP. Вместо того, чтобы использовать только директиву Apache AddType, мы хотим избежать выполнения потенциально опасных загрузок и создания файлов, таких как exploit.php.jpg, как PHP. Используя этот пример, вы можете иметь любое расширение (я), анализирующее как PHP, просто добавляя их. Мы добавим .php для демонстрации.
<FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch>

Если вы посмотрите на документацию по AddHandler / SetHandler то станет ясно, что AddHandler и SetHandler будут служить немного другим целям, и что предложение из файла INSTALL будет "побуждать" вас отправлять свои собственные заголовки, поскольку внутренний основной обработчик для файлов php будет менять.

  1. Нет, это означает, что типом mime по умолчанию, отправляемым клиенту, будет text/html, поскольку весьма вероятно, что php-файлы генерируют html-вывод.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .