php写web服务器端,如何用php实现一个web服务器
①實現一個回顯服務器
客戶端發來一個請求,我們把請求包發回去顯示。
創建監聽套接字
新建start_web.php
//創建監聽套接字
$web = stream_socket_server('0.0.0.0:8088');
接收請求,并回顯
$conn = @stream_socket_accept($web);
if($conn){
fwrite($conn,fgets($conn));
fclose($conn);
}
啟動服務
php start_web.php //啟動服務
瀏覽器訪問
http://0.0.0.0:8088/?id=1
顯示結果
GET /?id=1 HTTP/1.1
上面的例子在接收客戶端連接后,會回顯消息。
但是服務端會中斷服務。
我們改進一下代碼如下:
$web = stream_socket_server('0.0.0.0:8088');
while(1){
$conn = @stream_socket_accept($web);
if($conn){
fwrite($conn,fgets($conn));
fclose($conn);
}
}
注意 ctrl+c 可以中斷服務器運行
②解析請求報文
要求如下
區分GET和POST
獲取請求變量
$_SERVER = array();
//創建一個tcp套接字,并監聽8088端口
if($web = stream_socket_server('0.0.0.0:8088',$errno,$errstr)){
while(true){
$conn = @stream_socket_accept($web);
if($conn){
$_SERVER = array();
decode(fgets($conn));
fwrite($conn,encode("訪問方法是:".$_SERVER['REQUEST_METHOD']."\n請求變量是:".$_SERVER['QUERY_STRING']));
fclose($conn);
}
}
}else{
die($errstr);
}
//http協議解碼
function decode($info){
global $_SERVER;
list($header,) = explode("\r\n\r\n",$info);
//將請求頭變為數組
$header = explode("\r\n",$header);
list($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI'], $_SERVER['SERVER_PROTOCOL']) = explode(' ', $header[0]);
$_SERVER['QUERY_STRING'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY);
}
//http協議加密
function encode($str){
$content = "HTTP/1.1 200 OK\r\nServer: vruan_web/1.0.0\r\nContent-Length: " . strlen($str )."\r\n\r\n{$str}";
return $content;
}
啟動服務
php start_web.php //啟動服務
瀏覽器訪問
http://0.0.0.0:8088/?id=1&age=19
顯示結果
訪問方法是:GET
請求變量是:id=1&age=19
總結
以上是生活随笔為你收集整理的php写web服务器端,如何用php实现一个web服务器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: trait功能 php,PHP之Trai
- 下一篇: php网站入门鹿泉银山,01PHP编程新