大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本文小编为大家详细介绍“php怎么实现http服务”,内容详细,步骤清晰,细节处理妥当,希望这篇“php怎么实现http服务”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
创新互联建站,为您提供网站建设公司、网站制作、网站营销推广、网站开发设计,对服务成都iso认证等多个行业拥有丰富的网站建设及推广经验。创新互联建站网站建设公司成立于2013年,提供专业网站制作报价服务,我们深知市场的竞争激烈,认真对待每位客户,为客户提供赏心悦目的作品。 与客户共同发展进步,是我们永远的责任!
目录结构:
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}\r\n";
$header.="Date:".gmdate('D,dMYH:i:sT')."\r\n";
$header.="Content-Type:{$content_type}\r\n";
$header.="Content-Length:".strlen($content)."\r\n\r\n";//必须2个\r\n表示头部信息结束
$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服务”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注创新互联行业资讯频道。