Foros del Web » Programando para Internet » PHP »

Ayuda al subir imagen al servidor y BD

Estas en el tema de Ayuda al subir imagen al servidor y BD en el foro de PHP en Foros del Web. Buenas, tengo este código para subir un archivo al servidor, a la BD y además crear una miniatura. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original <?php ...
  #1 (permalink)  
Antiguo 19/10/2010, 10:26
 
Fecha de Ingreso: enero-2005
Mensajes: 170
Antigüedad: 19 años, 3 meses
Puntos: 0
Ayuda al subir imagen al servidor y BD

Buenas, tengo este código para subir un archivo al servidor, a la BD y además crear una miniatura.

Código PHP:
Ver original
  1. <?php
  2.    
  3.     $UpPath = "P:\workspace\gypco\root\upfiles"; //ruta on pugen les imatges
  4.     $UpPathThumb = "P:\workspace\gypco\root\upfiles\thumbnails"; //ruta de les miniatures
  5.     $DirUploads = "upfiles/"; //directori on pugen les imatges
  6.     $UpFile = $UpPath . basename($_FILES['File1']['tmp_name']);     //ruta completa de la imatge (carpeta/imatge.ext)
  7.     $UpFileThumb = $UpPathThumb . basename($_FILES['File1']['tmp_name']); //ruta completa de la miniatura
  8.    
  9.     $fileName = $_FILES["File1"]["tmp_name"]; //Asssignem un nom aleatori temporal a l'arxiu
  10.     $tamany = array(); //Definimo un array per guardar el tamany de l'arxiu
  11.     $tamany = $_FILES["File1"]["size"]; //obtenim el tamany de l'arxiu
  12.    
  13.     $size = GetImageSize("$fileName"); // GetImageSize retorna un array amb varies informacions de la imatge passada com argument.
  14.     $amplada = $size[0]; //amplada de la imatge
  15.     $altura = $size[1]; //altura de la imatge
  16.    
  17.     $tipus = $_FILES["File1"]["type"]; //obtenim el tipus d'arxiu
  18.     $fileName = $_FILES["File1"]["name"]; //obtenim el nom real de l'arxiu
  19.     $ID_reg = $fileName.$id; //assignem el Id del paràgraf al qual perntany la imatge.
  20.     extract($_REQUEST); //traeim les dades de REQUEST
  21.     $extensio = getExtension($fileName); //crida a la funció per obtenir la extensio
  22.     $error = "";
  23. ?>
  24.  
  25. if ($error != ""){
  26. ?>
  27.     <script language="JavaScript" type="text/JavaScript">
  28.     <!--
  29.     alert('<?php echo $error?>');
  30.     history.back();
  31.     -->
  32.     </script>
  33. <?php
  34.     }else{
  35.         $fp = fopen($fileName, "rb"); //obreim l'arxiu en mode lectura i verifiquem el seu contingut
  36.         $contenido = fread($fp, $tamany); //llegim el contingut de l'arxiu
  37.         $contenido = addslashes($contenido); //afegim un \ a cada cometa simple ' perque sino marca error al INSERT
  38.         fclose($fp); //tanquem l'arxiu
  39.            
  40.         //PUGEM LA IMATGE AL SERVIDOR
  41.         (copy($_FILES["File1"]["tmp_name"],$UpFile)) or die ("Error al subir la imagen ".$fileName); //guardem la imatge a la carpeta
  42.    
  43.         //CREEM EL THUMBNAIL   
  44.         function crearThumbnail($UpPath, $UpPathThumb, $amplada_thumb) {
  45.        
  46.           $dir = opendir($UpPath); //obrim el directori on estan les imatges
  47.           while (false !== ($fname = readdir($dir))) { //busquem les imatges JPG o GIF
  48.             $info = pathinfo($UpPath . $fileName);
  49.             if ((strtolower($info['extension']) == 'jpg') || (strtolower($info['extension']) == 'gif')){ //només validem JPG i GIF
  50.               echo "Creating thumbnail for {$fileName} <br/>";
  51.                 $img = imagecreatefromjpeg("{$UpPath}{$fileName}"); //carreguem la imatge i obtenim el tamany
  52.                 $amplada_thumb = 180; //amplada de la miniatura
  53.                 $ratio = $amplada/$amplada_thumb; //ratio de conversió
  54.                 $altura_thumb = $altura_thumb/$ratio; // altura de la miniatura
  55.                
  56.                 $tmp_img = imagecreatetruecolor($amplada_thumb, $altura_thumb); //creem una nova imatge temporal
  57.                 imagecopyresized($tmp_img, $img, 0, 0, 0, 0, $amplada_thumb, $altura_thumb, $amplada, $altura); //copiem i redimensionem la imatge en la miniatura
  58.                 imagejpeg($tmp_img, $UpPath."th_".$fileName); //guardem la miniatura en un arxiu, afegint al inci del nom la cadena "th_".
  59.             }
  60.         }
  61.         closedir( $dir ); //tanquem el directori
  62.         }
  63.         //Cridem a la funcio creaThumbnail i passem com a paràmetre la ruta del directori que conté imatges,
  64.         //la ruta del directori on es guardaran les miniatures, i l'amplada de la miniatura.
  65.         crearThumbnail($UpPath, $UpPathThumb, $amplada_thumb);
  66.         $query2 = "INSERT INTO upfiles (taula, nomfile, ct_descripcio, cs_descripcio, clau_id, amplada, altura) VALUES('partseccio', $fileName, '".$_POST["peuct"]."', '".$_POST["peucs"]."', $ID_reg, $amplada, $altura)";
  67.         echo $query2;
  68.         echo "Imatge pujada correctament";

(He obviado parte del código, que no resulta relevante aqui).

Bien, me salta los siguientes errores:

Warning: fopen(chameleon2.jpg) [function.fopen]: failed to open stream: No such file or directory in /var/www/html/workspace/gypco/root/admin/seccions/upload.php on line 35

Warning: fread(): supplied argument is not a valid stream resource in /var/www/html/workspace/gypco/root/admin/seccions/upload.php on line 36

Warning: fclose(): supplied argument is not a valid stream resource in /var/www/html/workspace/gypco/root/admin/seccions/upload.php on line 38

Warning: copy(P:\workspace\gypco oot\upfilesphp4HwhxT) [function.copy]: failed to open stream: Permission denied in /var/www/html/workspace/gypco/root/admin/seccions/upload.php on line 41
Error al subir la imagen chameleon2.jpg

Realmente no sé si está bien el código.. Me echáis una manita?

gracias!
  #2 (permalink)  
Antiguo 19/10/2010, 10:34
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 15 años, 9 meses
Puntos: 105
Respuesta: Ayuda al subir imagen al servidor y BD

no puedes hacer fopen a un archivo temporal, es decir, que aun no ha sido cargado al servidor.

Primero carga la imagen en el servidor y despues recien hay tus operaciones con la imagen.

Suerte
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog

Etiquetas: bd, subir, servidores
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 13:47.