Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
Downloads
/
vfm-admin
/
class
:
class.zipper.php
Voltar
Back Up
Advanced Editor
Save
<?php /** * Manage zip archives * * @category PHP * @package VenoFileManager * @author Nicola Franchini <info@veno.it> * @license Exclusively sold on CodeCanyon * @link http://filemanager.veno.it/ */ if (!class_exists('Zipper', false)) { /** * Zipper class * * @category PHP * @package VenoFileManager * @author Nicola Franchini <info@veno.it> * @license Exclusively sold on CodeCanyon * @link http://filemanager.veno.it/ */ class Zipper { /** * Prepare ZIP archive * * @param array $files files array to download * @param string $folder folder path or false * * @return file served */ public function prepareZip( $files = false, $folder = false ) { $response = array('error' => false); // create /tmp/ folder if needed $temp_path = dirname(dirname(__FILE__)).'/tmp'; if (!is_dir($temp_path)) { if (!mkdir($temp_path, 0755, true)) { $response['error'] = 'Cannot create a tmp dir for .zip files'; return $response; } } global $setUp; $time = time(); $json_name = md5($folder.$time); $hash = md5($setUp->getConfig('salt').$time); $starting_dir = $setUp->getConfig('starting_dir'); $cleanpath = dirname(dirname(dirname(__FILE__))).'/'.ltrim($starting_dir, './'); $filesarray = array(); if ($files && is_array($files)) { $response['name'] = 'zip-'.$time.'.zip'; foreach ($files as $pezzo) { // Keep files inside main dir and avoid tricky injections. $cleanfile = $setUp->sanitizePath(urldecode(base64_decode($pezzo))); if (realpath($cleanpath.$cleanfile)) { $filesarray[] = $cleanfile; } } } if ($folder) { $cleanfolder = $setUp->sanitizePath($folder); if (realpath($cleanpath.$cleanfolder)) { $folder = $cleanfolder; } else { $folder = false; } $folderpathinfo = Utils::mbPathinfo($cleanfolder); $archivename = Utils::checkMagicQuotes($folderpathinfo['filename']); $response['name'] = $archivename.'.zip'; } $saveData = array( 'time' => $time, 'hash' => $hash, 'dir' => $folder, 'files' => $filesarray, ); // save dowloadable link if it does not already exists if (!file_exists($temp_path.'/'.$json_name.'.json')) { $fp = fopen($temp_path.'/'.$json_name.'.json', 'w'); fwrite($fp, json_encode($saveData)); fclose($fp); } // Delete tmp file if is older than 48 hours $oldtmp = glob($temp_path.'/*'); foreach ($oldtmp as $oldfile) { if (is_file($oldfile)) { if (filemtime($oldfile) < time() - 60*60*48) { unlink($oldfile); } } } $response['json'] = $json_name; $response['supah'] = md5($time.$hash); return $response; } // /** // * Create ZIP archive DEPRECATED since vfm 4.0.0 // * // * @param array $files files array to download // * @param string $folder folder path or false // * @param string $relative specific path for logging // * // * @return file served // */ // public function createZip( // $files = false, // $folder = false, // $relative = '' // ) { // $response = array('error' => false); // global $setUp; // @set_time_limit(0); // $maxfiles = $setUp->getConfig('max_zip_files'); // $maxfilesize = $setUp->getConfig('max_zip_filesize'); // $starting_dir = $setUp->getConfig('starting_dir'); // $maxbytes = $maxfilesize*1024*1024; // if ($files && is_array($files)) { // $totalsize = 0; // $filesarray = array(); // foreach ($files as $pezzo) { // // Keep files inside main dir and avoid tricky injections. // $cleanfile = ltrim(urldecode(base64_decode($pezzo)), './'); // if ($starting_dir == './') { // $cleanfile = ltrim($cleanfile, 'vfm-admin/'); // } // $myfile = "../../".$cleanfile; // if (file_exists($myfile)) { // $totalsize = $totalsize + Utils::getFileSize($myfile); // array_push($filesarray, $myfile); // } // } // $howmany = count($filesarray); // } // if ($folder) { // $folder = ltrim($folder, './'); // if ($starting_dir == './') { // $folder = ltrim($folder, 'vfm-admin/'); // } // $folderpath = "../../".$folder; // if (!is_dir($folderpath)) { // $response['error'] = '<strong>'.$folder.'</strong> does not exist'; // return $response; // } // $folderpathinfo = Utils::mbPathinfo($folder); // $folderbasename = Utils::checkMagicQuotes($folderpathinfo['filename']); // // Create recursive directory iterator // $filesarray = new RecursiveIteratorIterator( // new RecursiveDirectoryIterator($folderpath), // RecursiveIteratorIterator::LEAVES_ONLY // ); // $foldersize = Utils::getDirSize($folderpath); // $totalsize = $foldersize['size']; // $howmany = 0; // foreach ($filesarray as $piece) { // if (!is_dir($piece)) { // $howmany++; // } // } // } // $response['totalsize'] = $totalsize; // $response['numfiles'] = $howmany; // // skip if size or number exceedes // if ($totalsize > $maxbytes) { // $response['error'] = '<strong>'.$setUp->formatsize($totalsize).'</strong>: ' // .$setUp->getString('size_exceeded').'<br>(< '.$setUp->formatsize($maxbytes).')'; // return $response; // } // if ($howmany > $maxfiles) { // $response['error'] = '<strong>'.number_format($howmany).'</strong>: ' // .$setUp->getString('too_many_files').' '.number_format($maxfiles); // return $response; // } // if ($howmany < 1) { // $response['error'] = '<i class="bi bi-files"></i> - <strong>0</strong>'; // return $response; // } // // create /tmp/ folder if needed // if (!is_dir($relative.'tmp')) { // if (!mkdir('tmp', 0755)) { // $response['error'] = 'Cannot create a tmp dir for .zip files'; // return $response; // } // } // // create temp zip // $file = tempnam($relative.'tmp', 'zip_'); // if (!$file) { // $response['error'] = 'Cannot create: tempnam("tmp","zip") from createZip()'; // return $response; // } // $zip = new ZipArchive(); // if ($zip->open($file, ZipArchive::OVERWRITE) !== true) { // $response['error'] = 'cannot open: '.$file; // return $response; // } // session_write_close(); // $counter = 0; // $logarray = array(); // foreach ($filesarray as $piece) { // $filepathinfo = Utils::mbPathinfo($piece); // $basename = Utils::checkMagicQuotes($filepathinfo['filename']).'.'.$filepathinfo['extension']; // // Skip directories (they would be added automatically) // if (!is_dir($piece) && file_exists($piece)) { // $counter++; // if ($counter > 100) { // $zip->close(); // $zip->open($file, ZipArchive::CHECKCONS); // $counter = 0; // } // // Add current file to archive // if ($folder) { // $relativePath = substr($piece, strlen($folderpath)); // $zip->addFile($piece, $relativePath); // } else { // $zip->addFile($piece, $basename); // array_push($logarray, './'.ltrim($piece, './')); // } // } // } // $zip->close(); // // delete tmp file if is older than 4 hours // $oldtmp = glob($relative.'tmp/*'); // foreach ($oldtmp as $oldfile) { // if (is_file($oldfile)) { // if (filemtime($oldfile) < time() - 60*60*4) { // unlink($oldfile); // } // } // } // $response['dir'] = $folder; // $response['file'] = basename($file); // if ($folder) { // array_push($logarray, './'.ltrim($folder, './')); // } // $response['logarray'] = $logarray; // return $response; // } } }