PHP поддерживает HTTP-метод PUT, через который отдельные клиенты отправляют файлы на сервер для хранения. PUT-запросы проще, чем загрузка файлов POST-запросами, а выглядят PUT-запросы примерно так:
PUT /path/filename.html HTTP/1.1
Обычно такой вызов означает, что удалённый клиент хотел бы сохранить
файл /path/filename.html
в дереве каталогов веб-сервера.
Не сомневаемся, что настраивать веб-сервер Apache или PHP так, чтобы они разрешали
каждому автоматически перезаписывать файлы веб-сервера, — плохая идея.
Поэтому, чтобы обработать такой запрос, потребуется сначала сообщить веб-серверу, чтобы
запрос обрабатывал конкретный PHP-скрипт. На веб-сервере Apache
это делается через директиву Script.
Обычно директиву записывают в произвольном месте конфигурационного файла веб-сервера Apache
внутри блока <Directory>
или, возможно, внутри блока
<VirtualHost>
. Строка наподобие этой
укажет веб-серверу конкретный PHP-файл для обработки запроса:
Script PUT /put.php
Строка говорит веб-серверу Apache перенаправлять каждый PUT-запрос к URI-идентификаторам, которые соответствуют контексту, в котором записали строку, в файл put.php. Предполагается, что файлы с расширением .php обрабатываются как PHP-скрипты, и что сам PHP активен. Ресурсом назначения для PUT-запросов к этому скрипту должен быть сам скрипт, а не имя, которое требуется дать загружаемому файлу.
Затем внутри файла put.php разработчик мог бы написать код наподобие следующего примера. Пример скопирует содержимое загруженного файла в файл myputfile.ext на сервере. Возможно, потребуются проверки и (или) аутентификация пользователя перед копированием файла.
Пример #1 Сохранение файлов, которые отправили HTTP-методом PUT
<?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);
?>