调试 Debian 上的 LAMP(Linux + Apache + MySQL/MariaDB + PHP)错误,通常可以按“分层排查”的思路进行。下面给你一套实用调试流程。
systemctl status apache2
启动 / 重启:
sudo systemctl start apache2
sudo systemctl restart apache2
systemctl status mariadb
# 或
systemctl status mysql
sudo tail -n 50 /var/log/apache2/error.log
常见错误:
Permission denied → 文件/目录权限问题File does not exist → 路径错误PHP Fatal error → PHP 代码或扩展问题sudo tail -n 50 /var/log/apache2/access.log
编辑 php.ini:
php --ini
确保:
display_errors = On
error_reporting = E_ALL
log_errors = On
PHP 错误日志位置:
grep error_log /etc/php/*/apache2/php.ini
sudo tail -n 50 /var/log/mysql/error.log
创建测试文件:
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
浏览器访问:
http://服务器IP/info.php
看不到页面 → Apache 或 PHP 模块问题。
检查 PHP 模块:
ls /etc/apache2/mods-enabled | grep php
如果没有:
sudo apt install libapache2-mod-php
sudo a2enmod php
sudo systemctl restart apache2
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
getenforce
如果是 Enforcing,需要放行 HTTP。
mysql -u root -p
<?php
$conn = new mysqli("localhost", "user", "pass", "db");
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "OK";
?>
常见原因:
localhost 但 MariaDB 只监听 socket检查配置:
sudo apache2ctl configtest
虚拟主机示例:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
<Directory /var/www/html>
AllowOverride All
</Directory>
</VirtualHost>
启用站点:
sudo a2ensite example.conf
sudo systemctl reload apache2
✅ Apache 是否在运行
✅ PHP 模块是否启用
✅ 错误日志是否查看
✅ 文件权限是否正确
✅ 数据库是否可连接
✅ 防火墙是否放行 80/443
如果你愿意,可以把具体报错信息或日志内容贴出来,我可以直接帮你定位是 Apache、PHP 还是 MySQL 的问题。