ホームページ >バックエンド開発 >PHPチュートリアル >PHP を使用してファイルのアップロードを実装し、ブレークポイントをサポートする

PHP を使用してファイルのアップロードを実装し、ブレークポイントをサポートする

WBOY
WBOYオリジナル
2016-06-13 13:03:49833ブラウズ

PHP を使用してブレークポイントをサポートするファイルのダウンロードを実装する
PHPを使用してファイルのダウンロードを実装し、ブレークポイントフォーマットをサポート
D

            ob_start();
            $size = filesize($file_dir . $file_name);
            // 输入文件标签
            Header("Content-type: application/octet-stream");
            Header("Cache-Control: must-revalidate, post-check=0, pre-check=0");            
            Header("Content-length: " . $size);
            
            $encoded_filename = urlencode($down_name);
            $encoded_filename = str_replace("+", "%20", $encoded_filename);

            $ua = $_SERVER["HTTP_USER_AGENT"];
            // 处理下载的时候的文件名
            if (preg_match("/MSIE/", $ua)) {
                header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
            } else if (preg_match("/Firefox/", $ua)) {
                header('Content-Disposition: attachment; filename*="utf8\'\'' . $down_name . '"');
            } else {
                header('Content-Disposition: attachment; filename="' . $down_name . '"');
            }
            $fp = fopen($file_dir . $file_name, "r"); // 打开文件

            if (isset($_SERVER['HTTP_RANGE']) && ($_SERVER['HTTP_RANGE'] != "") && preg_match("/^bytes=([0-9]+)-/i", $_SERVER['HTTP_RANGE'], $match) && ($match[1] < $size)) {
                $range = $match[1];                
                fseek($fp, $range);
                header("HTTP/1.1 206 Partial Content");
                //header("Date: " . gmdate("D, d M Y H:i:s") . " GMT");
                header("Last-Modified: " . gmdate("D, d M Y H:i:s", filemtime($file_dir . $file_name)) . " GMT");
                header("Accept-Ranges: bytes");
                $rangesize = ($size - $range) > 0 ? ($size - $range) : 0;
                header("Content-Length:" . $rangesize);
                header("Content-Range: bytes " . $range . '-' . ($size - 1) . "/" . $size);
                // header("Connection: close" . "\n\n" );
                //header("Connection: close"." ");
            } else {                
                header("Content-Length: " . (string) ($size));
                header("Accept-Ranges: bytes");
                $range = 0;
                header("Content-Range: bytes " . $range . '-' . ($size - 1) . "/" . $size);
            }
            fpassthru($fp);
            ob_end_flush();
            fclose($fp);
            exit;

をダウンロードするために PHP を使用する友人にとって役立つことを願っています

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。