PageRenderTime 58ms CodeModel.GetById 29ms RepoModel.GetById 1ms app.codeStats 0ms

/upload/libraries/file.class.php

https://github.com/sahilbabu/phpb2b
PHP | 367 lines | 356 code | 3 blank | 8 comment | 15 complexity | 32c864d524557aeaacfa36ddb068084a MD5 | raw file
Possible License(s): LGPL-2.1
  1. <?php
  2. /**
  3. * [PHPB2B] Copyright (C) 2007-2099, Ualink Inc. All Rights Reserved.
  4. * The contents of this file are subject to the License; you may not use this file except in compliance with the License.
  5. *
  6. * @version $Revision: 2075 $
  7. */
  8. define('GLOB_NODIR',256);
  9. define('GLOB_PATH',512);
  10. define('GLOB_NODOTS',1024);
  11. define('GLOB_RECURSE',2048);
  12. if (!function_exists('fnmatch')) {
  13. function fnmatch($pattern, $string) {
  14. return @preg_match('/^' . strtr(addcslashes($pattern, '\\.+^$(){}=!<>|'), array('*' => '.*', '?' => '.?')) . '$/i', $string);
  15. }
  16. }
  17. class Files extends PbObject
  18. {
  19. var $mFolders = array();
  20. var $mFiles = array();
  21. var $mDateTime = "Y-m-d H-i-s";
  22. var $mTimeOffset = 8;
  23. var $exclude = array();
  24. var $mode = 0777;
  25. var $handle = null;
  26. var $self = array();
  27. function add($name = null, $enum = null ) {
  28. if( isset($enum) )
  29. $this->self[$name] = $enum;
  30. else
  31. $this->self[$name] = end($this->self) + 1;
  32. }
  33. function Files(){
  34. parent::__construct();
  35. }
  36. function filename_safe($name) {
  37. $except = array('\\', '/', ':', '*', '?', '"', '<', '>', '|');
  38. return str_replace($except, '', $name);
  39. }
  40. function getModes($mod) {
  41. $modVal = array(
  42. "0444" => 292,
  43. "0445" => 293,
  44. "0446" => 294,
  45. "0447" => 295,
  46. "0454" => 300,
  47. "0455" => 301,
  48. "0456" => 302,
  49. "0457" => 303,
  50. "0464" => 308,
  51. "0465" => 309,
  52. "0466" => 310,
  53. "0467" => 311,
  54. "0474" => 316,
  55. "0475" => 317,
  56. "0476" => 318,
  57. "0477" => 319,
  58. "0544" => 356,
  59. "0545" => 357,
  60. "0546" => 358,
  61. "0547" => 359,
  62. "0554" => 364,
  63. "0555" => 365,
  64. "0556" => 366,
  65. "0557" => 367,
  66. "0564" => 372,
  67. "0565" => 373,
  68. "0566" => 374,
  69. "0567" => 375,
  70. "0574" => 380,
  71. "0575" => 381,
  72. "0576" => 382,
  73. "0577" => 383,
  74. "0644" => 420,
  75. "0645" => 421,
  76. "0646" => 422,
  77. "0647" => 423,
  78. "0654" => 428,
  79. "0655" => 429,
  80. "0656" => 430,
  81. "0657" => 431,
  82. "0664" => 436,
  83. "0665" => 437,
  84. "0666" => 438,
  85. "0667" => 439,
  86. "0674" => 444,
  87. "0675" => 445,
  88. "0676" => 446,
  89. "0677" => 447,
  90. "0744" => 484,
  91. "0745" => 485,
  92. "0746" => 486,
  93. "0747" => 487,
  94. "0754" => 492,
  95. "0755" => 493,
  96. "0756" => 494,
  97. "0757" => 495,
  98. "0764" => 500,
  99. "0765" => 501,
  100. "0766" => 502,
  101. "0767" => 503,
  102. "0774" => 508,
  103. "0775" => 509,
  104. "0776" => 510,
  105. "0777" => 511);
  106. return $modVal[$mod];
  107. }
  108. function __construct(){
  109. $args = func_get_args();
  110. for( $i=0, $n=count($args); $i<$n; $i++ )
  111. $this->add($args[$i]);
  112. $this->Files();
  113. }
  114. function nofate_mkdir($dir){
  115. $u=umask(0);
  116. $r=mkdir($dir,$this->mode);
  117. umask($u);
  118. return $r;
  119. }
  120. function moveDir($oldpath, $newpath)
  121. {
  122. if (function_exists("rename")) {
  123. rename($oldpath, $newpath);
  124. }
  125. }
  126. function dir_writeable($dir) {
  127. if(!is_dir($dir)) {
  128. @mkdir($dir, $this->mode);
  129. }
  130. if(is_dir($dir)) {
  131. if($fp = @fopen("$dir/pb_sample.txt", 'w')) {
  132. @fclose($fp);
  133. @unlink("$dir/pb_sample.txt");
  134. $writeable = true;
  135. } else {
  136. $writeable = false;
  137. }
  138. }else{
  139. return is_writable($dir);
  140. }
  141. return $writeable;
  142. }
  143. function file_writeable($file_name)
  144. {
  145. return is_writable($file_name);
  146. }
  147. function mkDirs ($dir) {
  148. $dir = str_replace("\\","/",$dir);
  149. $dirs = explode('/', $dir);
  150. $total = count($dirs);
  151. $temp = '';
  152. for($i=0; $i<$total; $i++) {
  153. $temp .= $dirs[$i].'/';
  154. if (!is_dir($temp)) {
  155. if (!@mkdir($temp)) return;
  156. @chmod($temp, 0777);
  157. }
  158. }
  159. }
  160. function rmDirs ($dir, $rmself = false, $rmdir = false) {
  161. if(substr($dir,-1)=="/"){
  162. $dir=substr($dir,0,-1);
  163. }
  164. if(!file_exists($dir)||!is_dir($dir)){
  165. return false;
  166. } elseif(!is_readable($dir)){
  167. return false;
  168. } else {
  169. $dirs= opendir($dir);
  170. while (false !== ($entry=readdir($dirs))) {
  171. if ($entry!="." && $entry!=".." && $entry!=".svn" && !in_array($entry, $this->exclude)) {
  172. $path = $dir."/".$entry;
  173. if(is_dir($path)){
  174. if ($rmdir) {
  175. rmdir($path);
  176. }else{
  177. $this->rmDirs($path);
  178. }
  179. } else {
  180. unlink($path);
  181. }
  182. }
  183. }
  184. closedir($dirs);
  185. if($rmself){
  186. if(!rmdir($dir)){
  187. return false;
  188. }
  189. return true;
  190. }
  191. }
  192. }
  193. function delFile ($file) {
  194. if ( !is_file($file) ) return false;
  195. @unlink($file);
  196. return true;
  197. }
  198. function createFile ($file, $content="", $mode="w") {
  199. if ( in_array($mode, array("w", "a")) ) $mode = "w";
  200. if ( !$hd = fopen($file, $mode) ) return false;
  201. if ( !false === fwrite($hd, $content) ) return false;
  202. return true;
  203. }
  204. function getFolders ($dir) {
  205. $this->mFolders = Array();
  206. if(substr($dir,-1)=="/"){
  207. $dir=substr($dir,0,-1);
  208. }
  209. if(!file_exists($dir)||!is_dir($dir)){
  210. return false;
  211. }
  212. $dirs= opendir($dir);
  213. $i = 0;
  214. while (false!==($entry=readdir($dirs))) {
  215. if ($entry!="." && $entry!=".." && $entry!=".svn") {
  216. $path=$dir."/".$entry;
  217. if(is_dir($path)){
  218. $filetime = @filemtime($path);
  219. $filetime = @date($this->mDateTime, $filetime+3600*$this->mTimeOffset);
  220. $this->mFolders[$i]['name'] = $entry;
  221. $this->mFolders[$i]['filetime'] = $filetime;
  222. $this->mFolders[$i]['filesize'] = 0;
  223. $i++;
  224. }
  225. }
  226. }
  227. return $this->mFolders;
  228. }
  229. function getFiles ($dir) {
  230. $this->mFiles = Array();
  231. if(substr($dir,-1)=="/"){
  232. $dir=substr($dir,0,-1);
  233. }
  234. if(!file_exists($dir)||!is_dir($dir)){
  235. return false;
  236. }
  237. $dirs= opendir($dir);
  238. $i = 0;
  239. while (false!==($entry=readdir($dirs))) {
  240. if ($entry!="."&&$entry!="..") {
  241. $path=$dir."/".$entry;
  242. if(is_file($path)){
  243. $filetime = @filemtime($path);
  244. $filetime = @date($this->mDateTime, $filetime+3600*$this->mTimeOffset);
  245. $filesize = $this->getFileSize($path);
  246. $this->mFiles[$i]['name'] = $entry;
  247. $this->mFiles[$i]['filetime'] = $filetime;
  248. $this->mFiles[$i]['filesize'] = $filesize;
  249. $i++;
  250. }
  251. }
  252. }
  253. return $this->mFiles;
  254. }
  255. function getFileSize ($file) {
  256. if ( !is_file($file) ) return 0;
  257. $f1 = $f2 = "";
  258. $filesize = @filesize("$file");
  259. if ( $filesize > 1073741824 ) {
  260. } elseif ( $filesize > 1048576 ) {
  261. $filesize = $filesize / 1048576;
  262. list($f1, $f2) = explode(".",$filesize);
  263. $filesize = $f1.".".substr($f2, 0, 2)."MB";
  264. } elseif ( $filesize > 1024 ) {
  265. $filesize = $filesize / 1024;
  266. list($f1, $f2) = explode(".",$filesize);
  267. $filesize = $f1.".".substr($f2, 0, 2)."KB";
  268. } else {
  269. $filesize = $filesize."Bytes";
  270. }
  271. return $filesize;
  272. }
  273. /**
  274. * Remove the directory and its content (all files and subdirectories).
  275. * @param string $dir the directory name
  276. */
  277. function rmrf($dir) {
  278. foreach (glob($dir) as $file) {
  279. if (is_dir($file)) {
  280. $this->rmrf("$file/*");
  281. rmdir($file);
  282. } else {
  283. unlink($file);
  284. }
  285. }
  286. }
  287. /**
  288. * $str = "foobar and blob\netc.";
  289. * match_wildcard('foo*', $str), // TRUE
  290. */
  291. function match_wildcard( $wildcard_pattern, $haystack ) {
  292. $regex = str_replace(
  293. array("\*", "\?"), // wildcard chars
  294. array('.*','.'), // regexp chars
  295. preg_quote($wildcard_pattern)
  296. );
  297. return preg_match('/^'.$regex.'$/is', $haystack);
  298. }
  299. function rfr($path,$match){
  300. static $deld = 0, $dsize = 0;
  301. $dirs = glob($path."*");
  302. $files = glob($path.$match);
  303. foreach($files as $file){
  304. if(is_file($file)){
  305. $dsize += filesize($file);
  306. unlink($file);
  307. $deld++;
  308. }
  309. }
  310. foreach($dirs as $dir){
  311. if(is_dir($dir)){
  312. $dir = basename($dir) . "/";
  313. $tihs->rfr($path.$dir,$match);
  314. }
  315. }
  316. return true;
  317. }
  318. function safe_glob($pattern, $flags=0) {
  319. $split=explode('/',str_replace('\\','/',$pattern));
  320. $mask=array_pop($split);
  321. $path=implode('/',$split);
  322. if (($dir=opendir($path))!==false) {
  323. $glob=array();
  324. while(($file=readdir($dir))!==false) {
  325. // Recurse subdirectories (GLOB_RECURSE)
  326. if( ($flags&GLOB_RECURSE) && is_dir($file) && (!in_array($file,array('.','..'))) )
  327. $glob = array_merge($glob, array_prepend($this->safe_glob($path.'/'.$file.'/'.$mask, $flags),
  328. ($flags&GLOB_PATH?'':$file.'/')));
  329. // Match file mask
  330. if (fnmatch($mask,$file)) {
  331. if ( ( (!($flags&GLOB_ONLYDIR)) || is_dir("$path/$file") )
  332. && ( (!($flags&GLOB_NODIR)) || (!is_dir($path.'/'.$file)) )
  333. && ( (!($flags&GLOB_NODOTS)) || (!in_array($file,array('.','..'))) ) )
  334. $glob[] = ($flags&GLOB_PATH?$path.'/':'') . $file . ($flags&GLOB_MARK?'/':'');
  335. }
  336. }
  337. closedir($dir);
  338. if (!($flags&GLOB_NOSORT)) sort($glob);
  339. return $glob;
  340. } else {
  341. return false;
  342. }
  343. }
  344. }
  345. ?>