Foros del Web » Programando para Internet » PHP »

fallo al subir imagen

Estas en el tema de fallo al subir imagen en el foro de PHP en Foros del Web. Buenas, tengo el siguiente codigo de la pagina que recibe el archivo: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original if ( isset ( $_FILES [ 'fichero' ...
  #1 (permalink)  
Antiguo 14/10/2011, 07:58
 
Fecha de Ingreso: mayo-2009
Mensajes: 232
Antigüedad: 14 años, 11 meses
Puntos: 3
fallo al subir imagen

Buenas, tengo el siguiente codigo de la pagina que recibe el archivo:

Código PHP:
Ver original
  1. if(isset($_FILES['fichero']['name'])) {  
  2.  
  3.  
  4.    if(is_uploaded_file($_FILES['fichero']['tmp_name'])) {
  5.    
  6.    
  7.  
  8. $ruta_destino = "../imagenes/resenas/";
  9.    
  10. $nombre= $_FILES['fichero']['name'];
  11.  
  12. move_uploaded_file($nombre,$ruta_destino);
  13.  
  14. echo  $nombre;
  15.  
  16.  
  17. }}

El "echo" es para comprobar que recibo bien el archivo. No me da ningun error, pero no me copia la imagen en la carpeta. La carpeta tiene permisos.
  #2 (permalink)  
Antiguo 14/10/2011, 08:02
Avatar de mcun  
Fecha de Ingreso: octubre-2010
Ubicación: tras la pantalla
Mensajes: 466
Antigüedad: 13 años, 6 meses
Puntos: 55
Respuesta: fallo al subir imagen

has un echo con la ruta

Código PHP:
Ver original
  1. echo ' <a href="'.$ruta_destino.'">'$ruta_destino.'</a>
  #3 (permalink)  
Antiguo 14/10/2011, 08:07
 
Fecha de Ingreso: agosto-2011
Ubicación: España
Mensajes: 445
Antigüedad: 12 años, 7 meses
Puntos: 89
Respuesta: fallo al subir imagen

Añade esto al principio del script para que muestre los errores:

Código PHP:
Ver original
  1. ini_set("display_errors", 1);
  #4 (permalink)  
Antiguo 14/10/2011, 08:20
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: fallo al subir imagen

Intenta usar copy solo para asegurarnos de que el archivo se ha subido al servidor, de esta forma podemos descartar que sea al mover:

copy($nombre,$ruta_destino);
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #5 (permalink)  
Antiguo 14/10/2011, 08:41
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: fallo al subir imagen

No es recomendable usar copy, debes de usar move_uploaded_file.
  #6 (permalink)  
Antiguo 14/10/2011, 08:58
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: fallo al subir imagen

sip sep, por eso dije que lo usara solo para descartar si se habia subido el archivo, lo digo por que se me ocurren que puedan ser 2 cosas:

1.- no se esta subiendo el archivo
2.- no se esta moviendo el archivo

entonces, copiemoslo para ver si esta ahí o no, en base a eso actuamos =)
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #7 (permalink)  
Antiguo 14/10/2011, 09:05
 
Fecha de Ingreso: mayo-2009
Mensajes: 232
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: fallo al subir imagen

el echo de la ruta me lo hace bien.
Prove con el Copy(), y me da error:

Warning: copy(Penguins.jpg) [function.copy]: failed to open stream: No such file or directory in C:\wamp\www\Gclimb\incluir\validarresena.php on line 23

He añadido:

Código PHP:
Ver original
  1. if(!move_uploaded_file($nombre,$ruta_destino)){echo "Error";}

Y efectivamente no la mueve.

por cierto, la imagen que uso de prueba ocupa solo 700 i pico kb.

Última edición por phyronx; 14/10/2011 a las 09:35
  #8 (permalink)  
Antiguo 14/10/2011, 10:15
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: fallo al subir imagen

"No such file or directory"

Significa que no se ha subido, por lo tanto el problema puede estar en...

1.- El formulario no tiene "multipart/form-data"
2.- El servidor no tiene permisos para subir archivos
3.- El servidor no permite subir un archvio de esas caracteristicas
4.- El tiempo de script es muy bajo
5.- El servidor no tiene permiso de escritura XD
6.- El archivo subido no es correcto

te recomiendo publicar el formulario de subida y revisar el php.ini para ver los pesos maximos de subida y el tiempo maximo de ejecucion de scripts.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #9 (permalink)  
Antiguo 14/10/2011, 10:41
 
Fecha de Ingreso: marzo-2011
Mensajes: 226
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: fallo al subir imagen

prueba con este codigo

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. include("conectarse.php");
  5. $link = conectarse();
  6.  
  7.  
  8.  
  9. $nombre = $_POST['colab'];
  10. $url = $_POST['urlcolab'];
  11.  
  12. if (!empty($_FILES)) {
  13.     $tempFile = $_FILES['imgcolab']['tmp_name'];
  14.     //$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
  15.     $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/PFC/img/logosColab/';
  16.     $targetFile =  str_replace('//','/',$targetPath) . $_FILES['imgcolab']['name'];
  17.     //echo($targetFile);       
  18.         if(move_uploaded_file($tempFile,$targetFile)){
  19.             //$logo = $_FILES['imgcolab']['name']; // GUARDO LA DIRECCION DEL ARCHIVO PARA TENER LA REFERENCIA EN LA BD
  20.             $logo = $targetFile;
  21.             $sql = "INSERT INTO colaboraciones (nombre,url,logo)";
  22.             $sql=$sql.'VALUES ("'.$nombre.'","'.$url.'","'.$logo.'")';
  23.             mysql_query($sql,$link);
  24.             ?>
  25.             <script>
  26.             alert("datos enviados correctamente");
  27.             document.location.href = "index.php"
  28.             </script>
  29.             <?php
  30.         }
  31.         else{
  32.             ?>
  33.             <script>
  34.             alert("error al guardar los datos en la BD");
  35.             document.location.href = "index.php"
  36.             </script>
  37.             <?php
  38.         }
  39.            
  40.         //echo str_replace($_SERVER['DOCUMENT_ROOT'],'',$targetFile);
  41.         ?> <script>document.location.href = "index.php"</script> <?php
  42.    
  43. }
  44. ?>
  #10 (permalink)  
Antiguo 14/10/2011, 10:43
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: fallo al subir imagen

El primer argumento de move_uploaded_file debe de ser $_FILES['fichero']['tmp_name'], no $_FILES['fichero']['name'].

Saludos.
  #11 (permalink)  
Antiguo 14/10/2011, 17:18
 
Fecha de Ingreso: mayo-2009
Mensajes: 232
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: fallo al subir imagen

Aver, contesto:

GatorV, si pongo $_FILES['fichero']['tmp_name'] me da el siguiente error:
Warning: move_uploaded_file() [function.move-uploaded-file]: The second argument to copy() function cannot be a directory in.
Si hago un echo me pone: C:\wamp\tmp\phpF450.tmp. No el nombre del archivo.

Stramin,vopor pasos:

1 Lo tengo puesto.
2 Si que los tiene, vamso que es en localhost con el wamp.
3 Si, ya que consigo subir archivos. Aunque de otra forma que mas abajo hos cuento.
4 Esto no se muy bien porque deberia fallar, aunque en el mismo script cargo otra archivo que recojo de otro form.
5 xD
6 He subido este archivo de otra forma.

Hos aclaro cosas y hos pongo el codigo, a ver:

Trabajo en localhost con el wamp.

Tengo una pagina con 2 forms, que se envian al mismo .php.
En ese php si se ha enviado el archivo con el form1, deberia copiar la imagen tal cual. Si se envia con el form 2, la debe redimensionar y cambiar el nombre, y guardarla.

Pues la segunda manera de enviarla, funciona perfectamente. Pero de cojerla, y tal cual guardarla no funciona.

Hos pongo los codigos:

Los forms:


Código PHP:
Ver original
  1. //ESTE NO FUNCIONA
  2. <form action="validarresena.php?id=1&via=<?php echo $idvia;?>" method="post" enctype="multipart/form-data" name="metodo1" id="form1">
  3.   <label for="fileField"></label>
  4.   <input type="file" name="fichero" id="fileField" />
  5.   <input type="submit" name="button" id="button" value="Enviar" />
  6. </form>
  7.  
  8.  
  9. <form action="validarresena.php?id=2&via=<?php echo $idvia;?>" method="post" enctype="multipart/form-data" name="metodo2" id="form2">
  10.   <label for="fileField2"></label>
  11.   <input type="file" name="fichero" id="fileField2" />
  12.   <input type="submit" name="button2" id="button2" value="Enviar" />
  13. </form>

Y el codigo completo del php con el que recojo:


Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. if (isset($_GET["id"])){
  5.    
  6. include "../config/config.php";
  7. $ruta_destino = "../imagenes/resenas/";
  8. $idvia= $_GET["via"];
  9.        
  10. if(isset($_FILES['fichero']['name'])) {  
  11.  
  12.  
  13.    if(is_uploaded_file($_FILES['fichero']['tmp_name'])) {
  14.    
  15.    
  16.    if ($_GET["id"]==1){
  17.        
  18. $nombre= $_FILES['fichero']['name'];
  19. echo $nombre;
  20. move_uploaded_file($nombre,$ruta_destino);
  21.  
  22.  
  23.    }else if ($_GET["id"]==2){
  24.  
  25.        
  26.  
  27.    //empieza la redimension, tomamos la imagen temporal subida
  28.    $info = getimagesize($_FILES['fichero']['tmp_name']);  
  29.    //segun el caso sera jpg, gif, png
  30.    switch ($info[2]) {
  31.   case 1:
  32.     $imagen = imagecreatefromgif($_FILES['fichero'] ['tmp_name']); break;
  33.   case 2:
  34.     $imagen = imagecreatefromjpeg($_FILES['fichero'] ['tmp_name']); break;
  35.   case 3:
  36.     $imagen = imagecreatefrompng($_FILES['fichero'] ['tmp_name']); break;
  37.   // etcétera //  
  38.   }
  39.  
  40. $original = $imagen;
  41. $original_w = imagesx($original);
  42. $original_h = imagesy($original);
  43.  
  44. $max = 800;  //AQUI PONES EL TAMAÑO DE LA IMAGEN A LO QUE QUIERAS
  45.  
  46. if($original_w>$original_h) {
  47.     $muestra_w = $max;
  48.     $muestra_h = intval(($original_h/$original_w)*$max);
  49.     } else {
  50.     $muestra_w = intval(($original_w/$original_h)*$max);
  51.     $muestra_h = $max;
  52.     }
  53.  
  54. $muestra = imagecreatetruecolor($muestra_w,$muestra_h);  
  55.  
  56. imagecopyresampled($muestra,$original,0,0,0,0, $muestra_w,$muestra_h,$original_w,$original_h);
  57. imagedestroy($original); // aqui destruyo el original, pues no hace falta ya
  58.  
  59.      // me verifica haya sido cargado el archivo  
  60.  
  61.        
  62. $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
  63. $namefinal = "";
  64. for($i=0;$i<12;$i++) {
  65. $namefinal .= substr($str,rand(0,62),1);
  66. }
  67.  
  68. $namefinal = $_SESSION["userid"]."_".$namefinal;
  69. $sep=explode('image/',$_FILES["fichero"]["type"]); // Separamos image/
  70. $tipo=$sep[1];
  71.  $namefinal = $namefinal.".".$tipo;
  72.  $uploadfile= $ruta_destino . $namefinal;  
  73.      
  74. imagejpeg($muestra,$uploadfile,'80');
  75.  
  76. $sql = mysql_query("UPDATE vies SET resena='$namefinal' WHERE idvia='$idvia'");
  77.  
  78.    
  79.    
  80.     }
  81.    }}}
  82. ?>
  #12 (permalink)  
Antiguo 14/10/2011, 17:52
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: fallo al subir imagen

Lo correcto es usar eso, pero necesitas el nombre de a donde lo vas a mover, por ejemplo:
Código PHP:
Ver original
  1. $destDir = './uploads/';
  2. $destination = $destDir . $_FILES['fichero']['name'];
  3.  
  4. move_uploaded_file($_FILES['fichero']['tmp_name'], $destination);

No puedes solo pasarle un directorio, tienes que pasarle directorio y archivo.
  #13 (permalink)  
Antiguo 14/10/2011, 18:37
 
Fecha de Ingreso: mayo-2009
Mensajes: 232
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: fallo al subir imagen

Conseguido!

Muchissimas gracias Gator V, y a todos!

Etiquetas: fallo
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 05:33.