PHP 怎么PHP内置服务器

wen PHP项目 3

本文目录导读:

PHP 怎么PHP内置服务器

  1. 启动PHP内置服务器
  2. 路由配置
  3. 常用使用示例
  4. 高级配置
  5. 完整的开发环境示例
  6. 调试技巧
  7. 注意事项
  8. 停止服务器
  9. 项目示例

我来详细讲解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服务器。

抱歉,评论功能暂时关闭!