Blogger Information
Blog 33
fans 0
comment 0
visits 49782
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP 目录与文件操作常用函数
Lon
Original
1554 people have browsed it

PHP 目录与文件操作常用函数

一、目录操作

1.创建一个新目录 mkdir()

第一个参数;指定目录的路径
第二个参数:默认的 mode 是 0777,意味着最大可能的访问权。$mode在windows下被忽略。 注意$mode的值为八进制
第三个参数:如果指定的路径的上级目录不存在,则也会递归创建。

  1. $dirname = "./public/index";
  2. mkdir($dirname,0777,true);

2.判断是否是一个目录 is_dir()

  1. $dirname = "./public/index";
  2. if(is_dir($dirname)){
  3. echo "{$dirname}是目录<br>";
  4. }else{
  5. echo "{$dirname}是一个文件<br>";
  6. }

3.判断目录或文件是否存在 file_exists()

  1. if(file_exists($dirname)){
  2. echo "{$dirname}文件存在<br>";
  3. if(is_dir($dirname)){
  4. echo "{$dirname}是目录<br>";
  5. }else{
  6. echo "{$dirname}是一个文件<br>";
  7. }
  8. }else{
  9. echo "{$dirname}文件不存在<br>";
  10. }

4.删除目录 rmdir()

  1. //判断目录或文件是否存在
  2. if(file_exists($dirname)){
  3. //判断是否是目录
  4. if(is_dir($dirname)){
  5. //尝试删除 dirname 所指定的目录。 该目录必须是空的,且要有相应的权限。
  6. rmdir($dirname);
  7. }
  8. }

5.更改目录的访问权限 chmod()

参数包含三个八进制数按顺序分别指定了所有者、所有者所在的组以及所有人的访问限制。
每一部分都可以通过加入所需的权限来计算出所要的权限。
数字 1 表示使文件可执行,数字 2 表示使文件可写,
数字 4 表示使文件可读。加入这些数字来制定所需要的权限。
提示:在window下文件的只读权限是 0444,文件夹只读权限0555。
注意:此函数不能作用于远程文件。

  1. //文件或目录的权限,权限值不能价引号,Windows会忽略权限值,而Linux下才会有效果
  2. chmod($dirname,0777);

6.取得目录或文件访问权限 fileperms()

  1. //获取文件的权限值,返回值:以十进制数字返回文件的访问权限
  2. $int = fileperms($dirname);
  3. //十进制转换为八进制
  4. $int = decoct($int);
  5. echo $int;
  6. echo '<hr>';
  7. //截取字符串40777转成0777
  8. echo substr($int,-4);

7.重命名或移动文件或目录 rename()

  1. //重命名或移动一个文件或目录。如果文件不存在同一目录下,就是移动。
  2. $oldname = "./public/icon";
  3. $newname = "./icon";
  4. rename($oldname,$newname);

8.打开目录 opendir()

  1. // 描述:打开目录句柄,可用于之后的 closedir(),readdir() 和 rewinddir() 调用中
  2. // 打开目录,成功返回目录句柄(资源型),失败返回false
  3. $handle = opendir($dirname);
  4. var_dump($handle);

9.读取目录中条目 readdir()

  1. //描述:从目录句柄中读取条目 (文件或目录)
  2. while($line = readdir($handle)){
  3. echo $line."<br>";
  4. }

10.显示中文目录或文件 iconv()

  1. //语法:string iconv ( string $in_charset , string $out_charset , string $str )
  2. //参数:$in_charset,输入的字符集;$out_charset,输出的字符集;$str,要转换的字符串
  3. while($line = readdir($handle)){
  4. echo iconv('utf-8','utf-8',$line)."<br>";
  5. }

11.关闭目录句柄 closedir()

  1. //描述:关闭由 dir_handle 指定的目录流。流必须之前被 opendir() 所打开。
  2. //关闭目录句柄,节省服务器资源
  3. closedir($handle);

二、文件操作

1、打开文件 fopen()

打开文件或者 URL 参数:$filename,指定要打开的目标文件或URL;$mode,指定文件的打开方式。

  1. $filename = "./01.jpg";
  2. //以只读方式打开文件,返回文件句柄资源
  3. $handle = fopen($filename,'rb');
  4. //以写入方式打开文件,返回文件句柄资源

打开文件的方式

1) ‘r’ 只读方式打开,将文件指针指向文件头。
2) ‘w’ 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
3) ‘a’ 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

2.读取指定大小文件内容 fread()

读取文件(可安全用于二进制文件)参数:$handle是由fopen()创建的handle;$length最多读取的字节数

  1. // 1.读取全部数据:filesize()函数获取文件大小,以字节为单位
  2. $str = fread($handle,filesize($filename));
  3. // 2.告诉跨浏览器,以图片数据显示
  4. header("Content-Type:image/png ");
  5. echo $str;

3.关闭文件 fclose()

  1. // 描述:关闭一个已打开的文件指针
  2. fclose($handle);

4.读取一行内容 fgets()

