|
Поддержка метода PUT
PHP поддерживает HTTP-метод PUT, используемый такими клиентами, как Netscape Composer
и W3C Amaya. PUT-запросы намного проще, чем загрузка файлов и выглядят примерно так:
PUT /path/filename.htm HTTP/1.1 |
Нормально это должно означать, что удалённый клиент хотел бы сохранить
содержимое /path/filename.htm в вашем web-дереве.
Для Apache или PHP, очевидно, не очень-то здорово разрешить любому
автоматически перезаписывать любые файлы в вашем web-дереве. Поэтому, чтобы
обрабатывать такие запросы, вы должны сначала указать вашему web-серверу, что
вы хотите, чтобы определённый PHP-скрипт обрабатывал запрос. В Apache вы делаете это директивой
Script. Она может быть размещена почти в любом месте файла конфигурации вашего Apache.
Обычно это в блоке <Directory> или, возможно, в блоке <Virtualhost>.
Строка типа этой выполняет трюк:
Это указывает серверу Apache, что нужно отправить все PUT-запросы по URI,
которые совпадают с контекстом, в котором вы поместили эту строку в скрипт put.htm.
Это предполагает, разумеется, что PHP включён для расширений .htm и что PHP активен.
В файле put.htm вы можете тогда записать что-нибудь такое:
<?php copy($PHP_UPLOADED_FILE_NAME,$DOCUMENT_ROOT.$REQUEST_URI); ?> |
Это скопирует файл в место, запрошенное удалённым клиентом. Вы, возможно,
захотите выполнить какую-нибудь проверку и/или аутентифицировать
пользователя, прежде чем выполнить копирование файла. Трюк состоит в том,
что, когда PHP видит запрос методом PUT, он сохраняет загруженный файл во
временной директории, как и при работе методом
POST.
Когда запрос завершается, этот временный файл удаляется. Поэтому ваш РНР-скрипт обработки
PUT должен скопировать файл куда-нибудь. Имя этого временного файла
находится в переменной $PHP_PUT_FILENAME, а предполагаемое имя файла
назначения можно найти в $REQUEST_URI (может называться иначе на не-Apache web-серверах).
Это имя файла, специфицированное удалённым клиентом.
Вам не нужно прослушивать этот клиент. Вы можете, например, скопировать все загруженные файлы в специальную директорию.
| |