Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1137 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  PHP/MySQL: Comment afficher une image BLOB

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PHP/MySQL: Comment afficher une image BLOB

n°490009
monnoliv
Posté le 18-08-2003 à 10:20:47  profilanswer
 

Bonjour,
 
J'utilise PHP avec MySQL sous W2k avec le serveur Apache.
Quand j'essaye d'afficher une image enregistrée dans un BLOB, j'obtient le code de l'image plutôt que l'image elle même.
Je n'ai pas de code à proposer puisque j'ai fait l'essai avec DreamWeaverMX. Dans les FAQ DreamweaverMX, il est dit que celui-ci ne supporte pas l'affichage des images à partir d'un BLOB (ils préconisent d'enregistrer le nom du fichier dans la base et mettre l'image en dehors, à quoi sert la base alors?).
 
Pouvez-vous me conseiller (bout de code, autre,...)?

mood
Publicité
Posté le 18-08-2003 à 10:20:47  profilanswer
 

n°490014
antp
Super Administrateur
Champion des excuses bidons
Posté le 18-08-2003 à 10:24:31  profilanswer
 

Tu l'affiches comment l'image ? Il manque peut-être juste un content-type
header('content-type: image/jpeg');
ou un truc du genre


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°490017
deliriumtr​emens
sic transit intestinal...
Posté le 18-08-2003 à 10:26:21  profilanswer
 

Ben la base te sert à gérer tes références aux images...
 
Et le fait de stocker tes images à l'extérieur est effectivement une meilleure chose (à mon goût) : ça te boufferait de la place inutilement dans ta BDD, plus de soucis en cas de migration, etc.
 
[mode exemple à la con ON]
Si tu fais un annuaire de sites, tu gères les liens vers les sites, tu stockes pas les sites dans ta base, et pourtant tu as bien besoin d'une BDD.
[mode exemple à la con OFF]
 
C'est en gros le même principe pour les images.

n°490025
simogeo
j'ai jamais tué de chats, ...
Posté le 18-08-2003 à 10:31:42  profilanswer
 

+1 ....
y'a rien de plus con que de stocker des images dans une bdd ....
tu te rends compte de la taille qu'elle pourrait avoir rapidement  :o  
je conseille aussi le stockage dans un repp approprié + reference dans la base  [:volta]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°490031
monnoliv
Posté le 18-08-2003 à 10:34:47  profilanswer
 

Je pense au contraire que la base doit stocker les images (le meilleur exemple est ce forum). D'un point de vue manipulation/automatisation cette solution est excellente.
 
Concernant header('content-type: image/jpeg'); il me semble que j'avais déjà essayé, je vais vérifier.
 

n°490037
simogeo
j'ai jamais tué de chats, ...
Posté le 18-08-2003 à 10:36:44  profilanswer
 

monnoliv a écrit :

Je pense au contraire que la base doit stocker les images (le meilleur exemple est ce forum).  


 
 :lol: .... c'est ca ouais .....  
les images doivent être stockées dans la base ....[:ddr555]  
et les messages en fichier texte... :sarcastic:


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°490093
monnoliv
Posté le 18-08-2003 à 11:07:16  profilanswer
 

Bon, à part rigoler, qui peut répondre à ce problème ?

n°490099
antp
Super Administrateur
Champion des excuses bidons
Posté le 18-08-2003 à 11:10:43  profilanswer
 

bah revérifie déjà ton header, si ça affiche le contenu de l'image au lieu d'afficher l'image je vois pas trop ce que ça pourrait être d'autre
 
Et t'as toujours pas dit comment t'affichais l'image :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°490177
monnoliv
Posté le 18-08-2003 à 13:02:46  profilanswer
 

Ok, je te réponds ce soir ou demain.

n°490489
monnoliv
Posté le 18-08-2003 à 17:43:59  profilanswer
 

En attendant, pour répondre au petit rigolo (simogeo), voici un lien utile concernant l'implémentation de BLOB dans une DB:
http://www.microsoft.com/technet/t [...] /c1161.asp
La page explique, entre-autre, qu'un lien est créé (dans la DB) à la place du BLOB si celui-ci est trop grand (Je suppose que MySQL procède à peut près de même). Avoir une DB de 10GB avec image n'est pas forcément plus mauvais qu'en avoir une de 10Mb sans image mais avec liens (bonjour la maintenance des liens).
Je pense que cela doit se discuter au cas par cas mais ce qui est effectivement sûr, c'est qu'un champ de longueur fixe sera plus rapide qu'un autre de taille variable.

