Maison > développement back-end > tutoriel php > php对文件夹进行相关操作(遍历、计算大小)_php技巧

php对文件夹进行相关操作(遍历、计算大小)_php技巧

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2016-05-16 20:05:28
original
1083 Les gens l'ont consulté

为大家分享的第一个操作内容: 遍历并打印指定目录下所有文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

<&#63;php

//功能:遍历并打印指定目录下所有文件

  

function scan_dir($dir_name,$dir_flag=1) {

  static $FILE_COUNT=1;        //记录文件数目 初值为1 目录名称不记

  $FILE_COUNT--;            //每调用一次scan_dir()函数自减1

  @$dir_handle=opendir($dir_name);   //抑制错误信息显示 便于自定义错误显示

  if(!$dir_handle)

  die("目录打开错误!");

  while(false!==($filename=readdir($dir_handle))) //文件名为‘0'时,readdir返回 FALSE,判断返回值是否不全等

  {                  

  

    $flag=$dir_flag;         //古怪的 is_dir($filename) ! $filename这个路径必须能够寻到!当$filename不存在或者不是目录时返回false

    if($filename!='.'&&$filename!='..')

    {

      $FILE_COUNT++;          //不记录当前路径和上一级路径

      while($flag>0&&--$flag)     //负数仍为真

        echo '&nbsp';

      if(is_dir($dir_name.$filename)) //判断 是否为一个目录

      {

        echo '<strong>'."<a href=".$dir_name.$filename.">".$filename."</a></strong><br>";

        scan_dir($dir_name.$filename.'/',$dir_flag+1);   //$dir_flag标志目录树层次

      }

      else 

      {

        echo "<a href=".$dir_name.$filename.">".$filename."</a><br>";

      }

    }

  }

  closedir($dir_handle);         //关闭目录句柄

  echo "文件总数:".$FILE_COUNT.'<br>';

}

  

scan_dir('D:/AppServ/www/mytest/shopping/payment/');

  

  

/*总结:

1,关于路径 目录的路径末尾都加上 '/' 以便后面与文件名字符串连接 形成新的 路径字符串

2,目录遍历 这是一个关于树的问题

3,is_dir()函数第一个参数必须是一个能够识别的PATH否则会因目录不存在而返回一个false容易误解

得出 “这不是一个目录”的错误结论 形成逻辑上的错误

4,注意当前路径'.'和上一级路径'..'的剔除 否则 在递归环节造成死循环 直至内存耗尽出错。

5,dir_flag这个变量是记录树的深度 以便于目录分级分层输出                */

/*不足

1,输出排版不完善

2,逻辑与表示层混乱 不分明 大忌!

3,面向过程

*/

Copier après la connexion

#####单目录#####

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

// 列出目录内容 $dir 不要加 '/'

function list_files($dir)

{

  if(is_dir($dir))

  {

    if($handle = opendir($dir))

    {

      while(($file = readdir($handle)) !== false)

      {

        if($file != "." && $file != ".." && $file != "Thumbs.db")

        {

          echo '<a href="'.$dir.'/'.$file.'">'.$file.'</a><br>'."\n";

        }

      }

      closedir($handle);

    }

  }

}

  

list_files('D:/AppServ/www/mytest/shopping/payment');

Copier après la connexion

PHP 对文件进行的第二个操作内容:获得文件夹大小 计算文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

<&#63;php 

function getDirSize($dir)

{

  $handle = opendir($dir);

  while (false!==($FolderOrFile = readdir($handle)))

  {

    if($FolderOrFile != "." && $FolderOrFile != "..")

    {

      if(is_dir("$dir/$FolderOrFile"))

      {

        $sizeResult += getDirSize("$dir/$FolderOrFile");

      }

      else

      {

        $sizeResult += filesize("$dir/$FolderOrFile");

      }

    }  

  

  closedir($handle);

  return $sizeResult;

}

  

//单位自动转换函数

function getRealSize($size)

{

  $kb = 1024;     //Kilobyte

  $mb = 1024 * $kb//Megabyte

  $gb = 1024 * $mb//Gigabyte

  $tb = 1024 * $gb//Terabyte

      

  if($size < $kb)

  {

    return $size." B";

  }

  else if($size < $mb)

  {

    return round($size/$kb,2)." KB";

  }

  else if($size < $gb)

  {

    return round($size/$mb,2)." MB";

  }

  else if($size < $tb)

  {

    return round($size/$gb,2)." GB";

  }

  else

  {

    return round($size/$tb,2)." TB";

  }

}

  

echo getRealSize(getDirSize('D:/AppServ/www/mytest/'));

  

  

  

// get byte

function dirsize($dir)

{

  $handle=opendir($dir);

  $size = 0;

  while ( $file=readdir($handle) )

  {

  if ( ( $file == "." ) || ( $file == ".." ) ) continue;

  if ( is_dir("$dir/$file") )

  $size += dirsize("$dir/$file");

  else

  $size += filesize("$dir/$file");

  }

  closedir($handle);

  return $size;

}

  

$big=dirsize(dirname($_SERVER['SCRIPT_FILENAME'])."/");

echo '('.$big.' bytes)';

Copier après la connexion

以上就是关于php对文件夹的进行的基本操作,希望对大家的学习有所帮助。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal