PHP:file_get_contents()でPOSTする

こんにちは、さるまりんです。

PHPでサーバーにデータをPOSTで送信しようと思いまして。

file_get_contents()でPOSTする

以下のように行います。

$url = '送り先URL';
$data = [];

// $dataに送るデータを詰めます。
$data['name'] = 'salumarine';
$data['type'] = 'monkey';

// 送信データをURLエンコード。
$data = http_build_query($data, "", "&");

// これを指定しないと動かない?
$header = [
    "Content-Type: application/x-www-form-urlencoded",
    "Content-Length: ".strlen($data)
];
// 送信の準備(ストリームを作る)
$options =[
   'http' => [
      'method' => 'POST',
      'header' => implode("\r\n", $header),
      'content' => $data
   ]
];

$context = stream_context_create($options);

$contents =file_get_contents($url, false, $context);

上のコードを簡単に説明しますね。

$urlは送信先のURLの文字列です。

送信するデータの配列を作成しデータを詰めます。

http_build_query()で送信データをURLエンコードしたクエリー文字列にします。

Content-Typeを指定しないとエラーになる(ことがある?)のでヘッダーに"application/x-www-form-urlencoded"を指定します。

そしてstream_context_create()で渡すデータをストリームにして

ファイルの内容を取得するための関数file_get_contents()でサーバーにデータを送信、その結果を取得します。

このfile_get_contents()ですが、

$html = file_get_contents('https://salumarine.com/');

のようにしてシンプルにWebサイト上のページのソースを取得することができます。

POSTでデータ送信をするのにcurlを使う方法もあります。

これについてはに書かせてもらいますね。

読んでくださってありがとうございます。

ではまた!