¿Como ejecutar shell script (bash) desde PHP?

Iniciado por ‭lipman, 9 Enero 2012, 16:19 PM

0 Miembros y 1 Visitante están viendo este tema.

‭lipman

He probado de todo, con los comandos de system, shell_exec, y exec.

Me funcionan perfectamente si lo que tengo ejecutándose es una linea, del estido de 'echo hola > asd' y demás. El problema es que yo quiero ejecutar un archivo .sh entero, y no sé como.

He buscado y no he dado con la solución que me funcione. Alguien sabe cómo?
Si poneis algo, por favor probadlo, porque como digo, he encontrado varias soluciones y ninguna me ha funcionado, osea que copiar soluciones de otro sitio no me vale, solo si lo habeis probado antes xD.

El sh que estoy intentando ejecutar y no me va es muy simple:

programa.sh
echo "hola mundo"
echo "hola" > rofl

A ver si hay suerte, un saludo y muchas gracias!

Shell Root

BASH:
Código (bash) [Seleccionar]
echo "Hola";
PHP:
Código (php) [Seleccionar]
print exec("sh PoC.sh")."\n";

SALIDA:
Código (bash) [Seleccionar]
alex@shellroot:~/Escritorio$ php PoC.php
Hola
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

~ Yoya ~

Deberías utilizar la función system(), ya que esta también muestra la salida, en cambio al utilizar exec(), solo se ejecuta el programa.

programa.sh
Código (bash,1) [Seleccionar]

#!/bin/bash
echo "hola mundo"
echo "hola" > rofl


Nota: En la primera linea, indico donde se encuentra el interprete de bash. A al ejecutar el script en bash, no es necesario indicarle que es un script en bash, con un simple ./bash basta.

index.php
Código (php) [Seleccionar]
<?php

system
('./programa.sh');

?>


Código (bash) [Seleccionar]

[yoya@Fedora pruebas]$ ls
index.php  programa.sh
[yoya@Fedora pruebas]$ chmod +x programa.sh
[yoya@Fedora pruebas]$ php index.php
hola mundo
[yoya@Fedora pruebas]$ ls
index.php  programa.sh  rofl
[yoya@Fedora pruebas]$


Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

‭lipman

Vale, se me olvidó decir un detalle sorry... Necesito que se ejecute desde el navegador, no desde la consola =)

Shell Root

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

‭lipman

He probado ambas cosas, y nada, osea, no sé en que me falla, no me sale ningún error, ninguna salida.

Si pongo esto:

Código (php-brief) [Seleccionar]
print exec("echo hola")."\n";

Si que me funciona, me saca por pantalla "hola". Pero el programa sh no me funciona. Incluso he probado a hacer un exec con varias lineas, y tampoco va:

Código (php-brief) [Seleccionar]
print exec("echo hola
echo adios")."\n";


Salida: "hola"


Un saludo

~ Yoya ~

Ps a mi me funciona tanto en el navegador como en la consola, supongo que el error puede ser por alguna propiedad del php.ini o no tengas permisos suficientes para crear archivos en el dir que estas utilizando.

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

‭lipman

Lo de los permisos no creo que sea:
-Puedo ejecutar el programa.sh directamente desde la consola (cygwin) y me crea el archivo correctamente
-Tengo puesta la carpeta htdocs donde está el index del server como 777
-Tengo puesto a 777 programa.sh y el index.php

Con respecto lo del php.ini, que yo sepa el problema suele ser el "safe_mode" y lo tengo en off.


Osea yoya, lo que me estás diciendo es que exáctamente lo que tú has puesto, te funciona ejecutándolo desde el navegador? Me voy a tener que preocupar entonces...

~ Yoya ~

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

mokoMonster

Cita de: lipman en 10 Enero 2012, 16:45 PM
Lo de los permisos no creo que sea:
-Puedo ejecutar el programa.sh directamente desde la consola (cygwin) y me crea el archivo correctamente
-Tengo puesta la carpeta htdocs donde está el index del server como 777
-Tengo puesto a 777 programa.sh y el index.php

Con respecto lo del php.ini, que yo sepa el problema suele ser el "safe_mode" y lo tengo en off.


Osea yoya, lo que me estás diciendo es que exáctamente lo que tú has puesto, te funciona ejecutándolo desde el navegador? Me voy a tener que preocupar entonces...

En que servidor lo tienes?

Saludos
"Se necesitaron unos instantes para cortarle la cabeza, pero se necesitara un siglo para producir otra igual."
Lagrange