2016-05-19 5 views
0

Ich habe eine PHP-Seite, die ein Bash-Skript ausführt und dann den Ausgabe-tar herunterlädt. Das Problem besteht darin, dass die Seite nach dem Herunterladen der Datei nur noch geladen wird und nicht weitergeleitet wird. Ich habe einige Probleme wie diese gefunden, aber nichts, was für meinen Fall anwendbar scheint. Mein Code ist wie folgt:Warum wird meine Seite geladen, nachdem die Datei in PHP heruntergeladen wurde?

<?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') ; 
?> 

einfach klar zu sein, ich habe das Bash-Skript zu arbeiten und der Download auftritt, und eine gültige Datei. Die einzigen Probleme scheinen zu sein, dass die Seite nie fertig geladen wird und ich bin mir nicht sicher, ob dies zusammenhängt, aber die Datei beim Entpacken in 7-zip sagt "Es gibt einige Daten nach dem Ende der Nutzdaten: version_Placeholder.tar". Auch ich möchte wirklich wissen, was ich falsch für die persönliche Verbesserung tue.

Meine wichtigste Ressource für das Lernen, wie Dateien zum Download war http://www.media-division.com/the-right-way-to-handle-file-downloads-in-php/

+0

Für wen auch immer unten gewählt, bitte sagen Sie mir, warum ich in Zukunft Abstimmungen vermeiden kann. Sonst drosselt nichts, was meine Lernfähigkeit und Fragen in der Zukunft potentiell schädigen könnte. – mando222

Antwort

1

Sie sollten nicht versuchen, eine Seite zu zeigen, und die Datei in der gleichen Anforderung dienen. Dienen Sie einfach die Datei.

Wenn Sie möchten, dass der Benutzer eine neue Seite mit einer Zurück-Schaltfläche aufruft, sollten Sie diese auf diese Seite umleiten, und diese Seite sollte eine neue Seite auslösen, die den Download durchführt. Kombiniere sie nicht.

+0

ok habe ich eine Kopfzeile hinzugefügt ('Location: ./ dir_control.php'); und entfernte den Knopf. Immer noch das Problem gesehen. – mando222

+1

@ mando222 nein, tu das nicht. * Die Datei kann nichts anderes als das Herunterladen der Datei * ausführen. Keine Weiterleitungen, keine Ausgabe. Nachdem die Readfile fertig ist, ist es fertig. – Matsemann

+0

Ok, ich ging und teilte dies in zwei Seiten, eine, die den Skript-Teil behandelt und bietet den Download-Link und eine, die den Download tut. Der Benutzer sieht die Download-Seite nur dann, wenn ein Fehler auftritt. Das scheint zu funktionieren, obwohl es nicht meine ursprüngliche Vision ist. Danke für die Hilfe. – mando222

Verwandte Themen