<?
/**
* Web Server
*
* This Class in a example of a Web Server create using class pserver
*
* @package pserver
* @subpackage pserver.example
* @author Pedro Vargas ([email protected]) http://deerme.org
* @version 0.2
* @licence GNU Free Documentation License (FDL)
*/
require('pserver.class.php');
class webserver extends pserver
{
var $path_site = "./html";
/**
* Read data on the client
*/
function read( $client )
{
$data = (trim(@socket_read($client['socket'], $this->bufferin, ( $this->socketbinary ? PHP_BINARY_READ : PHP_NORMAL_READ ) )));
$get_headers = explode("\n", $data );
$get = explode(" ", $get_headers[0] );
if ( trim($get[0]) == "GET" )
{
if ( trim($get[2]) == "HTTP/1.1" )
{
if ( trim($get[1]) == "/" )
$get[1] = "index.html";
// This server only accept GET in one level
if ( is_file( $this->path_site . "/" . basename( $get[1] ) ) )
{
$this->_logger("GET" , $this->path_site . "/" . basename( $get[1] ). " ".$client["ip"] );
$this->write( $client , file_get_contents( $this->path_site . "/" . basename( $get[1] ) ) );
}
else
{
$this->http_error(404 , "File Not Found","This File not found in Server" , true , $client);
}
}
else
{
$this->http_error(501 , "Protocol Error","This Server only accept HTTP/1.1" , true , $client);
}
}
else
{
$this->http_error(501, "Method Error","This Server only accept GET Method" , true , $client);
}
}
/**
* Write data on the client
*/
function write( &$client , $data )
{
$data_return = "HTTP/1.1 200 OK
Server: Web Server extends from pserver Class /(%s) PHP (%s) by deerme.org
X-Powered-By: PServer %s in %s %s
Content-Type: text/html
$data
";
@socket_write($client['socket'], sprintf($data_return , PHP_OS , PHP_VERSION , $this->verion , PHP_OS , PHP_VERSION ) );
$this->client_close($client);
}
function http_error( $code , $title , $error , $disconnect = true , $client)
{
$this->_logger("HTTP". $code , $title." ".$error);
$data_return = "HTTP/1.1 $code Not Found
Date: Wed, 24 Feb 2010 16:59:21 GMT
Server: Web Server extends from pserver Class /(%s) PHP (%s) by deerme.org
X-Powered-By: PServer %s in %s %s
";
if ( $code == "404" )
$data_return .= "<html><head><title>404 Not Found</title></head><h1>404 Not Found</h1></html>";
@socket_write($client['socket'], sprintf($data_return , PHP_OS , PHP_VERSION , $this->verion , PHP_OS , PHP_VERSION ) );
$this->client_close( $client );
}
}
$ip = ($argv[1] ? $argv[1] : 0 );
$p = ($argv[2] ? (int)$argv[2] : 8080 );
$server = new webserver($ip, $p );
$server->socketbinary = true;
$server->auto_write = false;
$server->welcome_send = false;
$server->path_site = "./html";
$server->start();
?>
|