php文件目录操作类

简介:
Java代码   收藏代码
  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

相关文章
|
3月前
|
PHP
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
本文介绍了解决PHP常见问题的步骤,包括定位和创建`php.ini`文件,以及解决`mb_strlen()`函数未定义和DLL模块加载错误的具体方法。
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
|
2月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP开发领域,设计模式是解决常见问题的高效方案集合。它们不是具体的代码,而是一种编码和设计经验的总结。单例模式作为设计模式中的一种,确保了一个类仅有一个实例,并提供一个全局访问点。本文将深入探讨单例模式的基本概念、实现方式及其在PHP中的应用。
单例模式在PHP中的应用广泛,尤其在处理数据库连接、日志记录等场景时,能显著提高资源利用率和执行效率。本文从单例模式的定义出发,详细解释了其在PHP中的不同实现方法,并探讨了使用单例模式的优势与注意事项。通过对示例代码的分析,读者将能够理解如何在PHP项目中有效应用单例模式。
|
3月前
|
前端开发 PHP
php学习笔记-php文件表单上传-day06
本文介绍了PHP文件上传处理流程、预定义变量`$_FILES`的使用、文件上传状态代码以及文件上传实现函数。同时,通过一个文件上传的小例子,演示了文件上传表单的创建、文件上传表单处理的PHP页面编写以及运行测试输出。
php学习笔记-php文件表单上传-day06
|
3月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
49 2
|
3月前
|
PHP
PHP中的面向对象编程:理解类与对象
本文将深入探讨PHP中面向对象编程的核心概念——类与对象。通过实例讲解,帮助读者更好地理解如何在PHP中运用OOP编写更高效、可维护的代码。
54 9
|
3月前
|
缓存 监控 算法
分析慢日志文件来优化 PHP 脚本的性能
分析慢日志文件来优化 PHP 脚本的性能
|
3月前
进入靶场,出现一张照片,右击查看源代码,发现有一个注释的source.php文件
这段代码实现了一个网站上弹出的促销海报动画效果,包含一个关闭按钮。当促销海报弹出时,会在三秒后开始抖动一两下。海报使用固定定位居中显示,带有阴影和圆角,关闭按钮位于右上角。可以通过修改时间参数调整弹出时间。
20 0
|
4月前
|
存储 安全 数据库连接
php.ini 文件的用途是什么?
【8月更文挑战第29天】
75 1
|
4月前
|
PHP 开发者
PHP中的面向对象编程:掌握类与对象的精髓
探索PHP的面向对象编程世界,本文将带你了解如何通过创建和操作类来实例化对象。我们将深入讲解类的声明、构造函数的使用以及继承和多态性的概念。准备好,让我们一起在代码的海洋中航行,揭开PHP对象编程的神秘面纱!
|
4月前
|
Java 应用服务中间件 PHP
PHP——调用java文件中的方法
PHP——调用java文件中的方法
59 0
PHP——调用java文件中的方法