[ソケット通信]

こんにちわ♪

ま~くんです。

今日はphpでソケット通信を行う方法についてまとめたいと思います。

■まずはPOST用のphp構文■

# ソケット通信を行う対象URL
$url = http://test.co.jp/test.php

# parse_url関数でURLを分解
$url_array = parse_url($url);

# スキームで分岐
switch($url_array['scheme']){
case ‘https’:
# モジュールチェック
if(!extension_loaded(“openssl”)) {
echo “openssl モジュールが無効”;
exit;
}

$scheme = ‘ssl://’;
$port = 443;
break;
case ‘http’:

default:
$scheme = ”;
$port = 80;
}

# POSTで渡すデータ
$params = array(
‘name’ => ‘xxx’,
‘address’ => ‘xxx’,
‘email’ => ‘xxx@xx.xx’,
);

$host = $url_array['host'];
$path = $url_array['path'];

# リクエスト後のタイムアウト秒
$timeout = 30;

# ソケット開始
$data = ”;
$sock = fsockopen($scheme.$host, $port, $sock_err_no, $sock_err_str, $timeout);
if(!$sock){
$data['sock_err_no'] = $sock_err_no;
$data['sock_err_str'] = $sock_err_str;
echo “失敗しました”;
exit;
}else{

# ヘッダー情報
$request = “POST {$path} HTTP/1.1\r\n”;
$request .= “Host: {$host}\r\n”;
$request .= “Accept-Charset: utf-8\r\n”;
$request .= “Connection: Close\r\n”;
$request .= “Content-Type: application/x-www-form-urlencoded; charset=utf-8\r\n”;
$request .= “Content-Length: “.strlen($param).”\r\n”;
$request .= “\r\n”;
$request .= $param;

# ファイルをバイナリ・モードで書き込む
fputs($sock, $request);

# レスポンス取得
while(!feof($sock)){
$data .= fgets($sock, 4096);
}

# ソケットを閉じる
fclose($sock);
}

注意点として
①レスポンスデータはxmlやjsonなどがあり、受け取った際にいろいろと編集しなければいけません。
②SSL通信など通信方法でポート番号が変わります。
③文字コードの指定によってはエラーが返るAPIがあります。

コードばかりでしたが、ソケット通信はAPIを利用する上では欠かせないので、状況を見て利用しましょう!!