Foros del Web » Programando para Internet » PHP »

Subiré 100 fotos diario, auxilio.

Estas en el tema de Subiré 100 fotos diario, auxilio. en el foro de PHP en Foros del Web. Saludos raza !! Sí sé cómo subir archivos, también cómo meter esas fotos en una DB, pero reamente se me hace un desperdicio de espacio ...
  #1 (permalink)  
Antiguo 25/03/2006, 09:00
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Subiré 100 fotos diario, auxilio.

Saludos raza !!

Sí sé cómo subir archivos, también cómo meter esas fotos en una DB, pero reamente se me hace un desperdicio de espacio definir en MySQL un tipo de dato fijo y aunque suba una foto pequeñita, perderé espacio.

He estado pensando entonces en meter todas esas fotos (100 diarias) en una carpeta llamada simplemente fotos/ y en la base de datos meter:
  • Nombre de la foto
  • Comentarios acerca de la foto
  • Ruta de la foto a la carpeta fotos/

¿Creen que sea la solución adecuada?

Podría darse el caso en el que una foto se llame igual a otra, entonces ¿cómo manejar eso? ¿Renombrándola al subir con una cadena aleatoria?

Es la primera vez que hago algo así, se aceptan ideas sobre si esto es o no eficiente.

Thanks !!
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #2 (permalink)  
Antiguo 25/03/2006, 09:17
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
Hola,

Yo (con ayuda de cluster) he creado un sistema que sube fotos y guarda datos en mysql, lo que guarda no es la ruta de la foto, sino el nombre compelto (foto.jpg) y luego llamas a esa foto con el valo que guarda el nombre

ruta/a/foto/$nombre

bueno el script es este:

Código PHP:
<?php

  
// $userfile is where file went on webserver 
  
$userfile=$_FILES['userfile']['tmp_name'];
  
// $userfile_name Es el nombre original del archivo 
  
$userfile_name=$_FILES['userfile']['name'];
  
// $userfile_size Tamaño de en bytes
  
$userfile_size=$_FILES['userfile']['size'];
  
// $userfile_type controla el tipo mime ej: image/gif
  
$userfile_type=$_FILES['userfile']['type'];
  
// $userfile_error is any error encountered
  
$userfile_error=$_FILES['userfile']['error'];
  
// datos correspondientes a datos de texto para almacenar en mysql
  
$fotonombre=$_POST['fotonombre'];
  
$comentarios=$_POST['comentarios'];
  
$otrodato=$_POST['otrodato'];
  if (!
$fotonombre || !$comentarios || !$otrodato)
  {
      echo 
'No has introducido todos los datos requeridos.<br />'
      
.'Por favor vuelve atras y rellena todas las casillas.';
      exit;
  }
  if (
$userfile_error 0)
  {
    echo 
'Problema: ';
    switch (
$userfile_error)
    {
      case 
1:  echo 'El archivo excede el: upload_max_filesize';  break;
      case 
2:  echo 'El archivo excede el: max_file_size';  break;
      case 
3:  echo 'El arcivo no se ha subido al completo';  break;
      case 
4:  echo 'No file uploaded';  break;
    }
    exit;
  }
// otro checkeo más: tiene el archivo el tipo MIME correcto?
  
$userfile_type_aceptados=array('image/jpeg','image/jpg','image/gif','image/png');
  if (!
in_array($userfile_type,$userfile_type_aceptados))
  {
      echo 
'Problema: El archivo no tiene el formato adecuado (jpeg, jpg, gif o png)';
      exit;
  } 

// pon el archivo donde quieras
  
$upfile '/ruta/a/path/absoluto/fotos/'.$userfile_name;

// is_uploaded_file y move_uploaded_file añadido para la version 4.0.3 de php
  
if (is_uploaded_file($userfile)) 
  {
     if (!
move_uploaded_file($userfile$upfile))
     {
         echo 
'Problema: No se ha podido mover el archivo a el directorio de destino';
         exit;
     }
  } 
  else 
  {
      echo 
'Problema: Posible ataque en el upload. Archivo: '.$userfile_name;
      exit;
  }
  
$fotonombre mysql_real_escape_string($fotonombre);
  
$comentarios mysql_real_escape_string($comentarios);
  
$otrodato mysql_real_escape_string($otrodato);
  
$userfile_name mysql_real_escape_string($userfile_name);
//conectamos a la base de datos
  
$db mysql_connect("localhost","base_de_datos","contraseña");
//comprobamos conexion a la base de datos.
  
if (!$db)
  {     
      
unlink($upfile);
      echo 
'Error: No se pudo conectar con la base de datos. Por favor intentelo mas tarde.';
      exit;
  }
 if (!@
mysql_select_db('base_de_datos'))
  {
      
unlink($upfile);
      echo 
'Error: No se pudo seleccionar la base de datos. Por favor intentelo mas tarde.';
      exit;
  }
//Comprobamos si los datos ya existen.
  
$sql="SELECT COUNT(*) FROM tabla WHERE artnombre='".$_POST['artnombre']."'";
  
$resultado=mysql_query($sql) or die (mysql_error());
  
$total=mysql_result($resultado,0);
  if (
$total 0)
  {
      
unlink($upfile);
      die (
"Ese artista ya existe, no se permite duplicar datos!!");
  }
  
