php文件目录常用操作

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