使用PHP怎么实现一个动态web服务器

  介绍

使用PHP怎么实现一个动态web服务器?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

<强> 1。客户端通过发送一个http请求到服务器,如果服务器监听的端口号是9002,那么在本机自身测试访问的地址就是 <强> http://localhost: 9002/1。html <强>。

<强> 2。服务器监听着9002端口,那么在收到请求了请求之后,就能从http头部头中获取到请求里需要访问的uri资源在web目录中的位置。

<强> 3。服务器读取需要访问的资源文件,然后填充到http的实体中返回给客户端。

示意图如下:

使用PHP怎么实现一个动态web服务器

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文件的截图

使用PHP怎么实现一个动态web服务器

使用PHP怎么实现一个动态web服务器