Kali Linux 2023.1虚拟机Debian web服务器PHP脚本无法显示内容
1. 查看PHP错误日志定位核心问题
Debian下Apache的PHP错误日志路径通常为/var/log/apache2/error.log,Nginx环境则为/var/log/nginx/error.log(或自定义日志路径)。执行命令实时查看日志:
tail -f /var/log/apache2/error.log
访问故障脚本后,日志中会明确显示报错原因(比如时区未配置导致date函数执行中断)。
2. 修复PHP时区配置
若日志提示date(): Invalid date.timezone value类错误,需修改PHP配置文件设置默认时区:
- Apache环境:编辑
/etc/php/{你的PHP版本}/apache2/php.ini - Nginx+PHP-FPM环境:编辑
/etc/php/{你的PHP版本}/fpm/php.ini
找到date.timezone配置项,取消注释并设置有效时区(例如Asia/Shanghai):
date.timezone = Asia/Shanghai
修改后重启对应服务:
# Apache sudo systemctl restart apache2 # Nginx+PHP-FPM sudo systemctl restart php{你的PHP版本}-fpm nginx
3. 验证文件读取权限与存在性
在脚本中加入调试代码,确认nmap.html的状态:
<?php echo "Server Timestamp: "; // 输出当前时区配置 echo ini_get('date.timezone') . "<br>"; // 输出日期结果 echo date("h:i:sa") . "<br>"; $file = "nmap.html"; // 检查文件是否存在 if(file_exists($file)){ echo "文件路径:" . realpath($file) . "<br>"; echo "文件大小:" . filesize($file) . "字节<br>"; // 尝试读取并输出内容 $content = file_get_contents($file); if($content !== false){ echo "<pre>" . $content . "</pre>"; } else { echo "无法读取文件内容<br>"; } } else { echo "文件不存在:" . realpath($file) . "<br>"; } ?>
访问该调试脚本,根据输出判断是文件路径错误、权限问题还是读取限制。
4. 确认Web服务运行用户权限
Debian中Apache/Nginx默认以www-data用户运行,即使设置了777权限,也可确认文件所有者:
ls -l /var/www/html/nmap.html
若所有者非www-data,执行以下命令修改:
sudo chown www-data:www-data /var/www/html/nmap.html
5. 检查AppArmor访问限制
Debian默认启用AppArmor,可能限制PHP读取文件。查看AppArmor状态:
sudo aa-status
若usr.sbin.apache2或usr.sbin.php-fpm处于强制模式,可临时停止AppArmor测试:
sudo systemctl stop apparmor
若测试后脚本恢复正常,需调整对应AppArmor规则文件(如/etc/apparmor.d/usr.sbin.apache2),添加对/var/www/html/目录的读取权限。
6. 排查PHP版本差异
对比Ubuntu与Debian的PHP版本:
php -v
不同版本的默认配置(如时区、安全限制)可能存在差异,需确保Debian环境的PHP配置与Ubuntu一致。
内容的提问来源于stack exchange,提问作者purpleglaciers

