Système d'upload : enregistrer fichiers dans BDD ou non ?

a marqué ce sujet comme résolu.
Auteur du sujet

Bonjour,

je viens faire appelle à vous car j’aimerai avoir des conseils SVP.

J’ai développé un CMS, et pour mon système d’upload (fichiers, images…) j’hésite entre 2 méthodes d’organisations :

_Ne pas enregistrer les fichiers dans la BDD. Avantage : + de facilité à faire des système de sous-dossiers (ça évite d’avoir pleins d’images à la racine du répertoire d’upload).

_Enregistrer les fichiers dans la BDD. Avantage : + de facilité à faire d’éventuels jointures "Plusieurs à Plusieurs" avec des pages.

J’aimerai quelques retours d’expérience sur les avantages et inconvénients des 2 méthodes.

Tout conseils et tout retours d’expérience sont les bienvenu.

Merci beaucoup.

Édité par stephweb

Salut !

Si c’est pour le contenu du fichier que tu te poses la question, enregistrer le contenu prend trop de place en base de données.

Et ne pas conserver trace des fichiers en base de données risque de poser problème pour les lister si tu as une arborescence d’upload compliquée.

Evitez qu’on vous dise de les lire : FAQ PHP et SymfonyTutoriel WAMP • Cliquez 👍 pour dire merci • Marquez vos sujets résolus

+2 -0
Auteur du sujet

Merci pour ta réponse.

Ce sont les Noms des fichiers que je me tâte à enregistrer dans la BDD dans une nouvelle table que je nommerai par exemple "uploads".

En fait j’ai déjà développé mon système d’upload, mais je n’enregistre rien dans la BDD. Et j’ai fait un système de listage (on peut se balader dans les sous-dossiers des sous-dossiers, on peut créer autant de sous-dossiers que l’on veut dans la profondeur que l’on veux, etc). Et effectivement ça n’a pas été une tache facile de développer quelque chose de très propre sans le moindre bug.

Mais je me rend compte que si je veut laisser la possibilité aux utilisateurs du CMS de faire des jointures avec des pages (avec des fiches produits d’un site Ecommerce par exemple), cette organisation n’est peut être pas la meilleur.

Tout conseils sont les bienvenus. Merci.

Édité par stephweb

Désolé, par "système de listage", j’avais compris de quoi générer une liste, et non de quoi naviguer dans les fichiers  ;)

Si tu devais persister des infos de fichier, enregistre aussi le chemin et le type. Tu pourras ainsi mettre en place des contrôles d’accès au besoin.

Evitez qu’on vous dise de les lire : FAQ PHP et SymfonyTutoriel WAMP • Cliquez 👍 pour dire merci • Marquez vos sujets résolus

+1 -0
Auteur du sujet

Ok merci.

Oui j’avais compris "système de listage". En fait, la où je génère la liste (par défaut on arrive au listage paginé de tout les fichiers et sous-dossiers qui sont à la racine du répertoire d’upload), on peut aussi se balader dans les sous-dossier. Et dans chaque sous-dossier, il y a la liste des fichiers et autres sous-dossiers qu’il y a dans ce sous-dossier, et ainsi de suite.

Et oui, quand je disait Nom, je pensais à Chemin. Dans mon cas, je ne voit pas l’un intérêt d’enregistrer le type.

Édité par stephweb

Alors du coup, quel est ton besoin ?

Tu mentionnes déjà des soucis pour lier plusieurs fichier à un produit. Si en plus on imagine que seuls les clients ayant acheté ledit produit ont accès au manuel, je pense que la base de données est inévitable.

Evitez qu’on vous dise de les lire : FAQ PHP et SymfonyTutoriel WAMP • Cliquez 👍 pour dire merci • Marquez vos sujets résolus

+0 -0

En fait j’ai déjà développé mon système d’upload, mais je n’enregistre rien dans la BDD. Et j’ai fait un système de listage (on peut se balader dans les sous-dossiers des sous-dossiers, on peut créer autant de sous-dossiers que l’on veut dans la profondeur que l’on veux, etc). Et effectivement ça n’a pas été une tache facile de développer quelque chose de très propre sans le moindre bug.

T’as pas des problèmes de sécurité avec ça ?

Genre si un utilisateur, au lieu de se balader dans ma_racine/mon_dosssier/mon_fichier il saisit (ou force une saisie, en envoyant une requête http ou autre) ma_racine/../../../../var/www/ y’a pas un danger qu’il se balade dans l’arborescence de TON serveur ?

Ptet’ j’ai pas (du tout) bien compris ton système. Mais en pratique, il faut faire hyper hyper attention, si tu stockes (ou non) des liens vers des fichiers présents sur une machine. Tu te retrouves très vite avec des failles de sécurité béantes dans ton appli.

Happiness is a warm puppy

+0 -0
Auteur du sujet

En fait j’ai déjà développé mon système d’upload, mais je n’enregistre rien dans la BDD. Et j’ai fait un système de listage (on peut se balader dans les sous-dossiers des sous-dossiers, on peut créer autant de sous-dossiers que l’on veut dans la profondeur que l’on veux, etc). Et effectivement ça n’a pas été une tache facile de développer quelque chose de très propre sans le moindre bug.

T’as pas des problèmes de sécurité avec ça ?

Genre si un utilisateur, au lieu de se balader dans ma_racine/mon_dosssier/mon_fichier il saisit (ou force une saisie, en envoyant une requête http ou autre) ma_racine/../../../../var/www/ y’a pas un danger qu’il se balade dans l’arborescence de TON serveur ?

Ptet’ j’ai pas (du tout) bien compris ton système. Mais en pratique, il faut faire hyper hyper attention, si tu stockes (ou non) des liens vers des fichiers présents sur une machine. Tu te retrouves très vite avec des failles de sécurité béantes dans ton appli.

Javier

Merci pour vos réponses.

Je ne vois pas comment un utilisateur peut se balader dans l’arborescence de mon serveur.

Par exemple pour se balader dans le dossier "sous-dessier-2" qui est dans le dossier "sous-dessier-1" qui lui même est dans le répertoire "upload", il doit aller :

www.mon-site.fr/admin/upload?dir=sous-dessier-1/sous-dessier-2

Et en PHP, à chaque requête (GET et POST) je vérifie que ce fichier (avec chemin en absolue) existe avant d’exécuter le reste du programme.

1
2
3
if ( !file_exists(public_path(config('upload.racine_path').'/'.$file)) ) {
  return redirect()->route('home');
 }

PS :

pour que les utilisateurs de mon CMS puissent ajouter des pages je leur ai mis l’éditeur WYSIWYG ckeditor.

Et pour qu’ils puissent ajouter des images dans les pages, je leur ai mis le plugin pgrfilemanager de ckeditor, et lorsqu’on upload une image avec pgrfilemanager on ne peut pas faire en sorte que l’image s’enregistre dans la BDD. Donc voilà une des grosses raisons qui a fait que j’avais fait le chois d’enregistrer aucun fichier dans la BDD. Mais si certains ont des conseils, je suis preneur.

Édité par stephweb

Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte