jueves, 8 de abril de 2010

Error Warning: move_uploaded_file al subir archivos al servidor localhost+apache+php mediante un formulario

Bueno, el tema es como subir archivos a un servidor, mediante un formulario, sin embargo, luego de hacerlo todo, el servodor me arrojaba lo sigiente aviso:

"Warning: move_uploaded_file(C:/Apache/htdocs/miweb/tmp) [function.move-uploaded-file]: failed to open stream: Permission denied in C:\Apache\htdocs\miweb\formEdit.php on line 49

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\tmp\phpA5B6.tmp' to 'C:/Apache/htdocs/miweb/tmp' in C:\Apache\htdocs\miweb\formEdit.php on line 49"

jejeeje lo peor de todo es que he revisado y en ningun lado aprece nada definitivo para solucionarlo, así que aquí les dejo mi aporte por si les sirve...
antes mi configuración: tengo windows 7, apache, php y mysql y he aquí lo que encontré...

1) no es indispensable pero ayuda, revisar en el php.ini que register_globals = on y no off,
2) sobre los permisos de las carpetas en win.. no son problema.
3) en caso de querer modificar o agregar permisos específicos para carpetas en apache, usar


AllowOverride None
Options None
Order deny,allow
Allow from all


ver mas configuraciones...

aunque este tampoco es el problema.
4) ahora retomo el script original...
< ? $destino = "C:/Apache/htdocs/miweb/tmp";
$origen = $_FILES['imagen']['tmp_name'];
move_uploaded_file( $origen, $destino );
? >

existen 2 problemas, por lo menos en windows, no lo he probado en linux, y es que falta agregar "/" al final de la ruta absoluta $destino = ‘C:/Apache/htdocs/miweb/tmp/’;
y además, falta agregar el nombre al archivo, sin esto simpre apareceran los Warnings pues el script intenta escribir en un archivo sin nombre. La linea pues quedará así:
$name=$_FILES['imagen']['name'];
move_uploaded_file( $origen, $destino.$name );
en total,
< ? $destino = 'C:/Apache/htdocs/miweb/tmp/';
$origen = $_FILES['imagen']['tmp_name'];
$name=$_FILES['imagen']['name'];
move_uploaded_file( $origen, $destino.$name );
? >
... así conservamos el nombre original del archivo... Saludos

6 comentarios:

  1. Muchas gracias Alfredo por la info.

    ResponderEliminar
  2. Gracias. Me ayudo a resolver mi problema en MAC.

    ResponderEliminar
  3. Muchas gracias, me ayudaste a resolver un problema que no conseguía. Te debo una cerveza!

    ResponderEliminar
  4. La clave está en la variable $destino = "C:/Apache/htdocs/miweb/tmp" hay que usar la ruta absoluta.

    ResponderEliminar
  5. '../carpetaimagenes/' funciona exc gracias

    ResponderEliminar