在 Ubuntu 上 PHP 报 500 Internal Server Error,通常不是 PHP 语法本身直接提示,而是服务器(Apache / Nginx + PHP)无法正确执行脚本。下面按常见原因逐一说明,你可以对照排查。
PHP 报错被关闭时,就会直接 500。
排查方法:
tail -n 50 /var/log/apache2/error.log
# 或
tail -n 50 /var/log/nginx/error.log
或临时打开错误显示(仅测试):
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
php -v
a2enmod php8.1 # 根据你的 PHP 版本
systemctl restart apache2
检查:
apache2ctl -M | grep php
确认有:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
并:
systemctl restart php8.1-fpm
systemctl restart nginx
Web 服务器用户(www-data)无法读取文件。
ls -l /var/www/html/yourfile.php
修复:
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
错误示例:
php_value xxx yyy
若 PHP 不是 Apache 模块,会 500。
测试:
mv .htaccess .htaccess.bak
例如用了 mysqli 但没装:
php -m | grep mysqli
安装:
apt install php8.1-mysql
systemctl restart apache2
Ubuntu 默认 AppArmor:
aa-status
请告诉我:
我可以直接帮你定位到具体原因。