在 Ubuntu 上 php-fpm 无法解析 PHP(浏览器直接下载 PHP 文件或显示源码),通常不是 PHP 本身坏了,而是 Web 服务器没有把 .php 请求交给 php-fpm 处理。下面按最常见原因逐步排查。
Nginx 本身不能解析 PHP,必须转发给 php-fpm。
/etc/nginx/sites-enabled/default)必须有类似:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
⚠️ 注意:
php8.1-fpm.sock 版本要和实际安装一致nginx -t
systemctl reload nginx
Apache 需要启用 proxy_fcgi 和 php-fpm
a2enmod proxy_fcgi setenvif
a2enconf php8.1-fpm
systemctl restart apache2
systemctl status php8.1-fpm
如果没运行:
systemctl start php8.1-fpm
systemctl enable php8.1-fpm
ls -l /run/php/
应该看到:
php8.1-fpm.sock
如果不存在:
www-data)如果浏览器直接下载 .php 文件,说明:
✅ 正确表现:
info.phpphp -v
如果没输出:
apt install php php-fpm
| 检查项 | 命令 |
|---|---|
| php-fpm 是否在运行 | systemctl status php-fpm |
| nginx 是否 reload | nginx -t && systemctl reload nginx |
| 是否有 php 解析配置 | grep php /etc/nginx/sites-enabled/* |
| 访问 php 是否仍下载 | 浏览器访问 info.php |
server {
listen 80;
root /var/www/html;
index index.php index.html;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
}
如果你愿意,可以贴出:
php -v我可以直接帮你指出是哪一行导致 PHP 不被解析。