ここのブログ
phpのソケット通信
http://runaway.air-nifty.com/tubuyaki/2006/01/php_db51.html
を参考に、PHPでのソケット間通信をテストしてみました。
内容は、ローカル(127.0.0.1)のHTTPサーバーにアクセスし、Content-length分データを読み込み、データ部分を表示するというものです。
プログラムは、こんなかんじ
<?php $sock = fsockopen( '127.0.0.1', 80, $errono, $errmsg, 30 ); $out = "GET / HTTP/1.1¥nHost: 127.0.0.1¥n¥n"; //データ送信 fputs($sock, $out); //データ受信 $c =fread($sock, 1); $header = ""; while ( strpos($header,"¥n¥n") === false ) { if ( $c != "¥r") { $header .= $c; } $c = fread($sock, 1); } //受信データを改行で分割 $hline = array(); $hline = split("¥n",$header); // Content-Lengthを探し、データ長取得 $datalen = 0; for($i = 0 ; $i < count($hline) ; $i++) { $lenpos = strpos($hline[$i],"Content-Length:"); if ( $lenpos !== false ) { $datalen = intval(substr($hline[$i],strlen("Content-Length:"))); break; } } // データがあれば読み込む if ( $datalen > 0 ) { $data = fread($sock, $datalen); } // 読み込み内容を返す echo($data); fclose($sock); ?> |
(上記< > ¥は、本当は半角です)