Foros del Web » Administración de Sistemas » Unix / Linux »

[SOLUCIONADO] Pasar los valores de un PHP a un Shell

Estas en el tema de Pasar los valores de un PHP a un Shell en el foro de Unix / Linux en Foros del Web. Saludos amigos, Tengo el siguiente shell: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código BASH: Ver original set -x cd / root /   urlprefix = 'http://www.midominio/script.php?secc=' urls = ( ...
  #1 (permalink)  
Antiguo 25/02/2013, 16:10
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 9 meses
Puntos: 1
Pregunta Pasar los valores de un PHP a un Shell

Saludos amigos,

Tengo el siguiente shell:

Código BASH:
Ver original
  1. set -x
  2. cd /root/
  3.  
  4. urlprefix='http://www.midominio/script.php?secc='
  5. urls=( "$urlprefix"{10,13,19,20,23,24,26,27,29,32,34,37,83} )
  6.  
  7. if /usr/bin/wget "${urls[@]}"; then
  8.     echo "Push OK"
  9.     exit 0
  10. else
  11.     echo "Push FALLO"
  12.     exit 1
  13. fi

Esto funciona muy bien pero ahora resulta que el url ha crecido y no recibe un solo parametro sino dos, este segundo parámetro debe ser el resultado de un php que debe ejecutar, ahora bien cuando ejecuto el php

Código BASH:
Ver original
  1. /usr/bin/php -q /var/www/html/panorama.com.ve/portal/app/vista/taken.php?dameclavede=hoy $1 $2 > /dev/null &
  2. echo $1
  3. echo $2
  4. exit

El linux me indica que el archivo no pudo encontrarse ya he verificado que los permisos sobre el objeto sea 755, tambien confirme la ruta, pues al llamarlo desde el browser se ejecuta sin problemas.

Por casualidad alguien podría darme alguna pista de lo que podría estar sucediendo y porque me da el error de que no se puede abrir, y lo otro como le agrego el otro parámetro al arreglo.

Muchisimas gracias....!
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.

Última edición por AlvaroG; 26/02/2013 a las 07:46
  #2 (permalink)  
Antiguo 26/02/2013, 07:46
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pasar los valores de un PHP a un Shell

Debes poner la URL entre comillas, ? es un caracter especial para la shell. Basicamente, así como la tenés estás buscando un archivo cuyo nombre es "taken.php?dameclavede=hoy", donde el ? representa a cualquier caracter.

A propósito, no uses las etiquetas de código PHP para shell, usa las HIGHLIGHT.

Saludos.
  #3 (permalink)  
Antiguo 26/02/2013, 09:46
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Pasar los valores de un PHP a un Shell

Saludos AlvaroG;

Muchisimas gracias por la respuesta, debido a que el enlace que coloque es para un ambiente de pruebas lo cual no pasará a nuestro ambiente de producción; hemos cambiado la forma de trabajar.

Ahora tengo que crear un shell donde partiendo de dos variables previamente creadas y con valor debo ejecutar la función crypt.

Todo va bien con la creación y asignación de valor a las variables pero al ejecutar la función crypt el sistema me retorna un mensaje de error, el cual es:
Código:
test.sh: line 5: syntax error near unexpected token `('
test.sh: line 5: `llave=crypt($VAR1,$VAR2)'
Sabras por casualidad porque este mensaje de error?

De antemano muchisimas gracias por el apoyo....

Un enorme abrazo.
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.
  #4 (permalink)  
Antiguo 26/02/2013, 10:35
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pasar los valores de un PHP a un Shell

Eso es porque las funciones en shell no se llaman como "funcion(var1, var2)" sino como si fueran cualquier otro comando: funcion var1 var2

Sin ver el script completo no puedo decirte si hay un error más grande.
  #5 (permalink)  
Antiguo 26/02/2013, 14:03
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Pasar los valores de un PHP a un Shell

Muchas gracias amigo,

El script que apenas estoy desarrollando es este:

Código:
#!/bin/sh
import crypt;
FECHA=`date +\%y\%m\%d`
EC=poioiYUU566jhq@
llave=crypt($EC,$FECHA)
echo $llave
exit
Necesito guardar el valor del crypt en la variable llave.

Como lo hago?

Muchisimas gracias por adelantado.
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.
  #6 (permalink)  
Antiguo 26/02/2013, 16:38
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pasar los valores de un PHP a un Shell

Eso no es un script de SH.

Para empezar, las funciones no se llaman mediante paréntesis, como te escribí antes.
Además, no existe "import" en SH.

¿No estarás tratando de escribir Perl, o PHP?
  #7 (permalink)  
Antiguo 27/02/2013, 06:52
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Pasar los valores de un PHP a un Shell

Saludos amigo,

Disculpa mi ignorancia en el tema, voy a explicarte de nuevo todo desde el principio basándome en el script que tengo actualmente.

Este es el script:
Código:
set -x
cd /root/
urlprefix='http://www.midominio/Script.php?dept='
urls=( "$urlprefix"{95,98,99,102,105,110} )
if /usr/bin/wget "${urls[@]}"; then
    echo "Actualización exitosa"
    exit 0
else
    echo "Actualización fallo"
    exit 1
fi
Como puedes ver en la variable urls inserto los valores posibles del parámetro dept el cual puede tiene los valores 95, 98,99,102, etc. Esto está funcionando sin problemas, ahora bien, a este Script.php los programadores le han asignado otro parámetro que es una llave encriptada cuyo valor se deriba de una constante y la fecha.

Código:
FECHA=`date +\%y\%m\%d`
EC=poUQWR IOUIUOW)(=9ASJASIF
Entonces debo tomar la fecha y la llave juntarlas y generar la llave la cual es el segundo parámetro que va a acompañar ahora al URL.

Los problemas son:
1.- Como encriptar o utilizar la función crypt en Centos tomado las dos variables y colocando el resultado en la variable llave
2.- Como inserto este valor dentro del arreglo como variable, pues si el segundo parámetro fuese una constante sería mas sencillo pero como el valor varia, entonces tengo que generar uno nuevo todos los días cuando se ejecute el script a traves de un cron.

Espero haberme explicado mucho mejor ahora y de nuevo muchísimas gracias por mostrar tanto interés en ayudarme con esto.

Saludos y feliz día.

Cita:
Iniciado por AlvaroG Ver Mensaje
Eso no es un script de SH.

Para empezar, las funciones no se llaman mediante paréntesis, como te escribí antes.
Además, no existe "import" en SH.

¿No estarás tratando de escribir Perl, o PHP?
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.
  #8 (permalink)  
Antiguo 27/02/2013, 08:04
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pasar los valores de un PHP a un Shell

AJDM,
Tus problemas son más de base que de código.

Te vuelvo a repetir que SH no tiene una función crypt. Existe la función en PHP y en otros lenguajes, pero para la línea de comandos (y por tanto para un programa SH) existe el programa crypt. Bueno, existe en algunos sistemas, mi Slackware no tiene un programa crypt.

Te repito además que funcion(argumento) NO ES SINTAXIS VÁLIDA para SH/KSH/BASH. No era necesario abrir un nuevo tema preguntándolo, y de hecho he borrado ese tema por duplicado.

¿Tu sistema tiene un programa crypt y querés llamarlo desde la línea de comandos? pues entonces lo que tenés que hacer es

LLAVE=`crypt $EC $DATE`

¿Querés llamar a una función crypt() de PHP? entonces tenés que escribir el código PHP que llama a la función, guardarlo, y ejecutarlo como

LLAVE=`php archivo.php`

Sobre la necesidad de regenerarlo en cada ejecución, podemos pasar a ese tema una vez resuelto el problema que tenés ahora mismo.


Saludos.
  #9 (permalink)  
Antiguo 27/02/2013, 10:21
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Pasar los valores de un PHP a un Shell

Saludos AlvaroG;

Ante todo mil gracias por haber borrado el tema y de nuevo te reitero mis disculpas por el desconocimiento al respecto.

Estuve buscando en mi sistema y no encontré el programa crypt en consecuencia me toca hacer uso de la función PHP que genera la llave, esta función es:

Código:
function kripta(){
		$fecha = date("Ymd");
		$ec = CIFRAR;
		$token = crypt($ec, $fecha);
		return $token;
	}
Donde cifrar es la constante y luego partiendo de la fecha se genera el token; ahora bien si entiendo correctamente lo que me dices; debo entonces crear un archivo PHP con esta función y desde el SH ejecutar el PHP y obtener el token. Es esto correcto?

De ser así ya he creado el archivo y me ha quedado de la siguiente manera:
Código:
<?php
	function kripta(){
		$fecha = date("Ymd");
		$ec = CIFRAR;
		$token = crypt($ec, $fecha);
		return $token;
	}
?>
Ahora en el SH debo colocar lo siguiente:

LLAVE=`php miscript.php`

Esto es correcto?
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.
  #10 (permalink)  
Antiguo 27/02/2013, 10:45
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pasar los valores de un PHP a un Shell

Casi. Debido a cómo funcionan los backticks (`), tu archivo debería ser
Código PHP:
Ver original
  1. <?php
  2. $fecha = date("Ymd");
  3. $ec = CIFRAR;
  4. $token = crypt($ec, $fecha);
  5. echo $token;
Otra opción es declarar la función, tal y como lo estás haciendo, pero también llamarla e imprimir a la pantalla lo que devuelve.
  #11 (permalink)  
Antiguo 27/02/2013, 12:35
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Pasar los valores de un PHP a un Shell

Mmmmm...! Entonces estamos avanzando, ahora bien la función esta dentro de un archivo que contienes varias funciones pues la misma es utilizada en varias ocasiones.

El asunto es entonces como llamo desde el SH a la función específica y como capturo el valor de retorno; la idea es que todo esté centralizado y utilice las funciones del sistema y no dividir.

Me entiendes...?

De nuevo mil gracias....
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.
  #12 (permalink)  
Antiguo 27/02/2013, 14:08
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pasar los valores de un PHP a un Shell

No podrás llamar desde el script shell a la función específica, porque el shell se limita a ejecutar comandos y controlar su salida. La ejecución de la función la debes hacer desde php.
  #13 (permalink)  
Antiguo 27/02/2013, 15:11
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Pasar los valores de un PHP a un Shell

Entendido AlvaroG;

Ya hice los respectivos cambios y cree un PHP tal como me sugieres y probandolo me da el siguiente error:

Código:
PHP Warning:  date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/Caracas' for 'VET/-4.0/no DST' instead in /var/local/token.php on line 3
Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/Caracas' for 'VET/-4.0/no DST' instead in /var/local/token.php on line 3 20L8p8rwtUk4Y
Procedí entonces a configurar el php.ini, reinicie el HTTPD y listo ya el script me devuelvo un valor.

Ahora el siguiente paso es tomar el valor que me devuelve y armar el segundo parámetro y meterlo en el URL.

Me puedes seguir ayudando en este mismo tema o abro un tema nuevo?

Muchiiisimas gracias....
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.

Última edición por AJDM; 27/02/2013 a las 15:22 Razón: Mejor redacción.
  #14 (permalink)  
Antiguo 27/02/2013, 18:20
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pasar los valores de un PHP a un Shell

Podés preguntar por acá, nada más mostrá lo que tengas que te de error, y trataremos de ayudarte
  #15 (permalink)  
Antiguo 01/03/2013, 15:00
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 9 meses
Puntos: 1
De acuerdo Respuesta: Pasar los valores de un PHP a un Shell

Saludos amigo;

Ya he resuelto el caso, acá les coloco el script completo para quien lo necesite:
Código:
set -x
cd /root/
token=`php token.php`
p2="&c="$token
urlprefix='http://www.midominio.net/miscript.php?secc='
urls=( "$urlprefix"{10$p2,13$p2,19$p2,20$p2,23$p2,24$p2,26$p2,27$p2,29$p2,32$p2,34$p2,37$p2,83$p2} )
if /usr/bin/wget "${urls[@]}"; then
    echo "Exitoso"
    exit 0
else
    echo "Fallido"
    exit 1
fi
exit
El script php llamado token tiene:
Código PHP:
<?php
     ini_set
('display_errors'0);
     include_once(
'/midomini.com/script.php');
     
$fecha date("Ymd");
     
$ec CIFRAR;
     
$token crypt($fecha$ec);
     echo 
$token;
?>
Te agradezco enormemente TODA la ayuda que me has brindado para resolver este caso.

Un abrazo amigo.
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.

Última edición por AJDM; 01/03/2013 a las 15:05
  #16 (permalink)  
Antiguo 25/03/2013, 09:10
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 9 meses
Puntos: 1
Pregunta Respuesta: Pasar los valores de un PHP a un Shell

Saludos amigo;

De nuevo por acá; te comento que he colocado en el ambiente de producción el script que con tu enorme ayuda logra poner a funcionar; pero en esta ocasión me genera el mensaje de error: :ambiguos redirect

Me gustaría saber que sugerencia me podrías dar al respecto; el script es el siguiente:

Código:
#!/bin/sh
exec >/tmp/cron.debug.$$ 2>&1
cd /root/
token=`php token.php`
p2="&c="$token
urlprefix='http://www.midominio.com/dir1/dir2/ScriptPHP.php?secc='
urls=("$urlprefix"{10$p2,13$p2,19$p2,20$p2,23$p2,24$p2,26$p2,27$p2,29$p2,32$p2,34$p2,37$p2,83$p2})
if /usr/bin/wget "${urls[@]}"; then
    echo "Exitoso"
    exit 0
else
    echo "Fallido"
    exit 1
fi
exit
Donde crees tu que pueda estar el error?

Desde ya mil gracias..
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.
  #17 (permalink)  
Antiguo 25/03/2013, 11:07
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pasar los valores de un PHP a un Shell

No estoy familiarizado con los arrays en bash, ¿cómo es la URL que se genera?

Para obtener más información, siempre podés correr el script con el modificador -x, para que te muestre paso por paso lo que va haciendo

ej:
bash -x script.sh


Saludos.
  #18 (permalink)  
Antiguo 25/03/2013, 14:05
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Pasar los valores de un PHP a un Shell

Saludos amigo;

El URL que se genera sería algo así:
http://www.midominio.com/dir1/dir2/ScriptPHP.php?secc=10&c=iwuiuo098r09q8wr0

Donde secc es el departamento que estoy consultando y c el token validador.

No comprendo porque en desarrollo funciona y en producción no.

Ejecutando el script con el parámetro que me sugieres me da esto:

+ exec
: ambiguous redirect
+ cd $'/root/\r'
: No such file or directory/
++ php token.php
+ token=$'ped1Phz7niLaQ\r'
' p2='&c=ped1Phz7niLaQ
' urlprefijo='http://www.midominio.com/dir1/dir2/ScriptPHP.php?secc=
')3&c=ped1Phz7niLaQ.http://www.midominio.com/dir1/dir2/ScriptPHP.php?secc=
runws.sh: line 21: syntax error: unexpected end of file

Que me puedes decir al respecto mi estimado amigo?

Desde ya muchisimas gracias....
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.
  #19 (permalink)  
Antiguo 25/03/2013, 14:38
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pasar los valores de un PHP a un Shell

Primero que nada, estoy viendo que tenés saltos de línea de Windows (\r al final de cada línea).
En estos casos, lo más común es que, si lo corres directamente, te de un error de "bad interpreter"

Por eso mismo no puede cambiar a "/root/", porque en realidad le estás pidiendo que cambie a "/root/\r", que no existe.

Convierte los saltos de línea a saltos de línea de UNIX, y prueba de nuevo. Al parecer hay algún tema extraño allí con alguna comilla de más (o de menos)
  #20 (permalink)  
Antiguo 25/03/2013, 15:31
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Pasar los valores de un PHP a un Shell

Utilice el comando sed pero no funcionó y luego utilice el tr.

Por ultimo aplique un cat para ver los saltos del archivo y esto es lo que me trajo:
Código:
#!/binr/sh^M$
#exec >/tmp/cronr.debug.$$ 2>&1^M$
set -x^M$
cd /root/^M$
tokenr=`php token.php`^M$
p2="&c="$tokenr^M$
urlprefix='http://www.midominio.com/dir1/dir2/ScriptPHP.php?secc='^M$
urls=( "$urlprefix"{10$p2,13$p2,19$p2,20$p2,23$p2,24$p2,26$p2,27$p2,29$p2,32$p2,34$p2,37$p2,83$p2} )^M$
if /usr/binr/wget "${urls[@]}"; then^M$
    echo "Exitoso"^M$
    exit 0^M$
else^M$
    echo "Fallido"^M$
    exit 1^M$
fi^M$
Probando de nuevo el script con el bash obtengo:
Código:
+ set $'-x\r'
: invalid option: set: -
set: usage: set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
+ cd $'/root/\r'
: No such file or directory/
++ php token.php
+ tokenr=$'ped1Phz7niLaQ\r'
' p2='&c=ped1Phz7niLaQ
' urlprefix='http://www.midominio.com/dir1/dir2/Script.php?secc=
')3&c=ped1Phz7niLaQ.midominio.com/dir1/dir2/Script.php?secc=
runws.sh: line 21: syntax error: unexpected end of file
Por alguna razón se está embasurando el enlace, fijate en ese )3 y lo otro es que sigo viendo los saltos de linea de windows. Q te parece?
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.

Última edición por AJDM; 25/03/2013 a las 15:48
  #21 (permalink)  
Antiguo 25/03/2013, 16:18
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Pasar los valores de un PHP a un Shell

Caso resuelto amigo, me copia por spr el archivo desde el ambiente de desarrollo y listo solucionado el problema.

Definitivamente el archivo estaba corrupto y por eso no funcionaba.

Ya lo he probado varias veces y están funcionando sin problemas.

Gracias mil y disculpa el tiempo que te he quitado.
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.

Etiquetas: linux, php, shell
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 20:04.