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

  FORUM HardWare.fr
  Programmation
  PHP

  Stocker images et .zip dans une BD via PHP

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Stocker images et .zip dans une BD via PHP

n°1997574
atout1
Etudiant
Posté le 31-05-2010 à 15:18:41  profilanswer
 

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+

mood
Publicité
Posté le 31-05-2010 à 15:18:41  profilanswer
 

n°1997578
flo850
moi je
Posté le 31-05-2010 à 15:22:36  profilanswer
 

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

n°1997586
atout1
Etudiant
Posté le 31-05-2010 à 15:42:42  profilanswer
 

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
n°1997593
flo850
moi je
Posté le 31-05-2010 à 15:48:21  profilanswer
 

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
n°1997597
atout1
Etudiant
Posté le 31-05-2010 à 15:54:49  profilanswer
 

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 ;

n°1997628
flo850
moi je
Posté le 31-05-2010 à 16:57:40  profilanswer
 

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

n°1997635
atout1
Etudiant
Posté le 31-05-2010 à 17:12:09  profilanswer
 

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
n°1997644
stealth35
Posté le 31-05-2010 à 17:27:02  profilanswer
 

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

n°1997897
atout1
Etudiant
Posté le 01-06-2010 à 12:05:32  profilanswer
 

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

n°1997944
flo850
moi je
Posté le 01-06-2010 à 13:55:03  profilanswer
 

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

mood
Publicité
Posté le 01-06-2010 à 13:55:03  profilanswer
 

n°1997988
atout1
Etudiant
Posté le 01-06-2010 à 15:00:57  profilanswer
 

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
n°1998686
MEI
|DarthPingoo(tm)|
Posté le 03-06-2010 à 11:01:06  profilanswer
 

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 3700X 8C/16T @ 3.6GHz - 32GB DDR4-3600 16-18-18 1T - AMD Radeon RX 5700 XT 8GB @ 2010MHz/14Gbps |

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

  Stocker images et .zip dans une BD via PHP

 

Sujets relatifs
problème avec la commande exec [PHP]Selection d'images dans document word
Sessions PHPProblème formulaire HTML& PHP
[resolu][PHP] parcourir un tableau d'objetFonction mail PHP et paramétrage PHP.ini
Formulaire PHP, retour sur ma page d'originecode vb avec BD sql
Stocker dans la mémoire flash d'un microcontrôleur[PHP] A quoi sert Serialize (vs $_SESSION)
Plus de sujets relatifs à : Stocker images et .zip dans une BD via PHP


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