Как получить доступ к данным PHP REST API PUT на стороне сервера? - PullRequest
16 голосов
/ 24 июля 2011

- Вопрос -

Я только начинаю работать с REST API и очень запутался.

Вот так выглядит моя клиентская часть PHP cRUL для PUT.

case 'PUT':
    curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'PUT');
    curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
    break;

Теперь, когда я смотрю на сервер, мой $ _SERVER ['REQUEST_METHOD'] показывает PUT, но у меня возникает вопрос, как мне получить $ data, которые я отправил с CURLOPT_POSTFIELDS.

Все, что мне нужно сделать, это передать $ data, отправленные с запросом PUT, в следующую строку. Как

$value = $data['curl_data'];

Я видел столько беспорядка в этой теме, что у меня болит голова. Это выглядит так просто на стороне клиента php, но ни у кого нет ответов, которые работают на стороне сервера php.

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

- Ответ (после помощи и домашней работы) -

Я новичок, поэтому не могу ответить на свой вопрос до тех пор, пока через 8 часов ... странно:)

Хорошо, после работы с великими людьми здесь я должен сказать, что мы столкнулись с ответом. Я пинаю себя за то, что это так легко, и в то же время это сбивает с толку.

curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($handle, CURLOPT_POSTFIELDS, http_build_query($data));

Первое изменение (выше) мне пришлось добавить http_build_query () около $ data. Это заняло мои данные из массива в строку, дружественную к URL.

Далее я должен был добавить.

parse_str(file_get_contents('php://input'), $put);

Теперь я могу делать такие вещи, как $ put ['data'].

Ответ, который PaulPRO дал выше, работает для получения данных так же, как file_get_contents () с меньшим количеством строк. Мы застряли, пытаясь выяснить, как анализировать данные, и это вызвало у меня отсутствие http_build_query (), которое я видел на другом сайте.

Так вот как это все работает.

  1. Данные помещаются в обычный массив.
  2. http_build_query () преобразует его в красивую, почти GET-подобную строку.
  3. file_get_contents () переносит его с клиента на сервер.
  4. parse_str () затем превращает его обратно в массив.

Я вижу много сообщений об использовании PUT для отправки файлов. Я могу видеть, как это будет работать, но из того, что я прочитал во всем этом процессе REST, было то, что PUT должен обновлять данные, как пост должен создавать данные. Возможно я ошибаюсь. Я что-то упустил?

Ответы [ 2 ]

9 голосов
/ 24 июля 2011

Из PHP Manual :

PUT данные поступают со стандартного ввода:

$putdatafp = fopen("php://input", "r");

Пример использования:

$putfp = fopen('php://input', 'r');
$putdata = '';
while($data = fread($putfp, 1024))
    $putdata .= $data;
fclose($putfp);
5 голосов
/ 02 апреля 2015

У меня тот же сценарий, в котором нужно отправлять данные на PHP-сервер через ReST API, используя метод PUT.Я потратил почти пару часов, чтобы найти решение, но в конце концов нашел способ:

В CUrl:

$postData = http_build_query($data);
curl_setopt($ch, CURLOPT_POSTFIELDS,$postData); 

Мы должны проанализировать данные впеременная let say: $ putData, Здесь процедура Parse String:

parse_str(file_get_contents("php://input"),$putData); 

Затем выведите $putData, и вы получите тот же массив, который вы публикуете в curl.

...