本文目录导读:

我来详细讲解PHP内置服务器的使用方法。
启动PHP内置服务器
基本语法
php -S localhost:8000
指定主机和端口
# 监听所有接口 php -S 0.0.0.0:8080 # 指定IP地址 php -S 192.168.1.100:8000
指定文档根目录
# 使用当前目录作为根目录 php -S localhost:8000 # 指定其他目录 php -S localhost:8000 -t /path/to/public # Windows示例 php -S localhost:8000 -t C:\www\myproject
路由配置
使用路由器文件
# 使用router.php处理请求 php -S localhost:8000 router.php
创建路由器文件(router.php)
<?php
// 路由器示例
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
// 静态文件直接返回
if (file_exists(__DIR__ . $path)) {
return false;
}
// API路由处理
switch ($path) {
case '/api/users':
echo json_encode(['users' => ['Alice', 'Bob']]);
break;
case '/api/info':
echo phpinfo();
break;
case '/home':
echo 'Home Page';
break;
default:
http_response_code(404);
echo 'Not Found';
}
?>
常用使用示例
简单项目启动
# 启动项目 cd myproject php -S localhost:8080 -t public # 启用错误显示 php -d display_errors=1 -S localhost:8080
Laravel项目
# Laravel开发服务器 php -S localhost:8000 -t public
WordPress项目
# WordPress开发环境 php -S localhost:8000
高级配置
环境变量设置
# 设置环境变量 APP_ENV=development php -S localhost:8000 # 使用多个环境变量 DB_HOST=localhost DB_PASSWORD=123456 php -S localhost:8000
使用PHP配置
# 加载自定义php.ini php -c /custom/path/php.ini -S localhost:8000 # 启用PHP扩展 php -d extension=mysqli -S localhost:8000
完整的开发环境示例
创建启动脚本(start.sh)
#!/bin/bash
# PHP开发服务器启动脚本
# 设置颜色
GREEN='\033[0;32m'
NC='\033[0m' # No Color
# 配置
HOST="0.0.0.0"
PORT="8000"
DOCROOT="public"
ROUTER="router.php"
echo -e "${GREEN}PHP Dev Server Starting...${NC}"
echo -e "${GREEN}Host: $HOST${NC}"
echo -e "${GREEN}Port: $PORT${NC}"
echo -e "${GREEN}Root: $DOCROOT${NC}"
# 检查目录是否存在
if [ ! -d "$DOCROOT" ]; then
echo "Error: Directory $DOCROOT does not exist"
exit 1
fi
# 启动服务器
if [ -f "$ROUTER" ]; then
php -S "$HOST:$PORT" -t "$DOCROOT" "$ROUTER"
else
php -S "$HOST:$PORT" -t "$DOCROOT"
fi
高级路由器(router.php)
<?php
/**
* 简单PHP路由器
* 处理API请求和静态文件
*/
// 获取请求路径
$request_uri = $_SERVER['REQUEST_URI'];
$path = parse_url($request_uri, PHP_URL_PATH);
$method = $_SERVER['REQUEST_METHOD'];
// 定义路由表
$routes = [
'GET' => [
'/' => 'home',
'/api/users' => 'getUsers',
'/api/user/{id}' => 'getUser',
'/health' => 'healthCheck',
],
'POST' => [
'/api/users' => 'createUser',
'/api/login' => 'login',
],
'PUT' => [
'/api/user/{id}' => 'updateUser',
],
'DELETE' => [
'/api/user/{id}' => 'deleteUser',
],
];
// 检查静态文件
if ($path !== '/' && file_exists(__DIR__ . $path)) {
return false; // 让PHP服务器处理静态文件
}
// 路由匹配
require_once 'controllers/UserController.php';
$controller = new UserController();
// 简单路由分发
header('Content-Type: application/json');
switch ($path) {
case '/':
echo json_encode(['message' => 'Welcome to API']);
break;
case '/api/users':
echo $controller->getAllUsers();
break;
case '/health':
echo json_encode(['status' => 'ok', 'time' => date('Y-m-d H:i:s')]);
break;
default:
// 检查RESTful模式
if (preg_match('/\/api\/user\/(\d+)/', $path, $matches)) {
$id = $matches[1];
switch ($method) {
case 'GET':
echo $controller->getUser($id);
break;
case 'PUT':
$data = json_decode(file_get_contents('php://input'), true);
echo $controller->updateUser($id, $data);
break;
case 'DELETE':
echo $controller->deleteUser($id);
break;
}
} else {
http_response_code(404);
echo json_encode(['error' => 'Not Found']);
}
}
调试技巧
查看请求信息(debug.php)
<?php
// 调试文件:显示所有请求信息
echo "Request Method: " . $_SERVER['REQUEST_METHOD'] . "<br>";
echo "Request URI: " . $_SERVER['REQUEST_URI'] . "<br>";
echo "Query String: " . $_SERVER['QUERY_STRING'] . "<br>";
echo "User Agent: " . $_SERVER['HTTP_USER_AGENT'] . "<br>";
echo "<h3>Headers:</h3>";
$headers = getallheaders();
print_r($headers);
echo "<h3>GET Parameters:</h3>";
print_r($_GET);
echo "<h3>POST Parameters:</h3>";
print_r($_POST);
echo "<h3>Body:</h3>";
$body = file_get_contents('php://input');
var_dump($body);
?>
注意事项
适用场景
✅ 本地开发测试
✅ 简单项目演示
✅ 学习PHP编程
✅ API接口测试
不适用场景
❌ 生产环境
❌ 高并发场景
❌ 需要SSL的正式项目
❌ 多域名配置
停止服务器
# 方式1:Ctrl+C 停止 Ctrl+C # 方式2:后台运行,然后停止 php -S localhost:8000 & kill %1
项目示例
完整项目结构
myproject/
├── public/
│ ├── index.php
│ ├── css/
│ └── js/
├── controller/
│ └── UserController.php
├── router.php
└── start.sh
启动命令
# 开发模式 ./start.sh # 或直接运行 php -S localhost:8000 -t public router.php
PHP内置服务器是开发调试的绝佳工具,简单快速,适合学习和本地开发使用,对于生产环境,建议使用Apache或Nginx等专业Web服务器。