一、目录操作
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转成0777
echo 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");
?>