mood
Publicité
Posté le 18-08-2003 à 17:43:59  profilanswer
 

n°490492
Hermes le ​Messager
Breton Quiétiste
Posté le 18-08-2003 à 17:53:42  profilanswer
 

monnoliv a écrit :

En attendant, pour répondre au petit rigolo (simogeo), voici un lien utile concernant l'implémentation de BLOB dans une DB:
http://www.microsoft.com/technet/t [...] /c1161.asp
La page explique, entre-autre, qu'un lien est créé (dans la DB) à la place du BLOB si celui-ci est trop grand (Je suppose que MySQL procède à peut près de même). Avoir une DB de 10GB avec image n'est pas forcément plus mauvais qu'en avoir une de 10Mb sans image mais avec liens (bonjour la maintenance des liens).
Je pense que cela doit se discuter au cas par cas mais ce qui est effectivement sûr, c'est qu'un champ de longueur fixe sera plus rapide qu'un autre de taille variable.


 
C'est toi le rigolo. Et ce n'est aucunement parce que tu defends le fait de mettre des images dans la BDD ce qui peut se defendre (meme si moi je le ferais pas), mais parce que tu parles sans savoir en disant :

Citation :

le meilleur exemple est ce forum


n°490495
monnoliv
Posté le 18-08-2003 à 17:59:10  profilanswer
 

Autant pour moi,
Je pensais de bonne foi que pour 10Ko max d'image par utilisateur (genre smileys et autres brols) cela valait la peine de les intégrer dans la DB.
A priori, moi, je l'aurais fait.

n°490499
Hermes le ​Messager
Breton Quiétiste
Posté le 18-08-2003 à 18:04:31  profilanswer
 

monnoliv a écrit :

Autant pour moi,
Je pensais de bonne foi que pour 10Ko max d'image par utilisateur (genre smileys et autres brols) cela valait la peine de les intégrer dans la DB.
A priori, moi, je l'aurais fait.


 
Encore une fois, je ne dis pas que c'est forcement une mauvaise solution, je dis juste que je ne le ferais pas et qu'apparemment, bcp ici pensent la meme chose que moi.
Il me semble plus intelligent de faire un rep. pour les images et un bout de script qui fait un dir sur le rep pour mettre a jour les liens dans la BDD (dans le cas de smileys proposes pour un forum par exemple).

n°490527
simogeo
j'ai jamais tué de chats, ...
Posté le 18-08-2003 à 18:51:48  profilanswer
 

monnoliv a écrit :

En attendant, pour répondre au petit rigolo (simogeo)


cai moi [:dawa]
 
 

monnoliv a écrit :


http://www.microsoft.com/technet/t [...] /c1161.asp
La page explique, entre-autre, qu'un lien est créé (dans la DB) à la place du BLOB si celui-ci est trop grand (Je suppose que MySQL procède à peut près de même).


http://www.mysql.com/doc/fr/BLOB.html ... voilà pour ce qui est de la doc MySQL ....
(quand je fais du PHP, je ne me sers pas de la doc VB  :sarcastic: )
tu remarqueras qu'il ne parle pas de la création automatique de lien lors de l'explosion dudit-champ...
 
 

monnoliv a écrit :

Avoir une DB de 10GB avec image n'est pas forcément plus mauvais qu'en avoir une de 10Mb sans image mais avec liens (bonjour la maintenance des liens).


[:mlc2]
stocker un lien vers un dossier dans un varchar(255) -maximum  ;)  et stocker des images ne revient pas vraiment au même... Sachant qu'on peut le faire autrement moi j'appelle ca de la surcharge ....:/
un serveur SQL sollicité c'est un serveur qui peut être amener un ramer.... [:spamafote]  
 
pour ce qui est de la maintenance des liens .... ca dépend de ton code .... moi je l'ai déjà mis en place .. ca tourne sans problème et j'ai pas de difficulté a le maintenir.  :sarcastic:  
 
 

monnoliv a écrit :

Je pense que cela doit se discuter au cas par cas mais ce qui est effectivement sûr, c'est qu'un champ de longueur fixe sera plus rapide qu'un autre de taille variable.


dans quel ca tu as un champs fixe ? en type BLOB ?  :heink:  
 
ps: tu fais ce que tu veux... moi j'en ai rien a foutre de ton appli ..... une dernière mise en garde toutefois si tu as fait le choix definitif du stockage en bdd et que tu es sur un serveur mutualisé ... saches que certains imposent des limites à la taille de la bdd  ;)


Message édité par simogeo le 18-08-2003 à 18:53:16

---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°490656
monnoliv
Posté le 18-08-2003 à 20:56:52  profilanswer
 

-----------------
http://www.mysql.com/doc/fr/BLOB.html ... voilà pour ce qui est de la doc MySQL ....
(quand je fais du PHP, je ne me sers pas de la doc VB  :sarcastic: )  
-----------------
Allons, faut pas être de mauvaise foi, on s'en fout du VB, sur ce lien, il y a un diagramme expliquant la structure de stockage d'un BLOB dans leur DB.
 
 
-----------------
stocker un lien vers un dossier dans un varchar(255) -maximum  ;)  et stocker des images ne revient pas vraiment au même...  
-----------------
Evidemment.
 
 
-----------------
un serveur SQL sollicité c'est un serveur qui peut être amener un ramer....
-----------------
C'est vrai dans les deux cas (avec et sans images)
 
 
-----------------
pour ce qui est de la maintenance des liens .... ca dépend de ton code .... moi je l'ai déjà mis en place .. ca tourne sans problème et j'ai pas de difficulté a le maintenir.  :sarcastic:  
-----------------
Bien sûr... on ne compte plus les pages où, à la place de voir apparaître une image, on ne reçoit qu'un petit icône misérable nous informant qu'effectivement, on aurait dû en avoir une :-)
 
 
------------------
dans quel ca tu as un champs fixe ? en type BLOB ?  :heink:  
------------------
varchar(255), non ?
 
 
------------------
ps: tu fais ce que tu veux... moi j'en ai rien a foutre de ton appli .....  
------------------
Voilà bien le langage qu'on ne trouve pas (ou peu) dans les forums anglo-saxon.
 
 
------------------
une dernière mise en garde toutefois si tu as fait le choix definitif du stockage en bdd et que tu es sur un serveur mutualisé ... saches que certains imposent des limites à la taille de la bdd  ;)
------------------
Je n'ai fait aucun choix, je suis venu dans ce forum poser une simple question. Tu m'as ri au nez, merci mais c'est pas ce que j'attendais (même si j'ai fais une erreur d'appréciation sur le stockage d'image).

n°490670
simogeo
j'ai jamais tué de chats, ...
Posté le 18-08-2003 à 21:13:29  profilanswer
 

je t'ai d'abord donné mon avis sur la question  [:spamafote].
tu essayes de me démontrer le contraire avec un contre-exemple.... :sweat: .... bien évidemment je rigole.  ;)  (toutefois sans mechanceté). Et tu reviens sur le topik en m'appelant le petit rigolo et avec des arguments qui ne sont toujours pas très convaincants à mon sens.
 
Le langage 'non-anglo-saxon compliant' n'est pas insulte.... envers toi ... c'est en guise d'une sincerité dans mes propos.
 
ps : si je peux t'aider je le ferais encore  :)  
 
 
pour reprendre tes propos :
 

Allons, faut pas être de mauvaise foi, on s'en fout du VB, sur ce lien, il y a un diagramme expliquant la structure de stockage d'un BLOB dans leur DB.


oui mais MySQl ne fonctionne pas de la même façon.
 

C'est vrai dans les deux cas (avec et sans images)


dans les 2 cas ils sont sollicités mais on ne lui demande pas le même effort
 

Bien sûr... on ne compte plus les pages où, à la place de voir apparaître une image, on ne reçoit qu'un petit icône misérable nous informant qu'effectivement, on aurait dû en avoir une :-)


il est tiré par les cheveux cet argument quand même [:linuxine]... limite mauvaise foi  :whistle:  
 

Code :
  1. varchar(255), non ?


oui ..... il est possible de stocker le lien dans un varchar(30) aussi pour gagner encore quelques octets


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°490930
monnoliv
Posté le 19-08-2003 à 09:54:15  profilanswer
 

Ok, j'ai résolu mon pb. C'était effectivement un problème de header. En fait Dreamweaver m'a causé + de soucis qu'il en a résolu. Le problème avec ces softs, c'est qu'on ne maîtrise pas le code.
Merci et à bientôt,

n°491092
RiderCrazy
Posté le 19-08-2003 à 12:18:42  profilanswer
 

monnoliv a écrit :

Ok, j'ai résolu mon pb. C'était effectivement un problème de header. En fait Dreamweaver m'a causé + de soucis qu'il en a résolu. Le problème avec ces softs, c'est qu'on ne maîtrise pas le code.
Merci et à bientôt,

Veux faire le malin en essayant de nous faire comprendre que stocker une image dans la BDD caiplusmieu et il code avec DW... :lol: [:rofl] [:rofl2]

n°507813
kalex
Posté le 04-09-2003 à 20:19:57  profilanswer
 

Je suis désolé, les "petits rigolos" (;)) ne m'ont pas encore convaincu...
Vous dites "ça alourdi la base". Et alors ? Que l'image soit dans un répertoire ou dans la base, ça bouffe de l'espace pareillement ! Et ça m'étonnerait grandement que la vitesse d'exécution en pâtisse bc...
Je trouve ça vraiment "sale" de stoker un lien vers un fichier qui n'a aucun rapport. Je fais comme ça depuis longuement et ça m'a toujours dérangé.
 
A vous...

n°507874
chaica
Posté le 04-09-2003 à 21:34:46  profilanswer
 

Excusez moi j'ai suivi le topic car le sujet m'intéresse mais je n'ai pas encore lu d'arguments qui expliquent pourquoi ce n'est pas bien de stocker de gros objets dans labase. La question m'intéresse c'est pour cela que je relance.  
 

n°507904
BenJ9002
Posté le 04-09-2003 à 21:59:47  profilanswer
 

chaica a écrit :

Excusez moi j'ai suivi le topic car le sujet m'intéresse mais je n'ai pas encore lu d'arguments qui expliquent pourquoi ce n'est pas bien de stocker de gros objets dans labase. La question m'intéresse c'est pour cela que je relance.  


