PHP 2007/07/21 13:19
HTTPリスエストをそのまま返すPHPサーバ
PHPで簡易サーバを書いてみました。ブラウザから来たHTTPリクエストをそのまま返すだけのものです。実用性はあまり無いですが、ブラウザがどんなリクエストを出しているか確認するにはちょっとだけ便利かもしれません。;-)
socketsライブラリを有効にする
PHPでsocketsライブラリが有効になっている必要があります。Win環境ならPHPパッケージにDLLが用意されているので、php.ini等で下のように有効にすればokです。
CODE:
-
# ; を外す
-
extension=php_sockets.dll
サーバを起動する
下のソースをローカルに保存して、phpコマンドで実行するとサーバが起動します。デフォルトではlocalhostの9000ポートでlistenします。
PHP:
-
<?php
-
class HttpServer {
-
private $socket = null;
-
-
private $method = null;
-
private $uri = null;
-
private $headers = null;
-
private $body = null;
-
-
public function __construct($port = 9000) {
-
if ($this->socket === false) {
-
$this->error();
-
}
-
}
-
-
public function execute() {
-
while (true) {
-
if ($client === false) {
-
$this->error();
-
}
-
-
$request = $this->read($client);
-
-
$header = "HTTP/1.x 200 OK\r\n";
-
$header .= "Content-Type: text/html\r\n";
-
$header .= "\r\n\r\n";
-
-
}
-
}
-
-
private function read($client) {
-
$this->body = "";
-
$req = "";
-
while (true) {
-
$req .= $buff;
-
-
if ($buff === false) {
-
$this->error();
-
$this->parseHeader($req);
-
} else {
-
$this->body .= $buff;
-
}
-
-
if ($this->isComplete()) {
-
return $req;
-
}
-
}
-
}
-
}
-
-
protected function parseHeader($req) {
-
-
foreach ($lines as $line) {
-
continue;
-
}
-
$this->setHeader($line);
-
}
-
}
-
-
protected function setRequestLine($line) {
-
}
-
-
protected function setHeader($line) {
-
}
-
-
protected function isComplete() {
-
}
-
-
return true;
-
}
-
-
private function error() {
-
}
-
-
public function __destruct() {
-
}
-
}
-
}
-
-
$server = new HttpServer();
-
$server->execute();
-
?>
ブラウザでサーバへアクセスする
あとはブラウザで[http://localhost:9000/]にアクセスすればリクエストの内容がそのまま表示されます。適当なフォームをHTMLで作ってPOSTするとその内容もそのまま表示されます。
次はHTTPサーバ?
新大阪<->品川の新幹線で時間があったのでちゃちゃっと書いてみました。本当はもうちょっとちゃんとしたHTTPサーバもどきにしようと考えていたのですが、これはこれで面白かったのでアップしときます。。。
あとコードを書く際はZendFramework付属のhttp_serverを参考にしました。ZFはコードが読みやすいので結構好印象です。PHP5フレームワーク・ライブラリとして今後が楽しみですね。
■Related Posts
- 楽天オークション系対応-PEAR::Services_Rakuten-0.2.2リリース
- 楽天API PEAR::Services_Rakuten-0.2.1リリース
- 楽天API PEAR::Services_Rakuten-0.2.0リリース
- 2007年ふりかえり&2008年は
- 楽天API PEAR::Services_Rakuten-0.1.0リリース





on 04 7月 2010 at 08:38 1.ぱんぴーまっしぐら » 今日のチェキ 2007-07-24 said …
[...] ■HTTPリスエストをそのまま返すPHPサーバ [...]