検索
ホームページphp教程php手册PHP ファイルのパッケージ化。PHP 独自の ZipArchive をダウンロードして使用して、ファイルを圧縮し、パッケージ化されたファイルをダウンロードします。

概要:

PHP を使用してファイルをダウンロードする操作には 4 つの header() が必要です。私の他のブログ投稿「PHP によるダウンロード関数の超詳細なプロセス分析の方法」を参照してください。
サイズを計算するとき。 filesize($filename) から、最初にファイルを開く必要がある場合、filesize は filesize($filehandle)
データの送信元の形式になることがわかります。クライアントに戻す場合は、$buffer=1023 のように、毎回クライアントに出力するデータ量を指定するバッファを設定することを忘れないでください。指定しない場合は、ファイル全体をメモリに書き込み、クライアントにデータを一括送信します。
feof()関数により、読み込むファイルが読み込まれているかどうかを判定できます。まだ読み込まれていません。終了後、ファイルの読み取りを続行し ($file_data=fread())、データをクライアントに送り返します (echo $file_data)
各ダウンロードが完了すると、クライアントは更新されますこれは、実際には、毎回データを一時ファイルに書き込み、すべてのダウンロードが完了した後にすべてのデータを再統合することを示しています
ここでは絶対パスを使用します。絶対パスの利点は、より適応性が高いことです。相対パスに比べて効率的です(ファイルを見つけるプロセスが不要になります)
技術的なポイントを分析します:

ファイルを zip 形式にパッケージ化します

ダウンロード機能ファイル

キーポイント分析:

ここでは、PHP に付属の ZipArchive クラスを使用します
a) 新しい ZipArchive オブジェクトを作成し、open次に、addFile メソッドを使用して、作成した zip ファイルにパッケージ化するファイルを書き込みます。忘れずにオブジェクトを閉じてください。

b) 注: open メソッドを使用する場合、2 番目のパラメーター $flags は、開かれた zip ファイルの処理方法を指定するために使用されます。

i . ZIPARCHIVE::OVERWRITE は常に新しいファイルを作成します。指定された zip ファイルが存在する場合は上書きされます。

ii. ZIPARCHIVE::CREATE 指定された zip ファイルが存在しない場合は、新しいファイルが作成されます。

iii. ZIPARCHIVE::EXCL 指定された zip ファイルが存在する場合、エラーが報告されます

iv. ZIPARCHIVE::CHECKCONS

ファイルのダウンロード処理:

サーバー側の作業:

クライアントのブラウザは、ダウンロードされた PHP ファイルを処理するリクエストを送信します。
注: ビデオ、オーディオ、テキスト ファイルのいずれであっても、最初に操作をメモリに書き込む必要があります。
言い換えると、「サーバー」上のファイルを「サーバー」のメモリに読み取る操作が不可欠です (注: ここでは主にこれを説明するために、サーバーという単語を二重引用符で囲んでいます) 一連の操作は次のとおりです。サーバー上で完了します)。

ファイルをメモリに書き込む必要があるため、最初にファイルを開く必要があります
ここでは 3 つのファイル操作関数を示します:
1 つ: fopen($filename,$ mode)
2: fread ( int $handle , int $length )
3: fclose ( resource $handle )

クライアント側の作業:

それでは、次のようにします。サーバー側メモリにすでに存在するファイル情報フローをクライアントに渡しますか?
答えは header() 関数を通じてであり、クライアントはファイルの処理方法、保存するか開くかなどを知っています。

最終的な効果は以下のようになります:


コードをコピー コードは次のとおりです:


require'./download.php';
/**
* ディレクトリを走査し、zip 形式にパッケージ化します
*/
class traverseDir{
public $currentdir;// 現在のディレクトリ
public $filename;//ファイル名
public $fileinfo;//現在のディレクトリ内のすべてのファイル名、ディレクトリ名、およびファイル サイズを保存するために使用されます
public function __construct(){
$this - >currentdir=getcwd();//現在のディレクトリに戻ります
}
//ディレクトリを移動します
public function scandir($filepath){
if (is_dir($filepath)) {
$arr=scandir($filepath);
foreach ($arr as $k=>$v){
$this->fileinfo[$v][]=$this-> ;getfilesize($ v);
}
}else {
echo "<script>alert('現在のディレクトリは有効なディレクトリではありません');</script>"; }
}
/**
* ファイル サイズを返します
*
* @param string $filename ファイル名
* @return ファイル サイズ (KB)
*/
public function getfilesize($fname){
return filesize($fname)/1024;
}
/**
* 圧縮ファイル(zip形式)
*/
public function tozip($items){
$zip=new ZipArchive();
$zipname=date('YmdHis',time()); ($zipname)){
$zip->open($zipname.'.zip',ZipArchive::OVERWRITE);// ($i=0;$iを作成します) count($items); $i ){
$zip->addFile($this->currentdir.'/'.$items[$i],$items[$i]);
$zip- >close();
$dw=new download($zipname.'.zip'); //ファイルをダウンロードします
$dw->getfiles(); ($zipname.'.zip') //ダウンロード後に削除します。
}
}
?> >コードをコピー

コードは次のとおりです:


/**

* ファイルをダウンロード
*

*/ class download{ protected $ _filename; protected $_filepath; protected $_filesize;// ファイル サイズ

public function __construct($filename){

$this->_filename=$filename; >_filepath=dirname( __FILE__).'/'.$filename;
}
//ファイル名を取得します
public function getfilename(){
return $this->_filename; 🎜>}

//ファイルパスを取得します (ファイル名を含む)
public function getfilepath(){
return $this->
}

//ファイル サイズを取得します
public function getfilesize(){
return $this->_filesize=number_format(filesize($this->_filepath)/(1024*1024),2);//削除小数点第 2 位まで
}
//ファイルをダウンロードする関数
public function getfiles(){
//ファイルが存在するかどうかを確認します
if (file_exists($this->_filepath) ){
//ファイルを開きます
$file = fopen($this->_filepath,"r");
//返されたファイルの種類
Header("Content-type: application/ octet-stream");
/ /バイトサイズに応じて返す
Header("Accept-Ranges: bytes");
//ファイルのサイズを返す
Header("Accept -Length: ".filesize($this->_filepath) );
//これはクライアント用のポップアップ ダイアログ ボックスで、対応するファイル名です
Header("Content-Disposition:attachment; filename =".$this->_filename);
//変更前は一度にクライアントにデータを送信する
echo fread($file, filesize($this->_filepath));
//変更後は、一度に 1024 バイトのデータのみがクライアントに送信されます
//データをクライアントに送り返します
$buffer=1024;//
//ファイルがbe read
while (!feof($file)) {
//ファイルをメモリに読み取ります
$file_data=fread($file,$buffer);
//1024 バイトのデータを送信します毎回クライアントに戻ります
echo $file_data;
}

fclose($file)
}else {
echo "<script>alert('ダウンロードしたいファイルが存在しません');</script>";
}
}
}
?>


ページに表示されたコード:



コードをコピー

コードは次のとおりです:




header("Content-type:text/html;charset=utf8");
require('./getfile.php' );
$scandir=new traverseDir();
$scandir->scandir($scandir->currentdir);

if (isset ($_POST['down_load'])){
$items=$_POST['items'];
$scandir->tozip($items);// ファイルを zip 形式に圧縮します

echo "現在の作業ディレクトリ:".$scandir->currentdir;
echo "
現在のディレクトリ内のすべてのファイル"




$res=$scandir-> >foreach ($res as $k=>$v){
if (!($k=='.' || $k=='..')) {// と を除外します。
?>




}
}
?> tr>
td>




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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール