begin process at 2010 03 21 03:41:37
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de données

 > PHP IMAGE BLOB MYSQL

PHP IMAGE BLOB MYSQL


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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 :39 341

Auteur : anwaarber

Ecrire un message privé
Commentaire sur cette source (16)
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.p hp#7
merci pour celui qu'il la poser.

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


 Historique

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

 Sources de la même categorie

RECUP IDENTIFICATION par luludovicp
Source avec Zip EXTEND MYSQLI par petibras
Source avec Zip CLASSE DE COMMANDES PEAR DB par pascalmintrosse
Source avec Zip AFFICHER LE RÉSULTAT D'UNE REQUÊTE SQL SUR PLUSIEURS PAGE par karimmass
Source avec Zip SQLDIFF : MIGRATION, VERSIONNING ET SYNCHRONISATION DE LA ST... par aKheNathOn

Commentaires et avis

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.

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

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 !

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 <?

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 !

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.

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 :).

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

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.

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 ;)

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

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...

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?

Commentaire de kiki9741 le 29/02/2008 14:58:42

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

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);

Commentaire de rexavry le 30/09/2009 13:02:38

slt altavista je viens d'executer ton code sur mon projet pour afficher une image stocker
dans la base de donnée dont le type de champ est blob
mrc si tu peux le corrigé

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,045 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales