一、目录操作
1.创建一个新目录 mkdir()
第一个参数;指定目录的路径
第二个参数:默认的 mode 是 0777,意味着最大可能的访问权。$mode在windows下被忽略。 注意$mode的值为八进制
第三个参数:如果指定的路径的上级目录不存在,则也会递归创建。
$dirname = "./public/index";mkdir($dirname,0777,true);
2.判断是否是一个目录 is_dir()
$dirname = "./public/index";if(is_dir($dirname)){echo "{$dirname}是目录<br>";}else{echo "{$dirname}是一个文件<br>";}
3.判断目录或文件是否存在 file_exists()
if(file_exists($dirname)){echo "{$dirname}文件存在<br>";if(is_dir($dirname)){echo "{$dirname}是目录<br>";}else{echo "{$dirname}是一个文件<br>";}}else{echo "{$dirname}文件不存在<br>";}
4.删除目录 rmdir()
//判断目录或文件是否存在if(file_exists($dirname)){//判断是否是目录if(is_dir($dirname)){//尝试删除 dirname 所指定的目录。 该目录必须是空的,且要有相应的权限。rmdir($dirname);}}
5.更改目录的访问权限 chmod()
参数包含三个八进制数按顺序分别指定了所有者、所有者所在的组以及所有人的访问限制。
每一部分都可以通过加入所需的权限来计算出所要的权限。
数字 1 表示使文件可执行,数字 2 表示使文件可写,
数字 4 表示使文件可读。加入这些数字来制定所需要的权限。
提示:在window下文件的只读权限是 0444,文件夹只读权限0555。
注意:此函数不能作用于远程文件。
//文件或目录的权限,权限值不能价引号,Windows会忽略权限值,而Linux下才会有效果chmod($dirname,0777);
6.取得目录或文件访问权限 fileperms()
//获取文件的权限值,返回值:以十进制数字返回文件的访问权限$int = fileperms($dirname);//十进制转换为八进制$int = decoct($int);echo $int;echo '<hr>';//截取字符串40777转成0777echo substr($int,-4);
7.重命名或移动文件或目录 rename()
//重命名或移动一个文件或目录。如果文件不存在同一目录下,就是移动。$oldname = "./public/icon";$newname = "./icon";rename($oldname,$newname);
8.打开目录 opendir()
// 描述:打开目录句柄,可用于之后的 closedir(),readdir() 和 rewinddir() 调用中// 打开目录,成功返回目录句柄(资源型),失败返回false$handle = opendir($dirname);var_dump($handle);
9.读取目录中条目 readdir()
//描述:从目录句柄中读取条目 (文件或目录)while($line = readdir($handle)){echo $line."<br>";}
10.显示中文目录或文件 iconv()
//语法:string iconv ( string $in_charset , string $out_charset , string $str )//参数:$in_charset,输入的字符集;$out_charset,输出的字符集;$str,要转换的字符串while($line = readdir($handle)){echo iconv('utf-8','utf-8',$line)."<br>";}
11.关闭目录句柄 closedir()
//描述:关闭由 dir_handle 指定的目录流。流必须之前被 opendir() 所打开。//关闭目录句柄,节省服务器资源closedir($handle);
二、文件操作
1、打开文件 fopen()
打开文件或者 URL 参数:$filename,指定要打开的目标文件或URL;$mode,指定文件的打开方式。
$filename = "./01.jpg";//以只读方式打开文件,返回文件句柄资源$handle = fopen($filename,'rb');//以写入方式打开文件,返回文件句柄资源
打开文件的方式
1) ‘r’ 只读方式打开,将文件指针指向文件头。
2) ‘w’ 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
3) ‘a’ 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
2.读取指定大小文件内容 fread()
读取文件(可安全用于二进制文件)参数:$handle是由
fopen()创建的handle;$length最多读取的字节数
// 1.读取全部数据:filesize()函数获取文件大小,以字节为单位$str = fread($handle,filesize($filename));// 2.告诉跨浏览器,以图片数据显示header("Content-Type:image/png ");echo $str;
3.关闭文件 fclose()
// 描述:关闭一个已打开的文件指针fclose($handle);
4.读取一行内容 fgets()
参数:$handle:文件指针必须是有效的
$length:从 handle指向的文件中读取一行并返回长度最多为 length - 1 字节的字符串。
碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(看先碰到那一种情况)。
如果没有指定 length,则默认为 1K,或者说 1024 字节。
<?php$filename = "./student.txt";//以只读方式打开文件,返回文件句柄资源$handle = fopen($filename,'rb');// 循环遍历读取数据,喷到换行符都会终止读取while($str = fgets($handle)){echo $str."<br>";}fclose($handle);?>
5.读取文件内容到数组中 file()
描述:把整个文件读入一个数组中
参数:$filename,文件的路径;$flags,附加选项;
FILE_USE_INCLUDE_PATH(1):在include_path 中查找文件;
FILE_IGNORE_NEW_LINES(2):在数组的每个元素末尾不添加换行符;
FILE_SKIP_EMPTY_LINES(4):跳过空行。
$filename = "http://www.php.cn/";// 不用打开文件和关闭文件$arr = file($filename,2|4);// 打开数组print_r($arr);
6.将整个文件读入一个字符串 file_get_contents()
<?php//打开文件 fopen() 实例:读取远程网页的数据$filename = "http://news.sina.com.cn/";// 描述:将整个文件读入一个字符串 ,不用打开文件,也不用关闭文件$str = file_get_contents($filename);// 打开数组print_r($str);?>
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)在写入时获得一个独占锁
// 实例:将新浪新闻主页另存为到本地$filename = "http://news.sina.com.cn/";/* $filename = "http://news.sina.com.cn/";*/// 读取网页内容到字符串中$str = file_get_contents($filename);// 另存为本地文件file_put_contents('./sina.html',$str);
8.写入文件内容 fwrite()
<?php//实列:写入文件内容 fwrite()//描述:写入文件(可安全用于二进制文件)$filename = "./student.txt";// 以追加方式打开文件$handle =fopen($filename,'ab');// 写入一行数据windows下换行符为"\r\n".linux下换行符为”\n“$str = "1001,lisi,20,4500,河南\r\n";fwrite($handle,$str);fclose($handle);?>
9.复制文件 copy()
<?php// 实例:复制文件$old = "./01.jpg";$new = "./02.jpg";copy($old,$new);?>
10.删除文件 unlink
<?php// 实例删除文件$new = "./02.jpg";unlink($new);?>
三、实例
1.递归展示所有目录和文件
分析过程:
(1)函数递归:递归是通过函数调用自己来实现
(2)操作顺序:打开目录-读取所有条目
(3)递归条件:如果它是目录,则递归调用,即打开打开目录-读取所有条目录
(4)关闭目录
<?php//实例:递归展示所有目录和文件function show_all_files($dir){//打开目录,返回目录句柄资源$handle = opendir($dir);// var_dump($handle);die();echo "<ul>";//循环读取目录中所有条目while ($line = readdir($handle)) {//如果是"."或者是"..",则跳过if($line == '.' || $line == '..' ){continue;//终止本次循环,开始下一次循环,本次循环的剩于代码不再执行}echo "<li>{$line}</li>";//如果当前条目是目录,则递归调用if(is_dir($dir."/".$line)){//退出递归条件show_all_files($dir."/".$line);}}echo "</ul>";}//调用函数show_all_files("./public");?>
2.递归删除目录
<?php// 实例:function del_all_files($dir){// 打开目录$handle = opendir($dir);// 循环读取所有条目while ($line = readdir($handle)) {// 如果是"."或者"..",则跳过if($line == '.' || $line == '..'){continue;}// 判断是文件还是目录if(is_dir($dir."/".$line)){//递归调用del_all_files($dir."/".$line);}else{// 如果是文件,直接删除unlink($dir."/".$line);}}// 关闭目录closedir($handle);// 删除目录rmdir($dir);}// 调用函数del_all_files("./public");?>
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号