Example #1
0
 /**
  * Gzip content
  *
  * @param string $filePath
  * @param string $content
  * @return void
  */
 protected function gzipContent($filePath, $content)
 {
     $functionName = function_exists('gzopen') ? 'gzopen' : 'gzopen64';
     $gzip = $functionName($filePath . $this->gzFileExtension, $this->gzCompressionLevel);
     gzputs($gzip, $content);
     gzclose($gzip);
 }
Example #2
0
function geoip_detect_update()
{
    $download_url = 'http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz';
    $outFile = geoip_detect_get_database_upload_filename();
    // Download
    $tmpFile = download_url($download_url);
    if (is_wp_error($tmpFile)) {
        return $tmpFile->get_error_message();
    }
    // Ungzip File
    $zh = gzopen($tmpFile, 'r');
    $h = fopen($outFile, 'w');
    if (!$zh) {
        return __('Downloaded file could not be opened for reading.', 'geoip-detect');
    }
    if (!$h) {
        return sprintf(__('Database could not be written (%s).', 'geoip-detect'), $outFile);
    }
    while (($string = gzread($zh, 4096)) != false) {
        fwrite($h, $string, strlen($string));
    }
    gzclose($zh);
    fclose($h);
    //unlink($tmpFile);
    return true;
}
Example #3
0
 private function setFile()
 {
     $recognize = '';
     $recognize = implode('_', $this->dbName);
     $fileName = $this->trimPath($this->config['path'] . self::DIR_SEP . time() . '.sql');
     $path = $this->setPath($fileName);
     if ($path !== true) {
         $this->error("无法创建备份目录目录 '{$path}'");
     }
     if ($this->config['isCompress'] == 0) {
         if (!file_put_contents($fileName, $this->content, LOCK_EX)) {
             $this->error('写入文件失败,请检查磁盘空间或者权限!');
         }
     } else {
         if (function_exists('gzwrite')) {
             $fileName .= '.gz';
             if ($gz = gzopen($fileName, 'wb')) {
                 gzwrite($gz, $this->content);
                 gzclose($gz);
             } else {
                 $this->error('写入文件失败,请检查磁盘空间或者权限!');
             }
         } else {
             $this->error('没有开启gzip扩展!');
         }
     }
     if ($this->config['isDownload']) {
         $this->downloadFile($fileName);
     }
 }
Example #4
0
 function WRITE($hash, $overwrite = 0)
 {
     $id = $hash["id"];
     $version = $hash["version"];
     $dbfile = $this->FN("{$id}.{$version}");
     if (!$overwrite && file_exists($dbfile)) {
         return;
     }
     #-- read-lock
     if (file_exists($dbfile)) {
         $lock = fopen($dbfile, "rb");
         flock($lock, LOCK_EX);
     }
     #-- open file for writing, secondary lock
     if ($f = gzopen($dbfile, "wb" . $this->gz)) {
         if (!lock) {
             flock($f, LOCK_EX);
         }
         $r = gzwrite($f, serialize($hash));
         gzclose($f);
         $this->SETVER($id, $version);
         $this->CACHE_ADD($id, $version);
         return 1;
     }
     #-- dispose lock
     if ($lock) {
         flock($lock, LOCK_UN);
         fclose($lock);
     }
     return 0;
 }
