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 :

[PHP-JS] Comment créer une boucle avec des headers


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut [PHP-JS] Comment créer une boucle avec des headers
    Bonjours à tous,
    Je suis un novice en programmation et j'ai débuté avec PHP.

    Je suis en train de développer une application FTP Client via un explorateur internet, 100% PHP.

    Mon application permet de se connecter et de s'identifier au server FTP et d'accéder au répertoire de l'utilisateur.
    Elle liste son répertoire et permet d'y naviguer.
    J'ai inclus un formulaire pour télécharger les fichiers de l'utilisateur via checkbox et sumit button.
    La première partie du téléchargement s'éffectue sur le server internet ou se situe mon application depuis le répertoire de l'utilisateur. Tous les fichiers y son correctements copiés.
    La deuxième partie du téléchargement s'éffectue entre le server internet et l'utilisateur de l'application avec l'usage de "header".

    Lorsque je télécharge un fichier, tous se passe correctement.
    Lorsque je télécharge plusieurs fichiers, un seul fichier est téléchargé depuis le server internet avec le nom du premier fichier de la liste et le contenu du dernier.

    Avec la batterie de test que j'ai passé sur mon code, j'en est dédui qu'il me faudrai créer peut'être une class d'objet pour permettre l'usage de la fonction header à travers une boucle. Car le problème vient avec ces headers, une fois envoyés, mon script s'arrète.

    Voici la page de 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     <?php
    //Allows header command to be used later on in script
    ob_start();
    // Load the _POST session variables
    include('ftploadsessionvar.php');
    $CurrentDirectory = $_SESSION['CurrentDirectory'];
    // Control if there is anything to download
    if (isset($_GET['downloadFileAndFolder']))
    { 
        // Download button action
        foreach ($_GET['downloadFileAndFolder'] as $FileAndFolderListed)
        {
        include('ftpconnection.php');
          // Download the file from the FTP data server to  the web server
                // Temporary download file webserver directory
                $downloadDirectory ='../bin/tmpdownloaddirectory/';
                // Create a open temporary file on the web server
                $WebServerFileAndFolder = $downloadDirectory  . $FileAndFolderListed;
                $LocalFileAndFolder = fopen($WebServerFileAndFolder, 'wb');
                // Get the full path of the files and folder to the remote FTP server directory to download
                $FileAndFolderListedFullPath = $CurrentDirectory . '/' . $FileAndFolderListed;
                $FileAndFolderListedFullPath = substr($FileAndFolderListedFullPath, 1);
                // FTP download function
                $GetFileAndFolder = ftp_fget($FTPServerConnection, $LocalFileAndFolder, $FileAndFolderListedFullPath, FTP_BINARY); // ftp_fget -- Downloads a file from the FTP server and saves to an open file
                // Close FTP connection
                $FTPClose = ftp_close($FTPServerConnection);
                // Close the open file
                fclose($LocalFileAndFolder);
        }
        // HTTP Download from the web server to the web client   
        function downloadHTTP ($WebServerFileAndFolder,$FileAndFolderListed)
        {
            global $WebServerFileAndFolder, $FileAndFolderListed;
            //echo $FileAndFolderListed;// test array
            header('Content-Disposition:attachment; filename=' . $FileAndFolderListed);
            header('Content-Type:application/force-download');
            header('Content-Type:application/octet-stream'); 
            header('Pragma: ');
            header('Cache-Control:must-revalidate, post-check=0, pre-check=0');
            header('Expires:0');
            header('Content-Transfer-Encoding:binary');
     
            readfile($WebServerFileAndFolder);// readfile -- Outputs the file
            unlink($WebServerFileAndFolder); // unlink -- Deletes the file
            ob_flush();
            exit;
        }
        foreach ($_GET['downloadFileAndFolder'] as $FileAndFolderListed)
        {
            //echo $FileAndFolderListed;//test array
            downloadHTTP ($WebServerFileAndFolder,$FileAndFolderListed);
        }
    }
    if(empty($FileAndFolderListed))
    {
    // Go to the Remote file & folder server
    header('Location:ftpremotefolder.php'); exit;
    }
    ?>

  2. #2
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    tu ne peux telecharger qu'un seul fichier a la fois en php.

    La seule solution que je vois a ton probleme est de faire une page "mere" qui va ouvrir tout les telechargements dans des fenetres séparées (popup), soit les uns a la suite des autres, soit tous en meme temps, soit automatiquement (avec javascript), soit a la demande de l'utilisateur (lien cliquable)

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Fladnag
    tu ne peux telecharger qu'un seul fichier a la fois en php.

    La seule solution que je vois a ton probleme est de faire une page "mere" qui va ouvrir tout les telechargements dans des fenetres séparées (popup), soit les uns a la suite des autres, soit tous en meme temps, soit automatiquement (avec javascript), soit a la demande de l'utilisateur (lien cliquable)
    Je ne connais guère de chose à propos des popups. Si tu pouvais m'éclairer à propos de "faire une page mère qui va ouvrir tout les téléchargements", j'en serais enchanté. Mais biensûr, j'ai besoin d'être éclairé en PHP et sans Java*.

    Merci de ta réponse dans tous les cas.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    [Edit]Ce post est une mauvaise indication[/edit]

    En principe il est possible d'envoyer plusieurs fichiers en une seule fois. Le manuel PHP site un formulaire qui enverrai un "tableau de fichiers", ce qui signifie implicitement que l'opération est possible. Consultez le manuel PHP pour plus d'informations :

    http://fr.php.net/manual/fr/features.file-upload.php

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    C'est effectivement le problème. Tu ne peux pas envoyer plusieurs fichiers en une seule fois pour une simple raison : ce n'est pas le modèle du Web. Tu demandes une ressource, tu obtiens une ressource (pas plusieurs).
    La solution est donc de ne pas envoyer tous les fichiers mais plutôt d'afficher des liens permettant de les télécharger un à un.

    [Edit] Blustuff, ta méthode n'est valable que pour une transaction depuis le client vers le serveur. Ici, c'est l'inverse.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Ah effectivement.

    La solution de Fladnag, est de créer une page contenant un code du style (Ou d'intégrer ce code à la page de retour)

    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
     
    <script type="text/javascript">
    window.open("telechargement.php?fichier=Fichier1","FenetreTelechargementFichier1");
    window.open("telechargement.php?fichier=Fichier2","FenetreTelechargementFichier2");
    ...
    window.open("telechargement.php?fichier=FichierN","FenetreTelechargementFichierN");
    </script>
    <noscript>
    Javascript n'est pas activé, vous devez télécharger les fichiers à la main :
    <ul>
    <li><a href="telechargement.php?fichier=Fichier1">Télécharger le fichier Fichier1</a></li>
    <li><a href="telechargement.php?fichier=Fichier2">Télécharger le fichier Fichier1</a></li>
    ...
    <li><a href="telechargement.php?fichier=FichierN">Télécharger le fichier Fichier1</a></li>
    </ul>
    </noscript>
    Comme l'ont dit les précédents intervenant, il ne doit pas y avoir beaucoup mieux. Javascript n'est pas assez puissant pour permettre le téléchargement d'une masse de fichier à une racine choisie par l'utilisateur. (Ce qui poserait peut être des problèmes de sécurité)

    Pour les informations sur Javascript, vous pouvez consulter le forum javasciprt de developpez.com

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    En fait l'idée est de cocher des "CHECKBOX" pour pouvoir télécharger automatiquement un nombre x>1 de fichiers.

    Le transfert de fichier du serveur au poste de travail s'effectue via "HTTP" avec des "HEADER".

    Lorsque le transfert doit s'effcetuer une boite de dialogue demande à l'utilisateur si il désir ouvrir ou sauvegarder le fichier sur son disque dur.

    Mon ennui, c'est que je ne sais pas comment rédiger mon script pour ouvrir un nombre x de ces boites de dialogue, nombre égal au nombre de fichiers à télécharger (peut'être une boucle via une class d'objet ?).

  8. #8
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    C'est bien ce que nous essayons de te dire : tu ne peux pas afficher X boîtes de dialogue en une seule page. Plutôt que des cases à cocher, affiche des liens normaux. Chaque lien permettra l'affichage d'une boîte de dialogue.

  9. #9
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Donc si je voulais créer un script qui passe sur une seconde page (header & location) pour lancer la fonction de transfert avec les "HEADER" pour le premier fichié, puis sur une troisième page pour le second fichier ... pour enfin revenir a ma page ou se trouve mon répertoire FTP. Est ce possible et dans qu'elle mesure ? (automatisation des taches de clic pour le client -> d'où les "CHECKBOX")

  10. #10
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Il va te falloir choisir entre "télécharger un fichier" et "rediriger vers une autre page" car ce sont des tâches différentes.

    [Edit] Pour le client, tu peux m'expliquer quel est le plus complexe entre "sélectionner une checkbox" et "cliquer sur un lien" ? Dans les deux cas, il faut cliquer une fois puis répondre à la fenêtre de téléchargement...

  11. #11
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Pet être avais-je les yeux plus gros que le ventre.
    Merci de ton attention.
    Je vais méditer sur le sujet et si Je parvient à trouver une astuce pour développer cet option dans mon Client FTP en ligne je te le ferais parvenir.

    Merci à tous, Je clos cette discussion.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/12/2014, 22h13
  2. Comment créer une vue avec des paramètres (objets) ?
    Par Ryu2000 dans le forum Eclipse Platform
    Réponses: 25
    Dernier message: 12/12/2012, 13h11
  3. [Débutant] Créer une boucle avec des checkbox
    Par Shennong dans le forum VB.NET
    Réponses: 2
    Dernier message: 19/07/2012, 15h00
  4. comment créer une video avec des images tif
    Par omarooo dans le forum Images
    Réponses: 1
    Dernier message: 12/10/2011, 12h07
  5. comment créer une application avec des switchs
    Par abderrahim_05 dans le forum Débuter
    Réponses: 5
    Dernier message: 28/12/2007, 19h07

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