io.han.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520
  1. <?php
  2. /*******************************************************************
  3. *
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. *
  7. * @Filename io.han.php $
  8. *
  9. *
  10. * @Date 2011-09-28 19:16:47 1467070159 594879472 15049 $
  11. *******************************************************************/
  12. /**
  13. * 文件名:io.han.php
  14. * 版本号:JishiGou 1.0.0 beta
  15. * 最后修改时间: 2010年6月12日
  16. * 功能描述:磁盘的检测,读取,以及文件目录的操作
  17. */
  18. class IoHandler
  19. {
  20. function __construct()
  21. {
  22. }
  23. function Compare($file1, $file2)
  24. {
  25. if (md5_file($file1) == md5_file($file2))
  26. {
  27. Return true;
  28. }
  29. else
  30. {
  31. Return false;
  32. }
  33. }
  34. function SizeConvert($filesize)
  35. {
  36. if ($filesize >= 1073741824)
  37. {
  38. $filesize = round($filesize / 1073741824 , 2) . "G";
  39. }elseif ($filesize >= 1048576)
  40. {
  41. $filesize = round($filesize / 1048576, 2) . "M";
  42. }elseif ($filesize >= 1024)
  43. {
  44. $filesize = round($filesize / 1024, 2) . "k";
  45. }
  46. else
  47. {
  48. $filesize = $filesize . "b";
  49. }
  50. Return $filesize;
  51. }
  52. function ConvertSize($filesize)
  53. {
  54. Return IoHandler::SizeConvert($filesize);
  55. }
  56. function ReadDir($dir, $children = 0)
  57. {
  58. if(is_dir($dir) === false)Return false;;
  59. $dir = rtrim(str_replace("\\", "/", $dir), "/") ;
  60. $dirfp = @opendir($dir);
  61. if ($dirfp === false)
  62. {
  63. trigger_error("{$dir}目录名不存在或者无效,请检查您的目录设置!<br>", E_USER_NOTICE);
  64. Return false;
  65. }
  66. while (false !== ($file = readdir($dirfp)))
  67. {
  68. if ($file != '.' and $file != '..')
  69. {
  70. $abspath = $dir . '/' . $file;
  71. if (is_file($abspath) !== false)
  72. {
  73. $files[] = $abspath ;
  74. }
  75. if(is_dir($abspath) !== false)
  76. {
  77. if ($children == '1')
  78. {
  79. $files = array_merge((array) $files, (array) IoHandler::ReadDir($abspath, $children));
  80. }
  81. }
  82. }
  83. }
  84. closedir($dirfp);
  85. return (array) $files;
  86. }
  87. function ReadFile($file_name)
  88. {
  89. if (is_readable($file_name) != false)
  90. {
  91. if (function_exists('file_get_contents') != false)
  92. {
  93. $file_contents = file_get_contents($file_name);
  94. Return $file_contents;
  95. }
  96. else
  97. {
  98. $file_handler = @fopen($file_name, 'rb');
  99. if ($file_handler)
  100. {
  101. $file_contents = @fread($file_handler, filesize($file_name));
  102. fclose($file_handler);
  103. Return $file_contents;
  104. }
  105. else
  106. {
  107. Return false;
  108. }
  109. }
  110. }
  111. else
  112. {
  113. Return false;
  114. }
  115. }
  116. function WriteFile($file_name, $file_contents, $mode = 'wb')
  117. {
  118. if (($mode == 'w' || $mode == 'wb') && function_exists('file_put_contents'))
  119. {
  120. Return file_put_contents($file_name, $file_contents);
  121. }
  122. else
  123. {
  124. $file_handler = @fopen($file_name, $mode);
  125. if ($file_handler)
  126. {
  127. $len=fwrite($file_handler, $file_contents);
  128. fclose($file_handler);
  129. Return $len;
  130. }
  131. else
  132. {
  133. Return false;
  134. }
  135. }
  136. }
  137. function GetDiskList()
  138. {
  139. if (strpos(PHP_OS, 'WIN') === false)
  140. {
  141. Return false;
  142. }
  143. $disks = range('c', 'w');
  144. foreach($disks as $disk)
  145. {
  146. $disk = $disk . ":";
  147. if (is_dir($disk) !== false && disk_total_space($disk) > 0)
  148. {
  149. $disk_list[] = $disk;
  150. }
  151. }
  152. Return $disk_list;
  153. }
  154. function GetDiskSpace($disk_name, $convert_size = false)
  155. {
  156. if (is_dir($disk_name) === false)
  157. {
  158. Return false;
  159. }
  160. $disk_space['total'] = (float)disk_total_space($disk_name);
  161. $disk_space['free'] = (float)disk_free_space($disk_name);
  162. $disk_space['used'] = $disk_space['total'] - $disk_space['free'];
  163. @$disk_space['percent'] = (float)round($disk_space['used'] / $disk_space['total'] * 100);
  164. if ($convert_size === false)
  165. {
  166. Return $disk_space;
  167. }
  168. $disk_space['total'] = IoHandler::ConvertSize($disk_space['total']);
  169. $disk_space['free'] = IoHandler::ConvertSize($disk_space['free']);
  170. $disk_space['used'] = IoHandler::ConvertSize($disk_space['used']);
  171. $disk_space['percent'] = $disk_space['percent'] . '%';
  172. Return $disk_space;
  173. }
  174. function GetPatternFiles($path, $pattern)
  175. {
  176. if (is_dir($path) == false)
  177. {
  178. Return false;
  179. }
  180. $file_pattern = rtrim($path, '/') . "/"."*.{" . str_replace("|", ",", $pattern) . "}";
  181. $file_list = glob($file_pattern, GLOB_BRACE);
  182. if (count($file_list) == 0)
  183. {
  184. Return false;
  185. }
  186. Return $file_list;
  187. }
  188. function CopyFile($from, $to)
  189. {
  190. $copy_count = 0;
  191. if (is_string($from))
  192. {
  193. if (copy($from, $to . '/' . IoHandler::BaseName($from)))
  194. {
  195. $copy_count = 1;
  196. Return $copy_count;
  197. }
  198. }
  199. else
  200. {
  201. if (is_array($from))
  202. {
  203. if (is_dir($to) == false)
  204. {
  205. if (IoHandler::MakeDir($to) == false)
  206. {
  207. Return $copy_count;
  208. }
  209. }
  210. foreach($from as $file_name)
  211. {
  212. if (copy($file_name, $to . '/' . IoHandler::BaseName($file_name)))
  213. {
  214. $copy_count++;
  215. }
  216. }
  217. }
  218. }
  219. Return $copy_count;
  220. }
  221. function DeleteFile($file)
  222. {
  223. if('' == trim($file)) return ;
  224. $delete = @unlink($file);
  225. clearstatcache();
  226. @$filesys = preg_replace("~\/+~","\\",$file);
  227. if(is_file($filesys) and file_exists($filesys))
  228. {
  229. $delete = @system("del $filesys");
  230. clearstatcache();
  231. if(file_exists($file))
  232. {
  233. $delete = @chmod($file, 0777);
  234. $delete = @unlink($file);
  235. $delete = @system("del $filesys");
  236. }
  237. }
  238. clearstatcache();
  239. if(file_exists($file))
  240. {
  241. return false;
  242. }
  243. else
  244. {
  245. return true;
  246. }
  247. }
  248. function MakeDir($dir_name, $mode = 0777)
  249. {
  250. if(false!==strpos($dir_name,'\\'))
  251. {
  252. $dir_name = str_replace("\\", "/", $dir_name);
  253. }
  254. if(false!==strpos($dir_name,'/'.'/'))
  255. {
  256. $dir_name = preg_replace("#(/"."/+)#", "/", $dir_name);
  257. }
  258. if (is_dir($dir_name))
  259. {
  260. return true;
  261. }
  262. $dirs = '';
  263. $_dir_name = $dir_name;
  264. $dir_name = explode("/", $dir_name);
  265. if('/'==$_dir_name{0})
  266. {
  267. $dirs = '/';
  268. }
  269. foreach($dir_name as $dir)
  270. {
  271. $dir = trim($dir);
  272. if ('' != $dir)
  273. {
  274. $dirs .= $dir;
  275. if ('..' == $dir || '.' == $dir)
  276. {
  277. $dirs .= '/';
  278. continue;
  279. }
  280. }
  281. else
  282. {
  283. continue;
  284. }
  285. $dirs .= '/';
  286. if (!@is_dir($dirs))
  287. {
  288. @mkdir($dirs, $mode);
  289. }
  290. }
  291. clearstatcache();
  292. $ret = is_dir($_dir_name);
  293. return $ret;
  294. }
  295. function ClearDir($dir_name)
  296. {
  297. clearstatcache();
  298. if(is_dir($dir_name) == false)Return false;
  299. $dir_handle = opendir($dir_name);
  300. while(($file = readdir($dir_handle)) !== false)
  301. {
  302. if($file != '.' and $file != "..")
  303. {
  304. clearstatcache();
  305. if(is_dir($dir_name . '/' . $file))
  306. {
  307. IoHandler::RemoveDir($dir_name . '/' . $file);
  308. }
  309. if(is_file($dir_name . '/' . $file))
  310. {
  311. @unlink($dir_name . '/' . $file);
  312. }
  313. }
  314. }
  315. closedir($dir_handle);
  316. Return true;
  317. }
  318. function RemoveDir($dir_name)
  319. {
  320. clearstatcache();
  321. if(is_dir($dir_name) == false)Return false;
  322. $dir_handle = opendir($dir_name);
  323. while(($file = readdir($dir_handle)) !== false)
  324. {
  325. if($file != '.' and $file != "..")
  326. {
  327. clearstatcache();
  328. if(is_dir($dir_name . '/' . $file))
  329. {
  330. IoHandler::RemoveDir($dir_name . '/' . $file);
  331. }
  332. if(is_file($dir_name . '/' . $file))
  333. {
  334. IoHandler::DeleteFile($dir_name . '/' . $file);
  335. }
  336. }
  337. }
  338. closedir($dir_handle);
  339. rmdir($dir_name);
  340. Return true;
  341. }
  342. function CopyDir($from, $to, $children = true)
  343. {
  344. if(is_dir($from) == false)Return false;
  345. if(is_dir($to) == false)
  346. {
  347. if(IoHandler::MakeDir($to) == false)
  348. {
  349. Return false;
  350. }
  351. }
  352. $from_handle = opendir($from);
  353. while(($file = readdir($from_handle)) !== false)
  354. {
  355. if($file != '.' and $file != '..')
  356. {
  357. $from_abs_path = $from . '/' . $file;
  358. $to_abs_path = $to . '/' . $file;
  359. if(is_dir($from_abs_path) != false and $children == true)
  360. {
  361. IoHandler::MakeDir($to_abs_path);
  362. IoHandler::CopyDir($from_abs_path, $to_abs_path, $children);
  363. }
  364. if(is_file($from_abs_path) != false)
  365. {
  366. if(copy($from_abs_path, $to_abs_path) == false)
  367. {
  368. Return false;
  369. }
  370. }
  371. }
  372. }
  373. closedir($from_handle);
  374. Return true;
  375. }
  376. function FilePermission($file_name)
  377. {
  378. Return substr(base_convert(fileperms($file_name), 10, 8), -4);
  379. }
  380. function FileExt($file_name, $no_case = 1)
  381. {
  382. $ext = trim(substr($file_name, strrpos($file_name, '.')));
  383. if($no_case)
  384. {
  385. $ext = strtolower($ext);
  386. }
  387. return $ext;
  388. }
  389. function BaseName($path, $suffix = false)
  390. {
  391. $name = trim($path);
  392. $name = str_replace('\\', '/', $name);
  393. if(strpos($name, '/') !== false)
  394. {
  395. $name = substr(strrchr($path, '/'), 1);
  396. }
  397. else
  398. {
  399. $name = ltrim($path, '.');
  400. }
  401. if($suffix)
  402. {
  403. $suffix = strrchr($name, '.');
  404. $name = str_replace($suffix, '', $name);
  405. }
  406. return $name;
  407. }
  408. function updateFileArray($file, $name, $array)
  409. {
  410. $out = "<?php\n";
  411. foreach($array as $key => $val)
  412. {
  413. $out .= "\${$name}['{$key}'] = '{$val}';\n";
  414. }
  415. $out .= '?>';
  416. if(IoHandler::WriteFile($file, $out, "wb"))
  417. {
  418. Return true;
  419. }
  420. else
  421. {
  422. Return false;
  423. }
  424. }
  425. function ReadDiskSpace($drive)
  426. {
  427. $disk_space['size']['total'] = disk_total_space($drive);
  428. $disk_space['size']['free'] = disk_free_space($drive);
  429. $disk_space['size']['used'] = $disk_space['size']['total'] - $disk_space['size']['free'];
  430. $disk_space['size_converted']['used'] = IoHandler::SizeConvert($disk_space['size']['total'] - $disk_space['size']['free']);
  431. $disk_space['size_converted']['total'] = IoHandler::SizeConvert($disk_space['size']['total']);
  432. $disk_space['size_converted']['free'] = IoHandler::SizeConvert($disk_space['size']['free']);
  433. Return $disk_space;
  434. }
  435. function initPath($path)
  436. {
  437. $return = $path;
  438. $path = (substr($path, -1) == '/') ? $path : dirname($path);
  439. if ( !is_dir($path) )
  440. {
  441. $list = explode('/', $path);
  442. $path = (substr($path, 0, 1) == '/') ? '/' : '';
  443. foreach ($list as $i => $dir)
  444. {
  445. if ($dir == '') continue;
  446. $path .= $dir.'/';
  447. clearstatcache();
  448. if ( !is_dir($path) )
  449. {
  450. @mkdir($path, 0777);
  451. }
  452. }
  453. }
  454. return $return;
  455. }
  456. }
  457. ?>