Foros del Web » Programando para Internet » PHP »

Saber cuando system(); termina

Estas en el tema de Saber cuando system(); termina en el foro de PHP en Foros del Web. Bueno lo que pasa es que estoy con un script qie genera un backup del mysql por medio del comando system(''); el cual me permite ...
  #1 (permalink)  
Antiguo 11/05/2009, 20:02
Avatar de xalupeao  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago, Chile
Mensajes: 749
Antigüedad: 16 años
Puntos: 12
Saber cuando system(); termina

Bueno lo que pasa es que estoy con un script qie genera un backup del mysql por medio del comando system(''); el cual me permite enviar acciones l terminal ssh, bueno lo que pasa es que genero el archivo .sql lo convierto a .bz2 o .gz y para terminar uso

Código PHP:
<?
$ruta 
'dir_negado/archivo.ext';
$nombre basename($ruta);
header ("Content-Disposition: attachment; filename=$nombre\n\n"); 
header("Content-Type: application/force-download");
readfile($ruta);

?>
para proteger el archivo y su link.

Lo malo es que se descarga mal, ya que al parecer la compresion no ha terminado o bien la .sql no ha terminado.

como puedo establecer un parametro que me indique que cada funcion termino y luego ejecutar el tema de descargar.
  #2 (permalink)  
Antiguo 11/05/2009, 20:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Saber cuando system(); termina

Hola xalupelao,

Puedes crear otro script .sh que al terminar de realizar el backup escriba un archivo en una ruta especifica, luego desde PHP compruebas que exista ese archivo y si existe procedes o de lo contrario muestras un mensaje de error.

Saludos.
  #3 (permalink)  
Antiguo 11/05/2009, 20:29
Avatar de xalupeao  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago, Chile
Mensajes: 749
Antigüedad: 16 años
Puntos: 12
Respuesta: Saber cuando system(); termina

Podrias ejemplificar un poco.

lo que estoy haciendo yo es esto

Código PHP:
                            $cmd "mysqldump ".$db[database]." mail_masivo -u ".$db[username].
                             
" -p".$db[password]." -r \"".BACKUPDIR.$n_archivo_sql.
                             
"\" 2>&1";

                            
$cmd2 "bzip2 '".BACKUPDIR.$n_archivo_sql."' > ";
                            
system(''.$cmd.' ; '.$cmd2.'');
                            
$ruta 'respaldos/'.$n_archivo_sql.'.bz2'
                            
$nombre basename($ruta);
                            
header ("Content-Disposition: attachment; filename=$nombre\n\n"); 
                            
header("Content-Type: application/force-download");
                            
readfile($ruta); 

Última edición por xalupeao; 11/05/2009 a las 20:39
  #4 (permalink)  
Antiguo 11/05/2009, 20:51
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Saber cuando system(); termina

hey amigo por que no haces uso de cron es mucho mas comodo para hacer respaldos ;D
  #5 (permalink)  
Antiguo 11/05/2009, 21:02
Avatar de xalupeao  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago, Chile
Mensajes: 749
Antigüedad: 16 años
Puntos: 12
Respuesta: Saber cuando system(); termina

No estoy haciendo un respaldo comun, mi idea es otra es por ello que necesito un respuesta a ese drama
  #6 (permalink)  
Antiguo 11/05/2009, 21:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Saber cuando system(); termina

Lo que pasa es que lo estas haciendo dentro del mismo comando, tienes que por una parte lanzar system y no desviar la salida para esperar a que termine, al usar 2>&1 desvias la salida y eso hace que system() no espere a que termine de procesar. Por eso te lanza el archivo corrupto.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:02.