Foros del Web » Programando para Internet » PHP »

Problemas al subir archivos

Estas en el tema de Problemas al subir archivos en el foro de PHP en Foros del Web. Buenas phperos, Mirad, estaba haciendo mi primera pagina web e intente crear un codigo simple para subir archivos, en teoria deberia funcionar pero hay algun ...
  #1 (permalink)  
Antiguo 28/06/2011, 03:31
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 12 años, 11 meses
Puntos: 4
Pregunta Problemas al subir archivos

Buenas phperos,

Mirad, estaba haciendo mi primera pagina web e intente crear un codigo simple para subir archivos, en teoria deberia funcionar pero hay algun fallo estupido que no consigo ver, haber si vosotros podeis verlo. El mensaje que me mando fue:

Warning: copy(C: mpp\htdocs/1.Programa Macro II 2011.pdf) [function.copy]: failed to open stream: Invalid argument in C:\xampp\htdocs\upl2.php on line 42
El archivo se ha subido correctamente al servidor, muchas gracias
Nombre: 1.Programa Macro II 2011.pdf

Tamaño: 13047

Tipo: application/pdf


a base de ver muchos scripts y con algo de ayuda me salio el siguiente codigo:

Código PHP:
Ver original
  1. <HTML>
  2. <HEAD><TITLE>Subir Archivo</TITLE>
  3. </HEAD>
  4. <BODY>
  5. <?
  6.  
  7. $extensiones=array("html","exe","php");
  8.  
  9. $path="C:\xampp\htdocs";
  10. $nombre=$_FILES['archivo']['name'];
  11. $tamanio=$_FILES['archivo']['size'];
  12. $tipo=$_FILES['archivo']['type'];
  13. $var = explode(".","$nombre");
  14. $num = count($extensiones);
  15. $valor = $num-1;
  16. for($i=0; $i<=$valor; $i++) {
  17.     if($extensiones[$i] == $var[1]) {
  18.     echo "Tipo de Archivo no admitido";
  19.     exit;
  20.     }
  21. }
  22. if (is_uploaded_file($_FILES['archivo']['tmp_name']))
  23.  {
  24.   copy($_FILES['archivo']['tmp_name'], "$path/$nombre");
  25.   echo "El archivo se ha subido correctamente al servidor, muchas gracias <p>";
  26.   echo "Nombre: $nombre <p>";
  27.   echo "Tamaño: $tamanio <p>";
  28.   echo "Tipo: $tipo";
  29.  }
  30. else { echo "Error al subir el archivo"; }
  31. ?>
  32. </BODY>
  33. </HTML>

y el otro archivo:
Código PHP:
Ver original
  1. <HTML>
  2. <HEAD><TITLE>Subir Archivo</TITLE>
  3. </HEAD>
  4. <BODY>
  5.  
  6. <form method="POST" enctype="multipart/form-data" action="upl2.php">
  7. <input type="file" name="archivo" size="20">
  8. <input type="submit" value="Enviar" name="send">
  9. <input type="reset" value="Borrar" name="erase">
  10. </form>
  11. </BODY>
  12. </HTML>

Nose que se me escapa...Como no he subido la web por que aun no la tengo montada lo que hago es utilizar el xampp y guardo todo lo que creo en htdocs para poder visualizarlo.

Saludos.
  #2 (permalink)  
Antiguo 28/06/2011, 03:40
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Problemas al subir archivos

$_FILES['archivo']['tmp_name'] no existe o no está correctamente definido.
Comprueba el valor de $_FILES['archivo']['tmp_name'], deber ser el nombre del archivo + la ruta completa.
Salu2
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 28/06/2011, 07:13
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Problemas al subir archivos

En vez de copy tendrías que usar el metodo move_uploaded_file. Es que el archivo esta en una carpeta temporal, y creo que copy no te lo toma.
  #4 (permalink)  
Antiguo 28/06/2011, 08:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problemas al subir archivos

Cuando uses comillas dobles para especificar el path, recuerda que debes de escapar la barra invertida ej:
Código PHP:
Ver original
  1. // mal
  2. $path = "C:\xampp\htdocs";
  3. // bien
  4. $path = "C:\\xampp\\htdocs";

De lo contrario la cadena se reemplazan los carácteres que tienen \.

Saludos.
  #5 (permalink)  
Antiguo 28/06/2011, 09:40
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 12 años, 11 meses
Puntos: 4
Respuesta: Problemas al subir archivos

Bueno, al final corregi una parte de codigo a partir de lo que me comentaste. Todo esta igual menos esta parte:
Código PHP:
Ver original
  1. copy($_FILES['archivo']['tmp_name'], '$path' . '$nombre');
. Almenos ahora no me sale el warning.

Aún asi, me dice que se han subido los archivos satisfactoriamente y no se sube nada en absoluto. Alguna idea de por que no funciona?

Por lo que respecta a la ruta del archivo (en mi caso el path) es donde se me guardaran todos los archivos?

Grácias de antemano.

Saludos.
  #6 (permalink)  
Antiguo 28/06/2011, 10:05
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Problemas al subir archivos

$path es la ruta a donde vas a guardar los uploads.

Ojo con las comillas simples! No podes poner variables PHP dentro de comillas simples porque no se interpretan como variables sino como strings.

