调试 Linux 下的 LAMP(Linux + Apache + MySQL/MariaDB + PHP)环境,通常按“分层排查”的思路进行。下面给你一套实用调试流程,从最常见的问题到深入排查。
systemctl status httpd # CentOS / RHEL
systemctl status apache2 # Ubuntu / Debian
未运行则启动:
systemctl start httpd
# 或
systemctl start apache2
systemctl status mysqld
# 或
systemctl status mariadb
php -v
tail -f /var/log/httpd/error_log # CentOS
tail -f /var/log/apache2/error.log # Ubuntu
确认 php.ini 中:
display_errors = On
error_reporting = E_ALL
log_errors = On
PHP 日志位置:
php --ini
tail -f /var/log/mysqld.log
# 或
tail -f /var/log/mysql/error.log
创建测试文件:
echo "<?php phpinfo(); ?>" > /var/www/html/info.php
浏览器访问:
http://服务器IP/info.php
✅ 能看到 PHP 信息 → PHP + Apache 正常
❌ 下载文件 / 空白页 → PHP 模块未加载
httpd -M | grep php
若无 php_module,安装:
yum install php php-mysql
systemctl restart httpd
a2enmod php8.1 # 按版本
systemctl restart apache2
mysql -u root -p
<?php
$conn = new mysqli("localhost","user","pass","db");
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "数据库 OK";
?>
常见错误:
localhost vs 127.0.0.1chown -R apache:apache /var/www/html # CentOS
chown -R www-data:www-data /var/www/html # Ubuntu
chmod -R 755 /var/www/html
setenforce 0 # 临时关闭测试
getenforce
如解决,配置:
setsebool -P httpd_can_network_connect_db on
firewall-cmd --list-all
# 或
iptables -L
开放 80 / 443:
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
| 现象 | 可能原因 |
|---|---|
| 403 Forbidden | 目录权限 / SELinux |
| 500 错误 | PHP 语法 / .htaccess |
| 空白页 | PHP 报错被隐藏 |
| 无法连数据库 | 账号 / 防火墙 |
| 下载 .php 文件 | PHP 模块未加载 |
strace -p <pid>(系统调用)tcpdump / netstatapachectl configtestphp -l file.php如果你愿意,可以告诉我:
我可以给你针对性的一步一步排查方案。