Example #5
0
 /**
  * Finish: close file
  */
 public function finish()
 {
     if ($this->isOpen()) {
         gzclose($this->Resource);
         $this->Resource = null;
     }
 }
 public function testCreate()
 {
     $sitemap = new Sitemap(['maxUrlsCountInFile' => 1]);
     $sitemapDirectory = $sitemap->sitemapDirectory = $this->path;
     $sitemap->addModel(Category::className());
     $sitemap->setDisallowUrls(['#category_2#']);
     $sitemap->create();
     $sitemapFileNames = array();
     foreach (glob("{$sitemapDirectory}/sitemap*") as $sitemapFilePath) {
         $sitemapFileNames[] = basename($sitemapFilePath);
     }
     $this->assertEquals($sitemapFileNames, array('sitemap.xml', 'sitemap.xml.gz', 'sitemap1.xml', 'sitemap1.xml.gz', 'sitemap2.xml', 'sitemap2.xml.gz'));
     $xmlData = file_get_contents("{$sitemapDirectory}/sitemap.xml");
     $this->assertNotFalse(strpos($xmlData, '<?xml version="1.0" encoding="UTF-8"?>'));
     $xmlData = file_get_contents("{$sitemapDirectory}/sitemap2.xml");
     $this->assertNotFalse(strpos($xmlData, '<loc>http://localhost/category_3</loc>'));
     $gzSitemap = gzopen("{$sitemapDirectory}/sitemap.xml.gz", "r");
     $sitemap = fopen("{$sitemapDirectory}/sitemap.xml", "r");
     $this->assertEquals(fread($gzSitemap, 2000), fread($sitemap, 2000));
     gzclose($gzSitemap);
     fclose($sitemap);
     $gzSitemap = gzopen("{$sitemapDirectory}/sitemap2.xml.gz", "r");
     $sitemap = fopen("{$sitemapDirectory}/sitemap2.xml", "r");
     $this->assertEquals(fread($gzSitemap, 2000), fread($sitemap, 2000));
     gzclose($gzSitemap);
     fclose($sitemap);
 }
 /**
  * Rotate all files in var/log which ends with .log
  */
 public function rotateLogs()
 {
     $var = Mage::getBaseDir('log');
     $logDir = new Varien_Io_File();
     $logDir->cd($var);
     $logFiles = $logDir->ls(Varien_Io_File::GREP_FILES);
     foreach ($logFiles as $logFile) {
         if ($logFile['filetype'] == 'log') {
             $filename = $logFile['text'];
             if (extension_loaded('zlib')) {
                 $zipname = $var . DS . $this->getArchiveName($filename);
                 $zip = gzopen($zipname, 'wb9');
                 gzwrite($zip, $logDir->read($filename));
                 gzclose($zip);
             } else {
                 $logDir->cp($filename, $this->getArchiveName($filename));
             }
             foreach ($this->getFilesOlderThan(self::MAX_FILE_DAYS, $var, $filename) as $oldFile) {
                 $logDir->rm($oldFile['text']);
             }
             $logDir->rm($filename);
         }
     }
     $logDir->close();
 }
Example #8
0
function geoip_detect_update()
{
    // TODO: Currently cron is scheduled but not executed. Remove scheduling.
    if (get_option('geoip-detect-source') != 'auto') {
        return;
    }
    $download_url = 'http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz';
    $download_url = apply_filters('geoip_detect2_download_url', $download_url);
    $outFile = geoip_detect_get_database_upload_filename();
    // Download
    $tmpFile = download_url($download_url);
    if (is_wp_error($tmpFile)) {
        return $tmpFile->get_error_message();
    }
    // Ungzip File
    $zh = gzopen($tmpFile, 'r');
    $h = fopen($outFile, 'w');
    if (!$zh) {
        return __('Downloaded file could not be opened for reading.', 'geoip-detect');
    }
    if (!$h) {
        return sprintf(__('Database could not be written (%s).', 'geoip-detect'), $outFile);
    }
    while (($string = gzread($zh, 4096)) != false) {
        fwrite($h, $string, strlen($string));
    }
    gzclose($zh);
    fclose($h);
    unlink($tmpFile);
    return true;
}
Example #9
0
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $em = $this->getEntityManager($input->getOption('em'));
        $c = $this->getContainer();
        if (!$c->hasParameter('kb_sitemap.base_url')) {
            throw new \RuntimeException("Sitemap requires base_url parameter [kb_sitemap.base_url] to be available, through config or parameters");
        }
        $output->write('<info>Fetching resources..</info>' . PHP_EOL);
        $dql = <<<___SQL
        SELECT b.name, b.ownerName, b.updatedAt FROM KnpBundlesBundle:Bundle b
___SQL;
        $q = $em->createQuery($dql);
        $bundles = $q->getArrayResult();
        $dql = <<<___SQL
        SELECT d.name, d.createdAt FROM KnpBundlesBundle:Developer d
