Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/09/2006, 05:45
Avatar de djreficul
djreficul
 
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 17 años, 9 meses
Puntos: 0
Shell_exec en Windows

He estado buscando en el foro y las repsuestas sobre la ejecución d este comando son siempre sobre Linux así q me veo en la obligación de preguntar.

No sé por qué, pero cuando intento ejecutar un comando, el cual se puede ejecutar desde cualkier lugar x estar dentro del PATH, no me lo ejecuta a menos q el ejecutable en cuestión esté en la misma carpeta q el script php.

En mi caso se trata de creación de usuarios y manejo de permisos a través de los ejecutables 'cacls' y 'net user' con sus parámetros correspondientes (Cluster, con esto consigo crear usuarios virtuales y poner permisos a las carpetas para el acceso via FTP x el q pregunté en otro tema).

Aún usando la ruta absoluta (C:\Windows\system32) como relativa mediante ../ (también he probado con \) y dándole permisos a los ejecutables al usuario q se autentifica en el sitio web no hay manera de q lo ejecute a menos q sitúe el archivo en la misma carpeta.

Aquí va el código q empleo:

Código PHP:
<?php
echo "Inicia el proceso:<br>";
$rootftp='c:/inetpub/ftproot';
$systemroot='c:/windows/system32';
$app_users="net user";
$app_perms="cacls.exe";
//Voy a obtener la lista de permisos de la carpeta especificada
echo "<br>Obteniendo lista de permisos de la carpeta <strong>$rootftp</strong>:<br>";
$ruta="$systemroot/$app_perms";
if (
file_exists ($ruta)) {
    echo 
"El archivo $ruta esta disponible...<br>";
    if(
$resultado=trim(shell_exec ("$ruta $rootftp"))) {
        echo 
"<pre>$resultado</pre><br>";
    } else {
        echo 
"No pudo ejecutarse el comando $ruta $rootftp.<br>";
    }
    echo 
"Segunda prueba:<br>";
    if (
$resultado=system("$ruta $rootftp",$retval)) {
        echo 
"Ultima linea: $resultado<br>Retorno: $retval<br>";
    }else {
        echo 
"No pudo ejecutarse el comando $ruta $rootftp.<br>";
    }
} else {
    echo 
"No se encontro el archivo $ruta<br>";
}
echo 
"<br>Fin del proceso.";
?>
Nótese q también he probado a usar la '\' (\\ según tengo entendido) así q no se me ocurre qué más falla. La solución más fácil es copiar el ejecutable a la misma carpeta pero kiero evitar eso si es posible.

Saludos.
__________________
La muerte es un camino que todos debemos recorrer...

Última edición por djreficul; 04/09/2006 a las 11:49