Обработка файлов по http-серверу

370
Mulligan

Как я понимаю, когда сервер (например, 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- введите ответ?

0
Я откатил ваши изменения, пожалуйста, не делайте этого. Если вы получаете неправильные ответы, * улучшите * свой вопрос и его название. Arjan 7 лет назад 0
Обратите внимание, что этот сайт предназначен в основном для конкретных проблем, которые требуют решения. Вроде как «Я пытался установить PHP на свой Apache, но он не работает!». Все, что я вижу в этом вопросе, довольно «философское». Это также совершенно специфично для Apache. Daniel B 7 лет назад 0

1 ответ на вопрос

3
Seth
  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-вывод.
Извините, но ваш ответ, если бесполезно из меня. Это не отвечает ни на один из моих вопросов. Более того, это приносит мне еще больше вопросов и путаницы ;-( Можете ли вы быть таким милым и попытаться четко ответить на все мои вопросы? Mulligan 7 лет назад 0
Можете ли вы быть таким милым и ответить на мой последний комментарий? Mulligan 7 лет назад 0
@Mulligan, не могли бы вы сказать мне, если этот лучше, или скажите, какие у вас проблемы с этим? Seth 7 лет назад 0