2016-05-19 1 views
0

J'ai une page php qui exécute un script bash puis télécharge le tar de sortie. Le problème est qu'une fois le fichier téléchargé, la page continue à charger et ne redirige jamais. J'ai trouvé quelques problèmes comme celui-ci mais rien qui semble applicable à mon cas. Mon code est le suivant:Pourquoi ma page continue-t-elle de se charger après le téléchargement du fichier en php?

<?php 


    $output=shell_exec('cd /opt/dir/ && sudo ./collect_diagnostics.sh && cd -'); 
    $rows_output = explode("Report is in ", $output); 
    $rows_output2 = explode(" ", $rows_output[1]); 

    $path_parts = pathinfo($rows_output2[0]); 
    $file_name = $path_parts['basename']; 
    $file_path = "/opt/dir/test/".$file_name; 

    if (is_readable($file_path)) { 
     header('Content-Disposition: attachment; filename="'.$file_name.'"'); 
     ob_clean(); 
     readfile($file_path); 
    } else { 
     echo "404 Error"; 
    } 

    header('Location:./aps_control.php') ; 
?> 

Pour être clair, j'ai le script bash travail et le téléchargement ne se produit et a un fichier valide. Les seuls problèmes semblent être que la page ne finit jamais le chargement et je ne suis pas sûr si cela est lié mais le fichier décompressé dans 7-zip dit "Il y a quelques données après la fin des données utiles: version_Placeholder.tar". Aussi, je veux vraiment savoir ce que je fais de mal pour l'amélioration personnelle.

Ma principale ressource pour apprendre comment télécharger des fichiers a été http://www.media-division.com/the-right-way-to-handle-file-downloads-in-php/

+0

Pour quiconque a voté ceci s'il vous plaît dites-moi pourquoi afin que je puisse éviter les votes dans le futur. Sinon, il ne faut rien accepter qui pourrait nuire à ma capacité d'apprendre et de poser des questions à l'avenir. – mando222

Répondre

1

Vous ne devriez pas essayer de montrer une page et servir le fichier dans la même requête. Juste servir le fichier.

Si vous souhaitez que l'utilisateur accède à une nouvelle page avec un bouton de retour, vous devez les rediriger vers cette page et cette page doit déclencher une nouvelle page qui effectue le téléchargement. Ne les combinez pas.

+0

ok que j'ai ajouté un en-tête ('Location: ./ dir_control.php'); et enlevé le bouton. Toujours voir le problème cependant. – mando222

+1

@ mando222 non, ne fais pas ça. * Le fichier ne peut rien faire d'autre que le téléchargement du fichier *. Pas de redirections, pas de sortie. Une fois le fichier readfile terminé, c'est fait. – Matsemann

+0

Ok, je suis allé et divisé en deux pages celui qui gère la partie script et fournit le lien de téléchargement et celui qui fait le téléchargement. La seule fois où l'utilisateur verra la page de téléchargement est si une erreur se produit. Cela semble fonctionner même si ce n'est pas ma vision originale. Merci pour l'aide. – mando222