Ver Mensaje Individual
  #6 (permalink)  
Antiguo 09/12/2006, 12:13
senseijulio
 
Fecha de Ingreso: septiembre-2006
Mensajes: 41
Antigüedad: 17 años, 7 meses
Puntos: 1
Re: Galeria de Fotos en PHP

Cita:
Iniciado por alkañon Ver Mensaje
Código PHP:
Debemos comenzar creando la base de datos y la tabla 
que almacenara el codigo de la foto, el thumbail y
la foto en si

    create database fotos;
    create table fotos.foto_foto(
    idfoto int not null auto_increment primary KEY,
    foto_grande    mediumblob,
    foto_pequena    mediumblob,
    );

    ///datos.php(pagina de configuracion)
    
    <?php
    $servidor
="";
    
$nombre="";
    
$clave="";
    
?>
    
    
Ahora creamos un simple formulario que coja de nuestro
ordenador el thumbail y la foto(deben estar previamente
guardadas con el tamaño adecuado)
observar elType del formulario, esto nos permite enviar
tanto texto como ficheros

        ///form.php

    <?
    
echo '<font size=1>';
    echo 
'<center>';
    echo
'<form enctype="multipart/form-data" action="guardararchivo.php" method="post">';
    echo 
'Foto<br><input type="file" name="foto">';
    echo 
'<br><br>';
    echo 
'Thum.<br><input type="file" name="thumbail"><br><br>';
    echo 
'<input type=hidden name=max_file_size value=1000000>'
    echo 
'<input type="submit" value="Enviar archivo">';
    echo 
'</form>';
    echo 
'<br><br><a href=descargar_archivo2.php>Ver album</a>';
    
?>

Esta es la pagina que guarda las fotos en la base de datos, da un mensaje de
error o de exito y nos devuelve al formulario, es muy sencilla

            ///guardadararchivo.php

    <?php
    
require ("datos.php");
    echo 
'<center><font size=1>';
    
$conexion=@mysql_connect($servidor,$nombre,$clave);
    
$res=mysql_select_db("fotos",$conexion);
    if ( 
$conexion )
    {
        
        
$archivo $_FILES["foto"]["tmp_name"]; 
         
$tamanio $_FILES["foto"]["size"];
         
$tipo    $_FILES["foto"]["type"];
         
$nombre  $_FILES["foto"]["name"];     
         
$archivo_thumb $_FILES["thumbail"]["tmp_name"]; 
         
$tamanio_thumb $_FILES["thumbail"]["size"];
         
$tipo_thumb    $_FILES["thumbail"]["type"];
         
$nombre_thumb  $_FILES["thumbail"]["name"];
         if ( 
$archivo != "none" && $archivo_thumb!="none")
         {
             
$fp fopen($archivo"rb");
                
$contenido fread($fp,$tamanio);
                
$contenido addslashes($contenido);
                
fclose($fp);
               
$fp_thumb fopen($archivo_thumb"rb");
                
$contenido_thumb fread($fp_thumb,$tamanio_thumb);
                
$contenido_thumb addslashes($contenido_thumb);
               
fclose($fp_thumb);  
                
$query "INSERT INTO fotos.foto_foto VALUES(null,'".$contenido."','".$contenido_thumb."')";
                
mysql_query($query);
                if(
mysql_affected_rows($conexion) > 0)print "Se ha guardado el archivo en la base de datos.";
                else print 
"NO se ha podido guardar el archivo en la base de datos.";
         }
         else print 
"No se ha podido subir el archivo al servidor";
    }else{
        echo 
'No conectado';
    }
    echo 
"<HTML><SCRIPT>document.location='form.php';</SCRIPT></HTML>"
    
?>
    
    
A continuacion muestro como se puede crear un album de fotos con enlace a esa misma foto
mas grande, la pequeña es el thumbail que hemos guardado con tamaño mas pequeño y la
grande tambien la tenemos en la bas de datos(recomiendo comprimir mediante codigo con
gzip)aqui no las comprimo porque se complica un poco el script.


            ///descargar_archivo2.php
            
    <?php 
    
require ("datos.php");
    
$conexion=@mysql_connect($servidor,$nombre,$clave);
    
$res=mysql_select_db("fotos",$conexion);
        
    
$qry "SELECT idfoto,foto_pequena FROM fotos.foto_foto";
    
$res2 mysql_query($qry);
    for (
$j=0;$j mysql_num_rows($res2);$j++)
    for (
$i=0;$i mysql_num_fields($res2);$i++)
    {
        
$foto=basename(tempnam(getcwd(),'tmp'));
        
$foto.=".jpg";
        if (
$i==1)
        {
            
$contenido2=mysql_result($res2,$j,$i);    
            
$ft=fopen($foto,"w"); 
            
fwrite($ft,$contenido2);
            
fclose($ft);
            echo 
'<a href=fotogrande.php?idfoto='.mysql_result($res2,$j,0).'><img src='.$foto.'>&nbsp;&nbsp;&nbsp;';
            echo 
'';    
        }
    }
    echo 
'<br><br><font size=1><center><a href=form.php>Insertar nuevas fotos</a>';
    
?>
    

y finalmente creamos la pàgina donde visualizamos las fotos en grande
sencillo, no?

        ///fotogrande.php
    
    <?php 
    
require("datos.php");
    
$conexion=@mysql_connect($servidor,$nombre,$clave);
    
$res=mysql_select_db("fotos",$conexion);    
    
$qry "SELECT foto_grande FROM fotos.foto_foto where idfoto='".$_GET["idfoto"]."'";
    
$res2 mysql_query($qry);
    
$foto=basename(tempnam(getcwd(),'tmp'));
    
$foto.=".jpg";
    
$contenido2=mysql_result($res2,0,0);    
    
$ft=fopen($foto,"w"); 
    
fwrite($ft,$contenido2);
    
fclose($ft);
    echo 
'<center><img src='.$foto.'>&nbsp;&nbsp;&nbsp;<br><br>';
    echo 
'<font size=1><a href=descargar_archivo2.php>Volver al album</a>';
    
?>
he probado esta galeria y me parece muy buena, solo que cuando subo imagenes son muchas a la vez, como mínimo unas 100, hay algun metodo para no subirlas una por una, algo asi como una comprobacion de imagenes nuevas¿?

PD: como hago para que las imagenes queden en un directorio aparte?
gracias