Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/11/2011, 17:06
yole
 
Fecha de Ingreso: julio-2007
Mensajes: 287
Antigüedad: 16 años, 9 meses
Puntos: 4
Pregunta Mejorar Script para Upload de imagen

Encontré un código que toma una imagen y crea una miniatura. "Lo malo" es que las guarda en la base de datos.

Lo que yo hacía anteriormente era guardar una sola imagen, previo a una pequeña validación para restringir un poco el tamaño.

Me gustaría mejorar este script y añadirle algunas de mis rutinas para el Upload, de tal manera que guarde las imágenes en carpeta y la ruta en la base de datos.

Como no soy tan experto con php, alguien me podría ayudar?

Código que encontré:
Código PHP:
Ver original
  1. // Constantes
  2.  # Altura de el thumbnail en píxeles
  3. define("ALTURA", 90);
  4.  # Nombre del archivo temporal del thumbnail
  5. define("NAMETHUMB", "/tmp/thumbtemp"); //Esto en servidores Linux, en Windows podría ser:
  6. // define("NAMETHUMB", "c:/windows/temp/thumbtemp"); y te olvidas de los problemas de permisos
  7.  # Servidor de base de datos
  8. define("DBHOST", "localhost");
  9.  # nombre de la base de datos
  10. define("DBNAME", "test");
  11.  # Usuario de base de datos
  12. define("DBUSER", "root");
  13.  # Password de base de datos
  14. define("DBPASSWORD", "");
  15.  // Mime types permitidos
  16.  $mimetypes = array("image/jpeg", "image/pjpeg", "image/gif", "image/png");
  17.  // Variables de la foto
  18.  $name = $_FILES["archivo"]["name"];
  19.  $type = $_FILES["archivo"]["type"];
  20.  $tmp_name = $_FILES["archivo"]["tmp_name"];
  21.  $size = $_FILES["archivo"]["size"];
  22.  // Verificamos si el archivo es una imagen válida
  23.  if(!in_array($type, $mimetypes))
  24.    die("El archivo que subiste no es una imagen válida");
  25.  // Creando el thumbnail
  26.  switch($type) {
  27.    case $mimetypes[0]:
  28.    case $mimetypes[1]:
  29.      $img = imagecreatefromjpeg($tmp_name);
  30.      break;
  31.    case $mimetypes[2]:
  32.      $img = imagecreatefromgif($tmp_name);
  33.      break;
  34.    case $mimetypes[3]:
  35.      $img = imagecreatefrompng($tmp_name);
  36.      break;
  37.  }
  38.  $datos = getimagesize($tmp_name);
  39.  $ratio = ($datos[1]/ALTURA);
  40.  $ancho = round($datos[0]/$ratio);
  41.  $thumb = imagecreatetruecolor($ancho, ALTURA);
  42.  imagecopyresized($thumb, $img, 0, 0, 0, 0, $ancho, ALTURA, $datos[0], $datos[1]);
  43.  switch($type) {
  44.    case $mimetypes[0]:
  45.    case $mimetypes[1]:
  46.      imagejpeg($thumb, NAMETHUMB);
  47.          break;
  48.    case $mimetypes[2]:
  49.      imagegif($thumb, NAMETHUMB);
  50.      break;
  51.    case $mimetypes[3]:
  52.      imagepng($thumb, NAMETHUMB);
  53.      break;
  54.  }
  55.  // Extrae los contenidos de las fotos
  56.  # contenido de la foto original
  57. $fp = fopen($tmp_name, "rb");
  58.  $tfoto = fread($fp, filesize($tmp_name));
  59.  $tfoto = addslashes($tfoto);
  60.  fclose($fp);
  61.  # contenido del thumbnail
  62. $fp = fopen(NAMETHUMB, "rb");
  63.  $tthumb = fread($fp, filesize(NAMETHUMB));
  64.  $tthumb = addslashes($tthumb);
  65.  fclose($fp);
  66.  // Borra archivos temporales si es que existen
  67.  @unlink($tmp_name);
  68.  @unlink(NAMETHUMB);
  69.  
  70.  $nombre = $_POST["nombre"];
  71.  
  72.  $sql = "INSERT INTO tabla(nombre, foto, thumb, mime)
  73.   VALUES
  74.   ('$nombre', '$tfoto', '$tthumb', '$type')";
  75.  mysql_query($sql) or die(mysql_error());
  76.  echo "Fotos guardadas";
  77.  exit();

Esta es la parte que me gustaría unir al código anterior

Me pequeño código:
Código PHP:
Ver original
  1. $directorio = 'fotoNoticias';
  2.                
  3.                 //procedo a cambiar el nombre a la imagen
  4.                                 $info = pathinfo($_FILES['archivo']['name']);
  5.                 $nombreFoto = $notid . "." . $info['extension'];
  6.                 $nuevoNombre = $directorio . "-" . "notid-" . $nombreFoto;
  7.                
  8.                 $rutaFoto = $directorio. "/" .$nuevoNombre;
  9.                
  10.                 include("conn.php");
  11.                 $sql=("UPDATE noticias set rutaFoto='$rutaFoto' where notid='$notid' ");
  12.                 mysql_query($sql)or die(mysql_error());
  13.                
  14.                
  15.                 $rutaFoto = ($_SERVER['DOCUMENT_ROOT']."/fotoNoticias/");
  16.                 move_uploaded_file($_FILES['archivo']['tmp_name'],$rutaFoto.$nuevoNombre);
  17.                
  18.                 header("location:insert-noticia.php");

bueno, la idea es hacer las validaciones, cambiar el nombre a las imágenes.

1. Imagino que debería agregar un nuevo campo ruta para la segunda foto.
2. El nombre de las imágenes debería ser muy parecido. Salvo por algo simple que las diferencie.

Gracias!