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

Langage PHP Discussion :

Affichage de $_FILES['tmp_name'] sans enreg sur disque


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 215
    Points : 71
    Points
    71
    Par défaut Affichage de $_FILES['tmp_name'] sans enreg sur disque
    Bonjour, j'ai crée un formulaire avec un bouton apercu, un peu comme sur ce forum lorsqu on poste des msg !

    Le seul petit souci c est que mon formulaire contient une champs 'file' et je voudrais pouvoir afficher l'image ( meme redimensionné si possible ) sans passer par le disque, que tout se fasse directement en memoire.

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    C'est difficile parce que l'appel sera en deux partie :
    1 soumission du formulaire => récupération du flux html => affichage
    2 récupération des images identifiées par img src="..." dans ce flux.

    Donc il faut faire le lien entre les deux appels, ce qui reste d'être difficile si tu bouge pas le fichier de l'espace temporaire, car je sais pas ce que deviennent les fichiers dans tmp quand le script se termine.
    Donc tu pourrais suivre plusieurs solutions :
    1. lire le fichier tmp et mettre le contenu en session. Attention à ce qu'il ne soit pas trop gros.
    2. créer un repertoire temporaire et déplacer le fichier dedans
    3. supprimer l'étape 2 et inclure l'image directement dans le flux html, grace au protocole data
    ...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 215
    Points : 71
    Points
    71
    Par défaut
    La solution 3 me plait bien, mais je ne sais pas dutout comment l implementer !

    Si tu pouvais me donner un petit coup de main, ca serais cool

  4. #4
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    http://www.ietf.org/rfc/rfc2397
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <IMG
       SRC="data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw
       AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz
       ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp
       a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl
       ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis
       F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH
       hhx4dbgYKAAA7"
       ALT="Larry">
    Donnera :



    Ne t'occupes pas de gd pour l'instant, mais le principe est :
    tu lis le fichier, tu l'encode en base64 et tu le colles.
    J'ai jamais fait donc bon dev

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 215
    Points : 71
    Points
    71
    Par défaut
    En voyant cela, je vais plutot opter pour le repertoire des images temporaire :d

    Etes-il possible de remettre la valeur d'un element de type file ?
    En gros, mettre un 'value = ' a l element file ?

    Pour ne pas que l'utilisateur doive remettre l'image apres l apercu ..

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Citation Envoyé par Mr N.
    je sais pas ce que deviennent les fichiers dans tmp quand le script se termine.
    ...
    D'après le manuel, les fichiers temporaires sont supprimés à la fin du script. La seule façon de les passer à un autre script est de les copier ailleurs.

  7. #7
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par ToxiZz
    En voyant cela, je vais plutot opter pour le repertoire des images temporaire :d
    Rhoo l'autre ! Tu pourrais au moins essayer
    Citation Envoyé par ToxiZz
    Etes-il possible de remettre la valeur d'un element de type file ?
    En gros, mettre un 'value = ' a l element file ?
    Non et encore heureux.

    De toutes facons l'image à déjà été uploadée c'est gacher la bande passante que de recommencer !

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 215
    Points : 71
    Points
    71
    Par défaut
    En fait voila ce que j'ai essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    <img src=\"data:image/jpeg;base64, $_POST['Image']['tmp_name']\" />
    ?>
    mais ca ne donne rien

  9. #9
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    if (isset($_FILES['image'])) {
        echo '<img SRC="data:image/png;base64,'.base64_encode(file_get_contents($_FILES['image']["tmp_name"])).'" alt="uploaded image" />';
    }
    ?>
    <form action="" method="post" enctype="multipart/form-data" >
       <input type="file" name="image" />
       <input type="submit" />
    </form>
    Je viens de tester et ca marche ! En tout cas sous Firefox...

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 215
    Points : 71
    Points
    71
    Par défaut
    Merci beaucoup, je vais aller tester ca

  11. #11
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Ouais mais attention, l'image a de fortes chances d'être perdue lors du prochain submit

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 215
    Points : 71
    Points
    71
    Par défaut
    Tu m conseillerais plutot de l'enregistrer dans un fichier temporaire alors ?

    Ou alors je pourrais le mettre dans un champs de type hidden de mon formulaire !

  13. #13
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Ben non, c'est inutile. Tu l'as déjà sur ton serveur, garde la !

    Donc oui fichier temporaire ou fichier tout court, sachant que l'objet auquel il appartient est en mode brouillon.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 215
    Points : 71
    Points
    71
    Par défaut
    Comme par exemple : ?

    La premiere foit qu'on arrive sur le formulaire, l'image est obligatoire.
    Quand un $_POST['Image'] est détecté :
    on récupère le numéro de la prochaine news (MAX)+1
    on l'enregistre sur le disque l'image au nom : IMG_id.jpg
    l'image n'est plus requise, on peux alors soit refaire un apercu, soit poster le formulaire

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 215
    Points : 71
    Points
    71
    Par défaut
    Petit souci,
    ex :
    - L'utilisateur 1 fait l apercu d'une news 1 avec un image 1
    - L'utilisateur 2 fait l apercu d'une news 2 avec un image 2

    - L'utilisateur 1 refait l apercu de la news 1 sans nouvelle image.
    L'utilisateur 1 verra l'image 2

  16. #16
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Tu donnes un id unique à ton internaute (passé en session), et tu donnes cet id comme nom de fichier pour l'image. Ou, mieux, tu donnes un id à la news. Il faudra ensuite nettoyer les fichiers images inutiles (en comparant les dates de modif). Avec les sessions, impossible de voir l'image d'un autre.

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 215
    Points : 71
    Points
    71
    Par défaut J'y arrive toujours pas :'(
    Bonjour, ca fait quelque jour que je suis sur mon formulaire avec preload d image, voici mon probleme :

    lorsque l'utilisateur soumet un image, et qu il clique sur apercu :
    - Pour trouver le numéro de l'image a enregistrer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ( $i=1; file_exists(NOUVEAUTES_IMAGES_TMP.'IMG_'.$i.$image['type']); $i++ ) {}
    - ajout d un champs cacher nomé ImageTmp, avec le nom de l image mise en apercu.

    Ensuite, il resoumet une image reclique sur apercu :
    - Supprimer l'ImageTmp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ( !empty($formdata['ImageTmp']) )
    	unlink(NOUVEAUTES_IMAGES_TMP.$formdata['ImageTmp']);
    - Rechercher le numero de l image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ( $i=1; file_exists(NOUVEAUTES_IMAGES_TMP.'IMG_'.$i.$image['type']); $i++ ) {}
    Or l'image qui apparait est l'image qui a été soumise au premier clique sur apercu, pourtant sur le disque, c est bien l'image soumise sur le 2ème clique du bouton apercu.

    Bizarre nan ?

  18. #18
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    peut-etre un problème de cache si tu appuie sur la touche [shift] en meme tant que tu clic sur le bouton reload du navigateur, est ce que ca fait le comportement voulu ?

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 215
    Points : 71
    Points
    71
    Par défaut
    Oui quand je fait un reload ca marche

    Mais j'aimerais ne pas devoir faire un reload pour voir mon image !

  20. #20
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Peut-on voir le code html généré de ta balise img en question ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Disque Dur] Disque sans reproche sur Windows Server mais illisible sur 8.1
    Par Chauve souris dans le forum Périphériques
    Réponses: 1
    Dernier message: 09/01/2015, 11h40
  2. Réponses: 1
    Dernier message: 24/11/2013, 16h15
  3. [QST] Création d'archive sans ecrire sur le disque
    Par hannibal.76 dans le forum Langage
    Réponses: 0
    Dernier message: 20/06/2011, 19h04
  4. Problème affichage image stockée sur disque avec oracle XE
    Par thriller86 dans le forum Débuter
    Réponses: 6
    Dernier message: 13/06/2008, 13h29
  5. [VB6] Déplacer la form sans cliquer sur la barre de titre
    Par Ingham dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 14/11/2002, 02h09

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