Foros del Web » Programando para Internet » PHP »

No logro entender exec()

Estas en el tema de No logro entender exec() en el foro de PHP en Foros del Web. Hola amigos! necesito ejecutar un codigo en segundo plano y no logro entender como funciona exec() estube buscando por google y encontre de todo pero ...
  #1 (permalink)  
Antiguo 20/12/2012, 04:16
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 557
Antigüedad: 13 años, 6 meses
Puntos: 4
No logro entender exec()

Hola amigos!
necesito ejecutar un codigo en segundo plano y no logro entender como funciona exec()
estube buscando por google y encontre de todo pero no aclaro mis dudas , es mas , quede mas confundido

desde el manual de php exec() no pude entenderlo tampoco

- La funcion exec() sirve para windows y linux?
- Cuando necesite pasarle parametros donde los agrego?
- y por ultimo aclaro que estoy trabajando con un servidor de pruebas bajo windows

si alguien seria tan amable de explicarme como funciona exec() (explicado como para que lo entienda un nene de 5 años) se lo voy a agradecer mucho
  #2 (permalink)  
Antiguo 20/12/2012, 04:56
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Respuesta: No logro entender exec()

Hasta donde yo se ejecuta aplicaciones del sistema. Es como si escribieras algo en el CMD o en la línea de comandos de linux.

Funciona en cualquier sistema siempre y cuando lo que le pidas lo tenga ese sistema. O eso creo.
  #3 (permalink)  
Antiguo 20/12/2012, 05:10
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 557
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: No logro entender exec()

Gracias alyciashape por tu respuesta
estoy probando asi pero no hace nada
Código PHP:
Ver original
  1. exec("C:\AppServ\php5\php.exe ingresar_serial.php  > /dev/null &");
y en ingresar_serial.php genero un archivo txt
Saludos
  #4 (permalink)  
Antiguo 20/12/2012, 05:34
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: No logro entender exec()

Cita:
Iniciado por tumbero_x Ver Mensaje
- y por ultimo aclaro que estoy trabajando con un servidor de pruebas bajo windows
Cita:
Iniciado por tumbero_x Ver Mensaje
Gracias alyciashape por tu respuesta
estoy probando asi pero no hace nada
Código PHP:
Ver original
  1. exec("C:\AppServ\php5\php.exe ingresar_serial.php  > [B]/dev/null[/B] &");
y en ingresar_serial.php genero un archivo txt
Saludos
Lo que no entiendo es como quieres redireccionar a "/dev/null" cuando ese dispositivo es de Linux, no de Windows, así que normal que no te funcione
__________________
Aviso: No se resuelven dudas por MP!
  #5 (permalink)  
Antiguo 20/12/2012, 06:19
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 557
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: No logro entender exec()

hola Malenko gracias por contestar
si, ya me parecia que no era de windows , pero ahi esta mi confusion , en el manual dice
Cita:
Si ejecutamos un programa con esta función y queremos dejarlo ejecutándose en segundo plano, hay que asegurarse que la salida del mismo es redireccionada a un fichero u otro flujo de salida o PHP se quedará esperando hasta que la ejecución del programa termine.
entonces desde windows a donde tendria que redireccionar?
  #6 (permalink)  
Antiguo 20/12/2012, 06:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: No logro entender exec()

Cita:
entonces desde windows a donde tendria que redireccionar?
A la capeta donde esté la aplicación en el host...

¿Tienes idea de dónde está, o si está accesible por path?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 20/12/2012, 06:23
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 557
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: No logro entender exec()

aaaaHHHH!!!
entonces tendria que redireccionar a la carpeta donde esta PHP
asi?
C:\AppServ\php5
  #8 (permalink)  
Antiguo 20/12/2012, 06:37
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: No logro entender exec()

Acaso no ves un mensaje de error por la ruta ?, de todas formas que quieres lograr exactamente ?, una parte es sencilla de emular, en win puedes redirigir la salida a NUL

Código CMD:
Ver original
  1. command > NUL

o si no quieres ver ningún mensaje de error

Código CMD:
Ver original
  1. command > NUL 2>&1

ahora la parte mandar a bg(&) es algo mas complicada, no lo he probado pero te dejo una referencia, http://stackoverflow.com/questions/6...answer-8351295

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #9 (permalink)  
Antiguo 20/12/2012, 06:55
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: No logro entender exec()

En cualquier caso, antes de decir si funciona o no exec, lo recomendable es que probase el comando "a mano" en el servidor para evitar buscar errores en el php cuando no los tenga ;)
__________________
Aviso: No se resuelven dudas por MP!
  #10 (permalink)  
Antiguo 20/12/2012, 06:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: No logro entender exec()

Cita:
entonces tendria que redireccionar a la carpeta donde esta PHP
¿Qué tiene que ver donde está PHP con dónde se encuentra la aplicación externa que quieres usar?
Si quisieras ejecutar, por ejemplo, Excel, es obvio que no está en la carpeta de PHP.
Como ruta de la aplicación tienes que indicar la ruta donde esta esa aplicación... O el nombre de la aplicación, si es que la ruta está en el PATH del sistema....

