php实现webserver
PHP 实现 Web 服务器
PHP 内置了一个简易的 Web 服务器,适合开发环境快速测试,但不建议用于生产环境。以下是具体实现方法:
启动内置 Web 服务器
在项目目录下执行以下命令,启动一个监听 8000 端口的 Web 服务器:
php -S localhost:8000
默认会将当前目录作为文档根目录,访问 http://localhost:8000 即可。
指定根目录和路由脚本
若需自定义文档根目录或路由处理脚本:

php -S localhost:8000 -t /path/to/root /path/to/router.php
-t 参数指定根目录,最后一个参数为路由脚本(可选)。
处理所有请求的路由脚本
创建一个 router.php 文件实现统一路由:

<?php
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
if (file_exists(__DIR__ . $path)) {
return false; // 静态文件直接返回
} else {
include __DIR__ . '/index.php'; // 动态请求转发
}
?>
监听所有网络接口
允许局域网内其他设备访问:
php -S 0.0.0.0:8000
生产环境替代方案
生产环境建议使用专业 Web 服务器如 Nginx 或 Apache 配合 PHP-FPM:
# Nginx 配置示例
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
注意事项
- 内置服务器单线程处理请求,性能有限
- 不支持 HTTPS
- 长时间运行需配合
nohup或screen - 日志输出到控制台,可通过重定向保存
实现多线程 Web 服务器
如需更完整的实现,可用 pthreads 扩展创建多线程服务器:
<?php
class WebServer extends Thread {
public function run() {
$socket = stream_socket_server("tcp://0.0.0.0:8000");
while ($conn = stream_socket_accept($socket)) {
fwrite($conn, "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nHello World");
fclose($conn);
}
}
}
$server = new WebServer();
$server->start();
?>






