当前位置: 首页 > news >正文

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

<?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);

代码解释:

创建服务器套接字:socket_create() 创建一个 TCP 套接字,用于监听客户端的连接。

绑定套接字:socket_bind() 将套接字绑定到本地的 127.0.0.1 地址和 9000 端口。

监听端口:socket_listen() 开始监听客户端连接,最大等待队列为 5。

接受连接:socket_accept() 等待并接受来自客户端的连接。

读取请求:socket_read() 读取客户端发送的请求(这里只读取了请求的第一部分,实际应用中可以根据需要解析 HTTP 请求)。

发送响应:构建一个简单的 HTTP 响应,将 "Hello, World" 作为响应体返回。

关闭连接:socket_close() 关闭客户端和服务器的套接字。

运行方式:

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

1

php http_server.php

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

Hello, World

到此这篇关于基于PHP实现一个简单的http服务器的文章就介绍到这了

http://www.cnnetsun.cn/news/1725518.html

相关文章:

  • Redis RDB Tools过期时间终极指南:如何智能管理键值过期与时间修正
  • Vue-mmPlayer源码解析:音乐数据处理与存储机制
  • Blackwell架构深度对比:GB200 NVL72如何用液冷技术突破万亿参数模型训练
  • 国密SM4算法前后端加解密实战:JavaScript与Java完整实现指南
  • 利用快马平台快速构建你的第一个智能体协作框架原型
  • 2026届学术党必备的五大AI写作神器实测分析
  • 为什么BiliTools能成为哔哩哔哩内容管理的最佳选择?3大核心优势解析
  • 终极指南:如何在终端中快速查看世界地图?MapSCII让开发者效率翻倍!
  • 终极API Blueprint响应定义指南:从状态码到Body的完整设计方案
  • 3种RPA文件解包实战技巧:从游戏资源提取到技术深潜的完整指南
  • MaaFramework控制单元深度剖析:ADB、Win32、PlayCover全解析
  • SHT2x温湿度传感器嵌入式驱动开发与工业级集成
  • obsidian-skills风险管理:识别和管理项目风险的完整指南
  • 三步突破B站硬核会员试炼:智能工具助你告别答题烦恼
  • 深度学习框架YOLO数据集 深度学习框架YOLOV11模型如何训练 智慧电力设备-无人机-风机叶片表面缺陷检测数据集
  • Joern实战:使用Scala DSL查询语言发现C/C++代码中的安全漏洞
  • 终极定制指南:如何完全自定义react-responsive-carousel的外观和行为
  • 别再死记硬背公式了!用Python+Excel,5分钟搞定电机主要尺寸的快速估算
  • Youtu-VL-4B-Instruct开源可部署:MIT兼容许可,支持私有化部署与二次微调
  • Flutter实战:如何用network_info_plus插件一键获取当前WiFi名称(附iOS/Android权限配置全流程)
  • ai赋能:借助快马平台智能开发深圳网络nap自动化合规审计工具
  • 5步掌握YimMenu安全使用入门指南
  • 如何突破Cursor使用限制?开源工具Cursor Free VIP实现AI编程助手全功能解锁指南
  • Qwen3.5-4B-Claude-Opus应用场景:高校计算机课程AI助教落地实践
  • c++实战:基于快马平台快速生成socket网络通信客户端代码
  • ai赋能,用自然语言让快马智能生成mobaxterm中文疑难解答方案
  • Docker-compose实战:5分钟搞定微服务+MySQL+Redis一键部署(附完整配置)
  • 从理论到实践:基于快马平台快速开发trea数据过滤可视化应用
  • # LiteLLM 1.82.7/1.82.8 PyPI 供应链攻击,SSH 密钥/云凭证泄露风险,请立即升级至 ≥1.82.9
  • 终极解决方案:3步彻底告别Calibre中文路径乱码困扰