核心原因是Apache未将请求交给PHP处理:AppServ 3.0.3默认集成NTS版PHP,但Apache模块模式需TS版php8apache2_4.dll;若DLL版本不匹配、PATH未包含PHP根目录或FastCGI配置错误,均导致.php文件被当静态资源处理。

AppServ 3.0.3 中 PHP 8.1 无法解析 .php 文件,核心原因不是 PHP 没装好,而是 Web 服务器(Apache)根本没把请求交给 PHP 处理。常见表现是:浏览器直接下载 .php 文件、显示源码、或返回空白页——这说明 Apache 正在当静态文件服务器用,完全跳过了 PHP 解析环节。
Apache 没加载 PHP 模块(最常见)
AppServ 3.0.3 默认集成的是 NTS(Non-Thread-Safe)版 PHP,但 Apache 在 Windows 下通过 mod_php(即 libphp.dll)方式运行时,必须匹配 TS(Thread-Safe)版本。若你手动替换了 PHP 目录(比如换成官方下载的 PHP 8.1 NTS 包),而未同步替换对应 TS 版本的 php8apache2_4.dll 或未正确配置模块加载,Apache 就会静默忽略 PHP,不报错也不解析。
检查方法:
- 打开
C:\AppServ\Apache24\conf\httpd.conf - 查找
LoadModule php_module行,确认路径指向的是php8apache2_4.dll(TS 版本),而非php8.dll(NTS) - 确保该行未被注释(前面没有
#) - 同时确认存在
AddHandler application/x-httpd-php .php和DirectoryIndex index.php
PATH 环境变量缺失导致扩展全挂(连带影响解析)
PHP 8.1 在 Windows 上依赖多个 DLL(如 php8.dll、ssleay32.dll、libcrypto-1_1.dll 等),它们默认放在 PHP 安装根目录(如 C:\AppServ\php\),不在 ext/ 子目录里。
Apache 的 httpd.exe 进程启动时,需靠系统 PATH 找到这些依赖。如果 C:\AppServ\php\ 未加入系统环境变量 PATH,即使 php.ini 开启了 extension=curl,也会报 “The specified module could not be found”,最终导致 php_module 初始化失败,整个 PHP 解析链中断。
解决办法:
立即学习“PHP免费学习笔记(深入)”;
- 进入「系统属性 → 高级 → 环境变量」
- 在「系统变量」中编辑
Path,新增一行:C:\AppServ\php(⚠️ 不加尾部\) - 必须重启整台 Windows(仅重启 Apache 无效)
PHP-FPM 模式未启用或配置错位(如果你改用 FastCGI)
AppServ 3.0.3 默认是模块模式(mod_php),但部分用户会尝试切换为 FastCGI(尤其想用新版 PHP)。这时若:
- 未启动
php-cgi.exe或php-fpm.exe进程 -
httpd.conf中ProxyPassMatch或Action配置错误 -
FcgidWrapper路径写成 NTS 版本却配了 TS 的启动参数
都会导致.php请求被 503 或 404 拦截,不进 PHP。
验证是否走 FastCGI:访问 http://localhost/phpinfo.php,看页面顶部的 Server API 显示的是 Apache 2.0 Handler(模块模式)还是 CGI/FastCGI。
其他关键检查点
- 确认你访问的是
http://localhost/test.php,而不是双击打开file://协议地址 - 检查
httpd.conf中DocumentRoot和<Directory>路径是否指向真实目录,权限是否允许执行脚本 - 查看
C:\AppServ\Apache24\logs\error.log,搜索[php]或module关键词,常有隐藏提示(如Cannot load module或undefined symbol) - 运行
C:\AppServ\php\php.exe -v和C:\AppServ\php\php.exe -m,确认 PHP 命令行本身能正常加载扩展
不复杂但容易忽略。



















