用PHP实现一个简单的http服务器
在 PHP 中,你可以使用 socket
函数编写一个简单的 HTTP 服务器。以下是一个示例代码,监听 9000 端口,当收到请求时返回 "Hello, World":
<?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
,然后在命令行中运行:
php http_server.php
服务器将会启动,监听 9000 端口。当你使用浏览器或其他 HTTP 客户端(如 curl)访问 http://127.0.0.1:9000
时,你应该会收到以下响应:
Hello, World