先看终端报错,常见原因有端口冲突(address already in use)、扩展加载失败(failed to load extension)、php 8.5.5 语法或函数不兼容(parse/fatal error);需依次排查端口占用、php.ini配置错误及版本兼容性问题。

php -S 启动失败时先看终端报错
直接执行 php -S 127.0.0.1:8000 启动失败,第一反应不是重装,而是盯住终端输出的那几行错误。常见真凶就三个:Address already in use(端口被占)、Failed to load extension 'xxx'(扩展加载失败)、Parse error 或 Fatal error(PHP 8.5.5 语法/函数不兼容)。别跳过这一步——所有后续操作都依赖它。
端口冲突是启动失败最大概率原因
PHP 8.5.5 自带服务器默认用 8000,但集成环境(如 phpenv)常让 Apache 占 80、MySQL 占 3306、PHP-FPM 占 9000。只要其中任一端口被 Skype、IIS、另一个 XAMPP 或 Windows 的 HTTP.sys(PID=4)占了,服务就起不来。
- Windows 下跑
netstat -ano | findstr :8000,拿到 PID 后用tasklist | findstr XXX查进程名 - PID=4 别
taskkill,去services.msc禁用 World Wide Web Publishing Service - 长期方案是改端口:把
php -S 127.0.0.1:8000换成php -S 127.0.0.1:8888,不用动任何配置文件
php.ini 配置错误会静默失败
PHP 8.5.5 对配置更敏感,尤其 extension_dir 路径错、扩展名拼错(比如写成 php_opcache.dll 而实际是 opcache.dll)、或启用了已移除的模块(如 mysql 扩展),都可能导致 php -m 报错或服务启动后立刻退出。
- 用
php --ini确认当前加载的是哪个php.ini - 用
php -l C:\php\php.ini检查语法,重点看括号是否闭合、分号是否遗漏 - 临时注释掉所有
extension=行,只留extension=opcache,再逐个放开测试
PHP 8.5.5 与旧代码/扩展不兼容要主动降级或适配
看到 Call to undefined function sodium_crypto_aead_xchacha20poly1305_ietfencrypt() 或 Parse error: syntax error, unexpected token "match",基本就是项目代码或 Composer 包要求 PHP ≥8.1,而你本地 CLI 和 Web SAPI 实际版本不一致,或误用了低版本二进制。
- 执行
php -v和浏览器访问info.php(内容为<?php phpinfo(); ?>)比对版本 - Apache/Nginx 场景下,确认
httpd.conf或nginx.conf中指向的是 PHP 8.5.5 的php-cgi.exe或 socket 路径 - 如果必须跑旧项目,别硬升到 8.5.5 —— phpenv 切换回 8.1 或 8.2 更省事
php.ini 却忘了重启对应服务。动手前,先确认你在跟谁对话:是命令行里的 php,还是 Apache 加载的 libphp.so,还是 Nginx 转发过去的 php-fpm 进程。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











