File.class.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. <?php
  2. namespace Util;
  3. /**
  4. * 文件及文件夹处理类
  5. */
  6. class File
  7. {
  8. /**
  9. * 创建目录
  10. * @param $dir 目录名
  11. * @return boolean true 成功, false 失败
  12. */
  13. public static function mk_dir($dir)
  14. {
  15. $dir = rtrim($dir, '/') . '/';
  16. if (!is_dir($dir)) {
  17. if (mkdir($dir, 0700) == false) {
  18. return false;
  19. }
  20. return true;
  21. }
  22. return true;
  23. }
  24. /**
  25. * 基于数组创建目录和文件
  26. * @param array $files 文件名数组
  27. */
  28. public static function create_dir_or_files($files)
  29. {
  30. foreach ($files as $key => $value) {
  31. if (substr($value, -1) == '/') {
  32. mkdir($value);
  33. } else {
  34. @file_put_contents($value, '');
  35. }
  36. }
  37. }
  38. /**
  39. * 读取文件内容
  40. * @param $filename 文件名
  41. * @return string 文件内容
  42. */
  43. public static function read_file($filename)
  44. {
  45. $content = '';
  46. if (function_exists('file_get_contents')) {
  47. @$content = file_get_contents($filename);
  48. } else {
  49. if (@$fp = fopen($filename, 'r')) {
  50. @$content = fread($fp, filesize($filename));
  51. @fclose($fp);
  52. }
  53. }
  54. return $content;
  55. }
  56. /**
  57. * 写文件
  58. * @param $filename 文件名
  59. * @param $writetext 文件内容
  60. * @param $openmod 打开方式
  61. * @return boolean true 成功, false 失败
  62. */
  63. public static function write_file($filename, $writetext, $openmod = 'w')
  64. {
  65. if (@$fp = fopen($filename, $openmod)) {
  66. flock($fp, 2);
  67. fwrite($fp, $writetext);
  68. fclose($fp);
  69. return true;
  70. } else {
  71. return false;
  72. }
  73. }
  74. /**
  75. * 删除目录
  76. * @param $dirName 原目录
  77. * @return boolean true 成功, false 失败
  78. */
  79. public static function del_dir($dirName)
  80. {
  81. if (!file_exists($dirName)) {
  82. return false;
  83. }
  84. $dir = opendir($dirName);
  85. while ($fileName = readdir($dir)) {
  86. $file = $dirName . '/' . $fileName;
  87. if ($fileName != '.' && $fileName != '..') {
  88. if (is_dir($file)) {
  89. self::del_dir($file);
  90. } else {
  91. unlink($file);
  92. }
  93. }
  94. }
  95. closedir($dir);
  96. return rmdir($dirName);
  97. }
  98. /**
  99. * 复制目录
  100. * @param $surDir 原目录
  101. * @param $toDir 目标目录
  102. * @return boolean true 成功, false 失败
  103. */
  104. public static function copy_dir($surDir, $toDir)
  105. {
  106. $surDir = rtrim($surDir, '/') . '/';
  107. $toDir = rtrim($toDir, '/') . '/';
  108. if (!file_exists($surDir)) {
  109. return false;
  110. }
  111. if (!file_exists($toDir)) {
  112. self::mk_dir($toDir);
  113. }
  114. $file = opendir($surDir);
  115. while ($fileName = readdir($file)) {
  116. $file1 = $surDir . '/' . $fileName;
  117. $file2 = $toDir . '/' . $fileName;
  118. if ($fileName != '.' && $fileName != '..') {
  119. if (is_dir($file1)) {
  120. self::copy_dir($file1, $file2);
  121. } else {
  122. copy($file1, $file2);
  123. }
  124. }
  125. }
  126. closedir($file);
  127. return true;
  128. }
  129. /**
  130. * 列出目录
  131. * @param $dir 目录名
  132. * @return 目录数组。列出文件夹下内容,返回数组 $dirArray['dir']:存文件夹;$dirArray['file']:存文件
  133. */
  134. public static function get_dirs($dir)
  135. {
  136. $dir = rtrim($dir, '/') . '/';
  137. $dirArray[][] = null;
  138. if (false != ($handle = opendir($dir))) {
  139. $i = 0;
  140. $j = 0;
  141. while (false !== ($file = readdir($handle))) {
  142. if (is_dir($dir . $file)) {
  143. //判断是否文件夹
  144. $dirArray['dir'][$i] = $file;
  145. $i++;
  146. } else {
  147. $dirArray['file'][$j] = $file;
  148. $j++;
  149. }
  150. }
  151. closedir($handle);
  152. }
  153. return $dirArray;
  154. }
  155. /**
  156. * 统计文件夹大小
  157. * @param $dir 目录名
  158. * @return number 文件夹大小(单位 B)
  159. */
  160. public static function get_size($dir)
  161. {
  162. $dirlist = opendir($dir);
  163. $dirsize = 0;
  164. while (false !== ($folderorfile = readdir($dirlist))) {
  165. if ($folderorfile != "." && $folderorfile != "..") {
  166. if (is_dir("$dir/$folderorfile")) {
  167. $dirsize += self::get_size("$dir/$folderorfile");
  168. } else {
  169. $dirsize += filesize("$dir/$folderorfile");
  170. }
  171. }
  172. }
  173. closedir($dirlist);
  174. return $dirsize;
  175. }
  176. /**
  177. * 检测是否为空文件夹
  178. * @param $dir 目录名
  179. * @return boolean true 空, fasle 不为空
  180. */
  181. public static function empty_dir($dir)
  182. {
  183. return (($files = @scandir($dir)) && count($files) <= 2);
  184. }
  185. /**
  186. * 文件缓存与文件读取
  187. * @param $name 文件名
  188. * @param $value 文件内容,为空则获取缓存
  189. * @param $path 文件所在目录,默认是当前应用的DATA目录
  190. * @param $cached 是否缓存结果,默认缓存
  191. * @return 返回缓存内容
  192. */
  193. public function cache($name, $value = '', $path = DATA_PATH, $cached = true)
  194. {
  195. static $_cache = array();
  196. $filename = $path . $name . '.php';
  197. if ('' !== $value) {
  198. if (is_null($value)) {
  199. // 删除缓存
  200. return false !== strpos($name, '*') ? array_map("unlink", glob($filename)) : unlink($filename);
  201. } else {
  202. // 缓存数据
  203. $dir = dirname($filename);
  204. // 目录不存在则创建
  205. if (!is_dir($dir)) {
  206. mkdir($dir, 0755, true);
  207. }
  208. $_cache[$name] = $value;
  209. return file_put_contents($filename, strip_whitespace("<?php\treturn " . var_export($value, true) . ";?>"));
  210. }
  211. }
  212. if (isset($_cache[$name]) && $cached == true) {
  213. return $_cache[$name];
  214. }
  215. // 获取缓存数据
  216. if (is_file($filename)) {
  217. $value = include $filename;
  218. $_cache[$name] = $value;
  219. } else {
  220. $value = false;
  221. }
  222. return $value;
  223. }
  224. }