Stocker images et .zip dans une BD via PHP

Stocker images et .zip dans une BD via PHP - PHP - Programmation

Marsh Posté le 31-05-2010 à 15:18:41    

Bonjour,
 
en fait, je lance un script PHP, ce script il lance un programme externe qui génère des images et il mets ces images dans un répertoire. moi je veux mnt via php d'aller chercher ses images et l'insérer dans une base de données dans un champ de type BLOB puis les supprimer du répertoire .......
 
j'ai créer une table qui contient un champ de type BLOB, et j'ai effectue l'insertion normal mais celle ça ne marche pas; il sauvegarde que le chemin de fichier dans la base... du coup kan je supprime le fichier du répertoire j'arrive plus à l'afficher dans ma page ..
 
Merci pour votre aide, c'est vraiment très urgent
A+

Reply

Marsh Posté le 31-05-2010 à 15:18:41   

Reply

Marsh Posté le 31-05-2010 à 15:22:36    

ce n'est vraiment aps une bonne idée dans le cas général( la base de données grossis très vite et perds en performance)  
 
En général on stocke le chemin en bdd et le reste dans un répertoire à côté.  
 
Toutefois, si tu y tiens vraiment, il faut nous montrer ton script qui est chargé de la lecture

Reply

Marsh Posté le 31-05-2010 à 15:42:42    

flo850 a écrit :

ce n'est vraiment aps une bonne idée dans le cas général( la base de données grossis très vite et perds en performance)  
 
En général on stocke le chemin en bdd et le reste dans un répertoire à côté.  
 
Toutefois, si tu y tiens vraiment, il faut nous montrer ton script qui est chargé de la lecture


 
vous avez raison. mais le laboratoire où j'effectue mon stage me demande d'insérer dans une base de données avec le champ BLOB
 
Voici mon code : ce code il me permet d'ajouter ke le chemin des fichiers dans la base de données
$identifiant = 124193;
 
//création des deux tableaux. un qui contient les .png et l'autre qui contient les fichiers des configurations (.dat, .text, ...)
$rep = "./simulation/simulation_morphologique/"; // répertoire qui contient tous les fichiers
 
$fichiers = array(); // un table qui contient tout les fichiers
$resultats = array(); // un table qui contient que les images .png
$configuration = array(); // un table qui contient les autres extensions (.text, .dat, ..)
 
$dir = opendir($rep); // ouvre le répertoire
// lire le répertoire qui contient les fichiers
while($f = readdir($dir))  
{
 if(is_file($rep.$f))
 {
  array_push($fichiers, "$f" ); // insérer le fichier dans $fichiers
 }
}
closedir($dir);
 
//tester l'extension des fichiers dans la table fichiers
foreach($fichiers as $keyFichier)
{
 $extension = substr("$keyFichier", -3, 3);
 $file = "$rep$keyFichier";
 if($extension == "png" )
 {
  array_push($resultats, "$file" );
 }
 else
 {
  array_push($configuration, "$file" );
 }
}
$sizeRes = sizeof($resultats);
$sizeConf = sizeof($configuration);
 
//création du fichier .zip pour les fichiers de configurations (.text, .dat, ...) avant de l'inserer dans la base de données.
$zip = new zipfile () ; //on crée une instance zip
 
 
 
// liste des fichiers à compresser
 
$i = 0 ;
while ( count($configuration) > $i )    
{  
 $fo = fopen($configuration[$i],'r') ; //on ouvre le fichier
 
    $contenu = fread($fo, filesize($configuration[$i])) ; //on enregistre le contenu
 
    fclose($fo) ; //on ferme fichier
 
 
 
    $zip->addfile($contenu, $configuration[$i]) ; //on ajoute le fichier
 
    $i++; //on incrémente i
 
}
$archive = $zip->file() ; // on associe l'archives
// on enregistre l'archive dans un fichier
 
$open = fopen( "./simulation/simulation_morphologique/config$identifiant.zip" , "wb" );
 
fwrite($open, $archive);
 
fclose($open); //fin zip
$commande = "./simulation/simulation_morphologique/config$identifiant.zip";
 
// insertion les fichiers de la configuration dans la base de données (fichier .zip)
$insertion = mysql_query("INSERT INTO commande VALUES ('$identifiant', '$date_creation', '$utilisateur', 'morpho', '$commande')" ) or die(mysql_error());
 
 
// insertion les résultats associé à la commande dans la base de données
foreach($resultats as $keyResultats) // les images  
{
 $insertion = mysql_query("INSERT INTO data VALUES ('', '$identifiant', '$keyResultats')" ) or die(mysql_error());
}

 
// supprimer les fichiers (commande + résultats) de la répértoire
foreach($fichiers as $keyfichiers)
{
  $file = "./simulation/simulation_morphologique/$keyfichiers";
  unlink("$file" );
 
}
 
// chercher les images dans la base de données
$reponseVisu = mysql_query("SELECT * FROM data WHERE id_commande = $identifiant" ) or die (mysql_error());
 while($donneesVisu = mysql_fetch_array($reponseVisu))
 
 {
 
  echo "<a href='$donneesVisu[data]'><img class='' src='$donneesVisu[data]'/></a>";
 
 }


Message édité par atout1 le 31-05-2010 à 15:44:08
Reply

Marsh Posté le 31-05-2010 à 15:48:21    