¿Entiendes a qué me refiero cuando hablo del PATH?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 20/12/2012, 07:12
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 557
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: No logro entender exec()

es la ruta de acceso a un porgrama o un archivo;
lo que yo necesito hacer es simplemente ejecutar un script php en segundo plano
entonces con exec() tengo entendido que se puede lograr
abriendo primero php.exe y pasandole el script a ejecutar eso es lo que necesito
mi pregunta es como lo haria en windows ?
de esta forma no hace nada
Código PHP:
Ver original
  1. exec("C:\AppServ\php5\php.exe  -f C:\AppServ\www\gestion\ingresar_serial.php  > null &");
si abro a mano el php.exe da este error---------------------------
php.exe - Error del sistema
---------------------------
El programa no puede iniciarse porque falta php_mbstring.dll en el equipo. Intente reinstalar el programa para corregir este problema.

----------------------------
abro php.ini y descomento la linea donde se encuentra php_mbstring.dll
y me fijo que este dentro de la carpeta ext
reinicio apache y me me da el mismo error
saludos
  #12 (permalink)  
Antiguo 20/12/2012, 07:18
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: No logro entender exec()

Si no puedes ni ejecutar el php.exe a mano, sin necesidad de que ejecute ningún script de php, es que tu instalación no está bien hecha. Soluciona eso primero ;)
__________________
Aviso: No se resuelven dudas por MP!
  #13 (permalink)  
Antiguo 20/12/2012, 07:19
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 557
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: No logro entender exec()

ok , voy a revisar eso primero
saludos y muchas gracias a todos
  #14 (permalink)  
Antiguo 20/12/2012, 07:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: No logro entender exec()

OK. Entendido.
Entonces, vamos a documentación que podemos hallar por medio de Google, entre lo que se puede leer:
Cita:
Lanzar con un exec de PHP una llamada al php.exe que ejecute el script en cuestión. Por ejemplo si tenemos el script consulta_webservice.php que es el que realiza la carga de datos del Webservice podemos escribir en nuestro script de lanzamiento lanzador_webservice.php:
Código PHP:
Ver original
  1. < ?php
  2. exec("C:\ruta_al_exe_php\php.exe -f consulta_webservice.php");
  3. ?>

Este metodo funciona optimamente bajo entornos linux, no así en windows. ¿Por qué? Pues por que deja al script lanzador esperando que termine el proceso que él mismo ha lanzado (en nuestro caso php.exe -f consulta_webservice.php)
O sea: Lo que quieres hacer, no funcionará de ese modo si lo haces en Windows...

Vamos a ver qué proponen para esto:
Cita:
Tras muchas horas de pruebas con diversas soluciones que en la www se dan a este problema, nos dimos cuenta que tan sólo una nos funcionaba correctamente. En concreto se trata de usar un programa auxiliar "psexec.exe" cuya principal utilidad consiste en lanzar programas tanto en nuestra máquina como en máquinas en red.

Veamos como usarlo:

En nuestro script lanzador usamos la funcion exec para lanzar este comando:
Código PHP:
Ver original
  1. < ?php
  2. exec('psexec -d C:\ruta_al_exe_php\php.exe -f consulta_webservice.php');
  3. ?>
Esta linea nos lanza desde el PHP el mencionado psexec (deberá estar en el mismo directorio en el que estamos), que a su vez invoca al php.exe que ejecuta nuestro script cargador que se ejecutará en segundo plano. Consiguiendo con este pequeño rodeo que el script lanzador quede libre de esperar a que acabe su ejecución el script cargador.

Para lograr esto usamos la opcion del psexec "-d"

Rizando el rizo:

Pero imaginemos que al script que queremos usar para cargar datos del webservice tenemos que pasarle parametros (por ejemplo un id) digamos: consulta_webservice.php?id=123

Si probamos a llamarlo tal cual lo hariamos desde la web, nos encontraremos con un fallo del psexec, el cual no admite ningún parametro con “?” o con “=”, así que recurriremos al uso de parametros específicos para ejecutar php desde la linea de comandos, tal que así:
Código PHP:
Ver original
  1. < ?php
  2. exec('psexec -d C:\ruta_al_exe_php\php.exe -f consulta_webservice.php -- 123');
  3. ?>

El script receptor, consulta_webservice.php, deberá recojer dicho valor de la siguiente forma:
Código PHP:
Ver original
  1. < ?php
  2. $id=$argv[1];
  3. # $id vale 123
  4. ?>

Donde el array global $argv nos proporciona todos los parametros pasados y la variable $arvc su cardinalidad.

Resumiendo:

El programa psexec nos brinda la posibilidad de ejecutar una aplicacion en segundo plano llamada desde un script PHP ejecutado en un servidor Apache en Windows, sin interrumpir el uso nuestra aplicación web.
Fuente: http://www.2mdc.com/blogs/administra...o-bajo-windows

Prueba eso y nos cuentas.

PsExec v1.98
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 20/12/2012, 07:41
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 557
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: No logro entender exec()

ya con esto tengo para entretenerme
GRacias gnzsoloyo
Saludos

Etiquetas: entender
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 15:12.