___SQL;
        $q = $em->createQuery($dql);
        $users = $q->getArrayResult();
        $sitemapFile = $c->getParameter('kernel.root_dir') . '/../web/sitemap.xml';
        $output->write('<info>Building sitemap...</info>' . PHP_EOL);
        $spaceless = (bool) $input->getOption('spaceless');
        $tpl = $spaceless ? 'KnpSitemapBundle::sitemap.spaceless.xml.twig' : 'KnpSitemapBundle::sitemap.xml.twig';
        $sitemap = $c->get('templating')->render($tpl, compact('bundles', 'users'));
        $output->write("<info>Saving sitemap in [{$sitemapFile}]..</info>" . PHP_EOL);
        file_put_contents($sitemapFile, $sitemap);
        // gzip the sitemap
        if (function_exists('gzopen')) {
            $output->write("<info>Gzipping the generated sitemap [{$sitemapFile}.gz]..</info>" . PHP_EOL);
            $gz = gzopen($sitemapFile . '.gz', 'w9');
            gzwrite($gz, $sitemap);
            gzclose($gz);
        }
        $output->write('<info>Done</info>' . PHP_EOL);
    }
Example #10
0
 public function animetitlesUpdate()
 {
     $db = new DB();
     $lastUpdate = $db->queryOneRow("SELECT unixtime AS utime FROM animetitles LIMIT 1");
     if (isset($lastUpdate['utime']) && time() - $lastUpdate['utime'] < 604800) {
         return;
     }
     if ($this->echooutput) {
         echo "Updating animetitles.";
     }
     $zh = gzopen('http://anidb.net/api/animetitles.dat.gz', 'r');
     preg_match_all('/(\\d+)\\|\\d\\|.+\\|(.+)/', gzread($zh, '10000000'), $animetitles);
     if (!$animetitles) {
         return false;
     }
     if ($this->echooutput) {
         echo ".";
     }
     $db->query("DELETE FROM animetitles WHERE anidbID IS NOT NULL");
     for ($i = 0; $i < count($animetitles[1]); $i++) {
         $db->queryInsert(sprintf("INSERT INTO animetitles (anidbID, title, unixtime) VALUES (%d, %s, %d)", $animetitles[1][$i], $db->escapeString(html_entity_decode($animetitles[2][$i], ENT_QUOTES, 'UTF-8')), time()));
     }
     $db = NULL;
     gzclose($zh);
     if ($this->echooutput) {
         echo " done.\n";
     }
 }
 public static function export_tracking()
 {
     global $wpdb;
     // only one export at a time
     if (get_option('podlove_tracking_export_all') !== false) {
         return;
     }
     update_option('podlove_tracking_export_all', $wpdb->get_var("SELECT COUNT(*) FROM " . \Podlove\Model\DownloadIntent::table_name()));
     update_option('podlove_tracking_export_progress', 0);
     $rowsPerQuery = 1000;
     $lastId = 0;
     $page = 0;
     $fp = gzopen(self::get_tracking_export_file_path(), 'w');
     do {
         // Keeping track of the $lastId is (roughly) a bajillion times faster than paging via LIMIT.
         $sql = "\n\t\t\t\tSELECT\n\t\t\t\t\tid,\n\t\t\t\t\tuser_agent_id,\n\t\t\t\t\tmedia_file_id,\n\t\t\t\t\trequest_id,\n\t\t\t\t\taccessed_at,\n\t\t\t\t\tsource,\n\t\t\t\t\tcontext,\n\t\t\t\t\tgeo_area_id,\n\t\t\t\t\tlat,\n\t\t\t\t\tlng\n\t\t\t\tFROM\n\t\t\t\t\t" . \Podlove\Model\DownloadIntent::table_name() . "\n\t\t\t\t\tWHERE id > " . (int) $lastId . "\n\t\t\t\tLIMIT 0, {$rowsPerQuery}";
         $rows = $wpdb->get_results($sql, ARRAY_A);
         foreach ($rows as $row) {
             gzwrite($fp, implode(",", $row) . "\n");
         }
         $lastId = $row['id'];
         $page++;
         update_option('podlove_tracking_export_progress', $page * $rowsPerQuery);
     } while (count($rows) > 0);
     gzclose($fp);
     delete_option('podlove_tracking_export_all');
     delete_option('podlove_tracking_export_progress');
     exit;
 }
 public function import()
 {
     // It might not look like it, but it is actually compatible to
     // uncompressed files.
     $gzFileHandler = gzopen($this->file, 'r');
     Model\DownloadIntent::delete_all();
     Model\DownloadIntentClean::delete_all();
     $batchSize = 1000;
     $batch = array();
     while (!gzeof($gzFileHandler)) {
         $line = gzgets($gzFileHandler);
         list($id, $user_agent_id, $media_file_id, $request_id, $accessed_at, $source, $context, $geo_area_id, $lat, $lng) = explode(",", $line);
         $batch[] = array($user_agent_id, $media_file_id, $request_id, $accessed_at, $source, $context, $geo_area_id, $lat, $lng);
         if (count($batch) >= $batchSize) {
             self::save_batch_to_db($batch);
             $batch = [];
         }
     }
     gzclose($gzFileHandler);
     // save last batch to db
     self::save_batch_to_db($batch);
     \Podlove\Analytics\DownloadIntentCleanup::cleanup_download_intents();
     \Podlove\Cache\TemplateCache::get_instance()->setup_purge();
     wp_redirect(admin_url('admin.php?page=podlove_imexport_migration_handle&status=success'));
     exit;
 }
