php

【PHP】file_get_contentsでPOSTデータの送信を行う



PHPのプログラムでWebAPIなどにアクセスする時にfile_get_contentsを使用することがあります。
この時にGETではなくPOST送信にてパラメータを送信する必要がある時があるので今回はそのメモ。

サンプル

PHPマニュアルにあるfile_get_contentsを参考にさせて頂きました。
file_get_contents

送信プログラム

メインとなる送信プログラムです。
<?php
//POSTデータ
$data = array(
    "param1" => "data1",
    "param2" => "data2"
);

// URLを指定
$url = "http://localhost/test/post.php";

// POST用関数
function http_post ($url, $data)
{
  $data_url = http_build_query ($data);
  $data_len = strlen ($data_url);

  return array (
        'content'=>  file_get_contents (
            $url,
            false,
            stream_context_create (
              array ('http' =>
                  array (
                      'method'=>'POST',
                      'header'=>"Content-Type: application/x-www-form-urlencoded\r\nContent-Length: $data_len\r\n",
                      'content'=>$data_url)
                  )
              )
            ),
      'headers'=> $http_response_header
  );
}

// 送信
$result = http_post($url, $data);
?>
受信データ<br />
<pre>
<?php var_dump($result);?>
</pre>
$dataを変えると送信するPOSTの値が変更できます。
$urlをPOST送信したい先に変更してお使いください。

受信プログラム

上記の送信プログラムのテストのための受信プログラムです。
<?php var_dump($_POST);?>

結果

受信プログラムが出力した結果をfile_get_contentsが取得し、出力を行った結果。contentにはfile_get_contentsの返り値が入ります。
headersにはアクセスした際のヘッダー情報が入るようになっております。

array (size=2)
  'content' => 
    array (size=2)
    'param1' => string 'data1' (length=5)
    'param2' => string 'data2' (length=5)
  'headers' => 
    array (size=7)
      0 => string 'HTTP/1.1 200 OK' (length=15)
      1 => string 'Date: Tue, 23 Jun 2015 05:11:57 GMT' (length=35)
      2 => string 'Server: Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7' (length=53)
      3 => string 'X-Powered-By: PHP/5.4.7' (length=23)
      4 => string 'Content-Length: 321' (length=19)
      5 => string 'Connection: close' (length=17)
      6 => string 'Content-Type: text/html' (length=23)

file_get_contentsって調べると色々出来て覚えきれないですね。


Comments
  1. 匿名

    http://d.hatena.ne.jp/ryster/20070907/1189148449

    こちらの記事のパクリでしょうか?

    • 管理人

      メモに取っていた内容と似ています。
      こちらの記事を参考にしていたのかも知れません。

      なので、記事の内容を同一のことが出来るものですが、別の書き方に直させて頂きました。

コメントを残す