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