PHP Erkennen ob Download abgeschlossen ist

LoOni3r

Active member
25 Februar 2014
40
0
Guten Tag,

kann man mit jquery, ajax o.ä. erkennen ob ein zuvor gestarteter Download abgeschlossen ist und dann eine Weiterleitung starten?

Bereits Gegoogelt, hier finde ich nur unzählige Einträge für Ladebalken für Upload..
 
Wenn du spezifizierst, wie dein Anwendungsfall aussieht, gibts unterschiedliche Antworten. jQuery/AJAX und PHP passt nicht zusammen. Eins von beiden is vermutlich falsch ;)

Hast du den Download durch AJAX clientseitig initiiert (d.h. du hast einen GET-Request angestoßen), weißt du, wenn du fertig bist, wenn der XMLHttpRequest dir sagt, dass es so is. Im Fall von jQuery wird success() oder error() getriggert.
Bist du derjenige, der den Download via PHP durchführt, weißt du, wenn du fertig bist, wenn du das letzte Byte an den Client geschickt (und ggf. geflushed) hast. Vorsicht, hier wird noch minimal Zeit vergehen, weil die Daten ja durch den Webserver und von dort durch die Leitung an den Nutzer müssen und dessen OS sie auch erst an den Browser reichen muss.
 
Die Frage ist ja auch, was die Weiterleitung danach bewirken soll.

Vermutlich wird eher andersrum ein Schuh draus. Zeig zuerst die Seite, die nach dem Download angezeigt werden soll und starte dann bspw. mittels Meta-Refresh den Download. So ist es egal, wie lang der Download dauert und auch durchaus nicht unübliche Praxis.
 
Danke für eure Antworten.

Habe jetzt eine extrem umständliche Lösung entwickelt (noch nicht ganz fertig).

Ich habe extrem viele Dateien im Verzeichnis, welche sich immer wieder ändern (nicht täglich).
Der User muss bisher immer jede Datei einzeln herunterladen.

Aktuell habe ich das ganze in Owncloud eingebunden und benutze dort die Möglichkeit das komplette Verzeichnis als .zip zu downloaden.
Ist extrem langsam (max. 3mb/s).

Das Verzeichnis vorher aufm Server packen zu lassen kommt bei mir nicht in frage.

Daher die Idee den nächsten Download starten wenn der erste fertig ist.

Hier wäre es toll wenn es eine Möglichkeit gibt die aktuelle Seite (download.php?datei=1) nach beenden des ersten Download weiterzuleiten (download.php?datei=2 usw.).
 
Ein Browser kann auch mehrere Dateien gleichzeitig downloaden.
Ich hab das zwar noch nicht ausprobiert, aber wenn du einen Download startest, verlässt du die Seite ja nicht, obwohl du "location.href = ..." ausgeführt hast.
 
Ich möchte den User nicht zumuten über 100 Dateien gleichzeitig zu Downloaden ;)
Sollte daher schon nach einander erfolgen.

Ich setz mich am Wochenende nochmal hin und stelle meinen "Plan B" fertig.
 
Ich möchte den User nicht zumuten über 100 Dateien gleichzeitig zu Downloaden ;)
Sollte daher schon nach einander erfolgen.
Wo is der Unterschied? Der Server wird ihn eh ausbremsen und somit wirds "zwangs-serialisiert".

Ich würde an deiner Stelle nochmal drüber nachdenken, warum du nicht zippen kannst.
Entweder es sind 100 unabhängige Dateien, dann sinds auch 100 Downloads.
Wenn der Nutzer sie aber geschlossen als Einheit anfordert, so isses logisch, dass sie als Tarball - oder platzsparender als - Zip kommen.
 
[Gelöst]

Habs gelöst, zwar umständlich aber es funktioniert:
PHP:
$ip = $_SERVER["REMOTE_ADDR"];

$output = shell_exec("netstat -atn | grep ':443'");
$anzahleintraege = substr_count($output, '_');
$output = explode("_",$output);

for($i='0'; $i<=$anzahleintraege; $i++) {
$output2 = str_replace(" ", "",$output[$i]);
$output2 = str_replace("
", "",$output2);
$output2 = str_replace("tcp600:::443:::*LISTEN", "",$output2);


if (preg_match("/ESTABLISHED/", "$output[$i]")){
$output2 = explode(':443', $output2);
$output2 = preg_replace ("#[:].*#","",$output2[1]);

if ($output2 == "$ip"){
$anzahlip = $anzahlip+1;
}
}
}


if ($anzahlip == "1" OR $anzahlip == "0"){
// Ausgabe wenn Download fertig ist
}else{
echo "<meta http-equiv=\"refresh\" content=\"60; url=/xyz.php?dl=$_GET[dl]\" >";
}
 
Wenn 5 Leute gleichzeitig die Webseite aufrufen, gehts nie weiter :ugly: