dir.func.php 3.9 KB

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