Foros del Web » Programando para Internet » PHP »

Mejorar Script para Upload de imagen

Estas en el tema de Mejorar Script para Upload de imagen en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 12/11/2011, 17:06
 
Fecha de Ingreso: julio-2007
Mensajes: 287
Antigüedad: 16 años, 8 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!
  #2 (permalink)  
Antiguo 12/11/2011, 20:42
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Mejorar Script para Upload de imagen

Lo que yo hago es un poco mas sencillo y no requiere crear otro campo para guardar la ruta de la imagen de vista previa, la idea la tome de ImageShack:

Código PHP:
Ver original
  1. // Nombre final de la imagen, incluyendo ruta:
  2. $nombreImg = $rutaFoto.$nuevoNombre;
  3. if(move_uploaded_file($_FILES['archivo']['tmp_name'], $nombreImg)) {
  4.     // El archivo se subio correctamente... ahora creamos la vista previa
  5.     // Nombre:
  6.     $nombreThumb = str_replace('.jpg', '.th.jpg', $nombreImg);
  7.     // Supongo que usaras la libreria GD, para esto, asi que
  8.     // Redimensionas y al final guardas
  9. }

Logicamente, primero hago una leve limpieza del nombre para evitar puntos, espacios y caracteres especiales.

De esta forma, guardo en la base de datos solo el nombre final y, siempre que necesito la imagen pequeña reemplazo la extension .jpg por .th.jpg, como bien dices, diferencia minima.
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: mejorar, mysql, sql, tabla, upload, variables, usuarios
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 09:59.