Foros del Web » Programando para Internet » PHP »

problema con exec()

Estas en el tema de problema con exec() en el foro de PHP en Foros del Web. tengo una pagina que mando un comando al puerto ttyUSB0 pero el comando no es enviado. tengo exec() activado, si lo hago por consola funciona ...
  #1 (permalink)  
Antiguo 21/08/2012, 19:09
Avatar de Maverik2  
Fecha de Ingreso: agosto-2010
Mensajes: 67
Antigüedad: 13 años, 7 meses
Puntos: 1
Pregunta problema con exec()

tengo una pagina que mando un comando al puerto ttyUSB0 pero el comando no es enviado.

tengo exec() activado, si lo hago por consola funciona bien. no se que problema tengo con php que no envia el comando...

led dejo mi codigo

Código:
$datos= escapeshellcmd($_REQUEST["datos"]);
$comando="echo ".$datos." >> /dev/ttyUSB0"; 
//Enviamos por puerto serie los datos
exec('$comando');
echo $comando;
  #2 (permalink)  
Antiguo 21/08/2012, 19:29
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: problema con exec()

exec() es una función, por lo tanto, requiere el uso de paréntesis para enviar parámetros y supongo que la segunda línea te debe marcar algún error.

La primera no funciona a causa de las comillas, prueba esto y dime qué obtienes en cada línea:

Código PHP:
Ver original
  1. $comando = "echo $datos >> /dev/ttyUSB0";
  2.  
  3. echo '$comando' . '<br />';
  4. echo "$comando" . '<br />';
  5. echo $comando . '<br />';

Lo del <br /> es sólo para que puedas ver cada echo en una línea y estoy seguro que te darás cuenta de lo que está mal después de hacer las pruebas.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 21/08/2012, 22:25
danneg
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problema con exec()

Bueno, lo que yo tengo entendido es que tiene 2 parametros (opcionales claro); el primero es input y el segun output. ej.

Código PHP:
Ver original
  1. $ouput = Array();
  2. $datos= escapeshellcmd($_REQUEST["datos"]);
  3. $comando="echo ".$datos." >> /dev/ttyUSB0";
  4. exec($comando, $output); //Y hay que quitar las comillas ...
  5. for($line in $output){
  6.     echo $output[$line] . '<br />';
  7. }
  #4 (permalink)  
Antiguo 21/08/2012, 22:30
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: problema con exec()

danneg, de hecho, son 3 parámetros, pero sólo el primero es requerido.

Ya que repetiste el error de Maverik2, te cuento que el problema ahí es por las comillas... tan sencillo como que:

Código PHP:
Ver original
  1. $comando = "echo $datos >> /dev/ttyUSB0";
  2.      
  3.     echo '$comando' . '<br />';  // mostrará: $comando<br />
  4.     echo "$comando" . '<br />'; // Mostrará el comando correctamente
  5.     echo $comando . '<br />';    // Mostrará el comando correctamente

Las variables NO son evaluadas por PHP cuando están entre comillas sencillas.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 21/08/2012, 23:54
danneg
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problema con exec()

Triby, sí me dí cuenta de mi error, y de hecho puse un comentario:

Código PHP:
Ver original
  1. exec($comando, $output); //Y hay que quitar las comillas ...

Pero gracias por la observación ;) ... veo que tienes ojo de águila, por que lo corregí al momento XD
  #6 (permalink)  
Antiguo 22/08/2012, 19:38
Avatar de Maverik2  
Fecha de Ingreso: agosto-2010
Mensajes: 67
Antigüedad: 13 años, 7 meses
Puntos: 1
Pregunta Respuesta: problema con exec()

bueno en este momento tengo este codigo:

Código:
$datos= escapeshellcmd($_REQUEST["datos"]);
$comando="echo ".$datos." >> /dev/ttyUSB0"; 
//Enviamos por puerto serie los datos
exec('$comando');
echo $comando;
gracias por las respuestas, sin dudas se me paso eso por alto....

