如何通过phpEnv配置Handler方法解决PHP不解析直接下载的问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计835个文字,预计阅读时间需要4分钟。
PHP 文件被浏览器直接下载,而不是执行。说明 Web 服务器(Apache 或 Nginx)基本没有将 .php 文件交给 PHP 解析器处理——这并非 PHP 环境未安装好,而是 Handler 没有配置正确。
Apache 下 .php 文件被下载:检查 AddHandler 和 LoadModule
phpEnv 默认用 Apache,但安装后若没手动启用 PHP 模块,.php 文件就会当作普通二进制文件返回,触发浏览器下载。
- 打开 phpEnv 安装目录下的
Apache/conf/httpd.conf - 确认以下两行未被注释(即前面没有
#):LoadModule php_module modules/libphp.dll AddHandler application/x-httpd-php .php
- 还要检查
PHPIniDir是否指向正确的php.ini路径,例如:PHPIniDir "C:/phpenv/php/php82"(路径以你实际安装的 PHP 版本子目录为准)
- 重启 Apache 服务(在 phpEnv 界面点「停止」再「启动」),别只刷新页面
Nginx 下 PHP 不解析:fastcgi_pass 必须指向正确的 PHP-FPM socket
phpEnv 的 Nginx 模式默认不启用 PHP-FPM,它依赖 Apache 提供的 libphp.dll;若你手动切换成 Nginx,又没配 fastcgi,.php 就会 404 或直接返回源码(取决于是否禁用了 fastcgi_intercept_errors)。
- phpEnv 当前版本(2026 年)的 Nginx 配置不自带 PHP-FPM,不能直接跑 PHP;如需 Nginx + PHP,必须额外配置 PHP-FPM 进程并监听 socket 或端口
- 若坚持用 Nginx,在
server块中加 location 匹配:location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; # 或 unix:/tmp/php-fpm.sock fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; }
-
SCRIPT_FILENAME必须用$realpath_root,否则遇到符号链接时会 404(phpEnv 中常见于虚拟站点映射)
ThinkPHP 项目里 index.php 被下载:public 目录没设为 root
这是新手最常踩的坑:把整个 ThinkPHP 项目根目录设为 Web 根目录,导致 index.php 在 public/ 外层,Apache/Nginx 找不到入口,或误判为静态文件。
立即学习“PHP免费学习笔记(深入)”;
- 在 phpEnv 的「网站 → 编辑」中,root 必须填到
www.tp.com/public,而不是www.tp.com - 确认
public/index.php存在且可读(权限没问题,Windows 下一般无碍) - 如果用了伪静态(如 ThinkPHP 的 URL 路由),Apache 需启用
mod_rewrite,Nginx 需加try_files $uri $uri/ /index.php?$query_string; - 删掉
public/.htaccess里的Options -Indexes行(某些 Apache 版本会因此拒绝响应)
Handler 配置本质是“告诉服务器:遇到 .php 后缀,别当文件发,去找 PHP 解析器”。phpEnv 的 Apache 是开箱即用的,但一旦动过 httpd.conf 或切换过 Web 服务类型,就得回头核对这三处:模块是否加载、handler 是否声明、root 是否落在 public/。漏掉任意一个,index.php 就只是个可下载的文本文件。
本文共计835个文字,预计阅读时间需要4分钟。
PHP 文件被浏览器直接下载,而不是执行。说明 Web 服务器(Apache 或 Nginx)基本没有将 .php 文件交给 PHP 解析器处理——这并非 PHP 环境未安装好,而是 Handler 没有配置正确。
Apache 下 .php 文件被下载:检查 AddHandler 和 LoadModule
phpEnv 默认用 Apache,但安装后若没手动启用 PHP 模块,.php 文件就会当作普通二进制文件返回,触发浏览器下载。
- 打开 phpEnv 安装目录下的
Apache/conf/httpd.conf - 确认以下两行未被注释(即前面没有
#):LoadModule php_module modules/libphp.dll AddHandler application/x-httpd-php .php
- 还要检查
PHPIniDir是否指向正确的php.ini路径,例如:PHPIniDir "C:/phpenv/php/php82"(路径以你实际安装的 PHP 版本子目录为准)
- 重启 Apache 服务(在 phpEnv 界面点「停止」再「启动」),别只刷新页面
Nginx 下 PHP 不解析:fastcgi_pass 必须指向正确的 PHP-FPM socket
phpEnv 的 Nginx 模式默认不启用 PHP-FPM,它依赖 Apache 提供的 libphp.dll;若你手动切换成 Nginx,又没配 fastcgi,.php 就会 404 或直接返回源码(取决于是否禁用了 fastcgi_intercept_errors)。
- phpEnv 当前版本(2026 年)的 Nginx 配置不自带 PHP-FPM,不能直接跑 PHP;如需 Nginx + PHP,必须额外配置 PHP-FPM 进程并监听 socket 或端口
- 若坚持用 Nginx,在
server块中加 location 匹配:location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; # 或 unix:/tmp/php-fpm.sock fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; }
-
SCRIPT_FILENAME必须用$realpath_root,否则遇到符号链接时会 404(phpEnv 中常见于虚拟站点映射)
ThinkPHP 项目里 index.php 被下载:public 目录没设为 root
这是新手最常踩的坑:把整个 ThinkPHP 项目根目录设为 Web 根目录,导致 index.php 在 public/ 外层,Apache/Nginx 找不到入口,或误判为静态文件。
立即学习“PHP免费学习笔记(深入)”;
- 在 phpEnv 的「网站 → 编辑」中,root 必须填到
www.tp.com/public,而不是www.tp.com - 确认
public/index.php存在且可读(权限没问题,Windows 下一般无碍) - 如果用了伪静态(如 ThinkPHP 的 URL 路由),Apache 需启用
mod_rewrite,Nginx 需加try_files $uri $uri/ /index.php?$query_string; - 删掉
public/.htaccess里的Options -Indexes行(某些 Apache 版本会因此拒绝响应)
Handler 配置本质是“告诉服务器:遇到 .php 后缀,别当文件发,去找 PHP 解析器”。phpEnv 的 Apache 是开箱即用的,但一旦动过 httpd.conf 或切换过 Web 服务类型,就得回头核对这三处:模块是否加载、handler 是否声明、root 是否落在 public/。漏掉任意一个,index.php 就只是个可下载的文本文件。

