脚本宝典收集整理的这篇文章主要介绍了PHP实现动态web服务器方法,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
以下内容通过图文并茂的方式介绍PHP实现动态web服务器的方法,具体内容如下:
本文所实现的服务器仅仅是演示和理解原理所用,力求简单易懂。有兴趣的朋友可以继续深入改造
要是现实一个 web 服务器,那么就需要大概了解 web 服务器的运行原理。先从静态的文本服务器开始,以访问 web 服务器的1.htML为例
示意图如下:
<PRe class="brush:PHp;"> PHP ip = $ip; $this->port = $port; $this->await(); } private function awaIT() { $sock = socket_create(AF_inet,SOCK_STREam,SOL_TCP); if ($sock < 0)="" {="" echo="" "error:"="" .="" socket_strerror(socket_last_error())="" .="" "\n";="" }="" $ret="socket_bind($sock,$this-">ip,$this->port); if (!$ret) { echo "BIND Failed:" . socket_strerror(socket_last_error()) . "\n"; exit; } echo "OK\n"; $ret = socket_listen($sock); if ($ret < 0)="" {="" echo="" "listen="" failed:"="" .="" socket_strerror(socket_last_error())="" .="" "\n";="" }="" do="" {="" $new_sock="null;" try="" {="" $new_sock="socket_accept($sock);" }="" catch="" (exception="" $e)="" {="" echo="" $e-="">getMessage(); echo "ACCEPT Failed:" . socket_strerror(socket_last_error()) . "\n"; } try { $request_string = socket_read($new_sock,1024); $response = $this->output($request_string); socket_write($new_sock,$response); socket_close($new_sock); } catch (Exception $e) { echo $e->getMessage(); echo "READ Failed:" . socket_strerror(socket_last_error()) . "\n"; } } while (TRUE); } /** * @param $request_string * @return string */ private function output($request_string){ // 静态 GET /1.html HTTP/1.1 ... $request_array = explode(" ",$request_string); if(count($request_array) < 2){="" return="" $this-="">not_found(); } $uri = $request_array[1]; $filename = web_config::WEB_ROOT . $uri; echo "request:".$filename."\n"; // 静态文件的处理 if (file_exists($filename)) { return $this->add_header(file_get_contents($filename)); } else { return $this->not_found(); } } /** * 404 返回 * @return string */ private function not_found(){ $content = "以上是脚本宝典为你收集整理的PHP实现动态web服务器方法全部内容,希望文章能够帮你解决PHP实现动态web服务器方法所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。