pero el problema creo que no pasa por el código (aunque si estaba mal) sino por alguna configuración en php que no me deja acceder al dispositivo. desde la ventana de comando envió el comando y funciona perfectamente pero desde php no llega simplemente no me manda datos....
  #7 (permalink)  
Antiguo 22/08/2012, 19:53
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: problema con exec()

Y si quitas las comillas simples que tienes en exec()?
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 22/08/2012, 22:00
 
Fecha de Ingreso: septiembre-2008
Mensajes: 350
Antigüedad: 15 años, 7 meses
Puntos: 31
Respuesta: problema con exec()

no se a que dispositivo le quieres mandar información pero ami con Debian le intentaba mandar
comandos a un Arduino y con exec() no pasaba nada. te voy a dejar la info como lo logre.

1 asegúrate que php tiene acceso a: /dev/ttyUSB0
chmod 0777 /dev/ttyUSB0
en my caso no es: /dev/ttyUSB0 es /dev/ttyACM0

2 intentalo con este code:

Código PHP:
<?php 
$datos 
$_REQUEST["datos"];
$port fopen("/dev/ttyUSB0""r+");
fwrite($port$datos);
sleep(2);    
fclose($port);
echo 
$datos,'<br /><br />';
?>
espero esto te pueda ayudar en algo.
__________________
╬-----╬
║☺₧☻║
╬-----╬
  #9 (permalink)  
Antiguo 23/08/2012, 17:41
Avatar de Maverik2  
Fecha de Ingreso: agosto-2010
Mensajes: 67
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: problema con exec()

Genial, ahora se comunica con el arduino solo tenia que darle permisos a /dev/ttyUSB0

solo una cosa en el monitor serial de arduino le paso el código y funciona sin problemas. pero en linux si le envió el echo por linea de comando no funciona bien, recibe los datos, prende el led pero luego lo apaga.

aclaro que uso virtualbox
  #10 (permalink)  
Antiguo 23/08/2012, 19:08
 
Fecha de Ingreso: septiembre-2008
Mensajes: 350
Antigüedad: 15 años, 7 meses
Puntos: 31
Respuesta: problema con exec()

En Debian Yo no he tenido ningún problema como ese.

pero intenta usar una resistencia usa una de 110 ohmios
__________________
╬-----╬
║☺₧☻║
╬-----╬
  #11 (permalink)  
Antiguo 26/08/2012, 17:04
Avatar de Maverik2  
Fecha de Ingreso: agosto-2010
Mensajes: 67
Antigüedad: 13 años, 7 meses
Puntos: 1
Pregunta Respuesta: problema con exec()

ok quedo pronto, era problema de virtualbox.


ahora otra consulta:

tengo una BD con datos del arduino y los pins, tengo que mostrar esos datos en botones como hago para mostrar los datos asi??

porque se conectarme a la BD y obtener los datos pero a la hora de mostrarlos siempre me sale el primero

Código:
$result=mysql_query("select * from arduinos where luces=1");
$num=mysql_numrows($result);


$nombreardu=$result['arduino'];
$pinardu=$result['pin'];
$estadoardu=$result['estado'];
$nombrepinardu=$result['nombrepin'];
ese es mi codigo y para mostrar es este:

Código:
<?php 
echo $nombrepinardu.": <a href=on.php?cmd=".$nombreardu."-acc-onn-".$pinardu." class='large button green'>ON&nbsp;</a>";
echo "<a href=off.php?cmd=".$nombreardu."-acc-off-".$pinardu." class='large button red'>OFF</a><br />";
?>
pero en la BD tengo 10 registros o menos de esos como puedo hacer para q me sagan los 10 botones con sus datos????
  #12 (permalink)  
Antiguo 26/08/2012, 19:25
 
Fecha de Ingreso: septiembre-2008
Mensajes: 350
Antigüedad: 15 años, 7 meses
Puntos: 31
Respuesta: problema con exec()

échale un vistazo a esta pagina: http://www.w3schools.com/php/php_mysql_select.asp

al final encontraras un; Previous y un Next Chapter para ver mas opciones Referente a Mysql
__________________
╬-----╬
║☺₧☻║
╬-----╬

Etiquetas: arduino, exec
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 17:31.