Ejecutar comandos en background desde PHP
Estos ultimos días he estado muy activo programando varios proyectos, que si encuestas web, lectura de correos IMAP, envio de SMS, busqueda de areas de telefonos, en fin!, muchas cosas!
, pero ahora necesito ejecutar un script desde PHP pero la cosa es que para aumentar la velocidad de la página es necesario lanzarlo background y así no entorpecer con el proceso de la página.
Yo se que en linux es simple, con el amperson & al final del comando y vualaaa!, pero por alguna extraña razón no jalaba en PHP, mediante las funciones exec(), shell_exec() ni system() y mucho menos con passthru().
La prueba que hice fue hacer un script que haga un ping ilimitado, digamos que se llama ping.php, entonces tenia:
lanzador.php
y probe con
Pero nada, por alguna extraña razón tardaba mucho tiempo (cosa que no deberia a no ser que sea una falla de mi php), y en mi archivo ping.php tenia esto:
Pero como todo (casi todo) tiene una solución, encontre el comando perfecto para tal tarea!, se llama popen() con su respectivo pclose(), donde lo que hace es abrir apuntador de archivo de proceso (quien sabe que sea, pero funciona jejejeje).
Bueno, el comando quedaria así:
Yo se que en linux es simple, con el amperson & al final del comando y vualaaa!, pero por alguna extraña razón no jalaba en PHP, mediante las funciones exec(), shell_exec() ni system() y mucho menos con passthru().
La prueba que hice fue hacer un script que haga un ping ilimitado, digamos que se llama ping.php, entonces tenia:
lanzador.php
<?
echo 'ini';
execute('php ping.php &');
echo 'fin';
?>
echo 'ini';
execute('php ping.php &');
echo 'fin';
?>
<?
echo 'ini';
execute('php ping.php & > /dev/null');
echo 'fin';
?>
echo 'ini';
execute('php ping.php & > /dev/null');
echo 'fin';
?>
<?
shell_exec('ping localhost');
?>
shell_exec('ping localhost');
?>
Bueno, el comando quedaria así:
<?
echo 'inicio';
$command = "php ping.php & > /dev/null";
$v = popen($command, 'w');
pclose($v);
echo 'fin';
?>
echo 'inicio';
$command = "php ping.php & > /dev/null";
$v = popen($command, 'w');
pclose($v);
echo 'fin';
?>
Trackback URI: http://oviedos.com.mx/index.php/trackback/470

