common.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. // 这是系统自动生成的公共文件
  3. /**
  4. * PHP格式化字节大小
  5. * @param number $size 字节数
  6. * @param string $delimiter 数字和单位分隔符
  7. * @return string 格式化后的带单位的大小
  8. */
  9. function format_bytes(int $size, string $delimiter = ''): string
  10. {
  11. $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');
  12. for ($i = 0; $size >= 1024 && $i < 5; $i++) {
  13. $size = (int) $size / 1024;
  14. }
  15. return round($size, 2) . $delimiter . $units[$i];
  16. }
  17. /**
  18. * 使用递归遍历获取文件夹的大小
  19. */
  20. function get_dir_size($dirname)
  21. {
  22. static $tot; //这里把$tot定义为静态的,表示$tot全局只有这一个变量
  23. $ds = opendir($dirname); //创建一个目录资源, 传入的目录就是资源
  24. while ($file = readdir($ds)) { //从目录中读取到条目
  25. //这里的$path 表示这个路径下的文件夹,如果不这么去定义,里边执行递归语句的时候,找不到是那个文件夹
  26. $path = $dirname . "/" . $file;
  27. //判断,如果是 . 或者 ..的目录就过滤掉
  28. if ($file != "." && $file != "..") {
  29. if (is_dir($path)) { //判断如果找到的是目录
  30. get_dir_size($path); //如果得到是文件夹,然后递归调用一次方法传入的$path文件夹路径就是判断得到的文件夹赋值给$dirname
  31. } else {
  32. $tot += filesize($path);
  33. }
  34. }
  35. }
  36. return $tot;
  37. }
  38. /**
  39. * 递归删除文件夹
  40. */
  41. function deldir($path)
  42. {
  43. //如果是目录则继续
  44. if (is_dir($path)) {
  45. //扫描一个文件夹内的所有文件夹和文件并返回数组
  46. $p = scandir($path);
  47. foreach ($p as $val) {
  48. //排除目录中的.和..
  49. if ($val != "." && $val != "..") {
  50. //如果是目录则递归子目录,继续操作
  51. if (is_dir($path . $val)) {
  52. //子目录中操作删除文件夹和文件
  53. deldir($path . $val . DIRECTORY_SEPARATOR);
  54. //目录清空后删除空文件夹
  55. @rmdir($path . $val . DIRECTORY_SEPARATOR);
  56. } else {
  57. //如果是文件直接删除
  58. unlink($path . $val);
  59. }
  60. }
  61. }
  62. }
  63. }