不能直接用 cron 执行 phpinfo() 保存 HTML,因 CLI 模式缺失 Web SAPI 环境,导致配置加载不全、$_SERVER 为空、输出非标准 HTML;正确做法是部署内网 phpinfo.php 并用 curl 定时抓取。
不能

cron 定时执行 phpinfo() 并保存 HTML——因为 phpinfo() 依赖完整的 PHP SAPI 环境(如 Web Server 的 headers、request context),命令行下运行会缺失大量模块信息或报错,且输出格式错乱。
CLI 模式下的 phpinfo() 和 Web 模式差异极大:
.htaccess 或 php_admin_value 类配置opcache 在 CLI 默认关闭)$_SERVER 变量为空或极简,导致“Loaded Configuration File”等字段显示为 no value
在服务器上部署一个仅限内网访问的 phpinfo.php,再用 cron 调用 curl 抓取其响应并保存。这是唯一能反映真实运行环境的方式。
操作步骤:
phpinfo.php 放到 Web 可访问目录(如 /var/www/html/phpinfo.php),内容为:0 3 * * * /usr/bin/curl -s http://localhost/phpinfo.php > /var/log/phpinfo_$(date +\%Y\%m\%d).html 2>/dev/null
find /var/log -name "phpinfo_*.html" -mtime +30 -delete
如果需要监控 PHP 配置是否被意外修改,可在保存的同时生成摘要:
curl 抓取后,用 grep 提取关键行生成简版快照:curl -s http://localhost/phpinfo.php | grep -E "(PHP Version|Loaded Configuration File|extension_dir|memory_limit|upload_max_filesize)" > /var/log/php_summary_$(date +\%Y\%m\%d).txt
diff 对比前后两天的 php_summary_*.txt,配合邮件通知(mail -s "PHP config changed" admin@example.com )
phpinfo() 做 diff,HTML 中时间戳、进程 ID 等动态内容会导致误报真正有效的存档,必须和线上环境同源同路径同权限。任何绕过 Web SAPI 的“简化方案”,最后查问题时都会少掉最关键的一块拼图。