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