$query "insert into tabla values 
            ('', '"
.$fotonombre."', '".$comentarios."', '".$userfile_name."', NOW(),'".$otrodato."')"
  
$result mysql_query($query);
  if (!
$result)
  {
      
unlink($upfile);
      echo 
'Error: El query ha fallado. Por favor intentelo mas tarde.';
      exit;
  } 
      echo  
mysql_affected_rows().' Datos subidos con exito a la base de datos.'

?>
La he intentado amoldar a tu gusto... quedaran cosaas por retocar.

mmmm la tabla seria asi:

id
nombre
comentarios
$userfile_name (el nombre del archivo foto.jpg)
fecha
otrodato

Saludos
  #3 (permalink)  
Antiguo 25/03/2006, 09:21
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
ahora que dices lo de los nombres que se puedan repetir...

en caso de ser un nombre establecido por el usuario en el fomulario si hay otro igual almacenado en la base de datos envia error y no le permite subir dos imagenes con el mismo nombre.

y si los archivos tienen el mismo nombre, yo lo que haria es enviarle error y que el usuario modifique el nombre... hay varias maneras.

por cierto para evitar que no suba dos archivos con en mismo nomrbre aplica esto:

Código PHP:
<?php
if (file_exists($upfile))
  {
      echo 
'<b>Problema:</b> El archivo ya existe en el servidor, no puedes subir el mismo arhivo 2 veces.';
exit;
}
?>
saludos
  #4 (permalink)  
Antiguo 25/03/2006, 09:34
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Órale ! El sistema completo, thanks, lo ando masticando ahorita, de todo el código, no entendí esta parte:

// pon el archivo donde quieras
$upfile = '/ruta/a/path/absoluto/fotos/'.$userfile_name;

en mi caso tendría que poner midomino.com/fotos/ ??

Con respecto a los nombres de las fotos, es necesario permitir que suban, ya que serían diferentes personas las que meterían sus fotos y generalmente le ponen nombres como:

yo.jpg

y dos personas o más, quizá de distinta ciudad lo hacen, entonces mi sistema chifla, jeje.

A la mejor generando una cadena aleatoria, por ahí en las faqs recuerdo haber visto algo así.

Es más, una función de PHP lo hace, tendré que localizarla, creo que te da como 12 caracteres al azar, pero ya no me acuerdo bien.

Está muy completo tu script, ahorita mismo me pongo a trabajar en él, te lo agradezco mucho porque al menos 10 horas sí me ahorraste.
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #5 (permalink)  
Antiguo 25/03/2006, 09:42
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
debe ser una ruta absoluta. es decir eso es lo que mueve el archivo subido a un determinado destino dentro de tu server.

no sirve una ruta relativa tipo www.tal.com/fotos/

debe ser asi si es un server linux:

/home/tsuario/public_html/fotos/

si usas un server windows... ni idea, pero sera parecido

---------------------------------------------------

Respecto a lo que comentas... si tienes control de usuario y tal yo relacionaria la tabla con la de users.

Y luego los nombres del archivo pues como dices tu los pondria aleatorios...

pero claro imaginate que uno se dedica a subir la misma foto tropecientas veces.... eso no se podria controlar. Aunque dudo que alguien lo quiera hacer.

saludos
  #6 (permalink)  
Antiguo 25/03/2006, 09:48
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Vale, ya te entendí con lo de la ruta. Sí tengo en linux el server.

No tengo control de usuarios, nada más quedará la imagen ligada a su email y luego de que han subido las imágenes, yo las tengo que ver y autorizar (me faltó por ahí un campo tipo BOOL llamado is_autorizada).

Listo, ya tengo todas las herramientas, thanks again, que pases un fin de semana cool.
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #7 (permalink)  
Antiguo 25/03/2006, 09:51
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
pues mira ahora que comentas lo de el email, aqui tengo una modificacion de este scrip que envia mails a el administrador y al usuario al subir los datos en el upload, simplemente adaptalo, pero ojo este no guarda datos en mysql, recorta lo que te valga, los dos son similares:

http://www.forosdelweb.com/showpost....15&postcount=6

saludos.
  #8 (permalink)  
Antiguo 31/03/2006, 17:12
Avatar de arielcasanova  
Fecha de Ingreso: octubre-2004
Ubicación: Bahía Blanca - Argentina
Mensajes: 332
Antigüedad: 19 años, 6 meses
Puntos: 1
Hay alguna forma de que un script recorra una carpeta (p. ej., fotos) y genere el código html que muestre las thumbnails de esa carpeta, aunque estas no estén en la base de datos? ¿En qué lenguaje se puede hacer? El tema es que un cliente que es fotógrafo, quiere ir subiendo las fotos que toma en las bodas en el momento mismo de la boda, vía ftp, para los familiares que viven en otro lugar y no han podido asistir. Pero estos, verían sólo la carpeta con el listado de los archivos, y a él le gustaría que se vean en thumbnails. ¿Es posible?
__________________
Ariel Casanova
diseño y desarrollo web estratégico
www.emporia.com.ar
  #9 (permalink)  
Antiguo 31/03/2006, 18:03
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Claro que es posible. PHP tiene funciones para manejo de archivos, es cuestión de checarlas en php.net/manual/es/

Te recomiendo que no quieras hacer que te quede la aplicación en un solo paso, mira, puedes tratar de hacerlo en varios pasos:

- Listar los archivos de un directorio en una página.
- Meter el nombre de esos archivos dentro de etiquetas IMG para ver las fotos.
- Convertir esas fotos a thumbnails con algún script (hay muchos, en las faq de este foro también encuentras)
__________________
"Di no al Internet Explorer" -Proverbio Chino-
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 12:21.