2009-08-05 7 views
1

Cette question a été posée avant de mentionner la lib ou inclut qui fournit une galerie fonctionnelle, mais je veux en créer un à partir de zéro. Donc, toutes les idées sur les points suivantsComment créer une galerie d'images propulsée par PHP/MySQL à partir de zéro?

  1. Galeries doivent être téléchargées en utilisant le formulaire et Parcourir (Ce que je peux trouver aucun problème, juste besoin d'être là pour décrire les étapes)
  2. Besoin d'avoir une image miniature créée quand un fichier est téléchargé.
  3. Comment devrait-il être structuré de la base de données, par exemple dans le DB comme image ou nom de fichier

Requirments

  • Seuls PHP et MySql

Toutes les idées? S'il vous plaît laissez-moi savoir s'il ne peut pas se faire ainsi: D

Merci

Répondre

6

Je vais tenter de répondre à vos questions:


Question 1

Cette partie est en fait simple. Pour créer un formulaire de téléchargement de fichiers, votre HTML doit ressembler à ça:

<form enctype='multipart/form-data' action='CodeTool.php' method='POST'> 
    File: <input name='picture' type='file'/> 
    <input type='submit' value='Upload'/> 
</form> 

Votre formulaire doit avoir enctype='multipart/form-data' et method doit être POST. Ensuite, pour lire le fichier de téléchargement, vous pouvez simplement utiliser ce qui suit. J'ai également ajouté une validation de base pour m'assurer que le fichier est une image.

if(isset($_FILES['picture'])) { 
    echo "File has been uploaded under temp file " . $_FILES['picture']['tmp_name']; 

    // Let's check if the file is an image: 
    $fileData = file_get_contents($_FILES['picture']['tmp_name']); 

    // Using imagecreatefromstring, that way you don't need to 
    // guess the image format. 

    if(($img = @imagecreatefromstring($fileData)) !== FALSE) { 
     echo " and is a valid image"; 
    } else { 
     echo " and is not a valid image"; 
    } 
} 

Question 2

Pour créer une image miniature, vous pouvez utiliser GD (ou ImageMagick, mais il ne figure pas dans la configuration par défaut) en tant que telle ... Continuons de la imagecreatefromstring déclaration if:

if(($img = @imagecreatefromstring($fileData)) !== FALSE) { 
    // Let's create a 100x100 thumbnail 
    $width = imagesx($img); 
    $height = imagesy($img); 

    $boxSize = min($width,$height); 
    $boxX = ($width/2) - ($boxSize/2); 
    $boxY = ($height/2) - ($boxSize/2); 

    $thumb = imagecreatetruecolor(100, 100); 
    imagecopyresampled($thumb, $img, 0, 0, $boxX, $boxY, 100, 100, $boxSize, $boxSize); 

    //$thumb is now a 100x100 thumbnail 
} 

question 3

Ici vous avez 2 options. Vous pouvez stocker vos images dans le système de fichiers ou dans la base de données. Pour enregistrer votre image dans le système de fichiers, vous pouvez effectuer les opérations suivantes:

if(($img = @imagecreatefromstring($fileData)) !== FALSE) { 
    move_uploaded_file($_FILES['picture']['tmp_file'], 'somefile.jpg'); 
    // the code from the previous example 
    imagejpeg($thumb, 'somefile_thumb.jpg'); 
} 

Je préfère personnellement en utilisant la base de données pour stocker les images car il est plus facile de garder l'intégrité référentielle et rend la sauvegarde plus simple (sauvegarde la base de données et vous sont fait).Il est un peu plus lent, mais la différence est vraiment pas terrible:

if(($img = @imagecreatefromstring($fileData)) !== FALSE) { 
    // the code from the previous example 

    $tmp_thumb = tempnam(sys_get_temp_dir(), 'thumb'); 
    imagejpeg($thumb, $tmp_thumb); 

    $thumbData = file_get_contents($tmp_thumb); 

    mysql_query("INSERT INTO images (original, thumb) VALUES ('" . mysql_real_escape_string($fileData) . "', '" . mysql_real_escape_string($thumbData) . "');"); 
} 

Les champs doit être BLOB.

+0

Ai-je raison de dire que l'insertion de type de requête est TEXT? –

+1

** @ Shahmir Javiad: ** Non, il doit être 'BLOB' comme spécifié dans ma réponse. 'TEXT' est sensible à l'emplacement et, bien qu'il soit parfait pour les gros textes, il vous causera des problèmes de corruption de données pour les objets binaires. –

+0

10/4 Com, après avoir lu attentivement la réponse, je peux le voir fonctionner donc je vais l'accepter –

0

Vous êtes presque allez vouloir certainement stocker les images dans le système de fichiers, puis référencer tout le chemin \ filename dans l'entrée DB - cela réduit la taille des résultats de votre requête, en particulier si vous souhaitez extraire les informations pour plusieurs images. Cela rend également beaucoup plus facile d'invoquer des choses comme imagemagick si vous voulez l'utiliser pour créer des vignettes.

+0

supporte-t-imagemagick PHP? –

+1

http://us.php.net/imagick – Amber

Questions connexes