php操作目录

创建一个新的目录mkdir()

ü 描述:尝试新建一个由 pathname 指定的目录。
ü 语法:bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false ]] )
ü 参数:
n $pathname:指定目录的路径;
n $mode:默认的 mode 是 0777,意味着最大可能的访问权。$mode在windows下被忽略。 注意$mode的值为八进制。
n $recursive:如果指定的路径的上级目录不存在,则也会递归创建。
ü 返回值:成功时返回TRUE,失败时返回FALSE。

  1. <?php
  2. //创建一个新的目录
  3. $dirname = "./public/a/b/c/d";
  4. //第1个参数:目录名称
  5. //第2个参数:目录访问权限,0777最大权限
  6. //第3个参数:如果上层目录不存在,则会递归创建
  7. mkdir($dirname,0777,true);

判断当前文件,是文件,还是目录is_dir()

ü 描述:判断给定文件名是否是一个目录。
ü 语法:bool is_dir ( string $filename )
ü 返回值:如果文件名存在,并且是个目录,返回 TRUE,否则返回FALSE。

  1. <?php
  2. //判断当前文件,是文件,还是目录
  3. $dirname = "./public";
  4. if(is_dir($dirname))
  5. {
  6. echo "{$dirname}是目录!";
  7. }else
  8. {
  9. echo "{$dirname}是一个文件!";
  10. }

判断文件是否存在file_exists()

ü 语法:bool file_exists ( string $filename )
ü 提示:可以判断文件,也可以判断目录,是否存在。
返回:如果由 filename 指定的文件或目录存在则返回 TRUE,否则返回 FALSE。

  1. <?php
  2. //判断文件是否存在
  3. $dirname = "./public";
  4. if(file_exists($dirname))
  5. {
  6. echo "{$dirname}文件存在!<br>";
  7. //如果文件存在,再判断它是目录还是普通文件
  8. if(is_dir($dirname))
  9. {
  10. echo "{$dirname}是一个目录!";
  11. }else
  12. {
  13. echo "{$dirname}不是目录!";
  14. }
  15. }else
  16. {
  17. echo "{$dirname}文件不存在!";
  18. }

删除目录rmdir()

Ø 语法:bool rmdir ( string $dirname )
Ø 参数:$dirname目录路径。
Ø 返回值:成功时返回 TRUE, 或者在失败时返回 FALSE。
Ø 提示:尝试删除 dirname 所指定的目录。 该目录必须是空的,且要有相应的权限。

  1. <?php
  2. //判断文件是否存在
  3. $dirname = "./public";
  4. if(file_exists($dirname))
  5. {
  6. //判断是不是目录
  7. if(is_dir($dirname))
  8. {
  9. //删除目录:该目录必须是空的
  10. rmdir($dirname);
  11. }
  12. }

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

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

  1. $dirname = "./05获取文件权限值.php";
  2. //windows会忽略权限值,而linux下才有效果
  3. chmod($dirname,0754);

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

Ø 语法:int fileperms ( string $filename )
返回值:以十进制数字返回文件的访问权限。

  1. <?php
  2. //更改文件或目录的权限,权限值不能加引号
  3. $dirname = "./05获取文件权限值.php";
  4. //windows会忽略权限值,而linux下才有效果
  5. chmod($dirname,0754);
  6. //获取文件的权限值,返回十进制
  7. $int = fileperms($dirname);
  8. //十进制转成8进制
  9. $int = decoct($int);
  10. //截取字符串:40777转成0777
  11. echo substr($int,2);

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

ü 描述:重命名或移动一个文件或目录。如果文件不存在同一目录下,就是移动。
ü 语法:bool rename ( string $oldname , string $newname )
ü 返回值:成功时返回 TRUE, 或者在失败时返回 FALSE。

  1. <?php
  2. //更改目录或文件名称,确定原目录必须存在
  3. //注意:如果原目录和新目录都位于同一个父目录下,则认为是改名;
  4. //注意:如果原目录和新目录位于不同父目录下,则认为是移动。
  5. $oldname = "./public";
  6. $newname = "./test/public";
  7. rename($oldname,$newname);

打开目录opendir()

ü 描述:打开目录句柄,可用于之后的 closedir(),readdir() 和 rewinddir() 调用中。
ü 语法:resource opendir ( string $path )
返回值:如果成功则返回目录句柄的 resource,失败则返回 FALSE。
image.png

读取目录中条目readdir()

ü 描述:从目录句柄中读取条目 ;
ü 语法:string readdir ([ resource $dir_handle ] )
ü 说明:返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回。
ü 返回:成功则返回文件名 或者在失败时返回 FALSE 。
image.png

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

