PHP   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何用PHP来实现一个动态Web服务器大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

要是现实一个 web 服务器,那么就需要大概了解 web 服务器的运行原理。先从静态的文本服务器开始,以访问 web 服务器的1.html为例

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

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

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

示意图如下:

如何用PHP来实现一个动态Web服务器

<div class="codecode">
<pre class="brush:php;">
<?php
class web_config {
// 监听的端口号
const PORT = 9003;
// 项目根目录
const WEB_ROOT = "/Users/zhoumengkang/Documents/html";
}

class server {
private $ip;
private $port;
public function __construct($ip,$port) {
$this->ip = $ip;
$this->port = $port;
$this->await();
}
private function await() {
$sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
if ($sock < 0) {
echo "Error:" . socket_strerror(socket_last_error()) . "\n";
}
$ret = socket_bind($sock,$this->ip,$this->port);
if (!$ret) {
echo "BIND FAILED:" . socket_strerror(socket_last_error()) . "\n";
exit;
}
echo "OK\n";
$ret = socket_listen($sock);
if ($ret < 0) {
echo "LISTEN FAILED:" . socket_strerror(socket_last_error()) . "\n";
}
do {
$new_sock = null;
try {
$new_sock = socket_accept($sock);
} catch (Exception $e) {
echo $e->getMessage();
echo "ACCEPT FAILED:" . socket_strerror(socket_last_error()) . "\n";
}
try {
$request_string = socket_read($new_sock,1024);
$response = $this->output($request_string);
socket_write($new_sock,$response);
socket_close($new_sock);
} catch (Exception $e) {
echo $e->getMessage();
echo "READ FAILED:" . socket_strerror(socket_last_error()) . "\n";
}
} while (TRUE);
}
/**

  • @param $request_string
  • @return string
    */
    private function output($request_string){
    // 静态 GET /1.html HTTP/1.1 ...
    $request_array = explode(" ",$request_string);
    if(count($request_array) < 2){
    return $this->not_found();
    }
    $uri = $request_array[1];
    $filename = web_config::WEB_ROOT . $uri;
    echo "request:".$filename."\n";
    // 静态文件的处理
    if (file_exists($filename)) {
    return $this->add_header(file_get_contents($filename));
    } else {
    return $this->not_found();
    }
    }
    /**
  • 404 返回
  • @return string
    */
    private function not_found(){
    $content = "

File Not Found

";
return "HTTP/1.1 404 File Not Found\r\nContent-Type: text/html\r\nContent-Length: ".strlen($content)."\r\n\r\n".$content;
}
/**

  • 加上头信息
  • @param $string
  • @return string
    */
    private function add_header($string){
    return "HTTP/1.1 200 OK\r\nContent-Length: ".strlen($string)."\r\nServer: mengkang\r\n\r\n".$string;
    }
    }
    $server = new server("127.0.0.1",web_config::PORT);

大佬总结

以上是大佬教程为你收集整理的如何用PHP来实现一个动态Web服务器全部内容,希望文章能够帮你解决如何用PHP来实现一个动态Web服务器所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: