介绍
使用PHP怎么实现一个动态web服务器?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
<强> 1。客户端通过发送一个http请求到服务器,如果服务器监听的端口号是9002,那么在本机自身测试访问的地址就是强> <强> http://localhost: 9002/1。html 强> <强>。强>
<强> 2。服务器监听着9002端口,那么在收到请求了请求之后,就能从http头部头中获取到请求里需要访问的uri资源在web目录中的位置。强>
<强> 3。服务器读取需要访问的资源文件,然后填充到http的实体中返回给客户端。强>
示意图如下:
PHP php & lt; ? class web_config  { ,//监听的端口号 ,const PORT =, 9003; ,//项目根目录 ,const WEB_ROOT =,“/用户/zhoumengkang/文件/html"; } class server  { 美元,private 知识产权; 美元,private 港口; ,public function  __construct (ip美元,,端口),{ ,$ this→ip =, $ ip; ,$ this→port =,美元港口; ,$ this→等待(); ,} ,private function 等待(),{ ,sock 美元;=,socket_create (AF_INET, SOCK_STREAM,, SOL_TCP); ,if (sock 美元;& lt;, 0), { ,echo “错误:“,只socket_strerror (socket_last_error()),只“\ n"; ,} ,ret 美元;=,socket_bind(袜子,美元,美元这→ip,, $ this→端口); (! $,if  ret), { ,echo “BIND 失败:“,只socket_strerror (socket_last_error()),只“\ n"; ,退出; ,} ,echo “好\ n"; ,ret 美元;=,socket_listen($袜子); ,if (ret 美元;& lt;, 0), { ,echo “LISTEN 失败:“,只socket_strerror (socket_last_error()),只“\ n"; ,} ,do { ,new_sock 美元;=,空; ,try { ,new_sock 美元;=,socket_accept($袜子); ,}catch (Exception $ e), { ,echo $ e→getMessage (); ,echo “ACCEPT 失败:“,只socket_strerror (socket_last_error()),只“\ n"; ,} ,try { ,request_string 美元;=,socket_read (new_sock美元,,1024); 美元,美元response =,这→输出($ request_string); ,socket_write (new_sock美元,,反应); ,socket_close ($ new_sock); ,}catch (Exception $ e), { ,echo $ e→getMessage (); ,echo “READ 失败:“,只socket_strerror (socket_last_error()),只“\ n"; ,} ,}while (真正的); ,}/* * ,* @param request_string美元 ,* @return 字符串 ,*/,private function 输出(request_string美元){ ,//静态,GET /1. html HTTP/1.1,…… ,request_array 美元;=,爆炸(“,“request_string美元); ,如果(count ($ request_array), & lt;, 2) { ,return 这→美元not_found (); ,} 美元,美元uri =, request_array [1]; ,filename 美元;=,web_config: WEB_ROOT 只uri美元; ,echo “请求:“。文件名!”美元\ n"; ,//静态文件的处理 ,if (file_exists(文件名)美元),{ ,return 这→美元add_header (file_get_contents(文件名)美元); ,}else { ,return 这→美元not_found (); ,} ,}/* * 404年,*,返回 ,* @return 字符串 ,*/,private function  not_found () {=,美元content “ & lt; h2> File Not  Found & lt;/h2> “; ,return “HTTP/1.1, 404, File Not 发现\ r \ nContent-Type:, text/html \ r \ nContent-Length:,“.strlen(内容)美元霸主地位;\ r \ n \ r \ n"内容;美元。 ,}/* * ,*加上头信息 ,* @param $字符串 ,* @return 字符串 ,*/,private function  add_header(字符串){ ,return “HTTP/1.1, 200,好吧\ r \ nContent-Length:,“.strlen(字符串)美元霸主地位;\ r \ nServer:, mengkang \ r \ n \ r \ n"美元字符串; ,} } server 美元;=,new 服务器(“127.0.0.1",, web_config::端口),
代码已经上传github https://github.com/zhoumengkang/php/tree/master/php-webserver/static
如上代码所述,只要在终端执行该文件,那么一个静态的web服务器就启动啦。
下图为我访问我网络目录下的1. jpg文件的截图