Heim >Backend-Entwicklung >PHP-Tutorial >Ausführliche Erklärung, wie PHP aktiviert wird, um das Herunterladen von Breakpoint-Lebensläufen zu implementieren
Wie aktiviere ich PHP, um den Download von einem Haltepunkt aus fortzusetzen? Vereinfacht gesagt geht es darum, den Bereich der vom Benutzer angeforderten Datei über diese Variable $_SERVER['HTTP_RANGE'] abzurufen, und dann steuert das Programm die Ausgabe der Datei. Beispielsweise reicht die erste Anfrage für eine Datei von 0 bis 999 Byte, die zweite Anfrage von 1000 bis 1999 Byte usw. Jedes Mal, wenn 1000 Byte Inhalt angefordert werden, ruft das Programm den entsprechenden Dateispeicherort über fseek ab Funktion. Dann Ausgabe. Ich hoffe, es hilft allen.
$fname = './05e58c19552bb26b158f6621a6650899'; $fp = fopen($fname,'rb'); $fsize = filesize($fname); if (isset($_SERVER['HTTP_RANGE']) && ($_SERVER['HTTP_RANGE'] != "") && preg_match("/^bytes=([0-9]+)-$/i", $_SERVER['HTTP_RANGE'], $match) && ($match[1] < $fsize)) { $start = $match[1]; } else { $start = 0; } @header("Cache-control: public"); @header("Pragma: public"); if ($start > 0) { fseek($fp, $start); Header("HTTP/1.1 206 Partial Content"); Header("Content-Length: " . ($fsize - $start)); Header("Content-Ranges: bytes" . $start . "-" . ($fsize - 1) . "/" . $fsize); } else { header("Content-Length: $fsize"); Header("Accept-Ranges: bytes"); } @header("Content-Type: application/octet-stream"); @header("Content-Disposition: attachment;filename=1.rm"); fpassthru($fp);
Sie können sich auch ansehen, wie die Datei attachment.php von Discuz! die Wiederaufnahme des Haltepunkts implementiert. Bitte schauen Sie sich den Code an:
ruft auch den vom Benutzer angeforderten Dateibereich über $_SERVER['HTTP_RANGE'] ab. Weitere Informationen finden Sie in der Quellcodeanalyse. Hier versuche ich nur, ein paar neue Ideen anzulocken.
$range = 0; if($readmod == 4) { dheader('Accept-Ranges: bytes'); if(!emptyempty($_SERVER['HTTP_RANGE'])) { list($range) = explode('-',(str_replace('bytes=', '', $_SERVER['HTTP_RANGE']))); $rangesize = ($filesize - $range) > 0 ? ($filesize - $range) : 0; dheader('Content-Length: '.$rangesize); dheader('HTTP/1.1 206 Partial Content'); dheader('Content-Range: bytes='.$range.'-'.($filesize-1).'/'.($filesize)); } }
Verwandte Empfehlungen:
Der perfekte Implementierungscode der PHP-Download-Funktion
Detaillierte Erläuterung der Methoden zum Lesen von PHP-Dateien
Das obige ist der detaillierte Inhalt vonAusführliche Erklärung, wie PHP aktiviert wird, um das Herunterladen von Breakpoint-Lebensläufen zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!