我有一些使用PHP的命令行脚本,使用exec()来执行一些任务,比如重新启动服务、加载MySQL时区文件等等。虽然exec()本身不会在屏幕上输出任何内容,但是我运行的一些命令会强制输出一些我无法抑制的内容(即使使用ob_start()/ob_end_clean()也无效)。例如,以下命令会将时区文件加载到MySQL中。我们定期运行此命令以确保MySQL的时区数据是最新的。
在这个例子中,我希望所有命令的输出都被写入$output,但我仍然会看到以下输出被强制显示在屏幕上。
有没有办法抑制这个输出?重定向到/dev/null并不理想,因为这会导致PHP继续处理而不等待命令完成。
提前感谢, ~ JamesArmes
$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继续处理而不等待命令完成。
提前感谢, ~ JamesArmes
stdout
被捕获了,而给出的错误信息被写入到stderr
中,并没有被捕获,而是直接显示在屏幕上。 - etherosexec()
调用包装在ob_start()
和ob_end_clean()
中。 - Alex S