PHP はブレークポイントでダウンロードを再開するメソッドを実装し、PHP はブレークポイントで再開可能なダウンロードを実装します
この記事の例では、PHP でダウンロードを再開するブレークポイントを実装する方法を説明します。参考のためにみんなで共有してください。
具体的な実装コードは次のとおりです:
コードをコピーします コードは次のとおりです:
/*
* PHP ダウンロード ブレークポイントの再開
*/
関数 dl_file_resume($file){
// ファイルが存在するかどうかを確認します
If (!is_file($file)) { die("404 ファイルが見つかりません!"); }
$len = filesize($file);//ファイルサイズを取得します
$filename =basename($file);//ファイル名を取得します
$file_extension = strto lower(substr(strrchr($filename,"."),1));//ファイル拡張子を取得します
//拡張子に基づいて出力ブラウザ形式を指定します
switch( $file_extension ) {
case "exe": $ctype="application/octet-stream";
case "zip": $ctype="application/zip";
case "mp3": $ctype="audio/mpeg";
ケース "mpg":$ctype="ビデオ/mpeg";
ケース "avi": $ctype="video/x-msvideo";
デフォルト: $ctype="application/force-download";
}
//ヘッダーの書き込みを開始します
header("キャッシュコントロール:");
header("キャッシュ制御: パブリック");
//出力ブラウザ形式を設定します
header("コンテンツタイプ: $ctype");
If (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) {//IE ブラウザの場合
# ファイル名に複数のピリオド/複数のドットが含まれる IE ファイル名のバグの回避策
# ファイル名に角括弧を追加します - 例: setup.abc.exe は setup[1].abc.exe になります
$iefilename = preg_replace('/./', '%2e', $filename, substr_count($filename, '.') - 1);
header("Content-Disposition:attachment; filename="$iefilename"");
} その他 {
header("Content-Disposition:attachment; filename="$filename"");
}
header("受け入れ範囲: バイト");
$size=ファイルサイズ($file);
// $_SERVER['HTTP_RANGE'] パラメータがある場合
If(isset($_SERVER['HTTP_RANGE'])) {
/* ------------------------
Range ヘッダー フィールド Range ヘッダー フィールドは、エンティティの 1 つ以上のサブ範囲を要求できます。たとえば、最初の 500 バイトを表します: bytes=0-499 は 2 番目の 500 バイトを表します: bytes=500-999 は最後の 500 バイトを表します: bytes=-500 は 500 バイト以降の範囲を表します: bytes=500- 最初と最後のbytes: bytes=0-0,-1 同時に複数の範囲を指定します: bytes=500-600,601-999 ただし、無条件 GET に Range リクエスト ヘッダーが含まれる場合、サーバーはこのリクエスト ヘッダーを無視できます。コード 200 (OK) の代わりにコード 206 (PartialContent) が返されます。
-------------------------*/
// ブレークポイントと $_SERVER['HTTP_RANGE'] の値の後に再度接続します bytes=4390912-
list($a, $range)=explode("=",$_SERVER['HTTP_RANGE']);
//「はい」の場合、不足している部分をダウンロードします
str_replace($range, "-", $range);//この文は何ですか? 。 。 。
$size2=$size-1;//ファイル内の合計バイト数
$new_length=$size2-$range;//次回のダウンロードの長さを取得する
header("HTTP/1.1 206 部分的なコンテンツ");
header("Content-Length: $new_length");// 合計の長さを入力
header("Content-Range: bytes $range$size2/$size");//Content-Range: バイト 4908618-4988927/4988928 95% の確率で
} else {//最初の接続
$size2=$size-1;
header("Content-Range: バイト 0-$size2/$size"); //Content-Range: バイト 0-4988927/4988928
header("Content-Length: ".$size);//出力の全長
}
// ファイルを開く
$fp=fopen("$file","rb");
// ポインターの位置を設定します
fseek($fp,$range);//アンリアル出力
While(!feof($fp)){
//ファイルの最大実行時間を設定します
set_time_limit(0);
print(fread($fp,1024*8));//出力ファイル
flush();//出力バッファ
ob_flush();
}
fclose($fp);
出る
}
dl_file_resume("1.zip");//同じディレクトリ内の 1.zip ファイル
//-----------------------------------------------
//ブレークポイントで再開できるファイルのダウンロードはサポートされていません。
//-----------------------------------------------
ダウンファイル("1.zip");
関数 downFile($sFilePath)
{
If(file_exists($sFilePath)){
$aFilePath=explode("/",str_replace("\","/",$sFilePath),$sFilePath);
$sFileName=$aFilePath[count($aFilePath)-1];
$nFileSize=ファイルサイズ ($sFilePath);
header ("Content-Disposition: 添付ファイル; ファイル名 = . $sFileName);
header ("Content-Length: " . $nFileSize);
ヘッダー ("コンテンツタイプ: application/octet-stream");
readfile($sFilePath);
}
それ以外
{
echo("ファイルが存在しません!");
}
}
?>
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。
http://www.bkjia.com/PHPjc/910607.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/910607.html
技術記事
PHP でダウンロードのブレークポイントを再開する方法を実装します。 PHP でブレークポイントを使用して再開する方法を説明します。 この記事では、PHP でダウンロードの再開を実装する方法について説明します。参考のためにみんなで共有してください。 具体的な実装コードは次のとおりです:...