dir.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <?php
  2. /*  
  3. * dirFunc.php  
  4. * 目录操作函数库    
  5. * 更新: Jacky.Chen 2013/10/20 16:32  
  6. *  
  7. */
  8. /*
  9. * 转化 \ 为 /
  10. * @param string $path 路径
  11. * @return string 路径
  12. *
  13. */
  14. function dir_path($path) {
  15. $path = str_replace('\\', '/', $path);
  16. if(substr($path, -1) != '/') $path = $path.'/';
  17. return $path;
  18. }
  19. /**
  20. * 创建目录
  21. *
  22. * @param string $path 路径
  23. * @param string $mode 属性
  24. * @return string 如果已经存在则返回true,否则为flase
  25. */
  26. function dir_create($path, $mode = 0777) {
  27. if(is_dir($path)) return TRUE;
  28. $path = dir_path($path);
  29. $temp = explode('/', $path);
  30. $cur_dir = '';
  31. $max = count($temp) - 1;
  32. for($i=0; $i<$max; $i++) {
  33. $cur_dir .= $temp[$i].'/';
  34. if (@is_dir($cur_dir)) continue;
  35. @mkdir($cur_dir, 0777,true);
  36. @chmod($cur_dir, 0777);
  37. }
  38. return is_dir($path);
  39. }
  40. /*
  41. * 拷贝目录及下面所有文件
  42. * @param string $fromdir 原路径
  43. * @param string $todir 目标路径
  44. * @return string 如果目标路径不存在则返回false,否则为true
  45. */
  46. function dir_copy($fromdir, $todir) {
  47. $fromdir = dir_path($fromdir);
  48. $todir = dir_path($todir);
  49. if (!is_dir($fromdir)) return FALSE;
  50. if (!is_dir($todir)) dir_create($todir);
  51. $list = glob($fromdir.'*');
  52. if (!empty($list)) {
  53. foreach($list as $v) {
  54. $path = $todir.basename($v);
  55. if(is_dir($v)) {
  56. dir_copy($v, $path);
  57. } else {
  58. copy($v, $path);
  59. @chmod($path, 0777);
  60. }
  61. }
  62. }
  63. return TRUE;
  64. }
  65. /**
  66. * 转换目录下面的所有文件编码格式
  67. *
  68. * @param string $in_charset 原字符集
  69. * @param string $out_charset 目标字符集
  70. * @param string $dir 目录地址
  71. * @param string $fileexts 转换的文件格式
  72. * @return string 如果原字符集和目标字符集相同则返回false,否则为true
  73. */
  74. function dir_iconv($in_charset, $out_charset, $dir, $fileexts = 'php|html|htm|shtml|shtm|js|txt|xml') {
  75. if($in_charset == $out_charset) return false;
  76. $list = dir_list($dir);
  77. foreach($list as $v) {
  78. if (pathinfo($v, PATHINFO_EXTENSION) == $fileexts && is_file($v)){
  79. file_put_contents($v, iconv($in_charset, $out_charset, file_get_contents($v)));
  80. }
  81. }
  82. return true;
  83. }
  84. /**
  85. * 列出目录下所有文件
  86. *
  87. * @param string $path 路径
  88. * @param string $exts 扩展名
  89. * @param array $list 增加的文件列表
  90. * @return array 所有满足条件的文件
  91. */
  92. function dir_list($path, $exts = '', $list= array()) {
  93. $path = dir_path($path);
  94. $files = glob($path.'*');
  95. foreach($files as $v) {
  96. if (!$exts || pathinfo($v, PATHINFO_EXTENSION) == $exts) {
  97. $list[] = $v;
  98. if (is_dir($v)) {
  99. $list = dir_list($v, $exts, $list);
  100. }
  101. }
  102. }
  103. return $list;
  104. }
  105. /**
  106. * 设置目录下面的所有文件的访问和修改时间
  107. *
  108. * @param string $path 路径
  109. * @param int $mtime 修改时间
  110. * @param int $atime 访问时间
  111. * @return array 不是目录时返回false,否则返回 true
  112. */
  113. function dir_touch($path, $mtime = TIMESTAMP, $atime = TIMESTAMP) {
  114. if (!is_dir($path)) return false;
  115. $path = dir_path($path);
  116. if (!is_dir($path)) touch($path, $mtime, $atime);
  117. $files = glob($path.'*');
  118. foreach($files as $v) {
  119. is_dir($v) ? dir_touch($v, $mtime, $atime) : touch($v, $mtime, $atime);
  120. }
  121. return true;
  122. }
  123. /**
  124. * 目录列表
  125. *
  126. * @param string $dir 路径
  127. * @param int $parentid 父id
  128. * @param array $dirs 传入的目录
  129. * @return array 返回目录列表
  130. */
  131. function dir_tree($dir, $parentid = 0, $dirs = array()) {
  132. global $id;
  133. if ($parentid == 0) $id = 0;
  134. $list = glob($dir.'*');
  135. foreach($list as $v) {
  136. if (is_dir($v)) {
  137. $id++;
  138. $dirs[$id] = array('id'=>$id,'parentid'=>$parentid, 'name'=>basename($v), 'dir'=>$v.'/');
  139. $dirs = dir_tree($v.'/', $id, $dirs);
  140. }
  141. }
  142. return $dirs;
  143. }
  144. function dir_child($dir) {
  145. $dirArray[]=NULL;
  146. if (false != ($handle = opendir ( $dir ))) {
  147. $i=0;
  148. while ( false !== ($file = readdir ( $handle )) ) {
  149. //去掉"“.”、“..”以及带“.xxx”后缀的文件
  150. if ($file != "." && $file != "..") {
  151. $dirArray[$i]=$file;
  152. $i++;
  153. }
  154. }
  155. //关闭句柄
  156. closedir ( $handle );
  157. }
  158. return $dirArray;
  159. }
  160. /**
  161. * 删除目录及目录下面的所有文件
  162. *
  163. * @param string $dir 路径
  164. * @return bool 如果成功则返回 TRUE,失败则返回 FALSE
  165. */
  166. function dir_delete($dir) {
  167. $dir = dir_path($dir);
  168. if (!is_dir($dir)) return FALSE;
  169. $list = glob($dir.'*');
  170. foreach($list as $v) {
  171. is_dir($v) ? dir_delete($v) : @unlink($v);
  172. }
  173. return @rmdir($dir);
  174. }
  175. ?>