用递归求最大值PHP,php如何使用递归来计算一个目录中所有文件的大小(代码)...
本篇文章给大家带来的内容是关于php如何使用递归来计算一个目录中所有文件的大小 (代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。sudo find /private/etc -exec ls -l {} \; | awk 'BEGIN {sum=0} {sum+=$5;} END {print sum}' # 4947228
ls -ld /etc #/etc -> private/etc
先计算出/etc目录所有文件的大小4947228
DirUtil.php<?php
/**
* Created by PhpStorm.
* User: Mch
* Date: 8/14/18
* Time: 22:11
*/
class DirUtil {
public static function getSize(string $path) {
$totalSize = 0;
$path = realpath($path);
if (!file_exists($path)) {
return $totalSize;
}
if (!is_dir($path)) {
return filesize($path);
}
if ($dh = opendir($path)) {
while (($file = readdir($dh)) !== false) {
if ($file !== "." && $file !== "..") {
$abs = $path.DIRECTORY_SEPARATOR.$file;
if (is_dir($file)) {
$totalSize += self::getSize($abs);
} else {
$totalSize += filesize($abs);
}
}
}
closedir($dh);
}
return $totalSize;
}
public static function entryForEach(string $path, callable $callback, mixed $data = null) {
$path = realpath($path);
if (!file_exists($path)) {
return 0;
}
if (!is_dir($path)) {
return call_user_func($callback, $path, $data);
}
if ($dh = opendir($path)) {
while (($file = readdir($dh)) !== false) {
if ($file !== "." && $file !== "..") {
$abs = $path.DIRECTORY_SEPARATOR.$file;
if (is_dir($file)) {
self::entryForEach($abs, $callback, $data);
} else {
call_user_func($callback, $abs, $data);
}
}
}
closedir($dh);
}
return 0;
}
public static function entryReduce(string $path, callable $callback, $init) {
$acc = $init;
$path= realpath($path);
if (!file_exists($path)) {
return $acc;
}
if (!is_dir($path)) {
return call_user_func($callback, $acc, $path);
}
if ($dh = opendir($path)) {
while (($file = readdir($dh)) !== false) {
if ($file !== "." && $file !== "..") {
$abs = $path.DIRECTORY_SEPARATOR.$file;
if (is_dir($file)) {
$acc = self::entryReduce($abs, $callback, $acc);
} else {
$acc= call_user_func($callback, $acc, $abs);
}
}
}
closedir($dh);
}
return $acc;
}
}
test:// php ./DirUtil.php /etc
if ($argc < 2) {
printf("Usage: php %s [filename]\n", __FILE__);
exit(1);
}
echo DirUtil::getSize($argv[1]).PHP_EOL; // 899768
$dir_get_size = function($path) {
$size = 0;
DirUtil::entryForEach($path, function($path) use (&$size) {
$size += filesize($path);
});
return $size;
};
echo $dir_get_size($argv[1]).PHP_EOL; // 899768
echo DirUtil::entryReduce($argv[1], function($sum, $path) {
$sum += filesize($path);
return $sum;
}, 0).PHP_EOL; // 899768
相关推荐:
php递归示例 php递归函数代码
PHP递归创建多级目录,php递归
php递归json类实例,php递归json_PHP教程
用递归求最大值PHP,php如何使用递归来计算一个目录中所有文件的大小(代码)...相关推荐
- java实现递归下降分析_使用递归实现检查未知层级目录中的文件-Java实用技能
现在有这样一个需求,给你一个目录,需要你在此目录中查找全部名字中包含指定字符的文件. 这题的主要难点在于:目录中可能包含子目录,子目录中又会包含子目录.而我们事先没办法确定子目录到底有多少层!这时候就 ...
- Java 目录操作一(递归创建目录、删除目录、判断目录是否为空、判断文件是否隐藏、获取目录大小、在指定目录中查找文件)
递归创建目录 import java.io.File;public class Main {public static void main(String[] args) {String directo ...
- c语言递归求塔移动次数,c语言递归调用汉诺塔
递归算法的出发点不是由初始条件出发,而是把出发点放在求解的目标上,从所求的未知项出发逐次调用本身的求解过程,直到递归的边界(即初始条件). 汉诺塔问题的重点是分析移动的规则,找到规律和边界条件. 若需 ...
- c 语言 求文件大小,C程序中如何读取目录中的文件并判断文件大小等信息
读取目录内容 应用程序可以用readdir系列函数来读取目录内容. #include #include DIR *opendir(const char *name); //成功返回目录指针,失败返回N ...
- C语言以递归求斐波那契数列(附完整源码)
递归求斐波那契数列 递归求斐波那契数列完整源码(定义,实现,main函数测试) 递归求斐波那契数列完整源码(定义,实现,main函数测试) #include <locale.h> #inc ...
- 递归算法遍历文件夹中所有文件递归删除文件夹
- 引言:怎样才能遍历出一个文件夹中的所有文件呢,我们知道,java中的File类中有这样的方法,list() ,可以返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录.我们是否可 ...
- 递归求嵌套数组中最大值
今早在 https://attachments.me/hirehack/public/computer.html 做题,有一题是 递归求嵌套数组中最大值: /* This challenge requ ...
- 初识递归,使用递归方法求一个数组中的最大值
找一个数组的最大值,方法很多,也很简单,一般再定义一个变量就可以了,就像下面这串代码. int []arr=new int [] {1,22,3,44,5,6,76,118,91};int max=a ...
- C语言递归求四个数的最大值:Max函数的递归
递归算法求四个数的最大值 问题描述:通过函数的递归求四个数的最大值 解题思路:通过多次比较两个数进行比较大小,本质就是冒泡法排序 即: max_4=max_2(num1,max_2(num2,max_ ...
最新文章
- VS下调用Matlab引擎
- C++网络包截取开发
- 读书笔记《单核工作法》_6:颠倒you'xian'ji
- 二叉树的层序遍历—leetcode102
- 腾讯TencentOS 十年云原生的迭代演进之路
- nmcli 命令的基本使用
- 用Jenkins自动化搭建测试环境_jenkins基础搭建_入门试炼02
- 有趣的应用 | 使用RNN预测股票价格系列一
- 自己制作精美的App Store 软件截屏
- [转]Insert, Update, and Delete Destination table with SSIS
- shell 循环控制语句
- Eclipse 工程迁移到 Android Studio
- OSChina 周五乱弹 —— 源花?真土鳖,我要开源小仙女!
- 如何用python批量识别图片上的文字(二)
- Java 中的泛型是什么,它有什么作用?(十五)
- 江敏:数据中台驱动下的企业创新升级
- 【dart】private 小坑
- 文本输入框<input>
- 大中型电子计算机房装修材料价格,大型计算机机房装修方案以及材料清单.doc...
- intel的Linux移动硬盘换AMD,Linux之父换电脑:从Intel改为AMD 32核锐龙 CES:Intel展示“马蹄弯”折叠屏概念笔记本-宝商在线...