- 質問 -
私はRESTAPIを使い始めたばかりで、かなり混乱しています。
これは、私のPHPcRULクライアント側がPUTに対してどのように見えるかです。
case 'PUT':
curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
break;
サーバーを見ると、$ _ SERVER ['REQUEST_METHOD']にPUTが表示されていますが、質問は、CURLOPT_POSTFIELDSで送信した$dataを取得する方法です。
私がする必要があるのは、PUTリクエストで送信された$dataを次の行に取得することだけです。好き
$value = $data['curl_data'];
私はこのトピックについて非常に多くの混乱を見てきましたので、それは私に頭痛の種を与えています。phpクライアント側ではとても簡単に思えますが、phpサーバー側で機能している答えは誰にもありません。
助けてくれてありがとう!
-回答(ヘルプと宿題の後)-
私は新しいので、8時間後まで自分の質問に答えることができません...奇妙な:)
さて、ここで素晴らしい人々と仕事をした後、私たちは答えに出くわしたと言わなければなりません。私はそれがとても簡単であると同時にそれが混乱していたことで自分自身を蹴っています。
curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($handle, CURLOPT_POSTFIELDS, http_build_query($data));
最初の変更(上記)では、$ dataの周りにhttp_build_query()を追加する必要がありました。これにより、データが配列からURLに適した文字列になりました。
次は追加しなければなりませんでした。
parse_str(file_get_contents('php://input'), $put);
これで、$put['data']のようなことができます。
PaulPROが上記で示した答えは、file_get_contents()がより少ない行で行ったのと同じ方法でデータを取得するために機能します。別のサイトで見たhttp_build_query()の欠如が影響を及ぼした場所で、データを解析する方法を見つけようとして立ち往生しました。
これがすべての仕組みです。
- データは通常の配列に入れられます。
- http_build_query()は、それをほぼGETのような文字列に変換します。
- file_get_contents()は、それをクライアントからサーバーに転送します。
- 次に、parse_str()はそれを配列に戻します。
PUTを使用してファイルを送信することについて多くのメッセージが表示されます。これがどのように機能するかはわかりますが、このRESTプロセス全体で読んだことから、PUTはデータを更新し、postはデータを作成するということでした。多分私は間違っています。私は何かが足りないのですか?