php怎么实现http服务


本文小编为大家详细介绍“php怎么实现http服务”,内容详细,步骤清晰,细节处理妥当,希望这篇“php怎么实现http服务”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
  目录结构:
  http_serv.php文件
  

  /**
  *Http服务器类
  */
  classHttp{
  private$host;
  private$port;
  private$_root;
  public$mime_types=array(
  ’avi’=>’video/x-msvideo’,
  ’bmp’=>’image/bmp’,
  ’css’=>’text/css’,
  ’doc’=>’application/msword’,
  ’gif’=>’image/gif’,
  ’htm’=>’text/html’,
  ’html’=>’text/html’,
  ’ico’=>’image/x-icon’,
  ’jpe’=>’image/jpeg’,
  ’jpeg’=>’image/jpeg’,
  ’jpg’=>’image/jpeg’,
  ’js’=>’application/x-javascript’,
  ’mpeg’=>’video/mpeg’,
  ’ogg’=>’application/ogg’,
  ’png’=>’image/png’,
  ’rtf’=>’text/rtf’,
  ’rtx’=>’text/richtext’,
  ’swf’=>’application/x-shockwave-flash’,
  ’wav’=>’audio/x-wav’,
  ’wbmp’=>’image/vnd.wap.wbmp’,
  ’zip’=>’application/zip’,
  );
  /**
  *@paramstring$host监听地址
  *@paramint$port监听端口
  *@paramstring$_root网站根目录
  */
  publicfunction__construct($host,$port,$_root){
  $this->host=$host;
  $this->port=$port;
  $this->_root=$_root;
  }
  /**
  *启动http服务
  */
  publicfunctionstart(){
  //创建socket套接字
  $socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
  //设置阻塞模式
  socket_set_block($socket);
  //为套接字绑定ip和端口
  socket_bind($socket,$this->host,$this->port);
  //监听socket
  socket_listen($socket,4);
  while(true)
  {
  //接收客户端请求
  if(($msgsocket=socket_accept($socket))!==false){
  //读取请求内容
  $buf=socket_read($msgsocket,9024);
  preg_match(“//(.*)HTTP/1.1/”,$buf,$matchs);
  preg_match(“/Accept:(.*?),/”,$buf,$matchss);
  //获取接收文件类型
  $type=explode(“/”,$matchss[1])[0];
  if($type==”text”){
  $content=$this->GetString($matchs[1]);
  }else{
  $content=$this->GetImg($matchs[1]);
  }
  socket_write($msgsocket,$content,strlen($content));
  socket_close($msgsocket);
  }
  }
  }
  /**
  *组装消息头信息模板
  *@paramint$code状态码
  *@paramstring$status状态名称
  *@paramstring$content发送的文本内容
  *@paramstring$content_type发送的内容类型
  *@returnstring
  **/
  publicfunctionGetHeaders($code,$status,$content=””,$content_type=”text/html;charset=utf-8″){
  $header=”;
  $header.=”HTTP/1.1{$code}{$status}rn”;
  $header.=”Date:”.gmdate(‘D,dMYH:i:sT’).”rn”;
  $header.=”Content-Type:{$content_type}rn”;
  $header.=”Content-Length:”.strlen($content).”rnrn”;//必须2个rn表示头部信息结束
  $header.=$content;
  return$header;
  }
  /**
  *组装文本发送信息
  *@paramstring$url_path
  *@returnstring
  **/
  publicfunctionGetString($url_path){
  if($this->getRealPath($url_path)){
  if(is_readable($this->getRealPath($url_path))){
  return$this->GetHeaders(200,”OK”,file_get_contents($this->getRealPath($url_path)),$this->getMime($url_path));
  }else{
  return$this->GetHeaders(401,”Unauthorized”);
  }
  }else{
  return$this->GetHeaders(404,”NotFound”);
  }
  }
  /**
  *组装资源返回信息
  *@paramstring$url_path
  *@returnstring
  **/
  publicfunctionGetImg($url_path){
  if($this->getRealPath($url_path)){
  return$this->GetHeaders(200,”OK”,file_get_contents($this->getRealPath($url_path)),$this->getMime($url_path));
  }else{
  return$this->GetHeaders(404,”NotFound”);
  }
  }
  /**
  *获取资源类型
  *@paramstring$path
  *@returnmixed
  */
  publicfunctiongetMime($path){
  $type=explode(“.”,$path);
  $mime=$this->mime_types[$type[1]];
  return$mime;
 免费云主机域名 }
  /**
  *获取访问资源的真实地址
  *@param$url_path
  *@returnbool|string
  */
  publicfunctiongetRealPath($url_path){
  returnrealpath($this->_root.”/”.$url_path);
  }
  }
  $server=newHttp(“127.0.0.1″,3046,”wwwroot”);
  $server->start();读到这里,这篇“php怎么实现http服务”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注百云主机行业资讯频道。

相关推荐: Css常用的操作有哪些

本篇内容主要讲解“Css常用的操作有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Css常用的操作有哪些”吧! 常见的css样式操作 单行文本溢出掩藏 语法:white-space: nowrap| pre |…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 08/13 17:02
下一篇 08/13 17:02

相关推荐