Example #13
0
 protected function __parseLog($file)
 {
     $items = array();
     $last = null;
     if (is_readable($file)) {
         header('content-type: text/plain');
         if (preg_match('/.gz$/', $file)) {
             $handle = gzopen($file, "r");
             $data = gzread($handle, Symphony::Configuration()->get('maxsize', 'log'));
             gzclose($handle);
         } else {
             $data = file_get_contents($file);
         }
         $lines = explode(PHP_EOL, $data);
         // Skip log info:
         while (count($lines)) {
             $line = trim(array_shift($lines));
             if ($line == '--------------------------------------------') {
                 break;
             }
         }
         // Create items:
         foreach ($lines as $line) {
             preg_match('/^(.*?) > (.*)/', trim($line), $matches);
             // New entry:
             if (count($matches) == 3) {
                 $message = htmlentities($matches[2]);
                 $items[] = (object) array('timestamp' => DateTimeObj::get(__SYM_DATETIME_FORMAT__, strtotime($matches[1])), 'message' => $message);
             }
         }
         // Reverse order:
         $items = array_reverse($items);
     }
     return $items;
 }
Example #14
0
/**
 * Compress file on disk
 *
 * @param	string	$source
 * @param	int		$level
 * @return	string|false
 */
function gzcompressfile($source, $level = false)
{
    if (file_exists($source)) {
        $dest = $source . '.gz';
        $mode = 'wb' . $level;
        $error = false;
        if ($fp_out = gzopen($dest, $mode)) {
            if ($fp_in = fopen($source, 'rb')) {
                while (!feof($fp_in)) {
                    gzwrite($fp_out, fread($fp_in, 4096));
                }
                fclose($fp_in);
            } else {
                $error = true;
            }
            gzclose($fp_out);
        } else {
            $error = true;
        }
        if ($error) {
            return false;
        }
        return $dest;
    }
    return false;
}
 public static function update_database()
 {
     set_time_limit(0);
     $outFile = self::get_upload_file_path();
     // for download_url()
     require_once ABSPATH . 'wp-admin/includes/file.php';
     $tmpFile = \download_url(self::SOURCE_URL);
     if (is_wp_error($tmpFile)) {
         die($tmpFile->get_error_message());
     }
     $zh = gzopen($tmpFile, 'rb');
     $h = fopen($outFile, 'wb');
     if (!$zh) {
         die('Downloaded file could not be opened for reading.');
     }
     if (!$h) {
         die(sprintf('Database could not be written (%s).', $outFile));
     }
     while (!gzeof($zh)) {
         fwrite($h, gzread($zh, 4096));
     }
     gzclose($zh);
     fclose($h);
     unlink($tmpFile);
     if (!self::is_db_valid()) {
         die(sprintf('Checksum does not match (%s).', $outFile));
     }
 }
