Загрузите файл с помощью запроса API PUT

Я создаю API в PHP. Одним из методов является place.new (запрос PUT). Он ожидает несколько строковых полей, а также ожидает изображение. Однако я не могу заставить его работать. С запросом POST это было легко, но я не уверен, как это сделать с помощью PUT и как получить данные на сервере.

Спасибо за помощь!

Проверить код CURL

$curl = curl_init(); curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_BINARYTRANSFER, 1); curl_setopt($curl, CURLOPT_URL, $this->url); curl_setopt($curl, CURLOPT_PUT, 1); curl_setopt($curl, CURLOPT_INFILE, $image); curl_setopt($curl, CURLOPT_INFILESIZE, filesize($image)); $this->result = curl_exec($curl); curl_close($curl); 

Код сервера

 if ( $im_s = file_get_contents('php://input') ) { $image = imagecreatefromstring($im_s); if ( $image != '' ) { $filename = sha1($title.rand(11111, 99999)).'.jpg'; $photo_url = $temp_dir . $filename; imagejpeg($image, $photo_url); // upload image ... } } 

Решение

Отправить

 // Correct: /Users/john/Sites/.... // Incorrect: http://localhost/... $image = fopen($file_on_dir_not_url, "rb"); $curl = curl_init(); curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_BINARYTRANSFER, 1); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_PUT, 1); curl_setopt($curl, CURLOPT_INFILE, $image); curl_setopt($curl, CURLOPT_INFILESIZE, filesize($file_on_dir_not_url)); $result = curl_exec($curl); curl_close($curl); 

Получать

 /* Added to clarify, per comments */ $putdata = fopen("php://input", "r"); /* Open a file for writing */ $fp = fopen($photo_url, "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); 

Solutions Collecting From Web of "Загрузите файл с помощью запроса API PUT"