Mysql
 sql >> Base de données >  >> RDS >> Mysql

Images dans MySQL

Comme dit précédemment, blob est la voie à suivre, cependant, comme le souligne SanHolo, ce n'est pas vraiment en termes de performances et vous finirez par rencontrer des problèmes car votre base de données peut croître très très vite !

Pourquoi n'indexez-vous pas le nom du fichier sur la base de données et stockez le fichier sur le serveur ?

La principale raison de ne pas autoriser quelque chose comme ça serait des problèmes de sécurité. Si vous essayez vraiment de couvrir vos bases en ne permettant pas à tous les utilisateurs de voir ou de saisir du contenu, vous avez deux options.

Option A) donnez au fichier un nom unique et non identifiable comme le fait Flickr. Le nom du fichier comprend deux hachages. Un hachage d'utilisateur et un hachage de fichier. Le deuxième hachage est secret et la seule façon de l'obtenir serait par essais et erreurs. Jetez un oeil à ce fichier que j'ai sur Flickr . Est protégé par l'utilisateur (seule la famille peut le voir) mais vous pourrez y accéder très bien car l'URL elle-même sert de protection :http://farm2.static.flickr.com/1399/862145282_bf83f25865_b.jpg , même si vous essayiez de générer des hachages au hasard et que vous en trouviez un valide, il serait masqué par l'anonymat car vous ne sauriez pas de qui il provient.

Option B) utiliser une technologie côté serveur pour limiter l'accès. Cette méthode est plus sûre mais plus coûteuse pour le serveur. Vous allez configurer un script qui autorisera/refusera l'accès au fichier en fonction de session_permissions ou quelque chose de similaire. Regardez le code suivant qui serait appelé en accédant à quelque chose comme :

http://votreserveur.com/getprotectedfile.php?filename=213333.jpeg

session_start();

// logic to verify the user is ok
if($_SESSION['user_access']!=true) {
    exit('user not allowed here');

// WATCHOUT! THIS IS NOT SECURE! EXAMPLE ONLY.
// on a production site you have to be sure that $filename will not point to a system file
$filename = $_GET['filename'];

// gets the file and outputs it to the user
header('Content-type: image/jpeg');
header('Content-Length: '.filesize($filename));
readfile($filename);