Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

PHP IMAGE BLOB MYSQL


Information sur la source

Catégorie :Base de données Niveau : Initié Date de création : 23/04/2005 Date de mise à jour : 25/04/2005 21:58:23 Vu : 35 471

Note :
7 / 10 - par 2 personnes
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note

Description

salut a tous, après de long heure a chercher...... bref
Voici le code qui vous premet d'inserer une image dans votre base de donnée dans un champ de type "Bloab". mais aussi le code qui vous permet de lire l'image
 

Source

  • //pour la base de donnée sa sera ainsi le code :
  • /*
  • CREATE TABLE test (
  • num_img int(10) unsigned DEFAULT '0' NOT NULL auto_increment,
  • data_img blob NOT NULL,
  • PRIMARY KEY (num_img),
  • KEY num_img (num_img)
  • );
  • */
  • // pour le code alors ca va etre ainsi :
  • <?
  • mysql_connect("localhost","","");
  • mysql_select_db("le_nom_de_votre_base");
  • $img = "image.jpg";
  • $fp = fopen($img,"r");
  • $data = fread($fp,filesize($img));
  • fclose($fp);
  • $data = addslashes($data);
  • mysql_query("INSERT INTO test (data_img) VALUES ('$data')");
  • // pour la lecture des données
  • <?php
  • $connexion=mysql_connect("localhost","","");
  • mysql_select_db("db",$connexion);
  • $requete="select data_img from test where num_img=1";
  • $resultat=mysql_query($requete,$connexion);
  • $tableau=mysql_fetch_array($resultat);
  • mysql_close($connexion);
  • $image=$tableau[0];
  • $fichier=fopen("image/img_tmp.jpg","w");
  • fwrite($fichier,$image);
  • fclose($fichier);
  • ?>
  • <img src="image/img_tmp.jpg">
  • // Bonne chanse
//pour la base de donnée sa sera ainsi le code :
/*
CREATE TABLE test (
   num_img int(10) unsigned DEFAULT '0' NOT NULL auto_increment,
   data_img blob NOT NULL,
   PRIMARY KEY (num_img),
   KEY num_img (num_img)
);
*/

// pour le code alors ca va etre ainsi :
<?
mysql_connect("localhost","","");
mysql_select_db("le_nom_de_votre_base");
$img = "image.jpg";
$fp = fopen($img,"r");
$data = fread($fp,filesize($img));
fclose($fp);
$data = addslashes($data);
mysql_query("INSERT INTO test (data_img) VALUES ('$data')"); 
// pour la lecture des données
<?php

$connexion=mysql_connect("localhost","","");
mysql_select_db("db",$connexion);
$requete="select data_img from test where num_img=1";
$resultat=mysql_query($requete,$connexion);
$tableau=mysql_fetch_array($resultat);
mysql_close($connexion);

$image=$tableau[0];

$fichier=fopen("image/img_tmp.jpg","w");
fwrite($fichier,$image);
fclose($fichier);
?>

<img src="image/img_tmp.jpg">

// Bonne chanse

Conclusion

alors pour tous vous dire le code se trouver sur :
http://www.coppoweb.com/dev/astuces_php/trucs_1.php#7
merci pour celui qu'il la poser.

http://www.phpquebec.com/modules/newbb/viewtopic.php?viewmode=flat&topic_id=466&forum=6
 

Historique

23 avril 2005 19:49:50 :
25 avril 2005 21:58:23 :

Commentaires et avis

signaler à un administrateur
Commentaire de anwaarber le 24/04/2005 01:12:55

re,
apres la verification de mon code il ny a que la partie d'ajout dans la DB qui marche sinon pour l'affichage je vous di pas!!!!!!!!!
il n y a que des chifres et des numero non significatifs.
mais avec MySQL front je peux voir la photo introduite ou est le probleme je c pas a vous  de me dir ce qu'il faut faire ok. merci a vous.

signaler à un administrateur
Commentaire de samueldr le 24/04/2005 06:49:06

J'ai une solution à ton problème...

j'utilise cette méthode depuis un petit bout...
bien sûr, ce n'est que la base, à toi d'ajouter le code d'upload des images !
http://www.spoono.com/php/tutorials/tutorial.php?id=42
(bien sûr, il faut être à l'aise avec l'anglais...)
(ce site contient bien d'autre tutoriels, pas juste en PHP, allez voir !!!)
En espèrant avoir pu t'aider
SamuelDr

signaler à un administrateur
Commentaire de Mingain le 24/04/2005 14:45:31

Pas mal du tout sauf que heuu ... T'execute pas $result ^^

fais un :

if($result){
echo"Requete effectuée";
}
else echo mysql_error();

Je me trompe peut-être :-/ Sinon, merci bien pour ce bout de code que je vais tenter d'adapter à mon site !

signaler à un administrateur
Commentaire de coucou747 le 24/04/2005 15:32:43

normal qu'il ne te l'afiche pas...

faut que tu enregistre ta variable dans un fichier et que tu mette :
touch($filename);
$f=fopen($filename, 'w');
fputs($f,$row['data_img']);
fclose($f);
echo '<img src="'.$filename.'" />';

ou alors tu mets une entête à ton fichier et tu vire tout le html qu'il y a avant...


les manipulations d'images peuvent êtres très longues, alors utilise les ' à la place des "...

utlises aussi les <?php à la place des <?

signaler à un administrateur
Commentaire de Mingain le 24/04/2005 18:01:45

Voici le lien vers une étude sur la rapidité/optimisation du code PHP :

http://www.vulgarisation-informatique.com/optimiser-php.php

ça peut servir sur de trés gros sites et je trouve ça super !

signaler à un administrateur
Commentaire de malalam le 25/04/2005 11:27:19 administrateur CS

Hello,

et il faut aussi preciser que cette methode, mettre une image dans un champ de type blob dans une base, est a n'utiliser que si vraiment on a une bonne raison de proceder ainsi.
C'est tres gourmand...trop!
La meilleure methode est toujours d'enregistrer les images sur le serveur, et de ne stocker que les url pointant vers ces images.

signaler à un administrateur
Commentaire de anwaarber le 25/04/2005 22:05:27

salut a vous tous.
g bien aimer vos suggestion é voila g tou rectifier é g mm coriger le code d'affichage é ca marche tros bien. mnt je v faire une boucle pour afficher un ensemble de photo puis de lé lire aprés c cool de rechercher une information qui nous tracasse mais c plus cool si on pose aussi ce kon a trouvé.
merci pour tous ceux qui pense de la mm façons :).

