PhpStorm内置服务器404主因是Document root未正确设为public目录;必须通过Run→Edit Configurations→PHP Built-in Web Server,将Document root设为绝对路径的public目录(如/path/to/project/public),而非项目根目录,否则入口文件无法定位、路由失效。

PhpStorm 运行 PHP 文件报 “找不到入口文件” 或浏览器打开 404,根本不是代码写错了,而是它压根没按你想的目录结构去启动服务。
为什么内置服务器访问 index.php 会 404
PhpStorm 的 PHP Built-in Web Server 默认以项目根目录为 Document root,但绝大多数 PHP 项目(Laravel、Symfony、ThinkPHP 等)要求 Web 入口必须在 public/ 目录下。如果你直接右键 index.php → Run,它会尝试从项目顶层找路由,而实际 index.php 依赖 ../vendor 和 ../config 等上级路径——此时工作目录错位,require 就失败。
- 现象:浏览器显示
File not found.或Warning: require(...): failed to open stream - 验证方式:在终端手动跑
php -S 127.0.0.1:8000 -t public/,能正常访问说明问题出在 PhpStorm 配置 - 关键点:
-t参数指定的是“文档根目录”,不是“要运行哪个 PHP 文件”
如何正确配置 Built-in Web Server 的 Document root
不能靠右键 Run 单个文件来模拟真实 Web 环境;必须显式配置一个 Server 启动项,把 public/(或你项目的实际 Web 入口目录)设为 Document root。
- 菜单栏 →
Run→Edit Configurations…→ 左上角+→ 选PHP Built-in Web Server -
Host填localhost,Port建议用8000或8080(避开系统保留端口) -
Document root必须是绝对路径,且指向public目录本身(例如/path/to/myproject/public),不是项目根目录 -
Router script可留空(默认走内置路由),Laravel 用户可填public/index.php(相对Document root而言) - 保存后点击绿色三角运行,地址栏会是
http://localhost:8000/,不是带长路径的临时链接
为什么改了 Document root 还是跳转不到类定义
这和 Web 服务器配置无关,是 PhpStorm 的代码索引机制没对齐——Document root 只影响运行时路径,不影响 IDE 对源码的理解。
立即学习“PHP免费学习笔记(深入)”;
- 如果
Go to Declaration失败,先检查src/是否被标记为Sources Root(右键 →Mark Directory as→Sources Root) -
public/绝对不要标成Sources Root,否则 IDE 会错误索引 HTML/JS 中的 PHP 函数名,导致跳转混乱、内存暴涨 - 正确做法:保持
public/不标记,右键 →Mark Directory as→Resources Root,这样require '../config/app.php'这类路径提示才准 - 如果用了 Composer,确认
vendor/autoload.php被识别(打开它,顶部应有Composer autoloader提示)
Terminal 启动 PHP 内置服务器 vs PhpStorm 配置的区别
你在 Terminal 里执行 php -S localhost:8000 -t public/ 成功,不代表 PhpStorm 的配置就自动生效——两者完全独立。
- Terminal 命令受当前 shell 的
$PATH、php.ini、扩展启用状态影响;PhpStorm 的PHP Built-in Web Server只认你配置的Interpreter路径和Document root - 常见错配:Interpreter 指向
/opt/homebrew/bin/php,但Document root却填了./public(相对路径不被接受,必须是绝对路径) - Windows 用户注意:
Document root字段里路径分隔符用/或\都可以,但别混用;XAMPP 用户务必确保 Interpreter 是php.exe,不是php-cgi.exe - Mac 用户若用 Homebrew 安装 PHP,终端能跑通但 PhpStorm 报错,大概率是 GUI 启动未继承
~/.zshrc,请改用open -a PhpStorm.app启动
最常被忽略的一点:PhpStorm 的 Document root 和 Sources Root 是两套逻辑,前者管“运行时从哪读文件”,后者管“编译期从哪找类”。改了一个,另一个不会自动同步。尤其当项目结构嵌套深(比如 packages/my-lib/src)时,漏标某一层 Sources Root,Find Usages 就会静默失效,而错误提示里根本不提这事。


















