Как загружать файлы с помощью 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);
?>