跟着百度学PHP[12]-文件处理 文件 目录
00x1 文件的属性
文件属性
CODE
<?php //-------------------------定义大小转换函数--------------- function changesize_dw($size){ $s = $size; $dw = "";#pow(2,40)是2的40次方。 if($s >= pow(2,40)){#1的10次方就是1024,types到kb就是一次方,kb到mb就是二次方..类推 $dw = "TB"; }elseif($s >= pow(2,30)){ $dw = "GB"; }elseif($s >= pow(2,20)){ $dw = "MB"; }elseif($s >= pow(2,10)){ $dw = "KB"; }elseif($s >= pow(1,10)){ $dw = "types"; } return $s.$dw; } //---------------------------文件属性-------------------- function getfile($filename) { if(file_exists($filename)){ echo $filename."这个文件存在<br>"; switch (filetype($filename)) { case 'dir': echo "这是一个目录<br>"; break; case 'char'; echo "这是一个字符设备<br>"; break; case 'block'; echo "这是一个块设备<br>"; break; case 'link'; echo "这是一个链接<br>"; break; case 'file'; echo "这是一个文件<br>"; break; default; echo "该文件类型是未知类型。<br>"; } echo "大小:".changesize_dw(filesize($filename))."<br>"; echo "取得文件的上次访问时间".fileatime($filename)."<br>"; //判断是否可读 if (is_readable($filename)) { echo "文件可读<br>"; }else{ echo "文件不可读<br>"; } //判断是否可写 if(is_writeable($filename)){ echo "文件可写<br>"; }else{ echo "文件不可写<br>"; } }else{ echo "文件不存在<br>"; } } getfile("./hello.txt"); ?>
00x2 解析目录路径
目录的基本操作
- 1.解析目录路径
- 2.遍历目录
- 3.统计目录大小
- 4.建立与删除目录
- 5.复制目录
注意:
- 在linux中是正斜杠,windows中是反斜杠。可以使用DIRRECTORY_SEPARATOR常量(这种变量可夸平台)代替。
- 连接多个路径linux中是(:),windows中是(;)(windows案例就是环境变量中)可以使用PATH_SEOARATOR常量(这种变量可夸平台)
- 相对路劲:相对的路径 绝对路径:根路劲开始
00x3 遍历目录
<?php print_r(glob("./../scripts/*.*"))#glob遍历scripts目录下所有的文件,指定后缀:*.php ?>
输出效果如下所示:
我们可以使用foreach将其遍历出来。
<?php foreach(glob("./../scripts/*.*") as $filename){ echo $filename."<br/>"; } ?>
输出效果:
00x4 目录操作
<?php $a = opendir('def'); while($filename = readdir($a)){#readdir函数是读取$a中的资源(资源即为文件名) echo $filename."<br />";#第一次输出就输出第一个文件的文件名,第二次就输出第二次的文件名。 } closedir($a);#关闭文件夹 ?>
想要把.和..去掉。可以使用if
<?php $a = opendir('def'); while($filename = readdir($a)){#readdir函数是读取$a中的资源(资源即为文件名) if($filename !="." && $filename !=".."){ echo $filename."<br />";#第一次输出就输出第一个文件的文件名,第二次就输出第二次的文件名。 } } closedir($a);#关闭文件夹 ?>
如果我想要区分出哪些是文件,哪些是目录该咋做呢?
<?php $a = opendir('def'); while($filename = readdir($a)){#readdir函数是读取$a中的资源(资源即为文件名) if($filename !="." && $filename !=".."){ $filename = "/def/".$filename; if(is_dir($filename)){ echo "目录:".$filename; }else{ echo "文件:".$filename."<br />";#第一次输出就输出第一个文件的文件名,第二次就输出第二次的文件名。 } } } closedir($a);#关闭文件夹 ?>
想要再次遍历一次数组。可以使用rewinddir倒回目录句柄函数。比较简单我就给折叠了。要看自己打开哈。
<?php $a = opendir('def'); while($filename = readdir($a)){#readdir函数是读取$a中的资源(资源即为文件名) if($filename !="." && $filename !=".."){ $filename = "./def/".$filename; if(is_dir($filename)){ echo "目录:".$filename."<br>"; }else{ echo "文件:".$filename."<br />";#第一次输出就输出第一个文件的文件名,第二次就输出第二次的文件名。 } } } rewinddir($a); echo "++++++++++++++++++++++++++++++++++++++++++++++++++<br>"; while($filename = readdir($a)){#readdir函数是读取$a中的资源(资源即为文件名) if($filename !="." && $filename !=".."){ $filename = "./def/".$filename; if(is_dir($filename)){ echo "目录:".$filename."<br>"; }else{ echo "文件:".$filename."<br />";#第一次输出就输出第一个文件的文件名,第二次就输出第二次的文件名。 } } } closedir($a);#关闭文件夹 ?>
00x5 文件的一些基本操作
<?php //以下较为简单可以直接查手册。 //copy("def.txt","hello.txt"); //rename("hello","world"); //删除文件:unlink("def"); //删除变量:unset($a); //file_put_contents("./def.txt", "hello world!") #向def.txt写入hello world!如果第二次写的话会将其覆盖。 //file_exists #检索文件是否存在 //readfile("./def.txt") #输出def.txt文件当中的内容。 //++++++++++++++++++++++++++++++++++++++++++ //fread案例:使用二进制的形式去读取文件 // $a = fopen("./def.txt","rb");//fopen打开的可以是一个URL、一个文件。 // $b = fread($a,10); // echo $b; // fclose($a); //++++++++++++++++++++++++++++++++++++++++++ //
?>
fopen的模式:http://www.w3school.com.cn/php/func_filesystem_fopen.asp
注意哦,w这个模式会将文件清空再打开。
fwrite写入文件:
fwrite("./def.txt","你好,世界。");
fgetc从文件指针中读取文件:
$a = fopen("./def.txt","r+");
echo fgetc($a);
但是这样只可以读取出def.txt里的一个字符。如果要读取出def.txt中的所有内容那么该用switch循环输出。在此之前还要学习一个函数,就是feof函数,feof:当文件指针指到了EOF(end of file,文件的最后)则返回真,否则返回false。
$a = fopen("./def.txt"."r+"); switch (!feof($a)){#当$a没有指到文件的最后的时候一直循环 echo fgetc($a); }
但其实fgetc还有第二个参数就是读取的长度。fgetc($a,5);所以我们要读取def.txt里面的所有数据也可以那么写,fgetc($a,filesize('./def.txt'));
00x6 文件的锁定机制
By:珍惜少年时博客:http://www.cnblogs.com/xishaonian/
*-------------------------------------------*