又是一堆函数。
PHP具有文件夹和文件的处理能力
对文件夹的处理包括:创建、删除、复制 、移动、重命名、修改权限等目录操作。
对文件的处理包括:创建、打开、写入、关闭、删除文件。

存在性检测

判断是否是一个目录

1
2
is_dir($dirpath);
#返回值:如果是目录返回true,否则返回false

判断文件类型

1
2
filetype($path);
#返回值:如果是文件返回file,如果是目录返回dir

判断文件目录是否存在

1
2
is_exists($path);
#返回值:如果存在返回true不存在返回false

创建目录

1
2
3
4
5
6
7
8
bool mkdir($pathname,$mode,$recursive);
/*
参数说明
$path:必填 目录名称
$mode:可选 目录的访问权限。默认为0777(八进制) 为最大权限
$recursive 可选 如果上层目录不存在 是否递归创建
创建成功返回true 否则返回false
*/

判断当前文件夹下是否有images目录,并试图创建

1
2
3
4
5
6
7
8
<?php
$dir = './images';
if(is_exists($dir)){
mkdir($dir,0777,true);
echo "{$dir}已创建成功";
}else{
echo "文件或目录已经存在";
}

目录的其他操作

删除目录
只能删除空的目录

1
2
3
4
5
6
$dir = './images';
if(rmdir($dir)){
echo "删除成功";
}else{
echo "删除失败";
}

如果目录不为空怎么删除呢? 点我
更改目录的访问权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//获取目录或文件权限
$dir = './images';
$px = fileperms($dir);
//得到的是int类型(十进制)的权限值,需要把$px转八进制(decoct)
$px = decoct($px);
echo "{$dir}的权限为{$px}";
//修改权限
chmod($path,$mode);
/*
参数说明
$path 将要修改问目录或是文件名
$mode设置访问权限的值,必须是一个八进制的整数值。如:0777、0644、0600、0444
参数包含三个八进制数按顺序分别指定了所有者、所有者所在的组以及所有人的访问限制。
每一部分都可以通过加入所需的权限来计算出所要的权限。数字 1 表示使文件可执行,数字
2 表示使文件可写,数字 4 表示使文件可读。加入这些数字来制定所需要的权限。
注意:在 windows 系统下,将忽略它。只有在 linux、unix 系统下才真正有效果
*/

目录重命名或移动目录(适用于文件)

1
2
3
4
$oldDir = './images';
$newDir = '../images';
var_dump(rename($oldDir,$newDir));
#不同目录相当于移动目录

打开目录 opendir()

1
2
3
$dir = './images';
$stm = opendir($dir);
#如果成功返回目录句柄 失败返回false

读取目录中的条目

1
2
3
$dir = './images';
$line = readdir($dir);
#每次从目录中读取一个文件名,并下移文件指针

显示中文目录或文件

1
2
3
4
5
6
7
iconv ( string $in_charset , string $out_charset , string $str )
/*
参数说明
$in_charset 输入字符集
$out_charset 输出字符集
$str 原始字符串
*/

示例

1
2
3
4
5
6
7
8
9
10
$dir = './images';
//打开目录
$handle = opendir($dir);
//循环读取目录句柄中的条目
where($line = readdir($handle)){
//将操作系统的字符集gbk,转成网页字符集utf-8
echo iconv('gbk','utf-8',$line).'<br>';
}
//关闭句柄
closedir($handle);

递归遍历所以子目录和文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
//统计文件数
$count = 0;
function getFileAndDir($dir){
//打开目录
$handle = opendir($dir);
global $count;
//递归便利目录
echo '<ul>';
//循环取出文件中的每个文件夹和文件
while($lineDir = readdir($handle)){
//过滤'.'(当前文件夹)'..'(上级文件夹)
if($lineDir == '.' || $lineDir == '..') continue;
//通过iconv 中文文件名转码
echo '<li>'.iconv('gbk','utf-8',$lineDir).'<li>';
//判断是否是目录
if(is_dir($dir.'/'.$lineDir)){
//如果是,继续调用当前函数
getFileAndDir($dir.'/'.$lineDir);
}else{
//否则统计文件个数
$count++;
}
}
echo '</ul>';
}
$dir = './images';
getFileAndDir($dir);
echo '文件个数为'.$count;

PHP 操作文件

打开文件

1
2
3
4
5
6
$handle = fopen($filename,$mode);
/*
$filename 打开文件的名称
$mode 打开方式

*/


关闭文件

1
fclose($handle);

获取文件大小

1
$size = filesize($filename);

示例读取一张图片

1
2
3
4
5
6
7
8
9
<?php
//生命页面字符集:为图片类型
header("content-type:image/jpeg");
$filename = './images/1.jpg';
//打开文件以只读的方式打开
$handle = fopen($filename,'rd');
//读取文件的所以数据
$str = fread($handle,filesize($filename));
echo ($str);

把整个文件读入数组

1
$arr = file($path);


二进制的数据,不适合使用 file()函数来读取

把文件内容读入字符串(不用打开) file_get_contents()

1
2
$path = './images/test.txt';
$str = file_get_contents($path);

写入文件内容

1
2
3
4
5
6
fwrite($handle,$string, $length );
/*
$handle 文件句柄;
$string 写入的内容
$length 写入的字符长度
*/

将字符串写入文件(不用打开) file_put_contents()

1
2
3
$str = 'Hello World';
$path = './a.html';
file_put_contents($path,$str);

拷贝文件 copy()

1
bool copy ('源文件','目标文件' );

1
2
3
4
5
6
<?php
//生命页面字符集
header("content-type:text/html;charset=utf-8");
$source = './sina.html';
$dest = './sina.htm';
copy($source,$dest);

删除文件

1
2
@unlink($filename);
//一般会加上错误抑制符

其它文件操作函数
is_writable()判断文件是否可写;
is_readable()判断文件是否可读;
feof()判断文件指针是否到达文件结尾
filectime()获取文件创建的时间戳
fileatime()获取文件最后访问的时间戳
filemtime()获取文件修改的时间戳

递归删除所有目录下的文件及目录


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
function delAllFile($dir){
//打开目录
$handle = opendir($dir);
while($lineDir = readdir($handle)){
//过滤'.'(当前文件夹)'..'(上级文件夹)
if($lineDir == '.' || $lineDir == '..') continue;
if(is_dir($dir.'/'.$lineDir)){
//如果是,继续调用当前函数
delAllFile($dir.'/'.$lineDir);
}else{
//否则删除
@unlink($dir.'/'.$lineDir)
}
}
//关闭目录
colsedir($handle);
//删除当前空目录
rmdir($dir);
}
$dir = './images';
delAllFile($dir);

 评论



本站使用 Material X 作为主题 , 总访问量为 次 。
隐藏