PHP で HTTP ブレークポイントの再開可能な送信を実装するメソッド。皆さんの参考に共有してください。具体的な実装方法は以下の通りです
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
/** * PHP-HTTP ブレークポイント再開転送の実装 * @param string $path: ファイルが配置されているパス * @param string $file: ファイル名 * @return void */ 関数ダウンロード($path,$file) { $real = $path.'/'.$file; if(!file_exists($real)) { false を返す; } $size = ファイルサイズ($real); $size2 = $size-1; $範囲 = 0; if(isset($_SERVER['HTTP_RANGE'])) { header('HTTP /1.1 206 部分的なコンテンツ'); $range = str_replace('=','-',$_SERVER['HTTP_RANGE']); $range = 爆発('-',$range); $range = トリム($range[1]); header('Content-Length:'.$size); header('Content-Range: バイト '.$range.'-'.$size2.'/'.$size); } 他 { header('Content-Length:'.$size); header('Content-Range: バイト 0-'.$size2.'/'.$size); } header('Accenpt-Range: バイト'); header('application/octet-stream'); header("キャッシュ制御: public"); header("プラグマ: 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); } 他 { header('Content-Dispositon:attachment; filename='.$file); } $fp = fopen($real,'rb+'); fseek($fp,$range); while(!feof($fp)) { set_time_limit(0); print(fread($fp,1024)); フラッシュ(); ob_flush(); } fclose($fp); } |
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。