function backwpup_read_logheader($logfile)
{
    $headers = array("backwpup_version" => "version", "backwpup_logtime" => "logtime", "backwpup_errors" => "errors", "backwpup_warnings" => "warnings", "backwpup_jobid" => "jobid", "backwpup_jobname" => "name", "backwpup_jobtype" => "type", "backwpup_jobruntime" => "runtime", "backwpup_backupfilesize" => "backupfilesize");
    if (!is_readable($logfile)) {
        return false;
    }
    //Read file
    if (substr($logfile, -3) == ".gz") {
        $fp = gzopen($logfile, 'r');
        $file_data = gzread($fp, 1536);
        // Pull only the first 1,5kiB of the file in.
        gzclose($fp);
    } else {
        $fp = fopen($logfile, 'r');
        $file_data = fread($fp, 1536);
        // Pull only the first 1,5kiB of the file in.
        fclose($fp);
    }
    //get data form file
    foreach ($headers as $keyword => $field) {
        preg_match('/(<meta name="' . $keyword . '" content="(.*)" \\/>)/i', $file_data, $content);
        if (!empty($content)) {
            $joddata[$field] = $content[2];
        } else {
            $joddata[$field] = '';
        }
    }
    if (empty($joddata['logtime'])) {
        $joddata['logtime'] = filectime($logfile);
    }
    return $joddata;
}
Example #17
0
 public function animetitlesUpdate()
 {
     $pdo = $this->pdo;
     $lastUpdate = $pdo->queryOneRow('SELECT max(unixtime) as utime FROM animetitles');
     if (isset($lastUpdate['utime']) && time() - $lastUpdate['utime'] < 604800) {
         if ($this->echooutput) {
             echo "\n";
             echo $this->c->info("Last update occurred less than 7 days ago, skipping full dat file update.\n\n");
         }
         return;
     }
     if ($this->echooutput) {
         echo $this->c->header("Updating animetitles by grabbing full dat AniDB dump.\n\n");
     }
     $zh = gzopen('http://anidb.net/api/anime-titles.dat.gz', 'r');
     preg_match_all('/(\\d+)\\|\\d\\|.+\\|(.+)/', gzread($zh, '10000000'), $animetitles);
     if (!$animetitles) {
         return false;
     }
     $pdo->queryExec('DELETE FROM animetitles WHERE anidbid IS NOT NULL');
     if ($this->echooutput) {
         echo $this->c->header("Total of " . count($animetitles[1]) . " titles to add\n\n");
     }
     for ($loop = 0; $loop < count($animetitles[1]); $loop++) {
         $pdo->queryInsert(sprintf('INSERT IGNORE INTO animetitles (anidbid, title, unixtime) VALUES (%d, %s, %d)', $animetitles[1][$loop], $pdo->escapeString(html_entity_decode($animetitles[2][$loop], ENT_QUOTES, 'UTF-8')), time()));
     }
     if ($loop % 2500 == 0 && $this->echooutput) {
         echo $this->c->header("Completed Processing " . $loop . " titles.\n\n");
     }
     gzclose($zh);
     if ($this->echooutput) {
         echo $this->c->header("Completed animetitles update.\n\n");
     }
 }
 function gzpassthru($fp)
 {
     while (!gzeof($fp)) {
         print gzred($fp, 1 << 20);
     }
     gzclose($fp);
 }
Example #19
0
 /**
  * Gzip a file
  *
  * @param string $sSourceFile Path to the source file
  * @param string $sDestinationFile [optional] Path to save the zip contents.
  * <p>
  * If NULL, the default value is $this->getDefaultDestinationFilename($sSourceFile)
  * </p>
  *
  * @return string Path to the saved zip file
  *
  * @throws FileOpenException if there is any error opening the source or output files
  * @throws FileReadException if there is an error reading the source file
  * @throws FileWriteException if there is an error writing the output file
  */
 public function zip($sSourceFile, $sDestinationFile = null)
 {
     if ($sDestinationFile === null) {
         $sDestinationFile = $this->getDefaultDestinationFilename($sSourceFile);
     }
     if (!($fh = fopen($sSourceFile, 'rb'))) {
         throw new FileOpenException($sSourceFile);
     }
     if (!($zp = gzopen($sDestinationFile, 'wb9'))) {
         throw new FileOpenException($sDestinationFile);
     }
     while (!feof($fh)) {
         $data = fread($fh, static::READ_SIZE);
         if (false === $data) {
             throw new FileReadException($sSourceFile);
         }
         $sz = strlen($data);
         if ($sz !== gzwrite($zp, $data, $sz)) {
             throw new FileWriteException($sDestinationFile);
         }
     }
     gzclose($zp);
     fclose($fh);
     return $sDestinationFile;
 }
