/usr/share/php/kohana2/modules/archive/libraries/Archive.php is in libkohana2-modules-php 2.3.4-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | <?php defined('SYSPATH') OR die('No direct access allowed.');
/**
* Archive library.
*
* $Id: Archive.php 4367 2009-05-27 21:23:57Z samsoir $
*
* @package Archive
* @author Kohana Team
* @copyright (c) 2007-2008 Kohana Team
* @license http://kohanaphp.com/license.html
*/
class Archive_Core {
// Files and directories
protected $paths;
// Driver instance
protected $driver;
/**
* Loads the archive driver.
*
* @throws Kohana_Exception
* @param string type of archive to create
* @return void
*/
public function __construct($type = NULL)
{
$type = empty($type) ? 'zip' : $type;
// Set driver name
$driver = 'Archive_'.ucfirst($type).'_Driver';
// Load the driver
if ( ! Kohana::auto_load($driver))
throw new Kohana_Exception('core.driver_not_found', $type, get_class($this));
// Initialize the driver
$this->driver = new $driver();
// Validate the driver
if ( ! ($this->driver instanceof Archive_Driver))
throw new Kohana_Exception('core.driver_implements', $type, get_class($this), 'Archive_Driver');
Kohana::log('debug', 'Archive Library initialized');
}
/**
* Adds files or directories, recursively, to an archive.
*
* @param string file or directory to add
* @param string name to use for the given file or directory
* @param bool add files recursively, used with directories
* @return object
*/
public function add($path, $name = NULL, $recursive = NULL)
{
// Normalize to forward slashes
$path = str_replace('\\', '/', $path);
// Set the name
empty($name) and $name = $path;
if (is_dir($path))
{
// Force directories to end with a slash
$path = rtrim($path, '/').'/';
$name = rtrim($name, '/').'/';
// Add the directory to the paths
$this->paths[] = array($path, $name);
if ($recursive === TRUE)
{
$dir = opendir($path);
while (($file = readdir($dir)) !== FALSE)
{
// Do not add hidden files or directories
if ($file[0] === '.')
continue;
// Add directory contents
$this->add($path.$file, $name.$file, TRUE);
}
closedir($dir);
}
}
else
{
$this->paths[] = array($path, $name);
}
return $this;
}
/**
* Creates an archive and saves it into a file.
*
* @throws Kohana_Exception
* @param string archive filename
* @return boolean
*/
public function save($filename)
{
// Get the directory name
$directory = pathinfo($filename, PATHINFO_DIRNAME);
if ( ! is_writable($directory))
throw new Kohana_Exception('archive.directory_unwritable', $directory);
if (is_file($filename))
{
// Unable to write to the file
if ( ! is_writable($filename))
throw new Kohana_Exception('archive.filename_conflict', $filename);
// Remove the file
unlink($filename);
}
return $this->driver->create($this->paths, $filename);
}
/**
* Creates a raw archive file and returns it.
*
* @return string
*/
public function create()
{
return $this->driver->create($this->paths);
}
/**
* Forces a download of a created archive.
*
* @param string name of the file that will be downloaded
* @return void
*/
public function download($filename)
{
download::force($filename, $this->driver->create($this->paths));
}
} // End Archive
|