2012-02-13 6 views
5

Je suis en train de créer un site, et je viens de commencer à développer le backend.Comment stocker des fichiers image dans le backend d'un site

Le but de mon site sera d'afficher les images à un visiteur. Pour le développement, j'aimerais tester tout d'abord avant d'aller vivre.

Je voudrais savoir quelle est la meilleure façon de stocker ces images. Je viens de terminer la configuration de mon serveur Wamp, et j'ai ajouté une nouvelle base de données avec phpMyAdmin. J'ai trouvé que je peux stocker chaque image directement dans la base de données MySQL en tant que type de données BLOB. Mais est-ce la meilleure façon d'y aller?

Merci!

Répondre

7

Ce n'est certainement pas le chemin à parcourir. Vous devrez alors garder le blob en mémoire en PHP avant de l'envoyer au navigateur. Une meilleure approche serait de stocker les images sous forme de fichiers dans le système de fichiers et de stocker simplement le nom de fichier dans votre base de données. De cette façon, vous pouvez décharger toute l'image diffusée sur le serveur Web et ne jamais impliquer PHP dans les requêtes HTTP du fichier.

5

fichiers dans la base de données Stockage présente deux avantages principaux:

  1. sécurité des transactions. Si l'utilisateur édite son profil (photo & date de naissance), alors soit les deux sont enregistrés, soit aucun dans le cas d'un rollback/erreur.

  2. Juste un point de sauvegarde. Il ne vous arrivera pas d'oublier de sauvegarder le répertoire contenant les avatars des utilisateurs.

Cependant, en raison de nombreux pièges, je ne recommande pas, surtout pas en utilisant PHP MySQL &. MySQL ne supporte pas le streaming, donc dans le cas d'un gros fichier, vous allez utiliser tout votre RAM.

Le système de fichiers est sans aucun doute le moyen le plus rapide et le plus naturel. Il a le moins de frais généraux et est le moins gourmand en ressources.

Lire:

Storing a file in a database as opposed to the file system?

Storing Documents as Blobs in a Database - Any disadvantages?

0

Vous pouvez les stocker dans DB puis manipuler facilement l'image. Par exemple, vous pouvez prendre l'image originale de DB et créer plusieurs images de cache (sur le disque) avec différentes tailles (using imagick), et les montrer dans le site Web. Si vous utilisez DB, vous devez utiliser le chargement paresseux lorsque vous prenez des images (charger le contenu uniquement si vous en avez besoin) sinon mysql va planter votre serveur. :)

Vous pouvez créer un répertoire /cache/pictures/$id_$width_$height.jpg et les y stocker. Et en créant une nouvelle image seulement si $ id_ $ largeur_ $ height est introuvable.

0

Personnellement, je ne recommande pas de stocker les fichiers dans la base de données elle-même. Je voudrais stocker des références aux emplacements des fichiers de sorte qu'il pourrait être mise à l'échelle dans le futur si nécessaire via des miroirs, etc.

Questions connexes