ホームページ >バックエンド開発 >PHPチュートリアル >PHP でディレクトリを再帰的に圧縮するにはどうすればよいですか?
PHP でディレクトリを [再帰的に] 圧縮する方法
目標は、すべてのサブディレクトリとファイルを含むディレクトリを効果的に圧縮することです。 PHP で。
PHP Zip を使用したアプローチClass
これを実現するには、PHP Zip クラスを利用できます。提供されたコードは基本的なアプローチを提供しますが、ディレクトリではなく個々のファイルでのみ動作します。
作業コード
この課題に取り組むには、次の点を考慮してください。コード:
function Zip($source, $destination) { if (!extension_loaded('zip') || !file_exists($source)) { return false; } $zip = new ZipArchive(); if (!$zip->open($destination, ZIPARCHIVE::CREATE)) { return false; } $source = str_replace('\', '/', realpath($source)); if (is_dir($source) === true) { $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST); foreach ($files as $file) { $file = str_replace('\', '/', $file); // Ignore "." and ".." folders if( in_array(substr($file, strrpos($file, '/')+1), array('.', '..')) ) continue; $file = realpath($file); if (is_dir($file) === true) { $zip->addEmptyDir(str_replace($source . '/', '', $file . '/')); } else if (is_file($file) === true) { $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file)); } } } else if (is_file($source) === true) { $zip->addFromString(basename($source), file_get_contents($source)); } return $zip->close(); }
使用法:
次に示すように Zip 関数を呼び出します:
Zip('/folder/to/compress/', './compressed.zip');
このコードは、指定されたソースを再帰的に反復します。ディレクトリとそのサブディレクトリを作成し、ファイルと空のディレクトリを zip アーカイブに追加します。その動作は、Windows と Linux の両方のプラットフォームと互換性があります。
以上がPHP でディレクトリを再帰的に圧縮するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。