Comando UNIX desde PHP
Buenas he visto que más abajo hay un trhread comentando algo similar, pero no me ha servido.
El tema es que hace unos días arme un servidor de respaldo en casa a pedido de mi viejo. Esta todo perfecto, pero le molesta tener que usar SSH para apagarlo remotamente (es windowsero de alma, quiere todo fácil). Por ende ejecutó su programa preferido "jodamos a Ramiro que esta al pedo seguro", y me pidió algo más facilito para apagar el sevidor.
Ahí nomas se me vino averiguar si PHP ejecutaba comandos de Linux, al igual que C y otros tantos lenguajes.
Entonces mi idea fue, alojar un script php que al acceder mediante el navegador web apague la computadora.
Por lo que armé lo siguiente:
<?php
echo "Se va a apagar...";
$shell = shell_exec('sudo /sbin/shutdown -h now');
?>Y como el servidor no tiene Apache aún, lo decidí probar en mi laptop. Pero al ejecutar el script desde el navegador, si bien carga e imprime el echo, no apaga.
Agregué la excepción en sudoers para no tener que ingresar password para correr shutdown.
En que le estoy pifiando ?. Agradezco cualquier consejo.
Saludos y gracias.
- Inicie sesión o regístrese para enviar comentarios
- 1086 lecturas


Sacado de PHP.NET sobre la funcion shell_exec:
"This function is disabled when PHP is running in safe mode."
Echa un vistazo a ver si por ahi...
Otra cosa que siempre conviene hacer cuando aparecen estos problemas, es habilitar los logs del php / apache / etc y ver que dicen los logs. Las aplicaciones hablan, el tema es aprender a escucharlas.
Gracias por las respuestas. He intentado realizar lo que me sugirieron, acá describo la experiencia:
Las modificaciones que hice dentro de /etc/php5/apache2/php.ini son las siguientes:
; Safe Mode
; http://php.net/safe-mode
safe_mode = Off
; This directive controls whether or not and where PHP will output errors,
; notices and warnings too. Error output is very useful during development, but
; it could be very dangerous in production environments. Depending on the code
; which is triggering the error, sensitive information could potentially leak
; out of your application such as database usernames and passwords or worse.
; It's recommended that errors be logged on production servers rather than
; having the errors sent to STDOUT.
; Possible Values:
; Off = Do not display any errors
; stderr = Display errors to STDERR (affects only CGI/CLI binaries!)
; On or stdout = Display errors to STDOUT
; Default Value: On
; Development Value: On
; Production Value: Off
; http://php.net/display-errors
display_errors = Off
; Besides displaying errors, PHP can also log errors to locations such as a
; server-specific log, STDERR, or a location specified by the error_log
; directive found below. While errors should not be displayed on productions
; servers they should still be monitored and logging is a great way to do that.
; Default Value: Off
; Development Value: On
; Production Value: On
; http://php.net/log-errors
log_errors = On
; Log errors to specified file. PHP's default behavior is to leave this value
; empty.
; http://php.net/error-log
; Example:
error_log = /var/log/php_errors.log
Apliqué permisos a /var/log/php_errors.log con:
sudo chown www-data /var/log/php_errors.log
sudo chmod 777 /var/log/php_errors.log
En muchos artículos webs decían que en vez de www-data iba apache, y en otros www-data. Yo no tengo el grupo Apache :S por ende deje www-data que si lo tengo.
Volví a ejecutar el script, que funciona como hasta ayer y en /var/log/php_errors.log no hay ningún registro.
Saludos.
NOTA: Hay comandos como el "ls" que se ejecutan bien desde PHP.
suponiendo que el usuario sea www-data, prueba con:
exec("echo 'www-data' | /usr/sbin/shutdown -h now");
de todas maneras es dudoso que funcione si el usuario www-data no tiene permisos para apagar la maquina
Si tiene permisos y se resiste, entonces se puede probar un fichero bash (apagar.sh) dentro del espacio web con la orden de shutdown, y ejecutar shell_exec("apagar.sh". El fochero con propietario a www-data, con permisos de ejecucion (0755) y ese usuario www-data debe tener permisos para apagar.
saludos,
Instala el siguiente paquete:
sudo aptitude install php5-cliEdita las variables de php.ini
sudo nano /etc/php5/cli/php.iniY ya podrás ejecutar:
php5 fichero.phpshell_exec, system, exec
Con cualquiera de estar funciones puedes ejecutar comandos de consola en el servidor dónde este alojado el script, hay que tener en cuenta de que es necesario tener desactivado el safe_mode en el php.ini