2017-11-16 1 views
0

私のWordPressプラグインコードにメモリ制限エラーがあります。

マイコード:PHPで大きなzipファイルを持つディレクトリのzipファイルを作成すると、メモリ制限に遭遇しています

function zipData($source, $destination) { 
    if (extension_loaded('zip')) { 
     if (file_exists($source)) { 
      $zip = new ZipArchive(); 
      if ($zip -> open($destination, ZipArchive::CREATE) === TRUE)  { 
       $source = realpath($source); 
       if (is_dir($source)) { 
        $iterator = new RecursiveDirectoryIterator($source); 

        $iterator->setFlags(RecursiveDirectoryIterator::SKIP_DOTS); 
        $files = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST); 
        foreach ($files as $file) { 
         $file = realpath($file); 
         if (is_dir($file)) { 
          $zip->addEmptyDir(str_replace($source . '/', '', $file . '/')); 
         } else if (is_file($file)) { 
          $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file)); 
         } 
        } 
       } else if (is_file($source)) { 
        $zip->addFromString(basename($source), file_get_contents($source)); 
       } 
      } 
      return $zip->close(); 
     } 
    } 
    return false; 
} 

ini_set('max_execution_time', 600); 
ini_set('memory_limit','1024M'); 
zipData($upload_dir['basedir'], $upload_dir['basedir'].'/Jincowboy/JinBackupMedia'. time() .'.zip'); 

私はGoogleのを確認して、私は、メモリの制限に遭遇しました。

ストリームのzipファイルの生成がメモリ制限を回避するために必要であることがわかりましたが、これについては確認できませんでした。

私のコードでこのメモリ制限を回避し、大きなファイルのディレクトリに基づいてzipファイルを作成できるようにします。

どうすればこの問題を解決できますか?

+0

もう一度やり直して、コードを貼り付けて選択し、「コードサンプル」ボタンを押してください。 – jeroen

+0

大きなファイル分割を試みています。しかし、私はそれがタイムアウトとメモリのアウトまたはメモリの制限を許可するかわからない。 – Jincowboy

+0

file_get_contents関数でメモリ制限とメモリ不足を許可しました。 だから私はこれをした $ = @fopen($ファイル、 "r"); while($ buff = fgets($ in、4096)){ $ zip-> addFromString(str_replace($ source。 '/'、 ''、$ file)、$ buff); } fclose($ file); しかし、それは動作していません – Jincowboy

答えて

-1

ストリーミングデータを使用してZIPファイルを作成することができます(多くの場合、メモリ使用量を減らすことができます)https://github.com/Grandt/PHPZipを試すことができます。

また、ストリームの解凍に関する多くのスタックオーバーフローポストがあります。

+0

私はhttps://github.com/Grandt/PHPZipをチェックしました。追加可能な最大ファイルは4GBで、合計アーカイブのサイズは4GBを超えることはできません。だから不可能です。任意のサイズのファイルディレクトリをzipファイルにしたい。 – Jincowboy

+0

合計サイズの制限はFAT32に基づいているか、Linux上でEXT3/4にある場合や、NTFS上で制限がない場合は、PHP 32のビットエンジン全体がメモリ内にある場合です。 64ビットPHPを使用している場合、マシン上で使用可能なメモリ量に制限があります。 – DevionNL

+0

ご意見ありがとうございます、DevionNL。しかし、Wordpressのプラグインはどこでもうまくいくはずです – Jincowboy

関連する問題