Código PHP:
Ver original
  1. move_uploaded_file($_FILES['archivo']['tmp_name'], $path . $nombre);
  #7 (permalink)  
Antiguo 28/06/2011, 10:34
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 12 años, 11 meses
Puntos: 4
Respuesta: Problemas al subir archivos

Para prevenir cambie todas las camillas simples por "" y obtengo el mismo resultado: me informa de que se han subido archivos pero a la practica no existen tales archivos.

Seguramente es un fallo tontisimo, pero de momento no consigo percatarme del error, aunque todos vuestros consejos me han enseñado algo nuevo.

Alguna idea más?

El código queda asi ahora:
Código PHP:
Ver original
  1. <HTML>
  2. <HEAD><TITLE>Subir Archivo</TITLE>
  3. </HEAD>
  4. <BODY>
  5. <?
  6.  
  7. $extensiones=array("html","exe","php");
  8.  
  9. $path="C:\\xampp\\htdocs";
  10. $nombreTemp=$_FILES["archivo"]["tmp_name"];
  11. $nombre=$_FILES["archivo"]["name"];
  12. $tamanio=$_FILES["archivo"]["size"];
  13. $tipo=$_FILES["archivo"]["type"];
  14. $var = explode(".","$nombre");
  15. $num = count($extensiones);
  16. $valor = $num-1;
  17. for($i=0; $i<=$valor; $i++) {
  18.     if($extensiones[$i] == $var[1]) {
  19.     echo "Tipo de Archivo no admitido";
  20.     exit;
  21.     }
  22. }
  23. if (is_uploaded_file($_FILES["archivo"]["tmp_name"]))
  24.  {
  25.   move_uploaded_file($_FILES["archivo"]["tmp_name"], $path . $nombre);
  26.   echo "El archivo se ha subido correctamente al servidor, muchas gracias <p>";
  27.   echo "Nombre: $nombre <p>";
  28.   echo "Tamaño: $tamanio <p>";
  29.   echo "Tipo: $tipo";
  30.  }
  31. else { echo "Error al subir el archivo"; }
  32. ?>
  33. </BODY>
  34. </HTML>

Y el otro:
Código PHP:
Ver original
  1. <HTML>
  2. <HEAD><TITLE>Subir Archivo</TITLE>
  3. </HEAD>
  4. <BODY>
  5. <form method="POST" enctype="multipart/form-data" action="upl2.php">
  6. <input type="file" name="archivo" size="20">
  7. <input type="submit" value="Enviar" name="send">
  8. <input type="reset" value="Borrar" name="erase">
  9. </form>
  10. </BODY>
  11. </HTML>

Grácias de antemano.
  #8 (permalink)  
Antiguo 28/06/2011, 11:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problemas al subir archivos

En tu $path . $nombre, le falta $path . '\' . $nombre no??

Saludos.
  #9 (permalink)  
Antiguo 28/06/2011, 12:56
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Problemas al subir archivos

Cita:
Iniciado por GatorV Ver Mensaje
En tu $path . $nombre, le falta $path . '\' . $nombre no??

Saludos.
Es cierto!
  #10 (permalink)  
Antiguo 29/06/2011, 03:49
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 12 años, 11 meses
Puntos: 4
Respuesta: Problemas al subir archivos

Señores muchisimas grácias! Ya funciona, soys unas maquinas, espero poder llegar a ser como vosotros algun dia, de verdad!

Aunque este ejemplo era sencillo, os cuento lo que tenia en mente y haber como lo construiriais.

Resulta que quiero hacer una web donde se cuelguen archivos tanto de video como de texto. El usuario tipo 1 puede colgar los archivos (imaginemos por ejemplo: que un alumno hace un examen de alguna asignatura para practicar) pero no lo cuelga directamente en la web, lo cuelga en algun sitio (digo alguno por que nose como llamarlo) donde el usuario tipo2 puede coger el archivo, corregirlo y entonces colgarlo a la web para disposición de todo el mundo.

Mi idea de novato: Crear 2 tipos de usuario (sin contar el admin) y mediante asignaciones de nivel, que un usuario pueda ver una pagina y que el otro no pueda). El usuario 1 enviará los archivos a una pagina que no podra ver, pero que el usuario 2 si que podra.

Cómo lo veis? Que seria lo ideal en este caso?

Grácias compañeros.

PD: El código por si alguien lo necesita queda asi:
Código PHP:
Ver original
  1. move_uploaded_file($_FILES["archivo"]["tmp_name"], $path . '/' . $nombre);
  #11 (permalink)  
Antiguo 29/06/2011, 08:56
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Problemas al subir archivos

Vos sabrás. Si vas a tener usuarios con roles, normalmente se tiene una tabla "usuarios" y otra "roles", donde la tabla "usuarios" va a tener una foreign key de la de "roles" para especificar que nivel tiene un usuario.

Pero bueno, esto se aleja de tu pregunta inicial. En todo caso, podrías abrir un nuevo hilo con tus consultas puntuales.

Saludos!
  #12 (permalink)  
Antiguo 29/06/2011, 13:50
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 12 años, 11 meses
Puntos: 4
Respuesta: Problemas al subir archivos

Oki mayid, grácias por todo :)

Meditaré más sobre el asunto antes de publicar nada.

Doy por cerrado este tema, espero que a alguien le sirva.

Grácias a todos.

Saludos

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:14.