Foros del Web » Programando para Internet » PHP »

Para una galeria de fotos, cual es el mejor metodo? Con MySQL o readdir()?

Estas en el tema de Para una galeria de fotos, cual es el mejor metodo? Con MySQL o readdir()? en el foro de PHP en Foros del Web. Otra pregunta, si me la pueden contestar: Cual creen que es la mejor opción para crear una galeria de imagenes? Una carpeta para cada album ...
  #1 (permalink)  
Antiguo 30/05/2006, 14:23
 
Fecha de Ingreso: enero-2002
Mensajes: 265
Antigüedad: 15 años, 10 meses
Puntos: 0
Para una galeria de fotos, cual es el mejor metodo? Con MySQL o readdir()?

Otra pregunta, si me la pueden contestar:
Cual creen que es la mejor opción para crear una galeria de imagenes? Una carpeta para cada album i despues hacer un barrido de archivos en cada carpeta. O bien, en una BD meter los path de las imagenes y los títulos de los albumes.
Cual pesa menos en el server? O no debo preocuparme por eso?
Actualmente estoy construyendo el primer caso. Les imprimo el código:
Cita:
$path="fotos/galeria/"; //Ruta on estan els albums
$directorio=opendir($path);
$i=0;
while ($archivo = readdir($directorio)) {
if ($archivo=='.' || $archivo=='..') continue;
elseif(is_dir("$path$archivo"))
$i++;
$enllaç[$i]="<a href=\"index.php?modul=galeria&album=".$archivo."\ ">
$archivo</a></li>";
}

echo '<table width="90%" border="1" align="center" cellspacing="5" bordercolor="#C2C7F5">';
for($i=1;$i<=count($enllaç);$i=$i+3){
echo ('
<tr>
<td width="200" height="200" align="center"><img src="fotos/noticies/1.JPG" height="120"></td>
<td width="200" height="200" align="center"><img src="fotos/noticies/2.JPG" height="120"></td>
<td width="200" height="200" align="center"><img src="fotos/noticies/3.JPG" height="120"></td>
</tr>
<tr>
<td width="200"><p align="center">'.$enllaç[$i].'</p></td>
<td width="200"><p align="center">'.$enllaç[$i+1].'</p></td>
<td width="200"><p align="center">'.$enllaç[$i+2].'</p></td>
</tr>
<tr><td height="10" colspan="3"></td></tr>');
}
echo "</table>";
}
Donde se imprime la imagen ahora es una imagen fija, despues será una imagen aleatoria de cada album directorio elegida mediante la funcion externa:
Cita:
function random_img($path){
$dir=opendir($path);
//cercam tots els objectes de la carpeta
while($elemento=readdir($dir)){
//excluim els arxius "arrels": ./ i ../
if($elemento!='.' && $elemento!='..'){
$foto[]="<img src='$path/$elemento' height='120'> ";
$album=explode("-",$path."/".$elemento);
$album=explode(".",$album[1]);
}
}
$aleatori=rand(0,count($foto)-1);
echo $foto[$aleatori];
}
Bien, entonces para una galeria con esas caracteristicas cual creeis que es lo mas recomendable?
Y de paso y por ultimo. Si deseo crear una variable $total_fotos en esa funcion que se vaya incrementando 1 a 1 para saber cuantas fotos hay en el directorio, como la paso después al otro documento? He torbado con return pero no obtengo nada (tampoco sé como imprimirlo desde la página "principial")
Muchisimas Gracias foreros!
  #2 (permalink)  
Antiguo 31/05/2006, 01:21
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 14 años, 4 meses
Puntos: 21
Sonrisa

usa carpetas

saludos
__________________
gerardo
  #3 (permalink)  
Antiguo 31/05/2006, 02:47
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 13 años
Puntos: 2
Hola qué tal?

Bueno, no lo digo para que discutamos por demás, pero yo tengo un punto de vista diferente al de calchis. ME PARECE A MI que es mejor utilizar por BD. De hecho cuando tuve que hacer galerias (al estilo myspace de MSN, con un combo box que permite al usuario elegir una galeria, y toda esa bola) lo hice con BD... en vez de acceder a disco y leer decenas de archivos, lo haces sobre la base de datos que va a resultar más rapido.

Mi esquema era el siguiente:

Cada usuario puede crear un "ESPACIO". Cada espacio puede tener diferentes "GALERIAS"... entonces tenia:

Tabla 1: Galerias_x_espacio
Tabla 2: Fotos_x_galeria

Cuando ingresan los visitantes a un espacio, a la seccion "Galerias de fotos" se cargaba la tabla "Galerias_x_espacio" mostrando en un combo box las galerias, a su vez, se cargaban las fotos de la ultima galeria creada con fotos_x_galeria.

Los usuarios podian crear 1 galeria, agregar fotos(upload), ponerles titulos, cambiarles el titulo, cambiar la foto, borrar una foto.

Esto seguro vos tambien lo vas a querer... entonces, el tema es que cuando un usuario quiere subir una nueva foto necesitas manipular el nombre (¿que pasa si ya existe la foto? ¿Como se si ya existe? ¿Como le cambio el nombre?)
Si lo haces con archivos tenes que manejar todo esto en disco... buscar un archivo, cambiarle el nombre, borrar un archivo, etc, etc.

