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 :

Formulaire générant un download de fichier


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Décembre 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Décembre 2019
    Messages : 67
    Points : 54
    Points
    54
    Par défaut Formulaire générant un download de fichier
    Hello,

    J'ai concu un formulaire permettant de remplir des informations.

    Ces informations sont ensuite traitées par un fichier server.php qui identifie les fichiers et les zippe.

    Je voudrais ensuite pousser le téléchargement côté client via le code ci-dessous.

    Seulement, je ne trouve pas comment passer en variable le path depuis server.php vers download.php.

    Auriez-vous une idée ?

    Merci.

    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 
     
    if (!empty($_GET['Finalzip'])) {
    	$filepath = __DIR__."/resultat/".$_GET['Finalzip'];
    	$Finalzip = basename($filepath);
    	$encoded_Finalzip = rawurlencode($Finalzip);
     
    	header("Content-Disposition: attachment; Finalzip=\"{$encoded_Finalzip}\"");
    	header("Content-Type: {zip}");
    	header("Content-Length: ".filesize($filepath));
    	header('Cache-Control: no-store');
    	readfile($filepath);
     
    }else{
    	http_response_code(500);
    }
     
    ?>

  2. #2
    Membre actif
    Homme Profil pro
    Webmaster - Développeur/intégrateur web
    Inscrit en
    Septembre 2011
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Webmaster - Développeur/intégrateur web
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 210
    Points : 246
    Points
    246
    Par défaut
    Bonjour,

    je ne trouve pas comment passer en variable le path depuis server.php vers download.php
    Avec une redirection peut être ? quelque chose de ce style là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header('location:download.php?Finalzip='.$chemin_archive);
    Si besoin, on peut également passer les données via la session.

    Si ça ne convient pas... merci de fournir le code de "server.php".
    Si vous avez besoin d'une librairie permettant de gérer facilement les fichiers et les dossiers en PHP... ou si vous êtes juste curieux(se) :
    https://github.com/moDevsome/moFilesManager

    N'hésitez pas à me faire un retour

  3. #3
    Membre du Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Décembre 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Décembre 2019
    Messages : 67
    Points : 54
    Points
    54
    Par défaut
    Merci pour ta réponse.
    Compliqué de fournir le code server.php, c'est un usage professionel...

    Quand j'intègre ta proposition, je prends l'erreur suivante:
    Warning: Cannot modify header information - headers already sent by (output started at C:\wamp64\www\Dev-test\Server.php:42) in C:\wamp64\www\Dev-test\Server.php on line 380
    Je pense que c'est dû au fait que je fais tout le traitement de fichiers dans serveur.php, jusqu'à aboutir au lien final.
    Ajouter le header à ce niveau-là n'a pas de sens.

    J'ai aussi tenté le include dans server.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	include 'download.php?Finalzip=$Namezip';
    Mais je prends l'erreur suivante
    Warning: include(download.php?Finalzip=$Namezip): Failed to open stream: No such file or directory in C:\wamp64\www\server.php on line 380
    Call Stack
    Une autre suggestion ?
    Je désespère un peu.. :-(

    Merci !

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Bibou64 Voir le message
    Quand j'intègre ta proposition, je prends l'erreur suivante:

    Warning: Cannot modify header information - headers already sent by (output started at C:\wamp64\www\Dev-test\Server.php:42) in C:\wamp64\www\Dev-test\Server.php on line 380
    Normal car tu as déjà modifié le header.


    Citation Envoyé par Soundboy39 Voir le message
    Si besoin, on peut également passer les données via la session.
    Ca me paraît une bonne suggestion. Au début de server.php, tu mets session_start(); puis plus loin $_session['path'] = 'le_chemin'; et dans download.php, pareil au début du fichier session_start(); et là où tu as besoin du chemin : $path = $_SESSION['path'];
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  5. #5
    Membre du Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Décembre 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Décembre 2019
    Messages : 67
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Normal car tu as déjà modifié le header.


    Ca me paraît une bonne suggestion. Au début de server.php, tu mets session_start(); puis plus loin $_session['path'] = 'le_chemin'; et dans download.php, pareil au début du fichier session_start(); et là où tu as besoin du chemin : $path = $_SESSION['path'];
    Merci Laurent,

    Mais comment faire pour que server.php appelle download.php ?

    Merci pour ton aide.

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    J'avais pas compris.
    Dans ce cas, je reviens à l'idée de la redirection suggérée par Soundboy39, mais pour éviter le message d'erreur, à la place de
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    header("Content-Disposition: attachment; Finalzip=\"{$encoded_Finalzip}\"");
    	header("Content-Type: {zip}");
    	header("Content-Length: ".filesize($filepath));
    	header('Cache-Control: no-store');
    	readfile($filepath);
    je mettrais $send_header = true; puis plus loin, tu mets
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if ($send_header) { 
            header("Content-Disposition: attachment; Finalzip=\"{$encoded_Finalzip}\"");
    	header("Content-Type: {zip}");
    	header("Content-Length: ".filesize($filepath));
     	header('Cache-Control: no-store');
     
            header('location:download.php?Finalzip='.$chemin_archive);
     
    	readfile($filepath);
    }
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.2] Formulaire générant fichier xml
    Par knebhi dans le forum Langage
    Réponses: 0
    Dernier message: 23/03/2009, 15h35
  2. download de fichier depuis un serveur web
    Par minusette dans le forum Modules
    Réponses: 9
    Dernier message: 14/10/2005, 09h10
  3. [Javabean/sun.net.ftp] Downloader un fichier txt
    Par benben13 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 13/09/2005, 16h43
  4. [C#] Download de fichier
    Par Scorff dans le forum ASP.NET
    Réponses: 2
    Dernier message: 27/06/2005, 10h09
  5. [VB.NET] Download de fichiers sur un serveur...
    Par Webman dans le forum ASP.NET
    Réponses: 3
    Dernier message: 19/05/2004, 10h25

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