Tengo un número de scripts de línea de comandos en PHP que usan exec() para realizar tareas tales como reiniciar servicios, cargar archivos de zona horaria MySQL, etc. Mientras que exec() no da salida a nada En la pantalla, algunos de los comandos que estoy ejecutando están forzando la salida que no puedo suprimir (incluso con ob_start()/ob_end_clean()). Por ejemplo, lo siguiente cargaría archivos de zona horaria en MySQL. Corremos esto periódicamente para que los datos seguros MySQLs zona horaria es hasta la fecha:Suprimir el resultado de las llamadas exec() en PHP
$command = 'mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql';
exec($command, $output, $result);
En este ejemplo, yo esperaría toda la salida de la orden para ser escrito en la salida $, pero aún así obtener la siguiente salida forzada a la pantalla:
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.
...
¿Hay alguna manera de suprimir esta salida? Redirigir a/dev/null no es ideal ya que eso haría que PHP continúe procesando sin esperar a que se complete el comando.
Gracias de antemano,
~ JamesArmes
Para aquellos que se preguntan por qué el código de ejemplo no funciona, es porque solo 'stdout' es capturado. Los errores dados se escriben en 'stderr', que no se captura, sino que se vuelca a la pantalla. – etheros
Vine a este hilo a través de google buscando una manera de suprimir todos los resultados cuando se ejecuta una secuencia de comandos PHP CLI. Mi solución fue envolver la llamada 'exec()' en 'ob_start()' y 'ob_end_clean()'. –