Pomijanie danych wyjściowych wywołań exec () w PHP

Używam wielu skryptów wiersza poleceń w PHPexec () do wykonywania zadań, takich jak restartowanie usług, ładowanie plików strefy czasowej MySQL, itp. Chociaż sam exec () nie wysyła niczego na ekran, niektóre z uruchomionych przeze mnie poleceń wymuszają wyjście, którego nie mogę pominąć (nawet z ob_start () / ob_end_clean ()). Na przykład poniższe ładowałyby pliki stref czasowych do MySQL. Uruchamiamy to okresowo, aby upewnić się, że dane strefy czasowej MySQL są aktualne:

 $command = 'mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql';
 exec($command, $output, $result);

W tym przykładzie oczekiwałbym, że wszystkie dane wyjściowe polecenia zostaną zapisane w $ output, ale nadal otrzymuję następujące dane wymuszone na ekranie:

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.
...

Czy jest jakiś sposób na powstrzymanie tego wyjścia? Przekierowanie do / dev / null nie jest idealne, ponieważ spowodowałoby to, że PHP kontynuowałoby przetwarzanie bez czekania na zakończenie komendy.

Z góry dziękuję,
~ JamesArmes

questionAnswers(4)

yourAnswerToTheQuestion