php圧縮ファイルパッケージダウンロード機能を実現する実践心得

2588 ワード

今日PHPのパッケージダウンロード機能を実現したばかりで、昔の人は温故知新と言っていたので、いくつかの出会った問題と心得を覚えておきましょう.まずPHPはZipArchive拡張クラスを提供して私たちに使用させました(ここではこの拡張クラスをどのように取得するかは議論しません).このクラスにはzipファイルに関する関数が内蔵されています.一般的な使用方法は
$zip=new ZipArchive;//    ZipArchive   

このオブジェクトを構築すると、メソッドを呼び出してサービスすることができます.次は収集した大物の一般的な機能の運用です.
  • これはtestです.zipファイルは、現在のパスの下にあるimagesフォルダの下にある
  • に解凍されます.
    $zip=new ZipArchive;//    ZipArchive   
     if($zip->open('test.zip')===TRUE){
     $zip->extractTo('images');//            images    
     $zip->close();//     zip  
    }
    
  • これはtestです.zipファイルの内容はimage.txtファイルの内容代替
  • $zip=new ZipArchive;
    if($zip->open('test.zip',ZipArchive::OVERWRITE)===TRUE){
     $zip->addFile('image.txt');//      image.txt,      
     $zip->close();
    }
    
  • これはtestです.txtファイルの内容をtestに追加する.zipファイルから
  • $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

    初歩的に理解した知識はこれらで、後で使う必要があるものはもっと多いかもしれませんが、ここは後で改善します.