为大家分享的第一个操作内容: 遍历并打印指定目录下所有文件
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
|
<?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 ' ' ;
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,面向过程
*/
|
#####单目录#####
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' );
|
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
|
<?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)' ;
|
以上就是关于php对文件夹的进行的基本操作,希望对大家的学习有所帮助。