试运行 PHP 源码并不是双击 index.php 文件,而是要让 PHP 解释器通过 Web 服务器或内置服务器执行该文件。第一次运行 PHP 项目时如果看到浏览器直接显示原始代码,原因就在于文件没有被 PHP 处理,而是被当成普通文本返回了。整个过程可以拆成环境检查、启动服务、访问验证和错误排查四步。

一、环境检查:确认 PHP 解释器是否就绪
先打开终端或命令提示符,执行 php -v。如果显示 PHP 版本号、构建日期和版权信息,说明解释器已经安装并且系统 PATH 中能找到它。Windows 下如果提示不是内部或外部命令,需要检查系统环境变量是否包含 PHP 安装目录,例如 C:\php。macOS 与 Linux 可以通过 which php 查看实际路径。
版本匹配同样关键。许多 PHP 源码会在 composer.json 中声明最低 PHP 版本,例如要求 PHP 8.1 以上。若本机版本过低,可能在启动后抛出语法错误或类不存在。此时可以升级系统 PHP,或使用多个 PHP 版本管理工具切换。执行 php -r 'echo PHP_VERSION;' 可以快速打印当前版本号。
接着用 php -m 查看已加载扩展。常见 PHP 项目依赖 mysqli、pdo_mysql、mbstring、curl、openssl、gd 等模块。扩展未启用会导致数据库连接失败、字符串函数未定义、图片处理不可用等报错。执行 php --ini 可以看到当前加载的 php.ini 路径,修改该文件中的 extension=模块名 并保存后需要重启 PHP 服务或命令行进程。
php -v php -m php --ini
二、启动 PHP 内置服务器
PHP 从 5.4 版本开始内置了一个轻量级 Web 服务器,非常适合快速试运行源码,不必先安装 Apache 或 Nginx。进入项目根目录后执行 php -S localhost:8000,其中 -S 参数指定监听地址和端口,localhost 表示仅本机访问,8000 可替换为其他未占用端口。启动成功后终端会持续输出请求日志,浏览器访问 http://localhost:8000 即可加载站点。
php -S localhost:8000
很多框架的入口文件并不在项目根目录,而在 public 或 html 子目录中。如果仍然以根目录作为文档根目录,访问时可能会看到目录列表或 403 错误。这时可以用 -t 参数指定文档根目录,例如 php -S localhost:8000 -t public。以 Laravel 为例,其入口是 public/index.php,启动命令实际应为 php -S localhost:8000 -t public。若使用 ThinkPHP,入口通常在 public 目录;某些老项目入口在根目录,需要根据目录结构判断。
对于需要伪静态规则的项目,内置服务器默认只处理存在的文件,如果请求路径不含真实文件就会返回 404。可以通过路由器脚本实现简单重写。新建一个 router.php,并在启动时执行 php -S localhost:8000 router.php。该脚本负责判断请求是否为静态文件,若不是则把所有请求交给项目入口处理。下面是一个最基本的路由器脚本:
<?php
$uri = urldecode(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
$file = __DIR__ . $uri;
if ($uri !== '/' && file_exists($file)) {
return false;
}
require __DIR__ . '/index.php';
注意此时项目入口文件用 require 引入,避免直接输出源码。
三、常见试运行错误与排查思路
端口占用是最常见的启动失败原因。执行 php -S localhost:8000 时如果提示 Failed to listen on localhost:8000,说明该端口已被其他程序占用。可以直接换一个端口,如 php -S localhost:8080,或先找到占用进程并结束它。Windows 下可用 netstat -ano | findstr :8000 查看 PID,Linux 或 macOS 可用 lsof -i :8000。
访问页面只显示源码或空白,通常是因为没有通过 PHP 服务器访问,而是直接打开了 file:// 本地文件。必须通过 http://localhost:8000 访问。另一个原因是 PHP 文件使用了短标签 <? 而不是完整开始标记 <?php。如果源码比较老,可能依赖 short_open_tag=On,但为了兼容性和安全建议改为完整标签。开发环境可在 php.ini 中开启 display_errors=On 和 error_reporting=E_ALL,这样页面上会显示具体错误信息。
数据库连接失败也很常见。试运行 PHP 源码前先确认 MySQL 或 MariaDB 是否已启动,然后检查项目配置文件中数据库主机、端口、用户名、密码和数据库名是否正确。许多现代框架使用 .env 文件保存环境变量,需要复制 .env.example 为 .env 并填写本地数据库信息。若还没有数据表,可使用 php artisan migrate 或导入项目附带的 SQL 文件。文件权限问题多出现在 Linux 环境,例如 storage 或 cache 目录不可写,需要执行 chmod -R 775 storage 或调整目录所有者。
如果项目包含 composer.json,必须先在项目目录执行 composer install 生成 vendor 目录。没有依赖包时运行源码通常会出现 Class not found 或 Failed opening required 错误。Composer 未安装时可以先到官方渠道下载,安装完成后重新打开终端执行该命令。某些框架还需要生成应用密钥,例如 Laravel 使用 php artisan key:generate 写入 .env,避免会话加密错误。
四、从内置服务器切换到集成环境
内置服务器只适合开发调试,它单线程处理请求,性能较低,也不具备生产环境所需的完整功能。试运行成功后若希望进一步模拟线上环境,可以切换到 XAMPP、WAMP、MAMP 等集成环境,或手动配置 Nginx + PHP-FPM。集成环境安装完成后,把项目目录复制到 Apache 或 Nginx 的站点根目录,启动对应服务并通过虚拟主机绑定域名即可访问。
以 Nginx 为例,常见配置需要把 root 指向项目 public 目录,并配置 try_files 实现伪静态,同时把 .php 请求通过 fastcgi_pass 交给 PHP-FPM 处理。Apache 用户则需要确认 mod_rewrite 已开启,并保留项目自带的 .htaccess 文件。切换环境后端口可能变为 80 或 8080,访问地址也要相应调整,不再使用 php -S 启动。