U E D R , A S I H C RSS

데블스캠프2006/월요일/연습문제/웹서버작성/변형진

HJ's WebServer 0.3

  • , , , 파
  • PHP 행할 ( : html, htm, php)
  • index.html, index.htm, index.php
  • 한 해 ,

To Do..

  • GET Method Query String .
  • POST Method, COOKIE .

~php
<?

$index_file = array("index.html", "index.htm", "index.php");
$host = "IP    ";
$port = 8080;


set_time_limit(0);

if(!function_exists("mime_content_type"))
{
	function mime_content_type($f)
	{
		return exec(trim("file -bi ".escapeshellarg($f)));
	}
}

//echo str_repeat(" ",300);

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, $host, $port);
socket_setopt($socket, SOL_SOCKET, SO_REUSEADDR, 1);
socket_listen($socket);

$i = 100;
while($i--)
{
	$client_socket = socket_accept($socket);
	$result = "";
	while(false!==($read = socket_read($client_socket, 100, PHP_NORMAL_READ)))
	{
		echo "> ".$read;
		if(!$read = trim($read)) $cnt++;
		else $cnt=0;
		if($cnt==3) break;
		flush();
		if(preg_match("/(GET|POST) (\/[^ \/]*) (HTTP\/[0-9]+.[0-9]+)/i", $read, $t))
		{
			$file = "/home/kesarr".$t[2];
			if(preg_match("/\/$/", $file))
			{
				foreach($index_file as $idxf)
				{
					if(is_readable($file.$idxf))
					{
						$file .= $idxf;
						break;
					}
				}
			}
			if(is_readable($file))
			{
				$size = @getimagesize($file);
				if($size['mime']) $mime = $size['mime'];
				else $mime = mime_content_type($file);
				$res[] = "HTTP/1.1 200 OK";
				$res[] = "Server: Kesarr's WebServer";
				$res[] = "Connection: close";
				$to_read = $file;
			}
			else
			{
				$res[] = "HTTP/1.1 404 Not Found";
				$res[] = "Server: Kesarr's WebServer";
				$res[] = "Content-Length: ".strlen("파   .");
				$res[] = "Connection: close";
				$res[] = "Content-Type: $size[mime];charset=UTF-8;";
				$res[] = "";
				$res[] = "파   .";
			}
		}
		if($read == "close")
		{
			break;
		}
		elseif($read == "a")
		{
			$result = $read;
		}
		elseif($read == "exit")
		{
			socket_close($client_socket);
			socket_close($socket);
			exit;
		}
	}
	if($res)
	{
		if($to_read)
		{
			if(preg_match("/\.(html|htm|php)$/", $to_read))
			{
				$buffer = shell_exec(trim("php ".escapeshellarg($to_read)));
				$res[] = "Content-Length: ".strlen($buffer);
				$res[] = "";
				$result = join("\r\n", $res);
				@socket_write($client_socket, $result);
				echo $result;
				@socket_send($client_socket, $buffer, strlen($buffer), 0);
				$buf = explode("\r\n\r\n", $buffer);
				echo $buf[0]."\r\n\r\nPHP Parse: ";
			}
			else
			{
				$res[] = "Content-Length: ".filesize($file);
				$res[] = "Content-Type: ".$mime;
				$res[] = "";
				$res[] = "";
				$result = join("\r\n", $res);
				@socket_write($client_socket, $result);
				echo $result;
				@socket_send($client_socket, $buffer, strlen($buffer), 0);
				if(preg_match("/^text\//", $mime))
				{
					$fp = fopen($to_read, "r");
					echo "ASCII Read: ";
				}
				else
				{
					$fp = fopen($to_read, "rb");
					echo "Binary-safe Read: ";
				}
				while(!feof($fp)){
					$buffer=fread($fp,128);
					@socket_send($client_socket, $buffer, strlen($buffer), 0);
				}
				fclose($fp);
			}
			echo $to_read;
		}
		else
		{
			$result = join("\r\n", $res);
			socket_write($client_socket, $result);
			echo $result;
		}
		echo "\r\n__EOF__\r\n\r\n";
		flush();
	}
	socket_close($client_socket);
	unset($res);
	unset($to_read);
	unset($result);
}

socket_close($socket);

?>

----
. ㅋㅋ . 한 탁할 C Java . - eternalbleu
  • PHP ? PHP 호하, UI . C++, Java, C# C# 택해, C# Windows Vista , C/C++ . ' ' '형태 ' DB , DB RDBMS PHP , Perl . ㅋㅋ -
  • PHP , JSP Java .. JSP Java DB PHP 편하 . DB PHP Java PHP Oracle 5.x Jsp . PHP Jsp , Jsp java 클 . Jsp Junit Unit 테 , Visual Studio . java 클 .( Lucene ..). 히 Eclipse Visual Studio ..
    • .. . Jsp,Java PHP .. , 해. Lucene . MemeHarvester . - namsang
ㅋㅋ ㅡ_ㅡb . . . , 함. 학할 , 통해 . ( ㅡㅡ;; 회한 ㅋㅋ) - eternalbleu
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:02
Processing time 0.0267 sec