我在PHP中有许多命令行脚本使用
exec()
要执行诸如重新启动服务、加载MySQL时区文件等任务,虽然exec()本身不向屏幕输出任何内容,但我正在运行的某些命令强制输出似乎无法抑制(即使使用ob_start()/ob_end_clean())。例如,下面将把时区文件加载到MySQL中。我们定期运行此命令以确保mysqls时区数据是最新的:
$command = 'mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql';
exec($command, $output, $result);
在这个例子中,我希望命令的所有输出都写入$output,但是我仍然会得到以下强制输出到屏幕上:
Warning: Unable to load '/usr/share/zoneinfo/Asia/Riyadh87' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/Asia/Riyadh88' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/Asia/Riyadh89' as time zone. Skipping it.
...
有没有办法抑制这种输出?重定向到/dev/null并不理想,因为这将导致PHP在不等待命令完成的情况下继续处理。
事先谢谢,
~詹姆士