php圧縮ファイルパッケージダウンロード機能を実現する実践心得
2588 ワード
今日PHPのパッケージダウンロード機能を実現したばかりで、昔の人は温故知新と言っていたので、いくつかの出会った問題と心得を覚えておきましょう.まずPHPはZipArchive拡張クラスを提供して私たちに使用させました(ここではこの拡張クラスをどのように取得するかは議論しません).このクラスにはzipファイルに関する関数が内蔵されています.一般的な使用方法は
このオブジェクトを構築すると、メソッドを呼び出してサービスすることができます.次は収集した大物の一般的な機能の運用です.これはtestです.zipファイルは、現在のパスの下にあるimagesフォルダの下にある に解凍されます.これはtestです.zipファイルの内容はimage.txtファイルの内容代替 これはtestです.txtファイルの内容をtestに追加する.zipファイルから
-フォルダをzipファイルにパッケージします.これは、ターゲットフォルダのパスによって再帰的に操作され、フォルダの内容を圧縮します.
ファイルを圧縮した後、phpのfopen関数、phpのheader()を使用するダウンロード機能もあります.
初歩的に理解した知識はこれらで、後で使う必要があるものはもっと多いかもしれませんが、ここは後で改善します.
$zip=new ZipArchive;// ZipArchive
このオブジェクトを構築すると、メソッドを呼び出してサービスすることができます.次は収集した大物の一般的な機能の運用です.
$zip=new ZipArchive;// ZipArchive
if($zip->open('test.zip')===TRUE){
$zip->extractTo('images');// images
$zip->close();// zip
}
$zip=new ZipArchive;
if($zip->open('test.zip',ZipArchive::OVERWRITE)===TRUE){
$zip->addFile('image.txt');// image.txt,
$zip->close();
}
$zip=new ZipArchive;
$res=$zip->open('test.zip',ZipArchive::CREATE);
if($res===TRUE){
$zip->addFromString('test.txt','file content goes here');
$zip->close();
echo 'ok';
}else{
echo 'failed';
}
-フォルダをzipファイルにパッケージします.これは、ターゲットフォルダのパスによって再帰的に操作され、フォルダの内容を圧縮します.
function addFileToZip($path,$zip){
$handler=opendir($path); // $path 。
while(($filename=readdir($handler))!==false){
if($filename != "." && $filename != ".."){// '.' ‘..',
if(is_dir($path."/".$filename)){// ,
addFileToZip($path."/".$filename, $zip);
}else{ // zip
$zip->addFile($path."/".$filename);
}
}
}
@closedir($path);
}
$zip=new ZipArchive();
if($zip->open('images.zip', ZipArchive::OVERWRITE)=== TRUE){
addFileToZip('images/', $zip); // , , ZipArchive
$zip->close(); // zip
}
ファイルを圧縮した後、phpのfopen関数、phpのheader()を使用するダウンロード機能もあります.
$fp=fopen($file_name,"r");// zip
$file_size=filesize($file_name);//
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length:".$file_size);
Header("Content-Disposition: attachment; filename=$downname");//downname
$buffer=1024; // , , ( )
$file_count=0; //
// , 。
while(!feof($fp) && $file_count
初歩的に理解した知識はこれらで、後で使う必要があるものはもっと多いかもしれませんが、ここは後で改善します.