Vos conseils

Eléphanteau du PHP | 30 Messages

20 mai 2016, 05:28

Salut à tous,
Je voudrais des conseils je veux créer une table avec des champs qui contiennent des données signalétiques d’élevés d'un établissement scolaire  de plusieurs centaine d’élèves.
Ainsi chaque enregistrement que je vais effectuer va alimenter les colonnes de ma table ''noms'' , ''Prénom'' , ''classe'', et enfin ''photo''. Maintenant c'est au niveau de cette dernière colonne ''photo'' que j'ai quelques soucis .
En effet vous conviendrez avec moi qu'une telle préoccupation pose le problème de l'enregistrement d'une image dans une table . D’après les quelques lectures que j'ai effectuées sur le net, c'est une initiative qu'il faudrait envisager avec beaucoup de précautions car des problèmes de performance de la base de données (risque de ralentissement de la base ) et de sécurité des photos (auxquelles on peut y accéder par simple URL) peuvent se poser selon que je choisi la méthode d'enregistrement par stockage des fichiers binaires ou par stockage des chemins d’accès des photos dans le champs ''photo'' de la table .
Maintenant je souhaiterais recueillir vos conseils par rapport au contexte de mon projet en tout cas moi je cherche une méthode parmi celles qui existent, celle qui allie performance de ma base et sécurité de mes données. Aussi si vous pouvez me proposer quelques liens de cours ou de tutoriels qui traitent ce sujet .
Merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

20 mai 2016, 09:46

Bonjour,

Ne t'embête pas : enregistre les fichiers en dur dans un répertoire et stocke en BDD juste l'url relative (chemin+nom du fichier) des photos.

Ça n'a quasiment aucun intérêt de stocker les images directement en base de données et tu risques de pénaliser les performances de tes requêtes SQL.

Pour la sécurité, soit tu mets un nom totalement aléatoire pour éviter que d'autres utilisateurs tombent sur une image par hasard.
C'est la solution qu'utilise Facebook par exemple (Exemple d'image sur Facebook)

Soit si tu as besoin d'un niveau de sécurité élevé, tu fais un script PHP qui va servir de proxy pour les images et qui va vérifier les droits d'accès à chaque appel pour l'utilisateur courant.
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 mai 2016, 17:25

Bonjour,

Je plussois la remarque d'@rthur, d'un point de vue performance, le seul intérêt de mettre des images dans une base de données, c'est pour faire de la recherche ou de la comparaison de séries de pixels. Sans cela tu vas clairement charger ta base inutilement...

L'autre avantage de mettre ton fichier en base, c'est que si tu supprimes l'enregistrement, le fichier est de fait supprimé automatiquement. En passant par le système de fichier, il suffit juste d'une instruction unlink() pour le supprimer, autant dire que les problèmes de performance sont loin d'égaler la contrainte de cette ligne de code supplémentaire :)

Et l'accès au fichier peut se contrôler aussi facilement dans un cas que dans l'autre, entre les htaccess, les noms aléatoires, ou le proxy évoqué par @rthur, y a le choix :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...