php实现 httpserver
PHP 实现 HTTP 服务器
PHP 可以通过内置的 php -S 命令快速启动一个简易的 HTTP 服务器,适合本地开发和测试。以下是具体方法和注意事项:
启动内置开发服务器
使用命令行进入项目目录,执行以下命令启动服务器:
php -S localhost:8000
localhost可替换为0.0.0.0允许局域网访问。8000是端口号,可根据需要修改。- 默认会将当前目录作为根目录。
指定入口文件
若需指定路由入口(如单入口应用),添加路由脚本:
php -S localhost:8000 router.php
示例 router.php 内容:
<?php
if (file_exists(__DIR__ . $_SERVER['REQUEST_URI'])) {
return false; // 直接返回静态文件
} else {
include 'index.php'; // 统一转发到入口
}
?>
自定义服务器类
通过 PHP Socket 实现更灵活的服务器(需扩展支持):
<?php
$socket = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr);
if (!$socket) die("$errstr ($errno)");
while ($conn = stream_socket_accept($socket)) {
$request = fread($conn, 1024);
$response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nHello World";
fwrite($conn, $response);
fclose($conn);
}
?>
使用 ReactPHP 框架
对于生产级异步服务器,推荐使用 ReactPHP:
composer require react/http
示例代码:
<?php
require 'vendor/autoload.php';
$server = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) {
return React\Http\Message\Response::plaintext("Hello World\n");
});
$socket = new React\Socket\SocketServer('0.0.0.0:8000');
$server->listen($socket);
echo "Server running at http://0.0.0.0:8000\n";
?>
注意事项
- 内置服务器仅用于开发环境,性能不足以支撑生产流量。
- 生产环境建议搭配 Nginx/Apache 使用 PHP-FPM。
- 自定义 Socket 实现需处理 HTTP 协议解析、多线程等复杂问题。