Example #20
0
/**
 * Pimcore
 *
 * This source file is available under two different licenses:
 * - GNU General Public License version 3 (GPLv3)
 * - Pimcore Enterprise License (PEL)
 * Full copyright and license information is available in
 * LICENSE.md which is distributed with this source code.
 *
 * @copyright  Copyright (c) 2009-2016 pimcore GmbH (http://www.pimcore.org)
 * @license    http://www.pimcore.org/license     GPLv3 and PEL
 */
function gzcompressfile($source, $level = null, $target = null)
{
    // this is a very memory efficient way of gzipping files
    if ($target) {
        $dest = $target;
    } else {
        $dest = $source . '.gz';
    }
    $mode = 'wb' . $level;
    $error = false;
    $fp_out = gzopen($dest, $mode);
    $fp_in = fopen($source, 'rb');
    if ($fp_out && $fp_in) {
        while (!feof($fp_in)) {
            gzwrite($fp_out, fread($fp_in, 1024 * 512));
        }
        fclose($fp_in);
        gzclose($fp_out);
    } else {
        $error = true;
    }
    if ($error) {
        return false;
    } else {
        return $dest;
    }
}
 function fclose($fp)
 {
     if ($this->has_gzip()) {
         return gzclose($fp);
     }
     return fclose($fp);
 }
 private function _compress($file, $content, $gzip = true)
 {
     if ($gzip) {
         $fh = gzopen($file, 'wb');
         if (!$fh) {
             throw new RuntimeException('Unable to open ' . $file . ' for writing.');
         }
         gzwrite($fh, $content);
         gzclose($fh);
         $newFile = $file . '.gz';
         if (rename($file, $newFile)) {
             self::$_tempFiles[] = $newFile;
         } else {
             throw new RuntimeException('Unable to rename ' . $file . ' to ' . $newFile . '.');
         }
     } else {
         $newFile = $file . '.zip';
         $zip = new ZipArchive();
         $res = $zip->open($newFile, ZipArchive::CREATE);
         if ($res === true) {
             self::$_tempFiles[] = $newFile;
             $zip->addFromString(basename($file), $content);
             // In this case the original file isn't necessary
             unlink($file);
             $zip->close();
         } else {
             throw new RuntimeException('Got error code ' . $res . ' when attempting to open ' . 'zip archive ' . $newFile . '.');
         }
     }
     // Just to make sure our subsequent assertions aren't false positives
     $this->assertFalse(file_exists($file));
     return $newFile;
 }
 /**
  * {@inheritdoc}
  */
 public function clearHandle()
 {
     if ($this->handle !== null) {
         gzclose($this->handle);
         $this->handle = null;
     }
 }
Example #24
0
 public function end()
 {
     $src = ob_get_clean();
     $fp = gzopen($this->fragment, 'w9');
     gzwrite($fp, $src, strlen($src));
     gzclose($fp);
     echo $src;
 }
Example #25
0
 public function writeCompressedSample($filename, $content)
 {
     $fp = gzopen('test/samples/' . $filename, 'w9') or die("can't open: {$php_errormsg}");
     if (-1 == gzwrite($fp, $content)) {
         die("can't write: {$php_errormsg}");
     }
     gzclose($fp);
 }
Example #26
0
	public function close()
	{
		if ((! is_null($this->handle)) && ($this->handle !== false))
		{
			gzclose($this->handle);
		}
		$this->__construct();
	}
 function process($tmp_filename)
 {
     $output_file = $tmp_filename . '.gz';
     $file = gzopen($output_file, "wb");
     gzwrite($file, file_get_contents($tmp_filename));
     gzclose($file);
     unlink($tmp_filename);
     return $output_file;
 }
Example #28
0
 private function buildGZFile($xmlFile, $xml)
 {
     if (function_exists('gzopen') && function_exists('gzwrite') && function_exists('gzclose')) {
         $gz = gzopen($xmlFile . '.gz', 'w');
         gzwrite($gz, $xml);
         gzclose($gz);
     }
     return;
 }
Example #29
0
function fcloseWrapper($fp)
{
    global $gzipEnabled;
    if ($gzipEnabled) {
        return gzclose($fp);
    } else {
        return fclose($fp);
    }
}
Example #30
0
function compress($file, $dest)
{
    $fp = fopen($file, "r");
    $data = fread($fp, filesize($file));
    fclose($fp);
    $zp = gzopen($dest, "w9");
    gzwrite($zp, $data);
    gzclose($zp);
}