Pour reprendre l'exemple d'un serveur mutualisé (ou par exemple t'as 20Mo de données MySQL et 50Mo de données pour les fichiers) tu vois tout de suite qu'il vaut mieux stoquer les images hors de la base et garder la base pour les données variables (par exemple les messages d'un forum).
 
D'autre part, quand on dit que ca alourdit la base : si à chaque appel d'un smiley tu dois aller faire une lecture de la base, générer l'image puis la transmettre, ton serveur il souffre. Alors que si tu stoques l'image en tant qu'image dans un repertoire, le serveur n'a plus que la partie envoi du fichier à faire [:spamafote]


---------------
Le topic des plongeurs  |  Le topic du routeur D-Link DSL-604+
n°508054
yo c spi
Yo !
Posté le 05-09-2003 à 00:21:06  profilanswer
 

Plusieurs choses :  
 
- Pourquoi veux tu stocker des images dans une BDD (des images générées en PHP, a la limite mais sinon .... je vois pas trop l'intéret), et puis ca doit etre chiant a mettre en place une BDD comme ca. Comme on te l'a dit, stocke plutot le nom des images (ca reviendra a peu pres au meme)
 
- N'utilise pas Dreamweaver MX pour tout ce qui est PHP-SQL.
DW, c'est bon pour créer des pages Web en HTML pour les débutants qui veulent faire des trucs jolis (et encore des fois, faut reprendre le code) mais pour le php-SQL, rien ne vaut un bon viel éditeur de texte (Jedit, UltraEdit ...)
Ou alors tu créé ton interface sous DW puis l'édite après.

n°508128
kalex
Posté le 05-09-2003 à 01:17:25  profilanswer
 

benj9002 a écrit :


Pour reprendre l'exemple d'un serveur mutualisé (ou par exemple t'as 20Mo de données MySQL et 50Mo de données pour les fichiers) tu vois tout de suite qu'il vaut mieux stoquer les images hors de la base et garder la base pour les données variables (par exemple les messages d'un forum).
 
D'autre part, quand on dit que ca alourdit la base : si à chaque appel d'un smiley tu dois aller faire une lecture de la base, générer l'image puis la transmettre, ton serveur il souffre. Alors que si tu stoques l'image en tant qu'image dans un repertoire, le serveur n'a plus que la partie envoi du fichier à faire [:spamafote]  

Effectivement, pour un smilley c'est plutôt stupide. Mais par exemple, tu publies un article avec des images pour l'illustrer. Il te faut deux tables ("articles" et "images" ) reliées par leurs ID. Je trouve infiniment plus propre que l'image soit stoquer dans la table images, plutôt que stoquée dans un répertoire qui n'a rien à voir et qui, de plus, est commun à toutes les images stoquées dans la table. C'est juste une question de cohérence...
 
Et question performance, je ne suis pas sur que ce soit dramatique d'afficher une image stoquée dans la base, plutôt que d'extraire son nom et de l'afficher ensuite.

n°508291
BenJ9002
Posté le 05-09-2003 à 10:48:05  profilanswer
 

Kalex a écrit :

Effectivement, pour un smilley c'est plutôt stupide. Mais par exemple, tu publies un article avec des images pour l'illustrer. Il te faut deux tables ("articles" et "images" ) reliées par leurs ID. Je trouve infiniment plus propre que l'image soit stoquer dans la table images, plutôt que stoquée dans un répertoire qui n'a rien à voir et qui, de plus, est commun à toutes les images stoquées dans la table. C'est juste une question de cohérence...


Tu peux très bien faire un repertoire pour chaque article et comme ça tu gardes toutes les images de l'article ensemble te séparément des autres. [:spamafote]  
 

Kalex a écrit :


Et question performance, je ne suis pas sur que ce soit dramatique d'afficher une image stoquée dans la base, plutôt que d'extraire son nom et de l'afficher ensuite.


Ca serait à essayer ... je pense le contraire de toi mais bon ;) S'il y a 10 visiteurs en même temps qui consultent des articles, ta base va devoir sortir 10*10ko pour les images au lieu de 10*5 octets pour les adresses et là ça va faire mal.


---------------
Le topic des plongeurs  |  Le topic du routeur D-Link DSL-604+
n°508313
yo c spi
Yo !
Posté le 05-09-2003 à 10:58:11  profilanswer
 

Yo c Spi a écrit :

- Pourquoi veux tu stocker des images dans une BDD (des images générées en PHP, a la limite mais sinon .... je vois pas trop l'intéret), et puis ca doit etre chiant a mettre en place une BDD comme ca. Comme on te l'a dit, stocke plutot le nom des images (ca reviendra a peu pres au meme)


 
monnoliv : Pourrai t'on savoir s'il te plait, tout le monde émet des hypothèses sur l'utilisation d'une telle pratique, mais pour toi c'est quoi ?
Up  :bounce:

n°508545
kalex
Posté le 05-09-2003 à 13:51:33  profilanswer
 

benj9002 a écrit :


Tu peux très bien faire un repertoire pour chaque article et comme ça tu gardes toutes les images de l'article ensemble te séparément des autres. [:spamafote]  
...

Certes, mais tu as bien compris ce que je veux dire. Un répertoire, quel qu'il soit (même avec l'ID de l'article en nom) n'est relié en rien à une table dans une bdd.
Enfin bon, je défends un système qui je n'utilise pas moi-même mais que je trouve tout de même très cohérent. ;)
 
Je coderais bien un petit exemple pour tester les performances, mais là je suis sur un portable avec Windows XP et je suis un peux perdu sans mes outils Unix. :D

n°508564
BenJ9002
Posté le 05-09-2003 à 14:04:39  profilanswer
 

Kalex a écrit :

Certes, mais tu as bien compris ce que je veux dire. Un répertoire, quel qu'il soit (même avec l'ID de l'article en nom) n'est relié en rien à une table dans une bdd.
Enfin bon, je défends un système qui je n'utilise pas moi-même mais que je trouve tout de même très cohérent. ;)


 
Je comprends pas trop le problème que l'image ne soit pas directement reliée à la base :/ Si le site est bien fait ca devrait pas géner [:spamafote]  
 
N'empèche, ce système peut etre intéressant dans le cas d'un serveur dédié où on a pas de limitation dans la taille de la base de données (sinon c'est pas viable).


---------------
Le topic des plongeurs  |  Le topic du routeur D-Link DSL-604+
n°508648
kalex
Posté le 05-09-2003 à 15:34:55  profilanswer
 

benj9002 a écrit :


 
Je comprends pas trop le problème que l'image ne soit pas directement reliée à la base :/ Si le site est bien fait ca devrait pas géner [:spamafote]  
 
N'empèche, ce système peut etre intéressant dans le cas d'un serveur dédié où on a pas de limitation dans la taille de la base de données (sinon c'est pas viable).

Exemple d'incohérence : lorsque tu affiches une image que tu ne connais que pas son ID. Comment tu fais pour l'afficher si elle n'est pas dans la table ?
Tu crées une page PHP  (adresse : chezmoi.com/img.php?id=7) renvoyant du code HTML avec un tag img.
 
Alors que si l'image est stoquer dans la base, tu l'affiches direct.
 
A un moment j'avais essayer d'afficher l'image d'après l'adresse avec un fopen, c'était déja moins incohérent (du coté client).
 
J'ai fait un petit code trés simpliste, si quelqu'un pouvait tester les performances :
insert_img.php

Code :
  1. <?
  2. // $nom et la variable contenant le nom de l'image (déjà stoquer sur le serveur).
  3. $connect = mysql_pconnect('localhost');
  4. mysql_select_db ('mabase', $connect);
  5. /*
  6. Code pour créer la table :
  7. create table test_img(id int auto_increment, data LONGBLOB, primary key(id));
  8. */
  9. $pfile = fopen($nom, "rb" );
  10. $size = filesize($nom);
  11. $file = fread($pfile, $size);
  12. $file = addslashes($file);
  13. $command = "INSERT INTO test_img(data) VALUES(\"$file\" )";
  14. mysql_query($command, $connect);?>


 
img_sql.php

Code :
  1. <?
  2. // $id est l'ID de l'image stoquée dans la base.
  3. $connect = mysql_pconnect('localhost');
  4. mysql_select_db ('mabase', $connect);
  5. $command = "SELECT * FROM test_img WHERE id = $id";
  6. $result = mysql_query($command, $connect);
  7. $array = mysql_fetch_array($result);
  8. header("Content-type: image/jpeg" );
  9. echo $array[data];
  10. ?>


 
img.php

Code :
  1. <?
  2. $connect = mysql_pconnect('localhost');
  3. mysql_select_db ('ma_base', $connect);
  4. */
  5. Code sql pour créer la table :
  6. create table test_img_adress(id int auto_increment, adress varchar(55), primary key(id));
  7. */
  8. $command = "SELECT * FROM test_img_adress WHERE id = 2";
  9. $result = mysql_query($command, $connect);
  10. $array = mysql_fetch_array($result);
  11. echo "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//FR'>
  12. <html>
  13. <head>
  14. <title>$array[adress]</title>
  15. <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>
  16. </head>
  17. <body>
  18. <img src='$array[adress]' alt='image'>
  19. </body>
  20. </html>";
  21. ?>

n°508787
jagstang
Pa Capona ಠ_ಠ
Posté le 05-09-2003 à 16:54:05  profilanswer
 

Perso je nomme simplement le nom de l'image selon l'ID de la bdd. Je vois pas ou est le problème.
 
Mais à mon avis, mettre les images dans la base est une très mauvaise idée.

n°509043
omega2
Posté le 05-09-2003 à 21:52:32  profilanswer
 

chaica a écrit :

Excusez moi j'ai suivi le topic car le sujet m'intéresse mais je n'ai pas encore lu d'arguments qui expliquent pourquoi ce n'est pas bien de stocker de gros objets dans labase. La question m'intéresse c'est pour cela que je relance.  
 
 

Un exemple simple :
une base de donnée avec des images de 600 ko stockés dedans
une serveur web avec php qui utilise cette base de donnée.
t'as une personne qui a besoin d'une image : le navigateur envoie la demande au serveur, le serveur envoie la demande au serveur sql et il doit attendre la réponse.
avec un réseau à 10Mb, il faut 0.5 secondes par images. Si le navigateurs a besoin d'une disaines d'images, ca méttra 5 secondes pour revenir (en considérant que toutes les images sont demandé au même moment).
Avec 6 personnes qui ont besoin des mêmes images en même temps on tombe à trente secondes pour que tout soit envoyé au navigateur.
 
Une personne de plus et on tombes a trente seconde d'exécution (ou plustôt d'attente d'infos) et 10 images qui seront jamais envoyé (time out du script php).
 
Là, on en est à 70 images demandés à la fois et on a déjà des problèmes. Je te laisses imaginer ce que ca va donner quand la demande sera plus forte. ;)
 
Evidemment, pour un tout petit site ca posera pas de problème, mais pour un site comme hardware.fr je penses que les premiers jours après la publication d'un article, ca serait l'horreur pour accéder aux images avec un tel système. ;)

n°509139
chaica
Posté le 06-09-2003 à 03:19:54  profilanswer
 

omega2 a écrit :

Un exemple simple :
une base de donnée avec des images de 600 ko stockés dedans
une serveur web avec php qui utilise cette base de donnée.
t'as une personne qui a besoin d'une image : le navigateur envoie la demande au serveur, le serveur envoie la demande au serveur sql et il doit attendre la réponse.
avec un réseau à 10Mb, il faut 0.5 secondes par images. Si le navigateurs a besoin d'une disaines d'images, ca méttra 5 secondes pour revenir (en considérant que toutes les images sont demandé au même moment).
Avec 6 personnes qui ont besoin des mêmes images en même temps on tombe à trente secondes pour que tout soit envoyé au navigateur.
 
Une personne de plus et on tombes a trente seconde d'exécution (ou plustôt d'attente d'infos) et 10 images qui seront jamais envoyé (time out du script php).
 
Là, on en est à 70 images demandés à la fois et on a déjà des problèmes. Je te laisses imaginer ce que ca va donner quand la demande sera plus forte. ;)
 
Evidemment, pour un tout petit site ca posera pas de problème, mais pour un site comme hardware.fr je penses que les premiers jours après la publication d'un article, ca serait l'horreur pour accéder aux images avec un tel système. ;)


 
Toi c'est ca qui se passe :
client web>serveur web>bdd>serveur web>client web
 
mais avec un lien dans la base il faudra :
client web>serveur web>bdd>serveur web avec accès disque pour récupérer les images>client web.
 
Avec un temps d'accès disque pour chacune des images. Donc je vois pas encore une différence flagrante.

n°509208
jagstang
Pa Capona ಠ_ಠ
Posté le 06-09-2003 à 12:29:01  profilanswer
 

fais des tests à mon avis c'est assez flagrant.


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°509219
chaica
Posté le 06-09-2003 à 13:12:07  profilanswer
 

Ben théoriquement un accès à la bdd est plus rapide qu'un accès disque donc le problème doit être autre part.

n°509222
jagstang
Pa Capona ಠ_ಠ
Posté le 06-09-2003 à 13:17:02  profilanswer
 

Citation :

Ben théoriquement un accès à la bdd est plus rapide qu'un accès disque donc le problème doit être autre part.


 
 
ça dépend de la montée en charge. Ce sujet est stérile. Personne ne sait pkoi apparement  ;) , mais tout le monde, ou presque, est du même avis...
 
 
http://dev.nexen.net/news/gen.php3 [...] 1,0,0.html
A notter qu'il est plutot conseillé de ne stocker en base que le chemin vers l'image et de stocker celle-ci "normalement" sur le serveur.
 
 
http://www.phpindex.com/articles/a [...] lement=208
Le stockage des images d'un site web dynamique pose souvent problème. Faut-il enregistrer l'image dans la base de données ou bien simplement le chemin vers le fichier ?
 
Jérôme Morlon nous présente le problème et donne en quelques lignes de code les deux solutions. Quoi qu'il arrive, stocker l'image dans la base MySQL nécessite beaucoup, beaucoup plus de ressources et peut-être aussi plus d'espace disque. J. Morlon nous parle aussi de la possibilité de faire des recherches dans la base de données sur "des formes au sein des images". J'aimerai beaucoup avoir plus d'information là dessus.  
 
Il y a par contre un gros intérêt avec les images stockées sur le disque dans l'arborescence web, en plus du gain de rapidité, c'est la possibilité d'utiliser la mémoire cache de votre navigateur. Il n'est pas prouvé que les navigateurs ne rechargent pas les images déjà chargées qui sont stockées en base de données. Ce serait une surcharge supplémentaire pour la première solution.
 
Attention, cet article s'adresse plutôt aux débutants.


Message édité par jagstang le 06-09-2003 à 13:17:54

---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°509223
forummp3
@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@
Posté le 06-09-2003 à 13:22:54  profilanswer
 

chaica a écrit :

Ben théoriquement un accès à la bdd est plus rapide qu'un accès disque donc le problème doit être autre part.

et la bdd,elle est ou?sur un disc dur non?  :whistle:


---------------
lecteur mp3 yvele's smilies jeux de fille
n°509250
kalex
Posté le 06-09-2003 à 13:58:16  profilanswer
 

omega2 a écrit :

Un exemple simple :
une base de donnée avec des images de 600 ko stockés dedans
une serveur web avec php qui utilise cette base de donnée.
t'as une personne qui a besoin d'une image : le navigateur envoie la demande au serveur, le serveur envoie la demande au serveur sql et il doit attendre la réponse.
avec un réseau à 10Mb, il faut 0.5 secondes par images. Si le navigateurs a besoin d'une disaines d'images, ca méttra 5 secondes pour revenir (en considérant que toutes les images sont demandé au même moment).
Avec 6 personnes qui ont besoin des mêmes images en même temps on tombe à trente secondes pour que tout soit envoyé au navigateur.
 
Une personne de plus et on tombes a trente seconde d'exécution (ou plustôt d'attente d'infos) et 10 images qui seront jamais envoyé (time out du script php).
 
Là, on en est à 70 images demandés à la fois et on a déjà des problèmes. Je te laisses imaginer ce que ca va donner quand la demande sera plus forte. ;)
 
Evidemment, pour un tout petit site ca posera pas de problème, mais pour un site comme hardware.fr je penses que les premiers jours après la publication d'un article, ca serait l'horreur pour accéder aux images avec un tel système. ;)

