絶品ゆどうふのタレ

ふと気づいたことを綴るだけのメモ

Re:PHPの標準関数でPOSTする方法

blog.eラーニング.co.jp? PHPの標準関数でPOSTする方法

こんな強引な方法もあるのかwと、相変わらずのことに( ゚д゚)ポカーンとしつつ、これって要するにINETドメインのsocketを生で開いてる状態だよなーとか思うと、相手先のhttpdがおバカちゃんだったりするような場合にアレじゃないかと思ったりして。

悪くはないんだけどやっぱそういう面倒な事を気にしないのがPHPの最大の利点であって、ちゃんとサポートされてるstreamコンテキストを使ってやるのがいいんじゃねーかなーと思ったり。


最初は古いバージョンを気にしてるのかとか思ったけどhttp_build_query使ってるからPHP5専用だよね。
ということで、多分そのくらいのターゲットにした場合に多分POSTをサクッとやるならこれがスマートじゃね?という感じで書いてみる。

<?php
function post($url, $data = array()) {
  if (!ini_get('allow_url_fopen')) throw new Exception("Not Allowed URL Open!");
  $stream = stream_context_create(array('http' => array(
    'method' => 'POST',
    'header' => 'Content-type: application/x-www-form-urlencoded',
    'content'   => http_build_query($data),
  )));
  return file_get_contents($url, false, $stream);
}

////// usage sample
try {
  $hoge = post('http://www.example.com', array('var1' => 'value'));
  var_dump($hoge);
} catch (Exception $e) {
  var_dump($e);
}

まぁこんなところでしょうか。。。ま、だからなんだって話ですよ。