Foros del Web » Programando para Internet » PHP »

PHP OO Enviar imagenes con php

Estas en el tema de Enviar imagenes con php en el foro de PHP en Foros del Web. Bueno gente, aqui publico mi proyecto, el cual pude desarrollar mediante esta web, gracias a la ayuda de todas las personas que se tomaron el ...
  #1 (permalink)  
Antiguo 14/12/2013, 18:33
 
Fecha de Ingreso: julio-2013
Ubicación: Paraguay
Mensajes: 71
Antigüedad: 11 años, 4 meses
Puntos: 0
Enviar imagenes con php

Bueno gente, aqui publico mi proyecto, el cual pude desarrollar mediante esta web, gracias a la ayuda de todas las personas que se tomaron el tiempo de leer mis preguntas.
Se trata de un script que envia imagenes mediante php, si tienen alguna sugerencia para mejorar el funcionamiento del script por favor haganmelo saber, de momento y a mi vista creo que cumple su funcion basica, pero si gente con mayor experiencia (soy novato ene esto) nota que se puede mejorar, las sugerencias son bienvenidas, sin mas rodeos publico el codigo:

Código PHP:
Ver original
  1. <?php
  2.  
  3. // Verificamos si existen variables a procesar:
  4. if (isset($_POST['correo_electronico'])) {
  5. // Definimos la variable para los mensajes:
  6. $mensaje = array();
  7.  
  8. // Base de datos:
  9. // Definimos la variable y realizamos la conexión con la base de datos:
  10. $conexion = mysql_connect('localhost', 'root', '') or $mensaje[] = ('Error al conectar con la base de datos.');
  11. // Definimos la variable y seleccionamos la base de datos a ser utilizada:
  12. $base_de_datos = mysql_select_db('db', $conexion) or $mensaje[] = ('La base de datos seleccionada no existe.');
  13. // Fin de la base de datos
  14.  
  15. // Correo electrónico:
  16. // Definimos la variable para el correo electrónico:
  17. $correo_electronico = $_POST['correo_electronico'];
  18. // Formato del correo electrónico:
  19. if (!filter_var($_POST['correo_electronico'], FILTER_VALIDATE_EMAIL)) {
  20.       $error = true;
  21.       $mensaje[] = ('Por favor, ingrese una dirección de correo electrónico válida.');
  22.       }
  23. // Fin del correo electrónico
  24.  
  25. // Condiciones:
  26. // Selección de la foto:
  27. if (empty($_FILES['foto']['name'])) {
  28.     $error = true;
  29.     $mensaje[] = ('Por favor, seleccione una foto para enviar.');
  30. }
  31. // Formato de la foto:
  32. if (isset($_FILES['foto']) && strlen($_FILES['foto']['tmp_name']) > 0) {
  33. $formato = getimagesize($_FILES['foto']['tmp_name']);
  34. }
  35. if ($formato['mime'] != 'image/jpeg') {
  36.     $error = true;
  37.     $mensaje[] = ('Sólo se pueden enviar fotos en formato JPG.');
  38. }
  39. // Peso de la foto:
  40. $peso_permitido = 1000000;
  41. if ($_FILES['foto']['size'] > $peso_permitido) {
  42.     $error = true;
  43.     $mensaje[] = ('No puede enviar fotos mayores a ' . ceil($peso_permitido / 1024) . ' MB.');
  44. }
  45. // Fin de las condiciones
  46.  
  47. // País:
  48. // Definimos la variable para el país:
  49. $pais = $_POST['pais'];
  50. // Comprobamos que el país esté seleccionado:
  51. if(empty($_POST['pais'])) {
  52.     $error = true;
  53.     $mensaje[] = ('Por favor, seleccione su país.');
  54. }
  55. // Fin del país
  56.  
  57. // Si se cumplen todas las condiciones continuamos:
  58. if ($error = false) {
  59.  
  60.     // Foto:
  61.     // Definimos las variables para el envío de la foto:
  62.     $directorio = 'fotos';
  63.     $nombre_id = mysql_query("SELECT * FROM fotos WHERE id ORDER BY id DESC LIMIT 1");
  64.     $fila = mysql_fetch_array($nombre_id);
  65.     $id = ceil($fila['id'] + 1);
  66.     $nombre = "foto_" . $id . ".jpg";
  67.     $ruta_temporal = $_FILES['foto']['tmp_name'];
  68.     $ruta_final = $directorio . '/' . $nombre;
  69.     if (!move_uploaded_file($ruta_temporal, $ruta_final)) {
  70.         $error = true;
  71.         $mensaje[] = ('Error al enviar la foto.');
  72.     }
  73.     // Fin de la foto
  74.    
  75.     // Miniatura:
  76.     // Definimos las variables para la creación de la miniatura:
  77.     $directorio_miniatura = "fotos/miniaturas/miniatura_" . $nombre;
  78.     $ancho_miniatura = 150;
  79.     $alto_miniatura = 150;
  80.     // Creamos el lienzo de la miniatura:
  81.     $lienzo_miniatura = imagecreatetruecolor($ancho_miniatura, $alto_miniatura);
  82.     $miniatura = imagecreatefromjpeg($ruta_final);
  83.     // Obtenemos las dimensiones de la foto original:
  84.     $tamano_miniatura = getimagesize($ruta_final);
  85.     $ancho_inicial = $tamano_miniatura[0];
  86.     $alto_inicial = $tamano_miniatura[1];
  87.     // Tomamos el lado más grande de la foto para tener una miniatura cuadrada:
  88.     $lado_miniatura = $ancho_inicial > $alto_inicial ? $alto_inicial : $ancho_inicial;
  89.     // Creamos la miniatura en base a la foto original:
  90.     imagecopyresampled($lienzo_miniatura, $miniatura, 0, 0, 0, 0, $ancho_miniatura, $alto_miniatura, $lado_miniatura, $lado_miniatura);
  91.     // Guardamos la foto en miniatura con una calidad de 100%:
  92.     imagejpeg($lienzo_miniatura, $directorio_miniatura, 100);
  93.     // Fin de la miniatura
  94.    
  95.     // Marca de agua:
  96.     // Definimos las variables para la creación de la marca de agua:
  97.     $ruta_marca_de_agua = 'imagenes/marca-de-agua.png';
  98.     $marca_de_agua = imagecreatefrompng($ruta_marca_de_agua);
  99.     // Procedemos a crear el fichero JPEG final con la marca de agua a partir de la foto inicial:
  100.     $ruta_foto = $directorio . '/' . $nombre;
  101.     $foto_para_marca = imagecreatefromjpeg($ruta_foto);
  102.     // Obtenemos las dimensiones de la foto y de la marca de agua:
  103.     $tamano_foto = getimagesize($ruta_foto);
  104.     $tamano_marca = getimagesize($ruta_marca_de_agua);
  105.     $destino_x = $tamano_foto[0] - $tamano_marca[0] - 10;
  106.     $destino_y = $tamano_foto[1] - $tamano_marca[1] - 10;
  107.     // Pegamos la foto con la marca de agua:
  108.     imagecopymerge($foto_para_marca, $marca_de_agua, $destino_x, $destino_y, 0, 0, $tamano_marca[0], $tamano_marca[1], 100);
  109.     // Guardamos los cambios:
  110.     imagejpeg($foto_para_marca, $ruta_foto);
  111.     // Liberamos la memoria:
  112.     imagedestroy($foto_para_marca);
  113.     imagedestroy($marca_de_agua);
  114.     // Fin de la marca de agua
  115.    
  116.     // Construimos la cadena SQL para guardar los datos:
  117.     $sql = "INSERT INTO fotos (correo_electronico,foto,pais) values('" . $correo_electronico . "','" . $ruta_final . "','" . $pais . "')";
  118.     // Informamos el resultado de la operación:
  119.     $respuesta = mysql_query($sql, $conexion);
  120.     if ($respuesta) {
  121.         $mensaje[] = ('La foto ha sido enviada correctamente, en breve será revisada por un administrador.');
  122.     } else {
  123.         $mensaje[] = ('Error al enviar la foto.');
  124.     }
  125. }
  126.  
  127. }
  128.  
  129. ?>
  #2 (permalink)  
Antiguo 15/12/2013, 11:22
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Enviar imagenes con php

Esta bueno pero
Código PHP:
Ver original
  1. // Formato de la foto:
  2. if (isset($_FILES['foto']) && strlen($_FILES['foto']['tmp_name']) > 0) {
  3. $formato = getimagesize($_FILES['foto']['tmp_name']);
  4. }
  5. if ($formato['mime'] != 'image/jpeg') {
  6.     $error = true;
  7.     $mensaje[] = ('Sólo se pueden enviar fotos en formato JPG.');
  8. }

eso es innesesario, o mejor dicho, usar getimagesize es muy lento si solo te interesa saber el mime, mejor seria algo como esto:
Código PHP:
Ver original
  1. if (!isset($_FILES['foto']) || trim($_FILES['foto']['tmp_name']) == '' || exif_imagetype($_FILES['foto']['tmp_name']) != IMAGETYPE_JPEG)
  2. {
  3.     $error = true;
  4.     $mensaje[] = ('Sólo se pueden enviar fotos en formato JPG.');
  5. }
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Etiquetas: imagenes, mysql, select, sql, variable
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 21:44.