Si usas una base de datos todo el registro lo llevas ahi, y solo usas el disco cuando SABES que lo necesitas.. entonces, asi tenia yo la tabla "fotos_x_galeria"

id_foto id_galeria id_espacio titulo archivo

Cuando el usuario queria ingresar una nueva foto, hacia el upload pero el script le cambiaba el nombre por algo como $nombre_de_espacio."-".$foto_num."."$extension. Con esto ya me aseguraba de nunca tener cosas duplicadas, por más que la imagen sea la misma, pero eso ya queda en el usuario.

Para mostrar las fotos o borrarlas lo que hacia era utilizar el campo "archivo" de la tabla... para actualizarlas, con update, simplemente tocaba el campo necesario y si querían actualizar el archivo lo que hacia era uplodear el nuevo archivo, sobre escribir el existente (ojo, aca necesitas manejar permisos), y listo el pollo.

Otro problema que se te puede presentar es que tal vez las imagenes te las muestre siempre desde la CACHE y si las actualizas no te cambian hasta presionar F5, es lo solucionas con los headers (busca en google sobre headers, es relativamente simple, y no tengo el codigo a mano ahora pero eran 3 o 4 lineas de header()'s.

hm... no se que más podes llegar a necesitar... probalo, cualquier cosa chiflame y con lo que pueda te ayudo


UN SALUDO!

PD: Habria que ver que dice chalchis, tal vez hay una buena razon para utilizar todo con carpetas y si es así tal vez queiras utilizarlo.
  #4 (permalink)  
Antiguo 31/05/2006, 11:06
 
Fecha de Ingreso: enero-2002
Mensajes: 265
Antigüedad: 15 años, 10 meses
Puntos: 0
Claro, me gustaria explicara un poco su punto de visto como tu...
De todas formas yo tb tenia pensado hacer un upload via web con un form a la carpeta de cada galeria y el problema del nombre lo resuelvo poniendole, de nombre, date("u"). Ahora tp tengo el codigo a mano pero si no recuerdo mal eso son los segundos que han pasado desde aquella famosa fecha no? asi que tp se duplicara el nombre. Si subo un par a la vez añado -1,2,3... justo destras de los segundos eses.

Por otra parte a la hora de eliminar archivos es mucho más rápido via carpetas. De la otra forma tienes que eliminar el registro y después la foto. No sé como lo tienes tu en tu BD pero yo habia pensado guardar, en el campo foto de la BD, <img src="....."> etc, para despues poder imprimir directamente ese valor y ya pegar la foto. Si lo hago así "limpiar" esa celda hasta conseguir el nombre de la foto es mas angorroso.

Poner comentarios a las fotos no me interesa, sólo quiero poner nombre a las galeria (que con el nombre de carpeta ya me sirve, solo me preocupan q un user no meta los caracteres prohibidos).

Ahora no es que te quiera rebatir tus argumentos, ya que estoy abierto a todo tipo de sugerencia (por algo soy novato). Sólo digo algunos, tal vez pros, q puede tener el sistema de archivos.

Qué me dices? A mi, lo que me interesa és que sea lo más rápido posible. Para elegir una foto al azar como "caratula d album" dentro tengo q rastrear primero todas las imagene del dir como muestra mi funcion, cierto? En la BD tb tendria q rastrear todos los registros previamente?

Bueno, muchas gracias. Si alguien tiene otro punto de vista se lo agradeceria. Sea cual sea.
  #5 (permalink)  
Antiguo 01/06/2006, 10:57
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 13 años
Puntos: 2
Es sencillo... en DISCO vas a tener que trabajar siempre... utilizando la base de datos te ahorras accesos a disco. Creo que eso es todo lo que deberias tener en cuenta para deducir qué metodo es más apropiado para tu caso dependiendo de tamaño, o más bien, el alcance de lo que vas a desarrollar.

Cuando tenes que BUSCAR literalmente algo, en disco vas a tardar siempre más... y si tenes muchos archivos MUUCHO más... compará lo que tarda un acceso a disco y un acceso a memoria y listo. (omitiendo los factores que para el caso se tienen en cuenta, claro).

Cuando tenes que borrar... si borras dos cosas, 1 registro (delete * from tabla where archivo='".$archivo."') y despues el archivo, literalmente... pero para borrar archivos lo tenes que hacer conectandote por FTP (siempre dentro del script). Para eso te recomiendo que busques en google, hay mucha info de como hacerlo.

No te recomiendo que uses fechas para el nombre de archivo, busca en los threads del foro que hay algunos temas en los que se hablo de como nombrar archivos dinamicamente. En la teoria lo que tenes que hacer es

1) Tomas el nombre del archivo que se uplodeo' y lo descompones en
"NOMBRE" . "EXTENSION". (conservas la extension)

2) creas un $nombre_archivo = $usuario."-".$algo_irrepetible.".".$extension

Lo irrepetible depende de vos y de tu sistema... podes hacer una query y sacar el ultimo ID entonces $algo_irrepetible = $id++; o sino un numero random pero esto es peligroso... tal vez un $algo_irrepetible = time(); sea más eficiente. Pero siempre ponele antes el $nombre_de_usuario.

Saludos
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 15:25.