ü 描述:字符串按要求的字符编码来转换
ü 语法:string iconv ( string $in_charset , string $out_charset , string $str )
ü 参数:
n $in_charset,输入的字符集;
n $out_charset,输出的字符集;
n $str,要转换的字符串;
ü 返回:返回转换后的字符串, 或者在失败时返回 FALSE。

image.png

关闭目录句柄closedir()

ü 描述:关闭由 dir_handle 指定的目录流。流必须之前被 opendir() 所打开。
ü 语法:void closedir ( [resource $dir_handle] )
提示:如果省略$dir_handle,则默认为最后由opendir()打开的目录句柄。
image.png

PHP操作文件

打开/创建 文件fopen()

ü 描述:打开文件或者 URL
ü 语法:resource fopen ( string $filename , string $mode )
ü 参数:$filename,指定要打开的目标文件或URL;$mode,指定文件的打开方式。
ü 提示:为移植性考虑,在用 fopen()打开文件时总是使用 ‘b’ 标记。binary
ü 返回值:成功时返回文件指针资源,如果打开失败,本函数返回 FALSE。
image.png
以写入方式打开,它自动创建文件
image.png

打开文件的方式

image.png

关闭文件fclose()

ü 描述:关闭一个已打开的文件指针
ü 语法:bool fclose ( resource $handle )
参数:$handle必须是由fopen()打开的文件指针
image.png

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

ü 描述:读取文件(可安全用于二进制文件)
ü 语法:string fread ( resource $handle , int $length )
ü 参数:$handle是由fopen()创建的handle;$length最多读取的字节数。
ü 提示:在区分二进制文件和文本文件的系统上(如 Windows)打开文件时,fopen() 函数的 mode 参数要加上 ‘b’。
ü 返回值:返回所读取的字符串, 或者在失败时返回 FALSE。
image.png

读取一行内容fgets()

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

  1. <?php
  2. //实例:读取记事本的学生信息数据
  3. $filename = "./images/student.txt";
  4. //以只读方式打开
  5. $handle = fopen($filename,'rb');
  6. //循环读取所行数据:碰到换行符、文件结束符都会终止读取
  7. while($str = fgets($handle))
  8. {
  9. echo iconv('gbk','utf-8',$str)."<br>";
  10. }

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

ü 描述:把整个文件读入一个数组中
ü 语法:array file ( string $filename [, int $flags = 0 ] )
ü 参数:
n $filename,文件的路径;
n $flags,附加选项;
n FILE_USE_INCLUDE_PATH(1):在include_path 中查找文件;
n FILE_IGNORE_NEW_LINES(2):在数组的每个元素末尾不添加换行符;
n FILE_SKIP_EMPTY_LINES(4):跳过空行。
ü 注意:不需要打开文件和关闭文件。

  1. <?php
  2. //实例:读取远程网页数据
  3. $filename = "http://news.sina.com.cn";
  4. //不用打开文件和关闭文件
  5. $arr = file($filename,2|4);
  6. //打开数组
  7. print_r($arr);

image.png
image.png

读取文件内容到字符串中file_get_contents()

ü 描述:将整个文件读入一个字符串 ,不用打开文件,也不用关闭文件
ü 语法:string file_get_contents ( string $filename )
ü 返回:返回读取的数据,或在失败时返回false。

  1. <?php
  2. //实例:读取远程网页数据
  3. $filename = "http://news.sina.com.cn";
  4. //不用打开文件和关闭文件
  5. $str = file_get_contents($filename);
  6. //打开数组
  7. print_r($str);

image.png

写入文件内容

ü 描述:写入文件(可安全用于二进制文件)
ü 语法:int fwrite ( resource $handle , string $string )
ü 返回:返回写入的字符数,出现错误时则返回 FALSE 。
image.png

将一个字符串写入文件 !!!!!!!(重要)

ü 描述:和依次调用 fopen(),fwrite()以及 fclose() 功能一样。
ü 语法:int file_put_contents ( string $filename , mixed $data [, int $flags = 0] )
ü 参数:
n $filename要被写入数据的文件名。
n $data要写入的数据。类型可以是 string,array(一维数组)。
n $flags附加选项。
n FILE_USE_INCLUDE_PATH(1) 在 include 目录里搜索 filename
n FILE_APPEND(8)如果文件 filename已经存在,追加数据而不是覆盖
n LOCK_EX(2)在写入时获得一个独占锁。
ü 提示:如果文件不存在,则会自动创建。如果文件过大,不能一次性处理
ü 返回:该函数将返回写入到文件内数据的字节数,失败时返回FALSE。
image.png

