public function createZip() { /* Check if file is cached and still valid */ $cachedfolder = $this->getFolder(); if ($cachedfolder === false || $cachedfolder['folder'] === false) { return new WP_Error('broke', __("Requested directory isn't allowed", 'useyourdrive')); } $folder = $cachedfolder['folder']->getItem(); /* Check if entry is allowed */ if (!$this->_isEntryAuthorized($cachedfolder['folder'])) { return new WP_Error('broke', __("Requested directory isn't allowed", 'useyourdrive')); } /* Create upload dir if needed */ $zip_filename = '_zip_' . basename($folder->getTitle()) . '_' . uniqid() . '.zip'; $json_options = 0; if (defined('JSON_PRETTY_PRINT')) { $json_options |= JSON_PRETTY_PRINT; // Supported in PHP 5.4+ } if (isset($_REQUEST['files'])) { $dirlisting = array('folders' => array(), 'files' => array(), 'bytes' => 0, 'bytes_total' => 0); foreach ($_REQUEST['files'] as $fileid) { $cached_file = $this->getEntry($fileid); $data = $this->_getRecursiveFiles($cached_file, '', true); $dirlisting['files'] = array_merge($dirlisting['files'], $data['files']); $dirlisting['folders'] = array_merge($dirlisting['folders'], $data['folders']); $dirlisting['bytes_total'] += $data['bytes_total']; } } else { $dirlisting = $this->_getRecursiveFiles($cachedfolder['folder']); } if (count($dirlisting['folders']) > 0 || count($dirlisting['files']) > 0) { /* Create zip file */ if (!function_exists('PHPZip\\autoload')) { try { require_once "PHPZip/autoload.php"; } catch (Exception $ex) { return new WP_Error('broke', __('Something went wrong... See settings page', 'useyourdrive')); } } $zip = new PHPZip\Zip\File\Zip($zip_filename); /* Add folders */ if (count($dirlisting['folders']) > 0) { foreach ($dirlisting['folders'] as $key => $folder) { $zip->addDirectory($folder); unset($dirlisting['folders'][$key]); } } /* Add files */ if (count($dirlisting['files']) > 0) { foreach ($dirlisting['files'] as $key => $file) { usleep(125000); set_time_limit(60); /* get file */ $request = new Google_Http_Request($file['url'], 'GET'); try { $httpRequest = $this->client->getAuth()->authenticatedRequest($request); } catch (Exception $ex) { continue; } if ($httpRequest->getResponseHttpCode() == 200) { ob_flush(); $stream = fopen('php://memory', 'r+'); fwrite($stream, $httpRequest->getResponseBody()); rewind($stream); try { $zip->addLargeFile($stream, $file['path']); } catch (Exception $ex) { } fclose($stream); $dirlisting['bytes'] += $file['bytes']; unset($dirlisting['files'][$key]); } } } /* Close zip */ $result = $zip->sendZip($zip_filename); die; } else { die('No files or folders selected'); } }
// Require your bootstrap.php, or the autoload.php, and change the class instantiation from nwe Zip( to // new \PHPZip\Zip\File\Zip( // The parameters are unchanged. require_once('bootstrap.php'); // include_once("Zip.php"); $fileTime = date("D, d M Y H:i:s T"); // Set a temp file to use, instead of the default system temp file directory. // The temp file is used if the generated Zip file is becoming too large to hold in memory. //Zip::$temp = "./tempFile"; // Setting this to a function to create the temp files requires PHP 5.3 or newer: //Zip::$temp = function() { return tempnam(sys_get_temp_dir(), 'Zip');}; \PHPZip\Zip\File\Zip::$temp = function() { return "./tempFile_" . rand(100000, 999999);}; $zip = new \PHPZip\Zip\File\Zip(); // $zip = new Zip(); // Archive comments don't really support utf-8. Some tools detect and read it though. $zip->setComment("Example Zip file.\nCreated on " . date('l jS \of F Y h:i:s A')); $zip->addFile("Hello World!", "hello.txt"); @$handle = opendir($fileDir); if ($handle) { /* This is the correct way to loop over the directory. */ while (false !== ($file = readdir($handle))) { if (strpos($file, ".php") !== false) { $pathData = pathinfo($fileDir . $file); $fileName = $pathData['filename']; $zip->addFile(file_get_contents($fileDir . $file), $file, filectime($fileDir . $file), NULL, TRUE, Zip::getFileExtAttr($file)); } }
$errors = ""; // Example. Zip all .html files in the current directory and send the file for Download. // Also adds a static text "Hello World!" to the file Hello.txt $fileDir = './'; ob_start(); // This is only to show that ob_start can be called, however the buffer must be empty when sending. // To use the new namespaces, you need a bootstrapper/autoloader, examples are provided here. // The changes to your Zip use are limited to two lines after that is in place. // Require your bootstrap.php, or the autoload.php, and change the class instantiation from nwe Zip( to // new \PHPZip\Zip\File\Zip( // The parameters are unchanged. require_once('bootstrap.php'); // include_once("Zip.php"); $fileTime = date("D, d M Y H:i:s T"); $zip = new \PHPZip\Zip\File\Zip(); // $zip = new Zip(); // Archive comments don't really support utf-8. Some tools detect and read it though. $zip->setComment("Example Zip file.\nАрхив Комментарий\nCreated on " . date('l jS \of F Y h:i:s A')); // A bit of Russian (I hope), to test UTF-8 file names. (Note. I'm not Russian, and don't speak the language, this is just for testing) $zip->addFile("Hello World!", "hello.txt"); $zip->addFile("Привет мир!", "Привет мир. С комментарий к файлу.txt", 0, "Кириллица файл комментарий"); $zip->addFile("Hello World!", "hello.txt"); @$handle = opendir($fileDir); if ($handle) { /* This is the correct way to loop over the directory. */ while (false !== ($file = readdir($handle))) { if (strpos($file, ".php") !== false) { $pathData = pathinfo($fileDir . $file); $fileName = $pathData['filename'];
$errors = ""; // Example. Zip all .html files in the current directory and save to current directory. // Make a copy, also to the current dir, for good measure. $fileDir = './'; // To use the new namespaces, you need a bootstrapper/autoloader, examples are provided here. // The changes to your Zip use are limited to two lines after that is in place. // Require your bootstrap.php, or the autoload.php, and change the class instantiation from nwe Zip( to // new \PHPZip\Zip\File\Zip( // The parameters are unchanged. require_once('bootstrap.php'); // include_once("Zip.php"); $fileTime = date("D, d M Y H:i:s T"); $zip = new \PHPZip\Zip\File\Zip(); // $zip = new Zip(); $zip->setZipFile("ZipExample.zip"); $zip->setComment("Example Zip file.\nCreated on " . date('l jS \of F Y h:i:s A')); $zip->addFile("Hello World!", "hello.txt"); @$handle = opendir($fileDir); if ($handle) { /* This is the correct way to loop over the directory. */ while (false !== ($file = readdir($handle))) { if (strpos($file, ".html") !== false) { $pathData = pathinfo($fileDir . $file); $fileName = $pathData['filename']; $zip->addFile(file_get_contents($fileDir . $file), $file, filectime($fileDir . $file)); }
// Example. Zip all .html files in the current directory and send the file for Download. // Also adds a static text "Hello World!" to the file Hello.txt $fileDir = '../testData/test'; ob_start(); // This is only to show that ob_start can be called, however the buffer must be empty when sending. // To use the new namespaces, you need a bootstrapper/autoloader, examples are provided here. // The changes to your Zip use are limited to two lines after that is in place. // Require your bootstrap.php, or the autoload.php, and change the class instantiation from nwe Zip( to // new \PHPZip\Zip\File\Zip( // The parameters are unchanged. require_once('bootstrap.php'); // include_once("Zip.php"); $fileTime = date("D, d M Y H:i:s T"); $zip = new \PHPZip\Zip\File\Zip(); // new Zip(); /* // Archive comments don't really support utf-8. Some tools detect and read it though. $zip->setComment("Example Zip file.\nАрхив Комментарий\nCreated on " . date('l jS \of F Y h:i:s A')); // A bit of Russian (I hope), to test UTF-8 file names. $zip->addFile("Привет мир!", "Кириллица имя файла.txt"); $zip->addFile("Привет мир!", "Привет мир. С комментарий к файлу.txt", 0, "Кириллица файл комментарий"); $zip->addFile("Hello World!", "hello.txt"); @$handle = opendir($fileDir); if ($handle) { // This is the correct way to loop over the directory. while (false !== ($file = readdir($handle))) { if (strpos($file, ".php") !== false) { $pathData = pathinfo($fileDir . $file); $fileName = $pathData['filename'];