Blame view
sources/lib/private/archive.php
2.99 KB
|
03e52840d
|
1 2 3 4 5 6 7 8 9 10 |
<?php
/**
* Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
abstract class OC_Archive{
/**
|
|
31b7f2792
|
11 |
* open any of the supported archive types |
|
6d9380f96
|
12 13 |
* @param string $path * @return OC_Archive|void |
|
03e52840d
|
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
*/
public static function open($path) {
$ext=substr($path, strrpos($path, '.'));
switch($ext) {
case '.zip':
return new OC_Archive_ZIP($path);
case '.gz':
case '.bz':
case '.bz2':
if(strpos($path, '.tar.')) {
return new OC_Archive_TAR($path);
}
break;
case '.tgz':
return new OC_Archive_TAR($path);
}
}
|
|
6d9380f96
|
31 32 33 |
/** * @param $source */ |
|
03e52840d
|
34 35 36 |
abstract function __construct($source); /** * add an empty folder to the archive |
|
6d9380f96
|
37 |
* @param string $path |
|
03e52840d
|
38 39 40 41 42 |
* @return bool */ abstract function addFolder($path); /** * add a file to the archive |
|
6d9380f96
|
43 44 |
* @param string $path * @param string $source either a local file or string data |
|
03e52840d
|
45 46 47 48 49 |
* @return bool */ abstract function addFile($path, $source=''); /** * rename a file or folder in the archive |
|
6d9380f96
|
50 51 |
* @param string $source * @param string $dest |
|
03e52840d
|
52 53 54 55 56 |
* @return bool */ abstract function rename($source, $dest); /** * get the uncompressed size of a file in the archive |
|
6d9380f96
|
57 |
* @param string $path |
|
03e52840d
|
58 59 60 61 62 |
* @return int */ abstract function filesize($path); /** * get the last modified time of a file in the archive |
|
6d9380f96
|
63 |
* @param string $path |
|
03e52840d
|
64 65 66 67 68 |
* @return int */ abstract function mtime($path); /** * get the files in a folder |
|
6d9380f96
|
69 |
* @param string $path |
|
03e52840d
|
70 71 72 73 |
* @return array */ abstract function getFolder($path); /** |
|
31b7f2792
|
74 |
* get all files in the archive |
|
03e52840d
|
75 76 77 78 79 |
* @return array */ abstract function getFiles(); /** * get the content of a file |
|
6d9380f96
|
80 |
* @param string $path |
|
03e52840d
|
81 82 83 84 85 |
* @return string */ abstract function getFile($path); /** * extract a single file from the archive |
|
6d9380f96
|
86 87 |
* @param string $path * @param string $dest |
|
03e52840d
|
88 89 90 91 92 |
* @return bool */ abstract function extractFile($path, $dest); /** * extract the archive |
|
6d9380f96
|
93 |
* @param string $dest |
|
03e52840d
|
94 95 96 97 98 |
* @return bool */ abstract function extract($dest); /** * check if a file or folder exists in the archive |
|
6d9380f96
|
99 |
* @param string $path |
|
03e52840d
|
100 101 102 103 104 |
* @return bool */ abstract function fileExists($path); /** * remove a file or folder from the archive |
|
6d9380f96
|
105 |
* @param string $path |
|
03e52840d
|
106 107 108 109 110 |
* @return bool */ abstract function remove($path); /** * get a file handler |
|
6d9380f96
|
111 112 |
* @param string $path * @param string $mode |
|
03e52840d
|
113 114 115 116 |
* @return resource */ abstract function getStream($path, $mode); /** |
|
31b7f2792
|
117 |
* add a folder and all its content |
|
03e52840d
|
118 |
* @param string $path |
|
6d9380f96
|
119 120 |
* @param string $source * @return boolean|null |
|
03e52840d
|
121 122 |
*/
function addRecursive($path, $source) {
|
|
31b7f2792
|
123 |
$dh = opendir($source); |
|
03e52840d
|
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
if(is_resource($dh)) {
$this->addFolder($path);
while (($file = readdir($dh)) !== false) {
if($file=='.' or $file=='..') {
continue;
}
if(is_dir($source.'/'.$file)) {
$this->addRecursive($path.'/'.$file, $source.'/'.$file);
}else{
$this->addFile($path.'/'.$file, $source.'/'.$file);
}
}
}
}
}
|