src='$donneesVisu[data]' , n'affichera rien si $donneesVisu[data] n'est aps un chemin ( a la limite tu peut tenter une image inline mais c'est un peu plus complexe )

 

tu veux mettre tes fichiers dans quelle base ? quel est ton champ blob ?

Message cité 1 fois
Message édité par flo850 le 31-05-2010 à 15:49:26
Reply

Marsh Posté le 31-05-2010 à 15:54:49    

flo850 a écrit :

src='$donneesVisu[data]' , n'affichera rien si $donneesVisu[data] n'est aps un chemin ( a la limite tu peut tenter une image inline mais c'est un peu plus complexe )  
 
tu veux mettre tes fichiers dans quelle base ? quel est ton champ blob ?


 
J'ai deux tableaux une table "commande" et l'autre "data"

table commande : dans cette table je veux insérer le fichier .zip
 
CREATE TABLE IF NOT EXISTS `commande` (
  `id_commande` int(11) NOT NULL,
  `date_creation` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `utilisateur` varchar(255) CHARACTER SET latin1 NOT NULL,
  `type_commande` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`commande` blob NOT NULL,
  PRIMARY KEY (`id_commande`),
  KEY `utilisateur` (`utilisateur`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
 

table data : dans cette table je veux insérer les images .png
 
CREATE TABLE IF NOT EXISTS `data` (
  `id_data` int(11) NOT NULL AUTO_INCREMENT,
  `id_commande` int(11) NOT NULL,
 `data`  blob NOT NULL,
  PRIMARY KEY (`id_data`),
  KEY `id_commande` (`id_commande`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=11 ;

Reply

Marsh Posté le 31-05-2010 à 16:57:40    

$keyresultats contient le nom du fichier ( tu le mets toi meme dans resultats  
donc il faut inserer un readfile($keyResultat) ( d'ailleurs , c'est quoi cette variable qui a un nom qui ne veut rien dire ? )  
 
ensuite il faut encoder ça pour que l'insertion ne pete pas à la gueule , donc tu fais  

Code :
  1. // insertion les résultats associé à la commande dans la base de données
  2. foreach($resultats as $nomFichier) // les images  
  3. {
  4. $contenu = mysql_real_escape_string(readfile($rep . $nomFichier));
  5. $insertion = mysql_query("INSERT INTO data VALUES ('', '$identifiant', 'contenu ')" ) or die(mysql_error());
  6. }

Reply

Marsh Posté le 31-05-2010 à 17:12:09    

flo850 a écrit :

$keyresultats contient le nom du fichier ( tu le mets toi meme dans resultats  
donc il faut inserer un readfile($keyResultat) ( d'ailleurs , c'est quoi cette variable qui a un nom qui ne veut rien dire ? )  
 
ensuite il faut encoder ça pour que l'insertion ne pete pas à la gueule , donc tu fais  

Code :
  1. // insertion les résultats associé à la commande dans la base de données
  2. foreach($resultats as $nomFichier) // les images  
  3. {
  4. $contenu = mysql_real_escape_string(readfile($rep . $nomFichier));
  5. $insertion = mysql_query("INSERT INTO data VALUES ('', '$identifiant', 'contenu ')" ) or die(mysql_error());
  6. }



après l'éxcecution de ce code je fais  
$reponseVisu = mysql_query("SELECT * FROM data" ) or die (mysql_error());
 while($donneesVisu = mysql_fetch_array($reponseVisu))
 
 {
 
  echo "<a href='$donneesVisu[data]'>$donneesVisu[id_commande]</a><br/>";
 
 }
 
et kan je clique sur le lien il m'affiche une message d'erreur Objet non trouvé !


Message édité par atout1 le 01-06-2010 à 12:04:17
Reply

Marsh Posté le 31-05-2010 à 17:27:02    

faut faire un lien de type data, mais il te faut le MIME, mais bon c'est pas top comme technique je rejoins flo850 dans ca première réponse

Reply

Marsh Posté le 01-06-2010 à 12:05:32    

bonjour,  
 
tjs j'ai des problèmes. des aide svp ?? Merci
 
A+

Reply

Marsh Posté le 01-06-2010 à 13:55:03    

la méthode propre :  

  • Dans ta page tu fais des liens vers afficheUneImage.php?id=$id  
  • tu crée une page afficheUneImage.php qui se chaerg de lire le contenu de l'image et de l'afficher  


En aucun cas tu ne mets le contenu de l'image dans un lien

Reply

Marsh Posté le 01-06-2010 à 13:55:03   

Reply

Marsh Posté le 01-06-2010 à 15:00:57    

flo850 a écrit :

la méthode propre :  

  • Dans ta page tu fais des liens vers afficheUneImage.php?id=$id  
  • tu crée une page afficheUneImage.php qui se chaerg de lire le contenu de l'image et de l'afficher  


En aucun cas tu ne mets le contenu de l'image dans un lien


 
je fais comme ca alors :  
 
$reponseVisu = mysql_query("SELECT * FROM data" ) or die (mysql_error());
 while($donneesVisu = mysql_fetch_array($reponseVisu))
 
 {
 echo "<input type='hidden' name='id' value='$donneesVisu[id_data]'/>
                <a href='afficher_image.php?id=$donneesVisu[id_data]'>$donneesVisu[data]</a>";
 
 }
 
et dans afficher_image.php : qu'est ce quoi je dois metrre ?? excuse moi mais j'arrive pas à voir la solution merci de m'aider.
si je fais ça; il m'aafiche rien  
$requete = "SELECT * FROM data WHERE id_data=$id";
$resultat = mysql_query($requete);
$donnees = mysql_fecth_array($resultat);
$image = $donnees['data'];
echo "$image";
 
A+


Message édité par atout1 le 01-06-2010 à 15:08:48
Reply

Marsh Posté le 03-06-2010 à 11:01:06    

flo850 a écrit :

En aucun cas tu ne mets le contenu de l'image dans un lien


Les Data URI c'est pas non plus toujours si incohérent que ça si les ressources ne sont pas volumineuses, on gagne pas mal en overhead HTTP, surtout en HTTPS et aussi on gagne l'overhead d'un éventuel framework.
 


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed