Поддержка метода PUT была изменена при переходе от PHP 3 к PHP 4.
В PHP 4 вы должны использовать стандартный поток ввода для чтения
файла, передаваемого методом HTTP PUT.
Пример 38-4. Сохранение загруженного при помощи 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).
Запрашиваемое имя файла указывается удаленным клиентом. Вы не обязаны
следовать его указаниям. Например, вы можете скопировать все загруженные
файлы в отдельный каталог.