PHPでPOSTした結果を取得する関数:フォームの動作を模擬する

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

PHPのfile_get_contents関数のPOST版ユーザ関数”file_post_contents()”を作りました。

このPHPのユーザ関数で、フォームからmethodをPOSTでリクエストしたのと同じ結果が簡単に得られます。

RESTを使ったサービスを利用する際の簡易的な実装にどうぞ。

file_post_contentsの使い方

<?php
//POSTしたいデータ
$aData = array( 'name' => 'konosu', 'age' => 25 );
//POST処理とその結果の取得
$sResult = file_post_contents("http://keinos.com/", $aData);
?>

file_post_contents()関数のソース

<?php
/**
 * POSTでデータを取得する関数
 *
 */
if(!function_exists('file_post_contents')){
$aPHP_VERSION = explode('.',PHP_VERSION);
if($aPHP_VERSION[0]>=5){
function file_post_contents($sURL,$aData){
if(Empty($sURL) || Empty($aData)) return "ERROR:引数が空です。";
if(!Is_Array($aData)) return "ERROR:第二引数は配列である必要があります。";
$aOptions = array(
'http' => array(
'method' => 'POST',
'content' => http_build_query($aData),
),
);
return file_get_contents($sURL, false, stream_context_create($aOptions));
}
}
else{
function file_post_contents($sURL=null,$aData=null){
return "Error:この関数はPHP5以上でないと動作しません。";
}
}
}

RESTについて

通常、フォームからGETもしくはPOSTで投稿(リクエスト)すると、結果が表示されます。

これをPHPから動作を模擬することができるのですが、この仕組みを使って情報を提供するWEBサービスの仕組みをRESTといいます。

RESTとか模擬とか格好付けてますが、例えば”http://www.google.co.jp/search?q=hoge“にアクセスもしくはポストする(リクエストする)と、HTMLで結果が表示されます。その結果がHTMLでなく、CSV,XML,JSON,SerialPHP,TEXTなどのデータ形式ですよ、ということです。

PHPでRESTを利用する

form_get_contents関数で、引数に”google.com?q=hoge”ようなクエリ付のURLでアクセス(リクエスト)した場合、FORMのmethodをGETにしてポストした時と同じ結果が得られます。

結果がすぐに使えるデータ形式であれば、これはGET形式のRESTということになります。

$str = file_get_contents("http://hoge.com/?num=1&num=2");

問題はPOSTでリクエストする場合で、色々と方法はあるのですが、簡単に処理できるような関数を作ってみました。

お役に立つかしら?

関連記事

PHPのfile_get_contentsで404エラーを検知する... PHPのfile_get_contents関数を使ってURL先のコンテンツを取得する際に、取得先にファイルがない(404エラーであった)場合の処理のサンプル・コードです。URLが存在するか調べるだけであれば、HTTPヘッダーを調べる方が軽いです。
PHPのSplFileObjectでURLを指定してCSVを読み込む... URLをSplFileObjectで使うにはNoRewindIteratorクラスも一緒に使う $url = 'http://sample.com/data.csv'; //オンライン上のCSVファイル $file = new NoRewindIterator( new SplFile...
ロリポップでfile_get_contentsが使えなくなった場合の確認箇所... 現象ですが、ロリポップで、下記スクリプトを実行すると"Warning: file_get_contents() file-access is disabled"エラーが出てしまいます。 ■スクリプト

スポンサーリンク
レクタングル(大)広告

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存
スポンサーリンク
レクタングル(大)広告