用PHP实现一个简单的http服务器

news/2024/11/17 22:06:20/

在 PHP 中,你可以使用 socket 函数编写一个简单的 HTTP 服务器。以下是一个示例代码,监听 9000 端口,当收到请求时返回 "Hello, World":

php"><?php
// 设置监听端口
$host = '127.0.0.1';
$port = 9000;// 创建一个 TCP 套接字
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($server === false) {echo "无法创建套接字: " . socket_strerror(socket_last_error()) . "\n";exit(1);
}// 绑定套接字到地址和端口
if (socket_bind($server, $host, $port) === false) {echo "无法绑定套接字: " . socket_strerror(socket_last_error()) . "\n";exit(1);
}// 开始监听
if (socket_listen($server, 5) === false) {echo "无法监听端口: " . socket_strerror(socket_last_error()) . "\n";exit(1);
}echo "服务器已启动,正在监听 $host:$port...\n";while (true) {// 接受客户端连接$client = socket_accept($server);if ($client === false) {echo "无法接受客户端连接: " . socket_strerror(socket_last_error()) . "\n";continue;}// 读取客户端请求$request = socket_read($client, 1024);// 构建 HTTP 响应内容$response = "HTTP/1.1 200 OK\r\n";$response .= "Content-Type: text/plain\r\n";$response .= "Connection: close\r\n";$response .= "\r\n";$response .= "Hello, World";// 发送响应到客户端socket_write($client, $response);// 关闭客户端连接socket_close($client);
}// 关闭服务器套接字
socket_close($server);

代码解释:

  1. 创建服务器套接字socket_create() 创建一个 TCP 套接字,用于监听客户端的连接。
  2. 绑定套接字socket_bind() 将套接字绑定到本地的 127.0.0.1 地址和 9000 端口。
  3. 监听端口socket_listen() 开始监听客户端连接,最大等待队列为 5。
  4. 接受连接socket_accept() 等待并接受来自客户端的连接。
  5. 读取请求socket_read() 读取客户端发送的请求(这里只读取了请求的第一部分,实际应用中可以根据需要解析 HTTP 请求)。
  6. 发送响应:构建一个简单的 HTTP 响应,将 "Hello, World" 作为响应体返回。
  7. 关闭连接socket_close() 关闭客户端和服务器的套接字。

运行方式:

将上面的代码保存为 http_server.php,然后在命令行中运行:

php http_server.php

服务器将会启动,监听 9000 端口。当你使用浏览器或其他 HTTP 客户端(如 curl)访问 http://127.0.0.1:9000 时,你应该会收到以下响应:

php">Hello, World


http://www.ppmy.cn/news/1547814.html

相关文章

planRAG运行记录

代码仓库:https://github.com/myeon9h/PlanRAGneo4j的连接 下载neo4j客户端 save之后即可成功连接 连接neo4j权限问题解决 问题1:如何找到 neo4j.conf 文件 解决1:可以通过设置环境变量 NEO4J_CONF 来指定 neo4j.conf 文件的位置,会返回一个路径 echo $NEO4J_CONF解决2:如…

若点集A=B则A必能恒等变换地变为B=A这一几何常识推翻直线(平面)公理

黄小宁 关键词&#xff1a;“更无理”复数 复平面z各点z的对应点z1的全体是z1面。z面平移变为z1面就使x轴⊂z面沿本身平移变为ux1轴。R可几何化为R轴&#xff0c;R轴可沿本身平移变为R′轴&#xff0c;R′轴可沿本身平移变为R″轴&#xff0c;...。直线公理和平面公理使几百年…

docker启动训练容器教程

docker启动训练容器 拉取容器镜像 配置代理在国内拉取镜像 容器启动 容器使用显卡 conda环境配置 1、拉取容器镜像 docker pull NAME[:TAG]NAME&#xff1a;镜像名称&#xff0c;如ubuntu,mysql等等TAG&#xff1a;镜像标签&#xff0c;通常表示不同版本号&#xff0c;如果…

护眼模式浓度调整到最低

护眼模式浓度调整到最低 diff --git a/alps-mp-t0/frameworks/base/core/res/res/values/config.xml b/alps-mp-t0/frameworks/base/core/res/res/values/config.xml index f6ee1a97592..45c83baac63 100755 --- a/alps-mp-t0/frameworks/base/core/res/res/values/config.xml…

Vue 3 中的 ref 完全指南

Vue 3 中的 ref 完全指南 Vue 3 引入了 Composition API&#xff0c;其中 ref 是关键的一部分。ref 可以让我们更方便地在组件中定义响应式数据&#xff0c;在模板中使用 <script setup> 语法糖时尤为简洁。本文将详细讲解 Vue 3 中 ref 的概念、用途及常见用法&#xf…

通过Docker实现openGauss的快速容器化安装

容器安装 本章节主要介绍通过 Docker 安装 openGauss&#xff0c;方便 DevOps 用户的安装、配置和环境设置。 支持的架构和操作系统版本 x86-64 CentOS 7.6 ARM64 openEuler 20.03 LTS 配置准备 使用 buildDockerImage.sh 脚本构建 docker 镜像&#xff0c;buildDockerIm…

BERT框架详解

BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是由Google在2018年提出的一种自然语言处理&#xff08;NLP&#xff09;模型。BERT通过使用Transformer架构&#xff0c;实现了对文本的双向上下文理解&#xff0c;从而在多个NLP任务中取…

IntelliJ+SpringBoot项目实战(七)--在SpringBoot中整合Redis

Redis是项目开发中必不可少的缓存工具。所以在SpringBoot项目中必须整合Redis。下面是Redis整合的步骤&#xff1a; &#xff08;1&#xff09;因为目前使用openjweb-sys作为SpringBoot的启动应用&#xff0c;所以在openjweb-sys模块的application-dev.yml中增加配置参数&…