2

アップロードされたコンテンツを解凍する必要があります。ただし、セキュリティ上の理由から、誰かが zip に php を追加して後で実行できないように、ファイルが画像ファイルのみであることを確認する必要があります。

解凍中に、ファイル構造も保持する必要があります。

$zip->extractTo($save_path . $file_name, array('*.jpg','*.jpeg','*.png','*.gif') );

null を返しません。これに使用できるパラメーターはありますか、または正規表現を使用して zip ファイルをループ処理して、拡張子を一致させ、フォルダーを作成し、ファイルをコードで保存する必要がありますか??

ありがとう

4

2 に答える 2

5

php.netから、.txt ファイルの処理

<?php 
   $value="test.zip"; 
   $filename="zip_files/$value"; 
   $zip = new ZipArchive;
     if ($zip->open($filename) === true) {
      echo "Generating TEXT file.";
          for($i = 0; $i < $zip->numFiles; $i++) { 
             $entry = $zip->getNameIndex($i);
               if(preg_match('#\.(txt)$#i', $entry))
                {
                ////This copy function will move the entry to the root of "txt_files" without creating any sub-folders unlike "ZIP->EXTRACTO" function.
                 copy('zip://'.dirname(__FILE__).'/zip_files/'.$value.'#'.$entry, 'txt_files/'.$value.'.txt'); 
                } 
              }  
             $zip->close();
            }
    else{
         echo "ZIP archive failed";
        }
?>
于 2012-07-09T01:09:01.337 に答える
4

将来これが必要になる人のために、これが私の解決策です。投稿してくれたCiroに感謝します。あなたの投稿を少し延長するだけで済みました。すべてのフォルダーが作成されていることを確認するために、最初にフォルダーをループしてから抽出を行います。

$ZipFileName = dirname(__FILE__)."/test.zip";
$home_folder = dirname(__FILE__)."/unziped";

mkdir($home_folder);

$zip = new ZipArchive;
if ($zip->open($ZipFileName ) === true) 
{

    //make all the folders
    for($i = 0; $i < $zip->numFiles; $i++) 
    { 
        $OnlyFileName = $zip->getNameIndex($i);
        $FullFileName = $zip->statIndex($i);    
        if ($FullFileName['name'][strlen($FullFileName['name'])-1] =="/")
        {
            @mkdir($home_folder."/".$FullFileName['name'],0700,true);
        }
    }

    //unzip into the folders
    for($i = 0; $i < $zip->numFiles; $i++) 
    { 
        $OnlyFileName = $zip->getNameIndex($i);
        $FullFileName = $zip->statIndex($i);    

        if (!($FullFileName['name'][strlen($FullFileName['name'])-1] =="/"))
        {
            if (preg_match('#\.(jpg|jpeg|gif|png)$#i', $OnlyFileName))
            {
                copy('zip://'. $ZipFileName .'#'. $OnlyFileName , $home_folder."/".$FullFileName['name'] ); 
            } 
        }
    }
    $zip->close();
} else
{
    echo "Error: Can't open zip file";
}
于 2012-07-09T05:23:33.033 に答える