RobertP Posted March 5, 2012 Share Posted March 5, 2012 I am create a function the will unzip a simple archive. My function works, but if the file is larger them 1KB, then it will 'cut' the file to 1KB. Here is my function. define('_DS',DIRECTORY_SEPARATOR); function unzip($file,$dir = null){ if(!is_readable($file)) return 'File \''.$file.'\' not found.'; if(!$dir) $dir = dirname($file); if(!is_dir($dir)) mkdir($dir,0755,true); $resource = zip_open($file); if(!is_resource($resource)) return 'File \''.$file.'\' is corrupt.'; while(($entry = zip_read($resource))!==false){ $entry_file = $dir._DS.zip_entry_name($entry); if($entry_size = zip_entry_filesize($entry)==0){ mkdir($entry_file); continue; } elseif(!is_dir($entry_dir = dirname($file))) mkdir($entry_dir,0755,true); file_put_contents($entry_file,zip_entry_read($entry,$entry_size)); } zip_close($resource); return true; } Quote Link to comment https://forums.phpfreaks.com/topic/258333-php-unzip/ Share on other sites More sharing options...
RobertP Posted March 6, 2012 Author Share Posted March 6, 2012 ok, i have it working correctly, here it is function unzip($file,$dir = null){ if(!is_readable($file)) return 'File \''.$file.'\' not found.'; if(!$dir) $dir = dirname($file); if(!is_dir($dir)) mkdir($dir,0755,true); $resource = zip_open($file); if(!is_resource($resource)) return 'File \''.$file.'\' is corrupt.'; while($entry = zip_read($resource)){ $size = zip_entry_filesize($entry); $name = zip_entry_name($entry); $unzipped = fopen($dir._DS.$name,'wb'); while($size>0){ $chunkSize = ($size>102400)?10240:$size; $size -= $chunkSize; $chunk = zip_entry_read($entry,$chunkSize); if($chunk!==false) fwrite($unzipped,$chunk); } fclose($unzipped); } return true; } Quote Link to comment https://forums.phpfreaks.com/topic/258333-php-unzip/#findComment-1324341 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.