拷贝文件

ü 描述:将文件从 source 拷贝到 dest。
ü 语法:bool copy ( string $source , string $dest )
ü 提示:如果目标文件存在,则会覆盖。
image.png

删除文件

ü 语法:bool unlink ( string $filename )
ü 返回:成功时返回 TRUE, 或者在失败时返回 FALSE。
ü 提示:可以删除虚拟空间之外的文件,但必须使用相对路径(../),但必须有权限。
注意:删除的文件不会进入回收站
image.png

其它的文件操作函数

ü filesize(),可以获取文件大小,单位为字节。
ü is_writable(),判断文件是否可写。
ü is_readable(),判断文件是否可读。
ü feof(),判断文件指针是否到达文件结尾。
ü filectime(),获取创建文件的时间。
ü fileatime(),获取文件最新访问时间。
filemtime(),获取文件最后修改时间。

实战

递归遍历phpMyAdmin目录下所有条目

  1. <?php
  2. //实例:递归显示phpMyAdmin目录中所有条目
  3. /*
  4. 分析过程:
  5. (1)函数递归:递归是通过函数调用自己来实现
  6. (2)操作顺序:打开目录——读取所有条目
  7. (3)递归条件:如果它是目录,则递归调用,即打开目录——读取目录条目
  8. (4)关闭目录
  9. */
  10. function show_all_files($dir){
  11. //打开目录:返回目录句柄资源
  12. $handle = opendir($dir);
  13. echo "<ul>";
  14. //循环读取目录中所有条目
  15. while($line = readdir($handle))
  16. {
  17. //如果是'.'或'..',则跳过
  18. if($line=='.' || $line=='..')
  19. {
  20. continue; //中止本次循环,开始下一次循环
  21. //本次循环的剩余代码不再执行
  22. }
  23. echo "<li>$line</li>";
  24. //如果当前条目是目录,则递归调用:phpMyAdmin/js
  25. if(is_dir($dir."/".$line)) //退出递归的条件
  26. {
  27. show_all_files($dir."/".$line);
  28. }
  29. }
  30. echo "</ul>";
  31. //关闭目录
  32. closedir($handle);
  33. }
  34. //调用函数
  35. show_all_files("./phpMyAdmin");

递归删除phpMyAdmin目录

  1. <?php
  2. //实例:递归删除phpMyAdmin目录
  3. function del_all_files($dir) {
  4. //打开目录
  5. $handle = opendir($dir);
  6. //循环读取所有条目
  7. while($line = readdir($handle)) {
  8. //如果是'.'或'..',则跳过
  9. if($line=='.' || $line=='..')
  10. {
  11. continue;
  12. }
  13. //判断是文件,还是目录
  14. if(is_dir($dir."/".$line))
  15. {
  16. //递归调用
  17. del_all_files($dir."/".$line);
  18. }else{
  19. //如果是文件,直接删除
  20. unlink($dir."/".$line);
  21. }
  22. }
  23. //关闭目录
  24. closedir($handle);
  25. //删除目录
  26. rmdir($dir);
  27. }
  28. //调用函数
  29. del_all_files("./phpMyAdmin");

读取指定大小的文件内容

读取图片

  1. <?php
  2. //实例:读取一张图片二进制数据
  3. $filename = "./images/img01.jpg";
  4. //以只读方式打开
  5. $handle = fopen($filename,'rb');
  6. //读取全部数据:filesize()函数获取文件大小,以字节为单位
  7. $str = fread($handle,filesize($filename));
  8. //告诉浏览器:以图片数据显示
  9. header("Content-Type:image/png");
  10. echo $str;
  11. //关闭文件
  12. fclose($handle);

读取记事本学生信息

student.txt

  1. <?php
  2. //实例:读取记事本学生信息,并用表格显示出来
  3. $filename = "./images/student.txt";
  4. //将记事本数据读入到数组中
  5. $arr = file($filename,2|4);
  6. //构建输出的表格字符串
  7. $str = "<table border='1'>";
  8. foreach($arr as $value)
  9. {
  10. //将取到的每个数组元素的值,分割成一维数组
  11. $arr2 = explode(',',$value);
  12. $str .= "<tr>";
  13. foreach($arr2 as $value2)
  14. {
  15. $str .= "<td>".iconv('gbk','utf-8',$value2)."</td>";
  16. }
  17. $str .= "</tr>";
  18. }
  19. $str .= "</table>";
  20. //输出结果字符集
  21. echo $str;

image.png