– Вопрос –
Я только начинаю с 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 (), которую я видел на другом сайте, играла в игру.
Так вот как все работает.
Я вижу много сообщений об использовании PUT для отправки файлов. Я вижу, как это будет работать, но из того, что я прочитал во всем этом процессе REST, было то, что PUT должен обновлять данные, поскольку post – это создание данных. Может быть, я ошибаюсь. Я что-то упускаю?
Из руководства PHP :
Данные PUT поступают из stdin:
$putdatafp = fopen("php://input", "r");
Пример использования:
$putfp = fopen('php://input', 'r'); $putdata = ''; while($data = fread($putfp, 1024)) $putdata .= $data; fclose($putfp);
У меня тот же сценарий, в котором нужно отправить данные на сервер PHP через API-интерфейс ReST с использованием метода PUT. Я попытался почти пару часов найти решение, но, наконец, нашел способ:
В CUrl:
$postData = http_build_query($data); curl_setopt($ch, CURLOPT_POSTFIELDS,$postData);
Мы должны проанализировать данные в переменной let say: $ putData, Here, это процедура Parse String:
parse_str(file_get_contents("php://input"),$putData);
Затем напечатайте $putData
, получите тот же массив, который вы публикуете в завитке.