php文件目录操作类

Java代码  php文件目录操作类
  1. <?php  
  2. /* 
  3. #文件目录操作类 
  4.  
  5. #例子: 
  6. $fileutil = new fileDirUtil(); 
  7. $fileutil->createDir('a/1/2/3');                 #测试建立文件夹  建一个a/1/2/3文件夹 
  8. $fileutil->copyDir('a', 'd/e');           #测试复制文件夹  建立一个d/e文件夹,把a文件夹下的内容复制进去 
  9. $fileutil->moveDir('a/', 'b/c');      #测试移动文件夹  建立一个b/c文件夹,并把a文件夹下的内容移动进去,并删除a文件夹 
  10. $fileutil->unlinkDir('F:/d');                    #测试删除文件夹  删除d文件夹     
  11.  
  12. $fileutil->createFile('b/1/2/3.txt');            #测试建立文件    在b/1/2/文件夹下面建一个3.txt文件 
  13. $fileutil->writeFile('b/1/2/3.txt','i write!');  #在文件中写内容 
  14. $fileutil->copyFile('b/1/2/3.txt','b/b/3.txt');  #测试复制文件    建立一个b/b文件夹,并把b/1/2文件夹中的3.txt文件复制进去 
  15. $fileutil->moveFile('b/1/2/3.txt','b/d/3.txt');  #测试移动文件    建立一个b/d文件夹,并把b/1/2中的3.exe移动进去       
  16. $fileutil->unlinkFile('b/d/3.exe');              #测试删除文件    删除b/d/3.exe文件     
  17.  
  18. $list = $fileutil->dirList("E:\example");        #测试列表文件夹  列出目录下所有文件 
  19. $list = $fileutil->dirTree("/");                 #测试列表文件夹树  列出目录下所有文件直接直接的树关系 
  20. $arr = $fileutil->readFile2array('example/mysql.txt'); 
  21. $arr = $fileutil->readsFile('example/mysql.txt'); 
  22. $size=$fileutil->bitSize($fileutil->getDirSize("example"));      #得到文件或目录的大小 
  23. */  
  24. class fileDirUtil {  
  25.     /** 
  26.     建立文件夹 
  27.      * 
  28.     @param  string $aimUrl 
  29.     @return  viod 
  30.      */  
  31.     function createDir($aimUrl, $mode = 0777) {  
  32.         $aimUrl = str_replace('''/', $aimUrl);  
  33.         $aimDir = '';  
  34.         $arr = explode('/', $aimUrl);  
  35.         foreach ($arr as $str) {  
  36.             $aimDir .= $str . '/';  
  37.             if (!file_exists($aimDir)) {  
  38.                 mkdir($aimDir, $mode);  
  39.             }  
  40.         }  
  41.     }  
  42.   
  43.     /** 
  44.     建立文件 
  45.      * 
  46.     @param  string  $aimUrl 
  47.     @param  boolean  $overWrite 该参数控制是否覆盖原文件 
  48.     @return  boolean 
  49.      */  
  50.     function createFile($aimUrl, $overWrite = false) {  
  51.         if (file_exists($aimUrl) && $overWrite == false) {  
  52.             return false;  
  53.         } elseif (file_exists($aimUrl) && $overWrite == true) {  
  54.             $this->unlinkFile($aimUrl);  
  55.         }  
  56.         $aimDir = dirname($aimUrl);  
  57.         $this->createDir($aimDir);  
  58.         touch($aimUrl);  
  59.         return true;  
  60.     }  
  61.   
  62.     /** 
  63.     移动文件夹 
  64.      * 
  65.     @param  string  $oldDir 
  66.     @param  string  $aimDir 
  67.     @param  boolean  $overWrite 该参数控制是否覆盖原文件 
  68.     @return  boolean 
  69.      */  
  70.     function moveDir($oldDir, $aimDir, $overWrite = false) {  
  71.         $aimDir = str_replace('''/', $aimDir);  
  72.         $aimDir = substr($aimDir, -1) == '/' ? $aimDir : $aimDir . '/';  
  73.         $oldDir = str_replace('''/', $oldDir);  
  74.         $oldDir = substr($oldDir, -1) == '/' ? $oldDir : $oldDir . '/';  
  75.         if (!is_dir($oldDir)) {  
  76.             return false;  
  77.         }  
  78.         if (!file_exists($aimDir)) {  
  79.             $this->createDir($aimDir);  
  80.         }  
  81.         @$dirHandle = opendir($oldDir);  
  82.         if (!$dirHandle) {  
  83.             return false;  
  84.         }  
  85.         while (false !== ($file = readdir($dirHandle))) {  
  86.             if ($file == '.' || $file == '..') {  
  87.                 continue;  
  88.             }  
  89.             if (!is_dir($oldDir . $file)) {  
  90.                 $this->moveFile($oldDir . $file, $aimDir . $file, $overWrite);  
  91.             } else {  
  92.                 $this->moveDir($oldDir . $file, $aimDir . $file, $overWrite);  
  93.             }  
  94.         }  
  95.         closedir($dirHandle);  
  96.         return rmdir($oldDir);  
  97.     }  
  98.   
  99.     /** 
  100.     移动文件 
  101.      * 
  102.     @param  string  $fileUrl 
  103.     @param  string  $aimUrl 
  104.     @param  boolean  $overWrite 该参数控制是否覆盖原文件 
  105.     @return  boolean 
  106.      */  
  107.     function moveFile($fileUrl, $aimUrl, $overWrite = false) {  
  108.         if (!file_exists($fileUrl)) {  
  109.             return false;  
  110.         }  
  111.         if (file_exists($aimUrl) && $overWrite = false) {  
  112.             return false;  
  113.         } elseif (file_exists($aimUrl) && $overWrite = true) {  
  114.             $this->unlinkFile($aimUrl);  
  115.         }  
  116.         $aimDir = dirname($aimUrl);  
  117.         $this->createDir($aimDir);  
  118.         rename($fileUrl, $aimUrl);  
  119.         return true;  
  120.     }  
  121.   
  122.     /** 
  123.     删除文件夹 
  124.      * 
  125.     @param  string  $aimDir 
  126.     @return  boolean 
  127.      */  
  128.     function unlinkDir($aimDir) {  
  129.         $aimDir = str_replace('''/', $aimDir);  
  130.         $aimDir = substr($aimDir, -1) == '/' ? $aimDir : $aimDir . '/';  
  131.         if (!is_dir($aimDir)) {  
  132.             return false;  
  133.         }  
  134.         $dirHandle = opendir($aimDir);  
  135.         while (false !== ($file = readdir($dirHandle))) {  
  136.             if ($file == '.' || $file == '..') {  
  137.                 continue;  
  138.             }  
  139.             if (!is_dir($aimDir . $file)) {  
  140.                 $this->unlinkFile($aimDir . $file);  
  141.             } else {  
  142.                 $this->unlinkDir($aimDir . $file);  
  143.             }  
  144.         }  
  145.         closedir($dirHandle);  
  146.         return rmdir($aimDir);  
  147.     }  
  148.   
  149.     /** 
  150.     删除文件 
  151.      * 
  152.     @param  string  $aimUrl 
  153.     @return  boolean 
  154.      */  
  155.     function unlinkFile($aimUrl) {  
  156.         if (file_exists($aimUrl)) {  
  157.             unlink($aimUrl);  
  158.             return true;  
  159.         } else {  
  160.             return false;  
  161.         }  
  162.     }  
  163.   
  164.     /** 
  165.     复制文件夹 
  166.      * 
  167.     @param  string  $oldDir 
  168.     @param  string  $aimDir 
  169.     @param  boolean  $overWrite 该参数控制是否覆盖原文件 
  170.     @return  boolean 
  171.      */  
  172.     function copyDir($oldDir, $aimDir, $overWrite = false) {  
  173.         $aimDir = str_replace('''/', $aimDir);  
  174.         $aimDir = substr($aimDir, -1) == '/' ? $aimDir : $aimDir . '/';  
  175.         $oldDir = str_replace('''/', $oldDir);  
  176.         $oldDir = substr($oldDir, -1) == '/' ? $oldDir : $oldDir . '/';  
  177.         if (!is_dir($oldDir)) {  
  178.             return false;  
  179.         }  
  180.         if (!file_exists($aimDir)) {  
  181.             $this->createDir($aimDir);  
  182.         }  
  183.         $dirHandle = opendir($oldDir);  
  184.         while (false !== ($file = readdir($dirHandle))) {  
  185.             if ($file == '.' || $file == '..') {  
  186.                 continue;  
  187.             }  
  188.             if (!is_dir($oldDir . $file)) {  
  189.                 $this->copyFile($oldDir . $file, $aimDir . $file, $overWrite);  
  190.             } else {  
  191.                 $this->copyDir($oldDir . $file, $aimDir . $file, $overWrite);  
  192.             }  
  193.         }  
  194.         return closedir($dirHandle);  
  195.     }  
  196.   
  197.     /** 
  198.     复制文件 
  199.      * 
  200.     @param  string  $fileUrl 
  201.     @param  string  $aimUrl 
  202.     @param  boolean  $overWrite 该参数控制是否覆盖原文件 
  203.     @return  boolean 
  204.      */  
  205.     function copyFile($fileUrl, $aimUrl, $overWrite = false) {  
  206.         if (!file_exists($fileUrl)) {  
  207.             return false;  
  208.         }  
  209.         if (file_exists($aimUrl) && $overWrite == false) {  
  210.             return false;  
  211.         } elseif (file_exists($aimUrl) && $overWrite == true) {  
  212.             $this->unlinkFile($aimUrl);  
  213.         }  
  214.         $aimDir = dirname($aimUrl);  
  215.         $this->createDir($aimDir);  
  216.         copy($fileUrl, $aimUrl);  
  217.         return true;  
  218.     }  
  219.   
  220.     /** 
  221.     将字符串写入文件 
  222.      * 
  223.     @param  string  $filename 文件名 
  224.     @param  boolean $str 待写入的字符数据 
  225.      */  
  226.     function writeFile($filename, $str) {  
  227.         if (function_exists(file_put_contents)) {  
  228.             file_put_contents($filename, $str);  
  229.         } else {  
  230.             $fp = fopen($filename, "wb");  
  231.             fwrite($fp, $str);  
  232.             fclose($fp);  
  233.         }  
  234.     }  
  235.   
  236.     /** 
  237.     将整个文件内容读出到一个字符串中 
  238.      * 
  239.     @param  string  $filename 文件名 
  240.     @return array 
  241.      */  
  242.     function readsFile($filename) {  
  243.         if (function_exists(file_get_contents)) {  
  244.             return file_get_contents($filename);  
  245.         } else {  
  246.             $fp = fopen($filename, "rb");  
  247.             $str = fread($fp, filesize($filename));  
  248.             fclose($fp);  
  249.             return $str;  
  250.         }  
  251.     }  
  252.   
  253.     /** 
  254.     将文件内容读出到一个数组中 
  255.      * 
  256.     @param  string  $filename 文件名 
  257.     @return array 
  258.      */  
  259.     function readFile2array($filename) {  
  260.         $file = file($filename);  
  261.         $arr = array();  
  262.         foreach ($file as $value) {  
  263.             $arr [] = trim($value);  
  264.         }  
  265.         return $arr;  
  266.     }  
  267.   
  268.     /** 
  269.     转化 \ 为 / 
  270.      * 
  271.     @param  string  $path   路径 
  272.     @return string  路径 
  273.      */  
  274.     function dirPath($path) {  
  275.         $path = str_replace('\\', '/', $path);  
  276.         if (substr($path, -1) != '/')  
  277.             $path = $path . '/';  
  278.         return $path;  
  279.     }  
  280.   
  281.     /** 
  282.     转换目录下面的所有文件编码格式 
  283.      * 
  284.     @param  string  $in_charset     原字符集 
  285.     @param  string  $out_charset    目标字符集 
  286.     @param  string  $dir            目录地址 
  287.     @param  string  $fileexts       转换的文件格式 
  288.     @return string  如果原字符集和目标字符集相同则返回false,否则为true 
  289.      */  
  290.     function dirIconv($in_charset, $out_charset, $dir, $fileexts = 'php|html|htm|shtml|shtm|js|txt|xml') {  
  291.         if ($in_charset == $out_charset)  
  292.             return false;  
  293.         $list = $this->dirList($dir);  
  294.         foreach ($list as $v) {  
  295.             if (preg_match("/\.($fileexts)/i", $v) && is_file($v)) {  
  296.                 file_put_contents($v, iconv($in_charset, $out_charset, file_get_contents($v)));  
  297.             }  
  298.         }  
  299.         return true;  
  300.     }  
  301.   
  302.     /** 
  303.     列出目录下所有文件 
  304.      * 
  305.     @param  string  $path       路径 
  306.     @param  string  $exts       扩展名 
  307.     @param  array   $list       增加的文件列表 
  308.     @return array   所有满足条件的文件 
  309.      */  
  310.     function dirList($path, $exts = '', $list = array()) {  
  311.         $path = $this->dirPath($path);  
  312.         $files = glob($path . '*');  
  313.         foreach ($files as $v) {  
  314.             $fileext = $this->fileext($v);  
  315.             if (!$exts || preg_match("/\.($exts)/i", $v)) {  
  316.                 $list [] = $v;  
  317.                 if (is_dir($v)) {  
  318.                     $list = $this->dirList($v, $exts, $list);  
  319.                 }  
  320.             }  
  321.         }  
  322.         return $list;  
  323.     }  
  324.   
  325.     /** 
  326.     设置目录下面的所有文件的访问和修改时间 
  327.      * 
  328.     @param  string  $path       路径 
  329.     @param  int     $mtime      修改时间 
  330.     @param  int     $atime      访问时间 
  331.     @return array   不是目录时返回false,否则返回 true 
  332.      */  
  333.     function dirTouch($path, $mtime = TIME, $atime = TIME) {  
  334.         if (!is_dir($path))  
  335.             return false;  
  336.         $path = $this->dirPath($path);  
  337.         if (!is_dir($path))  
  338.             touch($path, $mtime, $atime);  
  339.         $files = glob($path . '*');  
  340.         foreach ($files as $v) {  
  341.             is_dir($v) ? $this->dirTouch($v, $mtime, $atime) : touch($v, $mtime, $atime);  
  342.         }  
  343.         return true;  
  344.     }  
  345.   
  346.     /** 
  347.     目录列表 
  348.      * 
  349.     @param  string  $dir        路径 
  350.     @param  int     $parentid   父id 
  351.     @param  array   $dirs       传入的目录 
  352.     @return array   返回目录及子目录列表 
  353.      */  
  354.     function dirTree($dir, $parentid = 0, $dirs = array()) {  
  355.         global $id;  
  356.         if ($parentid == 0)  
  357.             $id = 0;  
  358.         $list = glob($dir . '*');  
  359.         foreach ($list as $v) {  
  360.             if (is_dir($v)) {  
  361.                 $id++;  
  362.                 $dirs [$id] = array('id' => $id, 'parentid' => $parentid, 'name' => basename($v), 'dir' => $v . '/');  
  363.                 $dirs = $this->dirTree($v . '/', $id, $dirs);  
  364.             }  
  365.         }  
  366.         return $dirs;  
  367.     }  
  368.   
  369.     /** 
  370.     目录列表 
  371.      * 
  372.     @param  string  $dir        路径 
  373.     @return array   返回目录列表 
  374.      */  
  375.     function dirNodeTree($dir) {  
  376.         $d = dir($dir);  
  377.         $dirs = array();  
  378.         while (false !== ($entry = $d->read())) {  
  379.             if ($entry != '.' and $entry != '..' and is_dir($dir . '/' . $entry)) {  
  380.                 $dirs[] = $entry;  
  381.             }  
  382.         }  
  383.         return $dirs;  
  384.     }  
  385.   
  386.     /** 
  387.     获取目录大小 
  388.      * 
  389.     @param  string  $dirname    目录 
  390.     @return string    比特B 
  391.      */  
  392.     function getDirSize($dirname) {  
  393.         if (!file_exists($dirname) or !is_dir($dirname))  
  394.             return false;  
  395.         if (!$handle = opendir($dirname))  
  396.             return false;  
  397.         $size = 0;  
  398.         while (false !== ($file = readdir($handle))) {  
  399.             if ($file == "." or $file == "..")  
  400.                 continue;  
  401.             $file = $dirname . "/" . $file;  
  402.             if (is_dir($file)) {  
  403.                 $size += $this->getDirSize($file);  
  404.             } else {  
  405.                 $size += filesize($file);  
  406.             }  
  407.   
  408.         }  
  409.         closedir($handle);  
  410.         return $size;  
  411.     }  
  412.   
  413.     /** 
  414.      * 将字节转换成Kb或者Mb... 
  415.      * 参数 $size为字节大小 
  416.      */  
  417.     function bitSize($size) {  
  418.         if (!preg_match("/^[0-9]+$/", $size))  
  419.             return 0;  
  420.         $type = array("B""KB""MB""GB""TB""PB");  
  421.   
  422.         $j = 0;  
  423.         while ($size >= 1024) {  
  424.             if ($j >= 5)  
  425.                 return $size . $type [$j];  
  426.             $size = $size / 1024;  
  427.             $j++;  
  428.         }  
  429.         return $size . $type [$j];  
  430.     }  
  431.   
  432.     /** 
  433.     获取文件名后缀 
  434.      * 
  435.     @param  string  $filename 
  436.     @return string 
  437.      */  
  438.     function fileext($filename) {  
  439.         return addslashes(trim(substr(strrchr($filename, '.'), 110)));  
  440.     }  
  441.   
  442.     function remote_file_exists($url_file) {  
  443.         $url_file = trim($url_file);  
  444.         if (empty($url_file)) return false;  
  445.         $url_arr = parse_url($url_file);  
  446.         if (!is_array($url_arr) || empty($url_arr)) return false;  
  447.         $host = $url_arr['host'];  
  448.         $path = $url_arr['path'] . "?" . $url_arr['query'];  
  449.         $port = isset($url_arr['port']) ? $url_arr['port'] : "80";  
  450.         $fp = fsockopen($host, $port, $err_no, $err_str, 30);  
  451.         if (!$fp) return false;  
  452.         $request_str = "GET " . $path . " HTTP/1.1\r\n";  
  453.         $request_str .= "Host:" . $host . "\r\n";  
  454.         $request_str .= "Connection:Close\r\n\r\n";  
  455.         fwrite($fp, $request_str);  
  456.         //fread replace fgets  
  457.         $first_header = fread($fp, 128);  
  458.         fclose($fp);  
  459.         if (trim($first_header) == ""return false;  
  460.         //check $url_file "Content-Location"  
  461.         if (!preg_match("/200/", $first_header) || preg_match("/Location:/", $first_header)) return false;  
  462.         return true;  
  463.     }  
  464. }  

 asdfs

上一篇:第121天:机器学习之决策树


下一篇:淘宝开源Android容器化框架Atlas开发者指南