signaler à un administrateur
Commentaire de lolobedo le 29/11/2005 01:06:56

T'as pas honte à la fin d'écrire "Bonne chanse", internet et l'informatique ne signent pas la fin du francais correct SVP

signaler à un administrateur
Commentaire de vinyjones le 02/03/2007 19:17:36

Bonjour,
La première partie rien à redire.

Par contre, je ne vois pas l'intérêt de la seconde:
Puisque tu écris l'image sur le serveur.
Donc si un client A requière une page qui appelle ton script pour une image(1)
il reçoit dans le code html  <img src="image/img_tmp.jpg">
puis il va télécharge l'image avec ce lien
sauf qu'entre temps un client B a fait une requête qui appelle ton script pour une image (2)

conséquence: les deux clients téléchargent l'image(2) (dommage pour A)
On pourrait donne un nom pour chaque image mais quel est l'intérêt de réécrire le ficher image depuis la base de données à chaque requête?
Alors autant ne référencer dans la base que les liens vers les images et les mettre sur le serveur

Avec un serveur Web vos scriptes peuvent être appelés à tout moment et simultanément pensez-y.

signaler à un administrateur
Commentaire de BlastMan le 26/03/2007 16:57:05

Je trouve ce code absolument désastreux à exécuter sur un serveur, surtout si il a un nombre de clients simultanés important.
En effet, quand un client demande à voir une image stockée dans la base, celle-ci est écrite sur sur le disque puis envoyée au client, elle fait donc déjà trois requêtes (en extrapolant) d'accès disque : une sur le SGBDR (MySQL par ex), une autre pour écrire le fichier et une troisième pour le lire.

Quant à faire un fichier temporaire qui ne l'est pas réellement comme l'a dit Vinyjones, ça pose des problèmes d'exclusion mutuelle des clients qui lisent le même NOM de fichier mais pas forcément le même contenu.

La solution est de lire dans la base comme sur le tuto, de faire un
echo $tableau;
en n'oubliant pas de mettre avant un header("Content-type: image/jpeg");

et tout marche ;)

signaler à un administrateur
Commentaire de abdelkarimci le 24/05/2007 07:53:04

C'est excelent 10/10
Pour quelq'un qui stocke les photos dans la base de données c'est la meilleure solution
plutôt c'est la seule
les photos (images) ou tout autre type de fichier sont plus sécurisés dans la base que en tant que fichier dans un répertoire
la recherche et le classement sont tout à fait simple et fiable
la deuxième partie et bien plus utile que la première
Dans mon cas, une appli VB stocke les fichier dans la base MySQL et le site web permet d'afficher les images.

Merci beaucoup pour cette source très utile

signaler à un administrateur
Commentaire de coucou747 le 24/05/2007 08:36:26

abdelkarimci, apprend le php avant de dire des sottises... pour qqn qui laisse ses fichiers accessibles a tous, alors la bdd n'est pas forcement la meilleur solution, ca fait des pertes de performances, et n'apporte que des stats precises sur les visites, et cote securite, ca facilite les injections sql alors que si l'image s'etait trouvee distante, ca aurait fait une requette de moins donc une faille de moins... voila donc deux possibilites, et pas une seule... et voila un cas ou l'autre possibilite est plus securisee que celle presentee ici...

l'avantage, c'est plutot cote clusters et cote sauvegardes...

signaler à un administrateur
Commentaire de mehdi7604 le 10/09/2007 15:54:56

Vous copiez tous le meme code, pas de nouveau , je cherche à afficher l'mage directement sans créer de fichier et sans utiliser herader(...)  , qqun à une idée?

signaler à un administrateur
Commentaire de kiki9741 le 29/02/2008 14:58:42

Ne pas oublier la balise  alt=""  conformément au W3C

signaler à un administrateur
Commentaire de Astalavista le 29/05/2008 17:25:31

Dans le principe, pour l'afficher directement, il suffit de fair le bonne header avec le type image et afficher :
header("Content-type: image/jpeg");
$connexion=mysql_connect("localhost","","");
mysql_select_db("db",$connexion);
$requete="select data_img from test where num_img=1";
$resultat=mysql_query($requete,$connexion);
mysql_close($connexion);
echo mysql_result($resultat, 0);
die(0);

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,187 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.