ID: 46985 Comment by: killerbg at gmail dot com Reported By: killerbg at gmail dot com Status: Feedback Bug Type: Zip Related Operating System: Windows XP Professional SP3 PHP Version: 5.2.8 Assigned To: pajoye New Comment:
pajoye(at)php(dot)net, here is the output from your script http://rapidshare.com/files/178740823/ouput.zip.html (identical with the two versions) The file working state is the same as with my script The php(at)undoso(dot)eu's solution is working here too when combining php5ts.dll version 5.2.9 (CVS) with php_zip.dll version 5.2.7 (CVS) Previous Comments: ------------------------------------------------------------------------ [2009-01-01 14:44:00] php at undoso dot eu I have the same issue. It seems that compressing short strings works fine but using huge ones gets them corrupted. Even if the resulting zip might open, using a simple md5 on both files often prove that they differs which is not great... I downloaded PHP 5.2.6 and replaced the php_zip.dll of 5.2.8 by the 5.2.6 version. It fixed the problem right away. There is really some kind of regression in 5.2.8. ------------------------------------------------------------------------ [2009-01-01 00:38:55] paj...@php.net It works just fine here (in apache2 sapi, iis, fcgi and cli). Can you try the following script please? I suspect some other errors happening and they are not displayed. Be sure to have display_errors activated. By the way, in the latest releases there are "addFromPattern"/"Glob" functions which let you add recursively something like "*.jpeg" :) <?php $path = 'C:\yourpath\\'; $count = 0; function archive($path, $local) { global $zip, $count; if ($handle = opendir($path)) { while (($file = readdir($handle)) !== false) { if (($file != ".") && ($file != "..")) { echo "$file\n"; var_dump($local, $file, $path); if (is_dir($path . $file)) { $zip->addEmptyDir($local . $file . "/"); archive($path . $file . "/", $local . $file . "/"); } elseif (is_file($path . $file)) { if ($count > 128) { $zip->close(); $zip->open($GLOBALS["file"]); $count = 0; } $zip->addFile($path . $file, $local . $file); $count++; } } } closedir($handle); } echo "count: $count\n"; } $file = 't.zip'; $zip = new ZipArchive(); if (($zip->open($file, ZipArchive::CREATE)) === TRUE) { archive($path, null); $zip->close(); } echo "done\n"; ------------------------------------------------------------------------ [2008-12-31 23:12:49] killerbg at gmail dot com Here is an archive containing both the corrupted file created with the new versions, a good file created with the same script and older version (5.2.6) and the script used - http://rapidshare.com/files/178582253/Error.zip.html ------------------------------------------------------------------------ [2008-12-31 21:21:33] paj...@php.net I can't reproduce it here (xp sp3 and vista/2k8). Please provide the file(s) (the minimum required to create a corrupted archive) and the script you are using. ------------------------------------------------------------------------ [2008-12-31 20:27:12] killerbg at gmail dot com Description: ------------ On Windows XP Professional Service Pack 3 with Apache 2.2.11 and PHP 5.2.8 - PHP 5.2.9 loaded as dynamic module when creating archive and adding files and/or folders the ouput is incorrect and the file gets corrupted. Even trying to open it again with the script results error code 19. Reproduce code: --------------- $file = tempnam("/tmp/", "php"); $zip = new ZipArchive(); if (($zip->open($file, ZipArchive::OVERWRITE)) === TRUE) { $zip->addEmptyDir("Directory"); $zip->addFile("File"); $zip->close(); } Expected result: ---------------- Correctly created zip archive file with unique name located in the temporaly directory. Actual result: -------------- Only the firsts few added files visible but corrupted acording to the crc32 record. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=46985&edit=1