No me funciona la función exec y system

Necesito ejecutar un archivo cop.bat que contiene lo siguiente:
xcopy \\server2008\sistemas\tcliente.* c:\xampp\clientes\tcliente.*
Este archivo cop.bat lo coloque en la misma carpeta donde están el resto de mis archivos php
lo ejecuto de la siguiente manera con la función exec Y NO FUNCIONA:
exec("C:\xampp\htdocs\sistem\cop.bat");
también lo hago de esta manera con la función exec y no funciona:
exec("xcopy \\server2008\sistemas\tcliente.* c:\xampp\clientes\tcliente.*")
probe también de esta manera y tampoco funciona:
system("xcopy \\server2008\sistemas\tcliente.* c:\xampp\clientes\tcliente.*")
Verifique las rutas y están correctas, además coloque el safe_mode = on y reinicie el servidor apache y aún no me funciona
Además ejecuto ese comando xcopy por la consola y si me funciona
Lo que me muestra por el explorador es: 0 Archivos Copiados.
¿Qué puedo hacer? Ya estoy desesperada con esto. Estoy trabajando con windows xp.
Por favor necesito tu ayuda lo más pronto posible

2 respuestas

Respuesta
1
Si consultamos la ayuda oficial de PHP encontramos en la página de referencia del comando "exec" la siguiente nota:
Enlace: http://es2.php.net/manual/es/function.exec.php
Contenido: Cuando safe mode esta activado, solamente se pueden ejecutar los programas que se encuentren en safe_mode_exec_dir. Por razones practicas, no se permite el uso de .. en el PATH del programa.
Si tienes activado SAFE_MODE debes indicarle al servidor que directorio permite ejecuciones.
Por otro lado, muchas veces (por cuestiones de seguridad) me he encontrado desactivadas las funciones exec y system. Crea un archivo phpinfo.php con el siguiente código:
<?php
phpinfo();
?>
Esta instrucción te muestra toda la configuración actual del PHP que estás procesando, indicándote los módulos, librerías y parámetros de las mismas. Busca la sección Configuration - PHP Core y comprueba que la directiva disable_functions esté vacía o a no value.
Hola, hice lo que me indicaste pero creo no me funciona porque no me hace la copia de los archivos.
Me arroja como variable de retorno de la función exec un "0", ¿qué significa eso?
En el caso de la función system cuando arroja un "0" como valor de retorno indica que fue exitosa la ejecución, pero no se para el exec.
Exec devuelve aquello que mostrase en pantalla la ejecución del comando. He repasado tu pregunta y veo algo que es fundamental:
No se pueden hacer ejecuciones sobre recursos compartidos. Las ejecuciones hay que hacerlas sobre ficheros que estén en dentro del "ámbito del servidor", en tu caso "C:\xampp\htdocs\".
De todas formas, la mejor forma de hacer lo que pretendes es programar en php la acción que contenga cop.bat.
Te recomiendo un vistazo a esta sección:
http://es.php.net/manual/es/ref.filesystem.php
Encontrarás ayuda muy útil.
Gracias.!. Leeré lo que me recomiendas... Cualquier cosa te consulto nuevamente.
De nada.
Solo te pediría que valoraras la pregunta, si no es mucho pedir.
Respuesta
1
Aunque esta pregunta es más para un experto en DOS que de PHP igual te la respondo. La primera instrucción servirá así:
xcopy \\server2008\sistemas\tcliente.* c:\xampp\clientes\
Debes revisar que resultado te arroja. Si no te funciona es posible que no tengas permisos para acceder al equipo server2008.
Es que si me funciona por Dos el problema es cuando lo voy a hacer desde php, que no lo hace...
ok entonces ejecutalo de la siguiente manera
system("xcopy \\server2008\sistemas\tcliente.* c:\xampp\clientes\tcliente.*");
Y revisas la salida
Y luego ejecutas como .bat a ver que te sale.
Ya lo hice y si me funciona por DOS y el .bat también me funciona, pero el problema es cuando lo voy a ejecutar por medio de php con la función exec o system que no me funciona.
Ejecutalo así entonces
<?php
error_reporting(E_ALL);
system("C:\xampp\htdocs\sistem\cop.bat 2>&1");
?>
Gracias pero aun no me funciona. Seguiré intentando
Intenta entonces esto
<?php
error_reporting(E_ALL);
system("dir \\server2008\sistemas\tcliente.* 2>&1");
?>

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas