PHPヘッダー機能でダウンロード・ショートクリック・レジューム・プログラムを実装_PHPチュートリアル

WBOY
リリース: 2016-07-20 11:11:52
オリジナル
1154 人が閲覧しました

この記事では、ダウンロードのショートポイント再開を実装するためのいくつかのプログラム関数をまとめます。これらの関数は主に PHP のヘッダー関数を使用します。詳しく知りたい人は参照してください。

例: ダウンロード時に、ダウンロードファイルのサイズ、ファイル名などを出力します。
前提として、.htaccess ファイルの設定には
SetEnv no-gzip dont-vary という文を追加する必要があります
つまり、ファイルは圧縮された

例1

代码如下
コードは次のとおりです コードをコピーします

function download($file_dir,$file_name)
//パラメータの説明:
//file_dir: ディレクトリファイルが見つかりました
//file_name: ファイル名
{
$file_dir = Chop($file_dir);//パス内の余分なスペースを削除します
//ダウンロードするファイルのパスを取得します
if($file_dir != ' ')
{
$file_path = $file_dir;
if(substr( $file_dir,strlen($file_dir)-1,strlen($file_dir)) != '/')
$file_path .= '/'; file_path .= $file_name;
} else {
$file_path = $file_name ;
//ダウンロードするファイルが存在するかどうかを判断します
if(!file_exists($file_path))
{
echo '申し訳ありませんが、ダウンロードしたいものが存在しません。 ';
false を返す
}
$file_size = file_path);
@header("Pragma: public");エンコーディング: gzip");
@header("Content-Type: application/octetstream");
header("Content-Length: $file_size");
Header("Accept-Ranges: bytes");
header (" Content-Disposition:attachment; filename=".$file_name);
fpassthru($fp);
return true; ,'文件名');
?>




例2

复制代码

$fname = './MMLDZG.mp3'; $fp = fopen($ fname, 'rb'); if (isset($_SERVER['HTTP_RANGE']) && ($_SERVER['HTTP_RANGE'] != "") && preg_match("/^ bytes= ([0-9]+)-$/i", $_SERVER['HTTP_RANGE'], $match) && ($match[1] < $fsize)) { } else { $start = 0; @header("キャッシュ制御: public");
$fsize = ファイルサイズ($fname); $start = $match[1] ;
if ($star--> 0) {
fseek ($ fp, $start);
Header("HTTP/1.1 206 部分コンテンツ");
Header("Content-Length: " . ($fsize - $start));
Header("Content-Range: bytes") . $ start . "-" . "/" . $fsize);
header("Accept-Ranges: bytes") );
}
@header("Content-Type: application/octet-stream");
@header("Content-Disposition:attachment;filename=mmdld.mp3");



fpassthru() 関数は、ファイル ポインターに残っているすべてのデータを出力します。

この関数は、指定されたファイル ポインターを現在の位置から EOF まで読み取り、結果を出力バッファーに書き込みます。

上記の 2 つの例は、中国語を適切にサポートしていません。次の関数は、この問題をうまく解決します。コードは以下の通りです

コードをコピーします /**

* PHP-HTTP ブレークポイント再開転送の実装

* @param string $path: ファイルが置かれているパス

*/

function download($path,$file) {

$real = $path.'/ '.$file;

if(!file_exists($real)) {

return false;

}

$size = filesize($real);

$size2 = $size-1;

$range = 0;

if(isset($_SERVER['HTTP_RANGE'])) {

header('HTTP /1.1 206 Partial Content');

$range = str_replace('=','-',$_SERVER ['HTTP_RANGE']);

$range =explode('-',$range);

$range = trim($range[1]);

header('Content-Length:'.$size) ;

header('Content-Range: bytes '.$range.'-'.$size2.'/'.$size);

} else {

header('Content-Length:'.$size) ;

header('Content-Range: bytes 0-'.$size2.'/'.$size);

}

header('Accenpt-Range: bytes');

header('application/octet -stream');

header("Cache-control: public");

header("Pragma: public");

//IEでのダウンロード時の中国語文字化け問題を解決

$ua = $ _SERVER[ 'HTTP_USER_AGENT'];

if(preg_match('/MSIE/',$ua)) {

$ie_filename = str_replace('+','%20',urlencode($file));

header (' Content-Dispositon:attachment; filename='.$ie_filename);

} else {

header('Content-Dispositon:attachment; filename='.$file);

}

$fp = fopen( $real ,'rb+');

fseek($fp,$range);

while(!feof($fp)) {

set_time_limit(0);

print(fread($fp,1024)) ;

フラッシュ();

}

fclose($fp);

http://www.bkjia.com/PHPjc/444606.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/444606.html

技術記事

この記事では、短いダウンロード再開を実装するためのいくつかのプログラム関数をまとめます。これらの関数は主に PHP のヘッダー関数を使用します。詳しく知りたい人は参照してください。 例: ダウンロード...

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート