Foros del Web » Programando para Internet » PHP »

Funcion exec()

Estas en el tema de Funcion exec() en el foro de PHP en Foros del Web. No encontre mucha informacion sobre la misma en la red por eso recurro a ustedes, me podrian decir si sirve para ejecutar un script (script.php) ...
  #1 (permalink)  
Antiguo 08/05/2009, 13:37
 
Fecha de Ingreso: marzo-2009
Mensajes: 355
Antigüedad: 15 años, 1 mes
Puntos: 4
Funcion exec()

No encontre mucha informacion sobre la misma en la red por eso recurro a ustedes, me podrian decir si sirve para ejecutar un script (script.php) en segundo plano, y que los resultados del mismo se guarden en un archivo de log?

Tengo entendido que se puede pero nose cual es la sintaxis ni los modificadores que necesito, gracias de antemano.
  #2 (permalink)  
Antiguo 08/05/2009, 14:44
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Funcion exec()

Ejemplo de un script que ejecuto en segundo plano:

Código php:
Ver original
  1. //    php - es el programa a ejecutar
  2. //    converter.php - Script para convertir videos
  3. //    $file_orig - Es la variable que contiene la ruta del video a convertir
  4. //    > /dev/null &   -  Esto es lo que hace que se ejecute en segundo plano
  5. exec("php converter.php $file_orig> /dev/null &");

Dentro de converter.php tengo el codigo para guardar un registro (log) de las actividades realizadas, usando fopen(), fwrite() y fclose()
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 08/05/2009, 14:49
 
Fecha de Ingreso: marzo-2009
Mensajes: 355
Antigüedad: 15 años, 1 mes
Puntos: 4
Respuesta: Funcion exec()

A mi me dijeron que lo haga igual pero agregandole un modificador -f antes del script.php, alguien sabe para que?
  #4 (permalink)  
Antiguo 08/05/2009, 14:56
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Funcion exec()

Eso deberia estar en el manual de PHP para ejecucion en linea de comando (CMD, MS-Dos, Terminal, etc.), pero imagino que es algo asi como para especificar el archivo o script que debe interpretar (ejecutar):

php - f archivo.php

De cualquier forma, en Linux (Ubuntu server) no me ha dado problemas sin ese switch.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 08/05/2009, 15:01
 
Fecha de Ingreso: marzo-2009
Mensajes: 355
Antigüedad: 15 años, 1 mes
Puntos: 4
Respuesta: Funcion exec()

Mi plataforma es Windows, supongo que lo voy a dejar solo por si acaso, por ultimo, es correcta la siguiente sintaxis para que se guarde un log de lo ocurrido? agrego que en el script en php no hay nada que escriba ningun archivo, solo esta linea de la funcion exec():

Código:
exec("php -f script.php  > /logs/email_log");
Por ultimo, debo agregar > /dev/null & para que se ejecute en segundo plano? sino de que forma se ejecutaria?

Muchas gracias.
  #6 (permalink)  
Antiguo 08/05/2009, 15:08
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Funcion exec()

Aparentemente lo que estas intentando es que toda la salida generada se guarde automaticamente en el log, pero hay un par de problemas, cada vez que se ejecute se va a crear el archivo y no lo hara en segundo plano... sino que el navegador estara esperando la finalizacion del exec() para dar por terminada la pagina actual que, ademas, te puede dar errores de tiempo de espera excedido.

Necesariamente, para ejecutar en segundo plano, debes usar > /dev/null & y, lo ideal es que modifiques tu script para que cualquier salida, en lugar de hacerla con echo se agregue al archivo de registro.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 08/05/2009, 15:14
 
Fecha de Ingreso: marzo-2009
Mensajes: 355
Antigüedad: 15 años, 1 mes
Puntos: 4
Respuesta: Funcion exec()

Entonces lo correcto seria:

Código:
exec("php -f script.php > /dev/null &");
Y dentro del archivo me ocuparia de generar las consultas necesarias para saber que sucedio, diganme si esta bien para comenzar a implementarlo.
  #8 (permalink)  
Antiguo 08/05/2009, 18:12
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: Funcion exec()

Este codigo lo utilizo para un cron desde mi pagina web.

<?php
$abrirsocket = fsockopen($_SERVER['HTTP_HOST'],80,$errorno,$errorstr,10);
if($abrirsocket) {
$datossocket = "GET /converter.php HTTP 1.1\r\n";
$datossocket .= "Host: ".$_SERVER['HTTP_HOST']."\r\n";
$datossocket .= "Connection: Close\r\n\r\n";
fwrite($abrirsocket,$datossocket);
fclose($abrirsocket);
} else {
echo "Hubo Error";
}
?>

(Esto se llama CRON sin programa cron ni CLI).
Este socket se abre y de inmediato se cierra y el archivo converter.php
queda corriendo aun cuando cerremos el navegador.

Para probarlo puedes utilzar algo asi ->

(cron.php)
$tiempos = 14;
$mimanejo = 7;
for($w = 0; $w < $tiempos; $w++) {
sleep(2);
$prueba = fopen("$mimanejo.txt","w+");
fclose($prueba);
$mimanejo++;
$final = fopen("controldos.txt", "w+");
if(!$final) { exit(); }
fwrite($final, "$mimanejo");
fclose($final);
include("mail.php");
}

(mail.php)
<?php
$email = "[email protected]";
$asunto = "Esto Es Una Prueba";
$mensaje = "Estamos probando este novedoso sistema cron de franco!!!.";
mail($email, $asunto, $mensaje);
?>

El archivo cron.php deberia sustituir a converter.php.
Esto lo que hace es crear catorce archivos de texto 7.txt, 8.txt,
etc y envia 14 correos a las direccion que ustedes pongan en
cerca de 30 segundos, segun los sleep().

La utilizacion es abrir el socket, incluir cron.php y cerrar el socket
y el archivo queda correindo. la unica forma de pararlo es apagando el apache o
buscando el proceso iniciado y matarlo con un taskkill para windows.

Esta limitado por max_exec_time, que si l ponemos ha cero (0)
podemos mantener ejecutando el archivo por dias si es necesario.

Esto es un bug de los sockets de php pero para mi es una ventaja
violenta sobre los demas sistemas de programacion. No hay duda que
php es lo mejor

Saludos
Franco
  #9 (permalink)  
Antiguo 09/05/2009, 07:13
 
Fecha de Ingreso: marzo-2009
Mensajes: 355
Antigüedad: 15 años, 1 mes
Puntos: 4
Pero sin usar ese CRON no sirve el ultimo ejemplo que di con exec? no se ejecutaria aunque el explorador se cierre?

Alguien me puede aclarar por favor? tengo que utilizarlo hoy y quiero saber si va a funcionar sino me jefe se va a enojar mucho...

Última edición por GatorV; 11/05/2009 a las 09:38
  #10 (permalink)  
Antiguo 11/05/2009, 09:29
 
Fecha de Ingreso: noviembre-2007
Mensajes: 229
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Funcion exec()

yo buscaba lo mismo y esto me salvo la vidaa leetelo bien es facilismo de utilizar...

http://www.2mdc.com/blogs/programaci...o-bajo-windows
  #11 (permalink)  
Antiguo 11/05/2009, 14:09
 
Fecha de Ingreso: marzo-2009
Mensajes: 355
Antigüedad: 15 años, 1 mes
Puntos: 4
Respuesta: Funcion exec()

Hay un problema con esa funcion, mi hosting no me da la ruta del archivo php.exe, que solucion le puedo dar?
  #12 (permalink)  
Antiguo 12/05/2009, 02:36
 
Fecha de Ingreso: noviembre-2007
Mensajes: 229
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Funcion exec()

la archivo esta en la carpeta php del servidor donde esta el php.ini y a partir de ahi la ruta la creas tu...
  #13 (permalink)  
Antiguo 12/05/2009, 07:45
 
Fecha de Ingreso: marzo-2009
Mensajes: 355
Antigüedad: 15 años, 1 mes
Puntos: 4
Respuesta: Funcion exec()

Pero yo desde mi ftp no veo esa carpeta, como puedo hacer para averiguar cual es?
  #14 (permalink)  
Antiguo 13/05/2009, 08:53
 
Fecha de Ingreso: marzo-2009
Mensajes: 355
Antigüedad: 15 años, 1 mes
Puntos: 4
Respuesta: Funcion exec()

Alguien puede aclarar mis dudas por favor?
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 19:16.