У меня есть несколько сценариев командной строки на PHP, которые используют exec() для выполнения таких задач, как перезапуск служб, загрузка файлов часовых поясов MySQL, и т.д. Хотя сам exec() ничего не выводит на экран, некоторые из команд, которые я запускаю, вызывают вывод, который я не могу подавить (даже с ob_start()/ob_end_clean()). Например, следующее будет загружать файлы часового пояса в MySQL. Мы периодически запускаем это, чтобы данные о часовых поясах MySQL были обновлены:
$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