2013-08-07 1 views
1

J'ai travaillé avec des albums photo avant, et je l'ai trouvé 2 méthodes de les gérer par PHP:Comment créer une application d'album photo en PHP?

  1. Conserver les images dans la base de données ou
  2. les stocker dans le système de fichiers

Chacun a ses propres avantages et inconvénients.

Avec la base de données, je peux stocker l'heure du téléchargement, d'où il a été téléchargé, etc. Il est plus difficile de faire quelque chose comme ça avec le système de fichiers (comme un fichier manifest.json pour des données sans fichier) . Mais avec le système de fichiers, c'est plus agréable, pour une raison ou une autre, parce que, vous savez, les photos sont des images et sont destinées à être stockées dans un système de fichiers. Juste se sent bien.

Mais quelle est la bonne façon de faire un album photo qui affiche des choses comme:

  1. La photo (bien sûr)
  2. Le temps a été téléchargé
  3. Qui vous êtes avec/veulent marquer (ou une légende générale)

etc.

Quelle est la bonne façon d'y parvenir?

Répondre

3

Une façon de stocker toutes les informations et d'utiliser le système de fichiers pour les images consiste à combiner les deux!

Si vous avez une table contenant une liste des images, chacune avec le nom du fichier d'images, l'heure à laquelle elle a été téléchargée et une légende.

Ensuite, vous pouvez écrire une classe simple comme ci-dessous pour gérer chaque image:

class Image { 
    private $info; 
    public function __construct(int $id, $mysqli) { 
     $info = $mysqli->query("SELECT * FROM `images` WHERE `id`=" . $id); 
     $this->info = array(); 
     $this->info["id"] = $info["id"]; 
     $this->info["src"] = "/my/path/" . $info["name"] . "." . $info["type"]; 
     $this->info["upload"] = strtotime($info["upload"]); 
     $this->info["tags"] = json_decode($info["tags"], true); 
    } 

    public function Id() { return $this->info["id"]; } 
    public function Src() { return $this->info["src"]; } 
    public function Upload() { return $this->info["upload"]; } 
    public function Tags() { return $this->info["tags"]; } 
} 

Cette classe simple fonctionnerait si vous avez une table dans votre base de données comme ceci:

+----------------------------------+------------+-----------+-----------------+-------------+ 
| id INT NOT NULL AUTO_INCREMENT | name TEXT | type TEXT | upload DATETIME | tags TEXT | 
+----------------------------------+------------+-----------+-----------------+-------------+ 

Alors maintenant, si vous connaissez l'ID de l'image que vous voulez obtenir, vous pouvez l'obtenir avec le code suivant:

$id = 57; 
$img = new Image($id, $connection); 

Maintenant, nous pouvons obtenir des informations sur l'image!

echo $img->Id() // output: 57 
echo $img->Src() // output: /my/path/image.png 
echo $img->Upload() // output: 1375858084 

La fonction Tags() retourne un tableau, JSON décodé à partir de la colonne dans la base de données.

+1

Je pense que tout le monde avait la même idée ici, je viens comme ça parce que le meilleur: 1. Je ne l'utilise pas vraiment des classes beaucoup ... 2. Il ne semble vraiment comme la façon dont « classiest » faire des choses (jeu de mots) 3. Se sent bien à cause de l'utilisation du système de fichiers encore –

1
  1. Je voudrais définir un nombre à chaque image, un nombre d'incrémentation automatique.
  2. les stocker dans le système de fichiers
  3. stocker l'ID dans la base de données avec le nom de fichier complet et tous les détails que vous voulez comme le nom du fichier
  4. lors de la récupération, il lira de la base de données, obtenir l'image de propper et d'affichage l'info propper
1

Dans mes expériences passées, faire des galeries d'images et des albums photo a toujours été une base de données à coup sûr. Vous pouvez toujours télécharger l'image dans un répertoire spécifique tout en conservant des données supplémentaires telles que celles que vous avez mentionnées.

Je trouve avec une base de données que vous avez également plus de contrôle sur ce que vous voulez afficher ou masquer en utilisant des requêtes, ce qui se traduit également par beaucoup plus de travail pour un système de fichiers à la fin.

Bien que je ne pense pas nécessairement que l'une des voies est fausse, parce que si cela fonctionne, cela fonctionne.

1

Le stockage d'images dans la base de données n'est certainement pas une bonne idée. Si votre application porte un très grand nombre d'images, cela peut affecter les performances de la base de données ou même se bloquer si elle a plus de demandes.

Il est recommandé de stocker les images dans le système de fichiers et de stocker l'ID d'image dans la table de base de données et de les récupérer.

1

Une meilleure façon d'accomplir votre tâche est de télécharger la photo dans un répertoire de votre serveur (upload/images/ou quelque chose). Puis, enregistrez les détails de l'image dans la table de base de données.

photos(photo_id, photo_path, upload_time, tags/captions) 

sauver le chemin relatif de l'image dans photo_path. Pendant l'affichage dans la page, obtenez l'enregistrement requis de la table des photos et placez le chemin photo dans le src de l'image.

Questions connexes