参数:$handle:文件指针必须是有效的
$length:从 handle指向的文件中读取一行并返回长度最多为 length - 1 字节的字符串。
碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(看先碰到那一种情况)。
如果没有指定 length,则默认为 1K,或者说 1024 字节。

  1. <?php
  2. $filename = "./student.txt";
  3. //以只读方式打开文件,返回文件句柄资源
  4. $handle = fopen($filename,'rb');
  5. // 循环遍历读取数据,喷到换行符都会终止读取
  6. while($str = fgets($handle)){
  7. echo $str."<br>";
  8. }
  9. fclose($handle);
  10. ?>

5.读取文件内容到数组中 file()

描述:把整个文件读入一个数组中
参数:$filename,文件的路径;$flags,附加选项;
FILE_USE_INCLUDE_PATH(1):在include_path 中查找文件;
FILE_IGNORE_NEW_LINES(2):在数组的每个元素末尾不添加换行符;
FILE_SKIP_EMPTY_LINES(4):跳过空行。

  1. $filename = "http://www.php.cn/";
  2. // 不用打开文件和关闭文件
  3. $arr = file($filename,2|4);
  4. // 打开数组
  5. print_r($arr);

6.将整个文件读入一个字符串 file_get_contents()

  1. <?php
  2. //打开文件 fopen() 实例:读取远程网页的数据
  3. $filename = "http://news.sina.com.cn/";
  4. // 描述:将整个文件读入一个字符串 ,不用打开文件,也不用关闭文件
  5. $str = file_get_contents($filename);
  6. // 打开数组
  7. print_r($str);
  8. ?>

7.将一个字符串写入文件 file_put_contents()

描述:和依次调用 fopen(),fwrite()以及 fclose() 功能一样。
参数:$filename要被写入数据的文件名。
$data要写入的数据。类型可以是 string,array(一维数组)。
$flags附加选项。FILE_USE_INCLUDE_PATH(1) 在 include 目录里搜索 filename
FILE_APPEND(8)如果文件 filename已经存在,追加数据而不是覆盖。
LOCK_EX(2)在写入时获得一个独占锁

  1. // 实例:将新浪新闻主页另存为到本地
  2. $filename = "http://news.sina.com.cn/";
  3. /* $filename = "http://news.sina.com.cn/";*/
  4. // 读取网页内容到字符串中
  5. $str = file_get_contents($filename);
  6. // 另存为本地文件
  7. file_put_contents('./sina.html',$str);

8.写入文件内容 fwrite()

  1. <?php
  2. //实列:写入文件内容 fwrite()
  3. //描述:写入文件(可安全用于二进制文件)
  4. $filename = "./student.txt";
  5. // 以追加方式打开文件
  6. $handle =fopen($filename,'ab');
  7. // 写入一行数据windows下换行符为"\r\n".linux下换行符为”\n“
  8. $str = "1001,lisi,20,4500,河南\r\n";
  9. fwrite($handle,$str);
  10. fclose($handle);
  11. ?>

9.复制文件 copy()

  1. <?php
  2. // 实例:复制文件
  3. $old = "./01.jpg";
  4. $new = "./02.jpg";
  5. copy($old,$new);
  6. ?>

10.删除文件 unlink

  1. <?php
  2. // 实例删除文件
  3. $new = "./02.jpg";
  4. unlink($new);
  5. ?>

三、实例

1.递归展示所有目录和文件

分析过程:
(1)函数递归:递归是通过函数调用自己来实现
(2)操作顺序:打开目录-读取所有条目
(3)递归条件:如果它是目录,则递归调用,即打开打开目录-读取所有条目录
(4)关闭目录

  1. <?php
  2. //实例:递归展示所有目录和文件
  3. function show_all_files($dir){
  4. //打开目录,返回目录句柄资源
  5. $handle = opendir($dir);
  6. // var_dump($handle);die();
  7. echo "<ul>";
  8. //循环读取目录中所有条目
  9. while ($line = readdir($handle)) {
  10. //如果是"."或者是"..",则跳过
  11. if($line == '.' || $line == '..' ){
  12. continue;//终止本次循环,开始下一次循环,本次循环的剩于代码不再执行
  13. }
  14. echo "<li>{$line}</li>";
  15. //如果当前条目是目录,则递归调用
  16. if(is_dir($dir."/".$line)){//退出递归条件
  17. show_all_files($dir."/".$line);
  18. }
  19. }
  20. echo "</ul>";
  21. }
  22. //调用函数
  23. show_all_files("./public");
  24. ?>

2.递归删除目录

  1. <?php
  2. // 实例:
  3. function del_all_files($dir){
  4. // 打开目录
  5. $handle = opendir($dir);
  6. // 循环读取所有条目
  7. while ($line = readdir($handle)) {
  8. // 如果是"."或者"..",则跳过
  9. if($line == '.' || $line == '..'){
  10. continue;
  11. }
  12. // 判断是文件还是目录
  13. if(is_dir($dir."/".$line)){
  14. //递归调用
  15. del_all_files($dir."/".$line);
  16. }else{
  17. // 如果是文件,直接删除
  18. unlink($dir."/".$line);
  19. }
  20. }
  21. // 关闭目录
  22. closedir($handle);
  23. // 删除目录
  24. rmdir($dir);
  25. }
  26. // 调用函数
  27. del_all_files("./public");
  28. ?>
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post