php实现webserver
PHP 内置开发服务器
PHP 5.4+ 版本自带简易开发服务器,适合本地测试环境。执行以下命令启动:
php -S localhost:8000
默认监听8000端口,根目录为当前命令行所在路径。可通过 -t 参数指定文档根目录:
php -S localhost:8000 -t /path/to/public
基于 Swoole 的高性能方案
Swoole 扩展提供常驻内存的 HTTP 服务器实现:
$http = new Swoole\Http\Server("0.0.0.0", 9501);
$http->on('Request', function($request, $response) {
$response->header("Content-Type", "text/html; charset=utf-8");
$response->end("<h1>Hello Swoole</h1>");
});
$http->start();
需要先安装 Swoole 扩展:
pecl install swoole
Workerman 框架方案
Workerman 是纯 PHP 实现的异步网络库:
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$http_worker = new Worker("http://0.0.0.0:2345");
$http_worker->count = 4;
$http_worker->onMessage = function($connection, $request) {
$connection->send('Hello Workerman');
};
Worker::runAll();
通过 Composer 安装:
composer require workerman/workerman
Apache/Nginx 生产环境配置
生产环境建议使用专业 Web 服务器配合 PHP-FPM:
Nginx 配置示例
server {
listen 80;
server_name example.com;
root /var/www/html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
PHP-FPM 池配置
[www]
user = www-data
group = www-data
listen = /run/php/php8.2-fpm.sock
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
路由处理实现
简易路由方案示例:
$request = $_SERVER['REQUEST_URI'];
switch (strtok($request, '?')) {
case '/':
echo 'Home Page';
break;
case '/api':
header('Content-Type: application/json');
echo json_encode(['data' => 'API Response']);
break;
default:
http_response_code(404);
echo '404 Not Found';
}
静态文件处理
开发服务器中处理静态文件:
if (preg_match('/\.(?:png|jpg|css|js)$/', $_SERVER["REQUEST_URI"])) {
return false; // 直接返回文件
} else {
// 处理动态请求
}






