Как загружать файлы с помощью PUT вместо POST с PHP
Я создаю свой первый REST Api, и пока все идет хорошо, у меня просто проблема с загрузкой файлов через PUT
метод запроса. Мне нужно быть PUT
потому что я обновляю пользователя и его аватар из приложения iOS, а PUT специально для запросов на обновление.
когда я PUT
и загрузки файла $_FILES
массив на самом деле пуст, но когда я печатаю PUT
данные
parse_str(file_get_contents('php://input'), $put_vars);
$data = $put_vars;
print_r($data);
Я получаю следующий ответ;
Array
(
[------WebKitFormBoundarykwXBOhO69MmTfs61
Content-Disposition:_form-data;_name] => "avatar"; filename="avatar-filename.png"
Content-Type: image/png
�PNG
)
Теперь Я не совсем понимаю это PUT
данные, потому что я не могу просто получить к ним доступ, как к массиву или что-то еще. Поэтому мой вопрос заключается в том, как получить доступ к загруженному файлу из PUT
данные?
Спасибо за вашу помощь.
2 ответов
PHP поддерживает метод HTTP PUT, используемый некоторыми клиентами для хранения файлов на сервере. Запросы PUT намного проще, чем загрузка файла с помощью POST-запросов, и они выглядят примерно так:
PUT /path/filename.html HTTP/1.1
следующий код в тег официальная документация PHP для загрузки файлов через PUT:
<?php
/* PUT data comes in on the stdin stream */
$putdata = fopen("php://input", "r");
/* Open a file for writing */
$fp = fopen("myputfile.ext", "w");
/* Read the data 1 KB at a time
and write to the file */
while ($data = fread($putdata, 1024))
fwrite($fp, $data);
/* Close the streams */
fclose($fp);
fclose($putdata);
?>
есть пример этого в руководстве PHP:загрузка файла: PUT Method.
<?php
/* PUT data comes in on the stdin stream */
$putdata = fopen("php://input", "r");
/* Open a file for writing */
$fp = fopen("myputfile.ext", "w");
/* Read the data 1 KB at a time
and write to the file */
while ($data = fread($putdata, 1024))
fwrite($fp, $data);
/* Close the streams */
fclose($fp);
fclose($putdata);
?>