


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< 用の空の zip ファイル
を作成します) 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 "
現在のディレクトリ内のすべてのファイル"
<フォームアクション="list.php"メソッド="POST">
;/td> | サイズ (KB) | |
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
![]() ホットAIツール![]() Undresser.AI Undressリアルなヌード写真を作成する AI 搭載アプリ ![]() AI Clothes Remover写真から衣服を削除するオンライン AI ツール。 ![]() Undress AI Tool脱衣画像を無料で ![]() Clothoff.ioAI衣類リムーバー ![]() Video Face Swap完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。 ![]() 人気の記事
アサシンのクリードシャドウズ:シーシェルリドルソリューション
4週間前
By DDD
Windows11 KB5054979の新しいものと更新の問題を修正する方法
3週間前
By DDD
Atomfallのクレーンコントロールキーカードを見つける場所
4週間前
By DDD
<🎜>:Dead Rails-すべての課題を完了する方法
1 か月前
By DDD
KB5055523を修正する方法Windows 11にインストールできませんか?
2週間前
By DDD
![]() ホットツール![]() メモ帳++7.3.1使いやすく無料のコードエディター ![]() SublimeText3 中国語版中国語版、とても使いやすい ![]() ゼンドスタジオ 13.0.1強力な PHP 統合開発環境 ![]() ドリームウィーバー CS6ビジュアル Web 開発ツール ![]() SublimeText3 Mac版神レベルのコード編集ソフト(SublimeText3) ![]() ホットトピック
Gmailメールのログイン入り口はどこですか?
![]() ![]()
Java チュートリアル
![]() ![]()
CakePHP チュートリアル
![]() ![]()
Laravel チュートリアル
![]() ![]()
PHP チュートリアル
![]() ![]() ![]() PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。 ![]() あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。 ![]() Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、 ![]() JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。 ![]() 文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります ![]() このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます ![]() 静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。 ![]() PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。 ![]() |