###前提・実現したいこと
windows環境でzipを解凍したいです。
現在ZipArchiveで作成したZipをエクスプローラーから解凍したいのですが、
出来ないでいます。macで動作を確認した時には解凍が出来たのですがWindowsでやるとうまくいきません。似たような事例で英語ですが
http://stackoverflow.com/questions/4620205/php-ziparchive-corrupt-in-windows
上記の問題と似ている気がします。しかし英語が不慣れで理解が難しく問題解決が出来ないでいます。何卒よろしくお願いします。
###発生している問題・エラーメッセージ
Windows環境での解凍ができません エクスプローラーで開くと無効と表示されます。
###該当のソースコード
php
1define("file-path","C:MAMP/htdocs/fileup/test/"); 2 3//圧縮するファイル指定 4$dir = file-path; 5// Zipファイルの保存先 6$file = "./Zipfile/" . date("his") .'.zip'; 7$root = ""; 8zipDirectory($dir, $file,$root); 9} 10function zipDirectory($dir, $file, $root){ 11$zip = new ZipArchive(); 12//$fileにZipを作成する読み込み/書き込み/変更用にオープンします。 13$res = $zip->open($file, ZipArchive::CREATE); 14if($res){ 15// $rootが指定されていればその名前のフォルダにファイルをまとめる 16if($root != "") { 17//空のディレクトリを追加 18$zip->addEmptyDir($root); 19$root .= DIRECTORY_SEPARATOR; 20} 21//文字数カウント 22$baseLen = mb_strlen($dir); 23//RecursiveIteratorIterator()とRecursiveDirectoryIterator()を組み合わせると、再帰関数を利用 24$iterator = new RecursiveIteratorIterator( 25new RecursiveDirectoryIterator( 26$dir, 27FilesystemIterator::SKIP_DOTS //隠しファイルをスキップ 28|FilesystemIterator::KEY_AS_PATHNAME //パス名を返す 29|FilesystemIterator::CURRENT_AS_FILEINFO //ファイルの拡張子を取得 30), RecursiveIteratorIterator::SELF_FIRST //(親から先に) 取り上げます。 31); 32 33//順番に配列に入れていく 34foreach($iterator as $pathname => $info){ 35//$pathnam が実際に圧縮したい対象 36$localpath = mb_substr($pathname, $baseLen); 37if( $info->isFile() ){ 38$zip->addfile($pathname, $localpath); 39} else { 40$res = $zip->addEmptyDir($localpath);} 41} 42$zip->close(); 43} else { 44return false; 45} 46header('Content-Type: application/zip'); 47header(sprintf('Content-Disposition: attachment; filename="%s"',basename($file))); 48header(sprintf('Content-Length: %d', filesize($file))); 49readfile();
###試したこと
headerをzipに指定、macでの動作確認はできました。
###補足情報(言語/FW/ツール等のバージョンなど)
MAMP windows10
回答3件
あなたの回答
tips
プレビュー