PHP目录操作和文件操作
PHP 操作目录
1,目录操作概述
2,创建新目录 mkdir()
新建一个由pathname指定的目录,创建成功方式ture,否则为false
bool mkdir(string $pathname,[int $mode=0777,[bool $recursive=false]])
$pathname:指定目录的路径
$mode:默认mode是0777,意味着最大可能的访问权,$mode在windows下被忽略,$mode的值为八进制
$recursive:如果指定的路径的上级目录不存在,则也会递归创建
$dirname = "./static";
mkdir($dirname,0777,true);
3,判断是否是一个目录is_dir()
判断给定文件名是否是一个目录
bool is_dir(string $filename);
如果文件名存在且是个目录,返回true,否则返回false
4,判断目录或文件是否存在file_exists()
bool file_exists(string $filename)
可以判断文件和目录是否存在,是则返回true,否则返回false
5,删除目录rmdir()
删除目录:该目录必须是空的,否则会报错
rmdir($dirname);
6,更改目录的访问权限chmod()
改变文件的访问权限
bool chmod(string $filename,int $mode)
$filename:指定文件的路径
$mode:mode参数包含三个八进制数按顺序分别指定所有者,所有者所在的组
以及所有人的访问限制。每一部分都可以通过加入所需的权限
来计算出所要的权限
数字1:文件可执行
数字2:文件可写
数字4:文件可读
文件只读权限:0444
文件夹只读权限:0555
7,取得目录或文件访问权限fileperms()
int fileperms(string $filename)
以十进制数组返回文件的访问权限
8,重命名或移动文件或目录rename()
重命名或移动一个文件或目录,如果文件不存在同一目录下就是移动
bool rename(string $filename,string $newname)
9,打开目录 opendir()
打开目录句柄,可用于之后的closedir(),readdir(),rewinddir()调用中
resource opendir(string $path)
如果成功则返回目录句柄的resource,失败则返回FALSE
$handle = opendir($dirname);
10,读取目录中条目readdir()
从目录句柄中读取条目
string readdir([resource $dir_handle])
返回目录中下一个文件的文件名,文件名以在文件系统中的排序返回
11,显示中文目录或文件iconv()
字符串按要求的字符编码来转换
string iconv(string $in_charset,string $out_charset,string $str)
$in_charset:输入的字符集
$out_charset:输出的字符集
$str:要转换的字符串
返回:返回转换后的字符串,或者在失败是返回false
12,关闭目录句柄 closedir()
关闭由dir_handle指定的目录流,流必须之间被opendir()锁打开
void closedir([resource $dir_handle)
提示:如果省略$dir_handle,则默认为最后由opendir()打开的目录句柄
节省服务器资源
综合实例:递归遍历phpMyAdmin下的所有条目
1,递归思想
把一个相对复杂的问题转化为一个与原问题相似的规模较小的问题来解决
2,递归实现的条件
确定递归公式
确定递归边界条件(递归出口),否则会出现死循环
PHP操作文件
1,打开文件 fopen()
打开文件或url
resource fopen(string $filename,string $mode)
$filename:要打开的文件
$mode:打开的方式
提示:为移植性考虑,在用fopen()打开文件时总是使用'b'标记
返回值,成功时返回文件指针资源,如果打开失败,本函数返回false
2,打开文件的方式
mode 说明
'r' 只读,将文件指向文件头
'r+' 读写方式打开
'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零,若不存在,则创建
'w+' 读写入方式打开,将文件指针指向文件头并将文件大小截为零,若不存在,则创建
'a' 写入,文件指针指向文件末尾,若不存在,则创建
'a+' 读写方式打开,文件指针指向文件末尾,若不存在,则创建
'x' 只写,并创建文件,若文件已存在,则fopen()调用失败并返回false
'x+' 读写,并创建文件,若文件已存在,则fopen()调用失败并返回false
3,关闭文件 fclose()
4,读取指定大小文件内容fread()
读取文件(可安全用于二进制文件)
string fread(resource $handle,int $length);
$handle:由fopen() 创建的handle,$length最多读取的字节数
提示:在区分二进制文件和文本文件的系统上(如 windows)打开文件时
fopen() 函数的mode参数要加上'b'
返回值:返回读取的字符串,或者在失败时返回false
5,读取一行内容 fgets()
从文件指针中读取一行
string fgets(resource $handle,int $length)
$handle:文件指针必须有效
$length:从handle指向的文件中读取一行并返回长度最多为length-1字节的字符串
碰到换行符(包括在返回值中),EOF或读完定制
若无指定长度,读取1k,1024字节
6,读取文件内容到数组汇中file()
把整个文件读入一个数组中
array file(string $filename,[int $flags=0])
$filename:文件路径
$flags:附加选项
FILE_USE_INCLUDE_PATH(1):在include_path中查找文件
FILE_IGNORE_NEW_LINE(2):在数组的每个元素末尾不添加换行符
FILE_SKIP_EMPTY_LINES(4):跳过空行
注意:不需要打开和关闭文件
7,读取文件内容到字符串中file_get_contents()
建整个文件读入一个字符串
string file_get_contents(stirng $filename)
返回值:返回读取的数据,失败时返回false
8,实例:读取记事本中的内容,并用表格展示出来
9,写入文件
int fwrite(resource $handle,string $string);
返回:返回写入的字符数,出现错误时侧返回false
10,将一个字符串写入文件
和依次调用fopen(),fwrite()及fclose()功能一样
int file_put_contents(string $filename,mixed $data,[int $flags=0])
参数:
$filename 要被写入数据的文件名
$data 要写入的数据,类型可以使string,array(一维数组)
$flags 附加选项
FILE_USE_INCLUDE_PATH(1) 在include目录里搜索filename
FILE_APPEND(8) 如果文件filename已经存在,追加数据而不是覆盖
LOCK_EX(2)在写入时获得一个独占额
11,拷贝文件
将文件从source拷贝到dest
bool copy(string $source,string $dest)
如果目标文件存在,则会覆盖
12,删除文件
bool unlink(string $filename)
可以删除虚拟空间之外的文件,但必须使用相对路径,必须有权限
删除的文件不会进入回收站
13,其他文件操作函数
filesize() 可以获取文件大小,单位为字节
is_writable() 判断文件是否可写
is_readable() 判断文件是否可读
feof() 判断文件指针是否到达文件结尾
filectime() 获取创建文件的时间
fileatime() 获取文件最新访问时间
filemtime() 获取文件最后修改时间