Поддержка метода PUT
Поддержка метода PUT была изменена при переходе от PHP 3 к PHP 4.
В PHP 4 вы должны использовать стандартный поток ввода для чтения
файла, передаваемого методом HTTP PUT.
Пример #1 Сохранение загруженного при помощи HTTP PUT файла в PHP 4
<?php
/* Данные PUT находятся в потоке stdin */
$putdata = fopen("php://stdin", "r");
/* Открываем файл для записи */
$fp = fopen("myputfile.ext", "w");
/* Читаем данные блоками размером в 1 KB и
записываем их в файл */
while ($data = fread($putdata, 1024))
fwrite($fp, $data);
/* Закрываем потоки */
fclose($fp);
fclose($putdata);
?>
Замечание:
Вся документация, приведенная ниже, касается исключительно PHP 3.
PHP поддерживает загрузку файлов методом HTTP PUT, который используется в клиентах
Netscape Composer и
W3C Amaya. Запрос PUT выглядит проще,
чем в случае обыкновенной загрузки файла на сервер:
Такой вызов означает, что удаленный клиент хотел бы сохранить
файл под именем /path/filename.html в дереве каталогов вашего веб-сервера.
Очевидно, что возможность клиента автоматически перезаписывать файлы вашего
веб-сервера при помощи Apache или PHP не является хорошим решением.
Поэтому для того, чтобы обрабатывать такие запросы, вам необходимо указать
веб-серверу PHP-скрипт, которому вы доверяете их обработку.
В веб-сервере Apache вы можете сделать это, используя директиву
Script. Она может находиться практически
в любом месте конфигурационного файла Apache. Как правило, эта директива
расположена внутри блока <Directory> или же внутри блока
<Virtualhost>. Сама запись выглядит следующим образом:
Это указывает веб-серверу Apache на необходимость перенаправлять по
указанному адресу все PUT-запросы, контекст которых совпадает с контекстом, в
которым вы разместили эту строку. Предполагается, что файлы с расширением .php
обрабатываются, как PHP-скрипты, и что сам PHP установлен и работает.
Внутри вашего файла put.php file вы можете поместить что-нибудь похожее на это:
Приведенный код скопирует файл в место, запрошенное клиентом. Возможно,
вы захотите выполнить какую-либо проверку и/или аутентифицировать
пользователя, прежде чем выполнять копирование. Трюк состоит в том, что
когда PHP видит PUT-запрос, он сохраняет полученный файл во временной
папке, как и при загрузке методом POST.
По окончании обработки запроса временный файл удаляется.
Поэтому ваш PHP-скрипт, обрабатывающий PUT-запрос, должен скопировать куда-либо
полученный файл. Имя временного файла хранится в переменной
$PHP_PUT_FILENAME, а предполагаемое имя файла можно найти в
переменной $REQUEST_URI (может быть другим на веб-серверах, отличных от Apache).
Запрашиваемое имя файла указывается удаленным клиентом. Вы не обязаны
следовать его указаниям. Например, вы можете скопировать все загруженные
файлы в отдельный каталог.