J'ai peur de mal comprendre... Tu nous parles de problèmes de bande passante ?!!  :heink:  
C'est sûr que lorsque tu as une base de donnée reliée au serveur par un réseau 10 Mb c'est une solution à éviter !!!
 
Sinon, je viens de vérifier IE et Mozilla savent mettre en cache les images provenant d'un bdd (je ne vois pas pourquoi ils ne le pourraient pas...).
 
Mais bon, je répète que je suis séduit par ce système uniquement pour des raisons de cohérence, je veux bien croire qu'il est moins rapide. Et puis, y pas que les sites web dans la vie d'une bdd. :)

n°509251
jagstang
Pa Capona ಠ_ಠ
Posté le 06-09-2003 à 14:02:27  profilanswer
 

Comme tu veux. Au moins tu es au courant  ;)


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°509283
kalex
Posté le 06-09-2003 à 16:07:39  profilanswer
 

JagStang a écrit :

Comme tu veux. Au moins tu es au courant  ;)  

Si je me plante, ça sera vot' faute. :cry:  
 
;)

n°509392
omega2
Posté le 06-09-2003 à 20:43:50  profilanswer
 

chaica a écrit :


 
Toi c'est ca qui se passe :
client web>serveur web>bdd>serveur web>client web
 
mais avec un lien dans la base il faudra :
client web>serveur web>bdd>serveur web avec accès disque pour récupérer les images>client web.
 
Avec un temps d'accès disque pour chacune des images. Donc je vois pas encore une différence flagrante.  

Et la base de donne, elle stocke continuellement toutes les images dans la mémoire vive de l'ordi au détriment des autres infos de la base?
A mon avis, dans les deux cas, il y a autant d'accés disque. (les serveur web aussi conservent un certain nombre d'info en mémoire vive pour gain de temps.)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  PHP/MySQL: Comment afficher une image BLOB

 

Sujets relatifs
Comment afficher les données contenues dans une table mysql[mySQL] c'est quoi un tableau associatif ??
[MYSQL] petite question sur la syntaxe des types de variablesRéaction étrange du serveur MySQL avec le UNIX_TIMESTAMP
[mySQL] probléme avec addslashes[PHP] Demande d'infos à Propos de mysql_fetch_array
[PHP] Support (présent ou futur) de DB2 
Plus de sujets relatifs à : PHP/MySQL: Comment afficher une image BLOB


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR