日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

用递归求最大值PHP,php如何使用递归来计算一个目录中所有文件的大小(代码)...

發布時間:2023/12/15 php 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用递归求最大值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如何使用递归来计算一个目录中所有文件的大小(代码)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。