IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

LONGBLOB et conversion en jpeg pour stockage en fichier


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2012
    Messages : 23
    Par défaut LONGBLOB et conversion en jpeg pour stockage en fichier
    Bonjour,
    j'ai fait développer mon site en Inde, et je constate aujourd'hui un gros problème dans ma taille de base de données. Mes ingénieurs ont à l'époque stockée une image publicitaire au format Longblob au lieu d'utiliser jpeg. La taille de la base de données explose et je dois payer des augmentations de la taille de ma base de données.. Je voudrais récupérer mes images au format longblob, les convertir en jpeg et les stocker dans un répertoire. En cas d'appel, j'irai lire le jpeg et l'afficher. Voilà mon code actuel qui ne fonctionne pas. Ou est l'erreur ??? Éventuellement ne pas en tenir compte et me proposer différent..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <?php		
    //Répertoire de sauvegarde des images
    $sav_image='http://www.speedclic.net/clients/images/';
     
    // Récupération des images Format LongBlob et conversion en Jpeg !!!
    $reponse = $bdd->query('SELECT * FROM pub_detail ') or die(print_r($bdd->errorinfo()));
    	while ($rowname=$reponse->fetch())	
    		{
    		$pub1=NULL; $client=NULL;	
    		$pub1=$rowname['image1'];	
    		$client=$rowname['gid'];
    		if ($pub1<>NULL)
    			{
    		        header("Content-type: image/jpeg");
    			$image= $sav_image. $gid . '_image.jpg';
    			imagejpeg($pub1,$image);
    			}
    		else
    			{echo ''.$gid.' Pas de pub';}
    		}	
    		$reponse->closeCursor();
    ?>

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Je doute qu'une fonction comme imagejpeg accepte directement le contenu d'un BLOB comme ressource. Essaye de passer par imagecreatefromstring d'abord
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $im = imagecreatefromstring($pub1);
    if ($im != false) {
    	header("Content-type: image/jpeg");
    	$image= $sav_image. $gid . '_image.jpg';
    	imagejpeg($im,$image);
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2012
    Messages : 23
    Par défaut Pas de jpeg au final - fichier vide
    Bonjour,
    après modification, voilà le nouveau code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <?php
    include "connectdb.php";
    $gid = $_GET['gid'];
    $img = $_GET['img'];
    $sav_image='http://www.speedclic.net/clients/images/';
      $gotten = @mysql_query("select * from pub_detail where gid=$gid");  
            while ($row = @mysql_fetch_array($gotten))
    			if($img == 1)
    			{			
    			$bytes = $row[image1];
    			print $bytes;	
    				$im = imagecreatefromstring($bytes);
    				if ($im != false)
    				{
    				header("Content-type: image/jpeg");
    				$image= $sav_image. $gid . '_image.jpg';
    				imagejpeg($im,$image);
    				}
    			}
    ?>
    Problèmes:
    Aucun message d'erreur, mais lorsque je consulte le répertoire où je désire stocker les jepgs.. Rien.. aucun fichier sauvegardé.. Une idée ???
    Il est possible de voir le résultat de print $bytes sur mon site http://www.speedclic.pf en cliquant sur une des 4 miniatures.
    Il me reste 24/48 heures pour faire la modif...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sav_image='http://www.speedclic.net/clients/images/';
    Le site s'appelle www.speedclic.net ou www.speedclic.pf ?

    L'exemple #1 donné dans la doc pour imagecreatefromstring () fonctionne.
    Sinon, mets-nous ici le code d'une image ($bytes = $row['image1'] qu'on puisse tester avec.
    Dernière modification par Invité ; 10/05/2012 à 09h18.

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Vérifie aussi que tu as bien les droits en écriture sur le dossier cible.
    Le plus simple, ce serait peut-être de créer les images dans un dossier local sur le serveur (genre "./dossier_images/" ).
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    J'ai jamais essayé ça, mais je me dis que les contenus dans ce champ de type BLOB serait du contenu binaire (des flux des images).

    Donc théoriquement il suffirait de créer en 1er le fichier jpg vide (avec le nom que tu veux), puis mettre directement le contenu du champ dans le fichier.
    Au bout ça devait être une image.

    Essai un code comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?php
    // requête SQL
    $sql = "SELECT image
     FROM pub_detail
    WHERE gid = $gid";
    $image_rs = mysql_query($sql);
     
    if ($image_rs) {
        $flux = mysql_fetch_assoc($image_rs);
     
        // Exemple pour un chemin physique
        $filename = 'home/speedclic.net/www/clients/images/'.$gid.'_image.jpg';
     
        // Création du fichier
        $handle = fopen($filename, 'w');
        if (!$handle) {
             echo 'Impossible d\'ouvrir le fichier ('.$filename.')';
        }
        else {
            // Ecriture du contenu
            if (fwrite($handle, $flux['image']) === FALSE) {
                echo 'Impossible d\'écrire dans le fichier ('.$filename.')';
            }
            fclose($handle);
        }
    }
    ?>
    Le chemin de $filename est a adapter selon le chemin qu'il y a de ton coté.

    Sans garanti

  7. #7
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2012
    Messages : 23
    Par défaut Decodage LongBlob aux formats Jpeg/Gif/Png
    Bonjour,
    désolé de ne pas voir apporter une réponse rapide à vos aides..
    Et d'indiquer qu'aucune solution ne marche !!!
    Voici le code modifié, (j'utilise un client code 5580 pour test) et le début du fichier LONGBLOB tel qu'il s'affiche.
    J'ai dans ma base des fichiers JPEG / GIF (possible PNG)
    J'ai commencé à coder pour lancer une boucle et récupérer tous les fichiers dans un répertoire.
    J'ai activé CHMOD 777 pour le répertoire images (réponse à Célira).
    J'ai un souci avec header("Content-type: image/jpeg"); qui me déclenche une erreur indiquant qu'il est trop tard pour toucher à header.J'ai un site pour charger mes programmes http://speedclic.net/telechargement, protégé par mot de passe, j'ai ajouté un bouton pour déclencher le test, fonction LongBlob.
    Je dispose de speedclic.fr .in .pf et .nc et + (.pf est le plus optimisé)
    Je désire utiliser .net pour stocker tous mes contenus (réponse à jreaux62)
    RunCodePhp, j'utilise le mode PDO, j'ai testé un transfert de ton code, pourrais tu utiliser ma version et modifier ???
    Merci à tous pour vos aides.

    Code actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php
    include "connectdb.php";
    $clt=5580;
    $sav_image='http://www.speedclic.net/clients/images/5580_image.jpeg';
    	$reponse = $bdd->prepare('SELECT * FROM pub_detail WHERE gid=:test') or die(print_r($bdd->errorinfo()));
    	$reponse->execute(array('test' =>$clt	));	
     
    	if(!is_object($reponse)){echo"<font color='red' size='5'>Reponse N EST PAS UN OBJET</font>";}	
    	$client = 0;
    		while ($rowname=$reponse->fetch())
    			{
    			$NumC=$rowname['gid'];
    			$PaysC=$rowname['pays'];
    			$image_name=$rowname['image1_name'];
    			$image=$rowname['image1'];
    			$client++;
    			include "affiche_byte_image.php";
    			}
    	$reponse->closeCursor();
    jutilise le code suivant pour tester l'affichage de test de mon contenu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div id="centre">	
    		<?php
    			echo 'Client N°'. $client .' - Code client ' . $NumC .' </br>';
    			echo 'Nom du fichier image'. $image_name .' </br>';
    			echo ''. $image .'';
    			echo ''. $im .'';?>
    </div>
    Voici ce que cela affiche:
    Client N°1 - Code client 5580
    Nom du fichier imageview_mini.jpg
    ÿØÿàJFIFÿþ>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀrk"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤
    le fichier fait 40Ko, je coupe aussi le reste est une suite binaire.

  8. #8
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2012
    Messages : 23
    Par défaut Complément fonctionnel
    peut-etre que cela peut aider, voici le code qui fonctionne pour l'affichage en JPEG ou autre format.
    Ce partiel de code, appelle la fonction ci dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <Td valign="top" width="619px"  height="370px">
    <div id="disimg" style="border:#FF9999  solid 1px;">
    <?php echo "<img src=\"view_mini.php?gid=$gid&img=1\" title='$gname'  alt='$gname' border='0'  height=370 width=619>"; ?>
    </div>
    <div  id="divImage"></div>
    </Td>
    Voici la fonction view_mini.php du site:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    include "connectdb.php";
    $gid = $_GET['gid'];
    $img = $_GET['img'];
    $sav_image='http://www.speedclic.net/clients/images/';
      $gotten = @mysql_query("select * from pub_detail where gid=$gid");  
            while ($row = @mysql_fetch_array($gotten))
    			if($img == 1)
    			{			
    			$bytes = $row[image1];
    			print $bytes;	
    			}
    ?>
    Et l'image est parfaitement décodée...
    Je désire faire une boucle pour récupérer toutes les images et les stocker...

Discussions similaires

  1. Script pour stockage de fichier
    Par Black_Oute dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 22/04/2008, 12h29
  2. Réponses: 1
    Dernier message: 30/08/2006, 20h54
  3. [Conversion]Comment faire pour couper un Double trop long?
    Par dessinateurttuyen dans le forum Général Java
    Réponses: 1
    Dernier message: 13/11/2005, 02h22
  4. Réponses: 6
    Dernier message: 06/10/2005, 16h02
  5. conversion bmp jpeg
    Par bourinator dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/03/2005, 17h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo