PHP从零单排(七)用PHP操作目录和文件 分类: PHP 2014-04-23 15:42 112人阅读 评论(0) 收藏
2014-04-23 15:42
495 查看
1.打开和关闭目录
要完成对目录的操作,首先要获取操作的目录句柄,即打开一个目录,句柄,可以理解为目录的别名,或者理解成句柄代表的就是目录本身。PHP提供函数opendir()完成打开目录的操作,该函数的语法如下所示
$dh=opendir(string $path)
参数$path是要打开的目录。如果处理成功,函数返回目录的句柄,否则函数返回FALSE。如果$path不是一个合法的目录或因为权限、文件系统等错误而无法打开目录,该函数也会返回FALSE.
对一个目录的操作结束之后,需要关闭已打开的目录,即释放操作目录时所占用的资源。PHP提供函数closedir()完成关闭目录的操作,该函数的语法如下所示
void closedir($dh);
2.使用函数readdir()可以获取目录中下一个文件的文件名。该函数的语法如下所示
string readdir($dh)
参数$dh是由函数opendir()打开的目录句柄,该函数返回这个句柄所指目录中的文件名,如果失败,返回FALSE。
array scandir(string $directory);
参数$directory是指定的目录,函数返回值是一个含有文件名的数组,如果失败,函数返回FALSE。如果参数$directory不是一个目录,函数也会返回FALSE。该函数还有一个常用的可选参数作为第二个参数,用来为文件名做排序。
4.打开和关闭文件
要通过PHP读出文件内容,或者向文件写入数据,首先要做的是打开文件。在PHP中使用函数fopen()打开一个文件,该函数的语法如下所示:
$fp=fopen(string $filename,string $mode)
函数fopen()可以打开本地或远程文件夹,参数$filename是指要打开的文件的文件名,返回值是文件处理句柄$fp,程序通过$fp来操作文件夹。如果打开失败,函数返回FALSE。该函数的第二个参数$mode是字符串类型,指打开文件的模式。打开文件时,之所以要指定模式,是为了告诉操作系统如何处理即将打开的文件。例如,如果需要向某文件写入一些数据,可以向该函数的第二个参数'w',此时,这个参数表示的含义是,以写入的方式打开文件。
r 以只读方式打开文件,文件指针指到文件开始处
r+ 以读写方式打开文件,文件指针指到文件开始处
w 以写入方式打开文件,文件指针指向文件开始处,并将文件大小设为0,如果文件不存在则尝试创建该文件
w+ 以读写方式打开文件,文件指针指向文件开始处,并将文件大小设为0,如果文件不存在则尝试创建该文件
a 以写入方式打开文件,将文件指向文件末尾,如果文件不存在则尝试创建该文件
a+ 以读写方式打开文件,将文件指向文件末尾,如果文件不存在则尝试创建该文件
$fp=fopen($_SERVER['DOCUMENT_ROOT']."/../files/read.txt",'w');
==在Linux/UNIX系统中指定文件路径时,使用斜杠(/)。如果实在Windows环境下,指定目录时,可以使用斜杠(/)或者左斜杠(\)。如果使用的是\,在使用函数fopen打开指定目录的文件时,需要对\转义,即使用\\来指定目录。
一般实际开发中,很少使用\来指定目录,因为这样的代码只能运行于Windows环境下,不利于程序的移植。除了打开本机文件,函数fopen()还可以通过HTTP协议,FTP协议或其他网络协议打开远程文件。打开文件后,就可以向文件写入数据,或者从文件中读取数据。当完成数据的写入或读取后,作为文件操作的最后一步,需要关闭文件。PHP程序中,使用函数fclose()关闭一个已经打开的文件。如果文件成功关闭,该函数返回TRUE,否则返回FALSE。下面代码片段演示了使用函数fcolse()关闭打开的文件。这行代码中的变量$fp就是已经打开的文件的处理句柄。
fcolse($fp);
5.读出文件的内容
取出文件中的一行赋给变量$line,函数fgets()会读取文件中的一行,直到遇到换行字符(\n)。该函数接收的参数是已打开的文件的句柄,返回值是文件的一行内容。函数fgets()可以接收第二个参数,表示读取一行内容的字节数(byte),如果没有传入该参数,fgets()默认读取1024字节内容。
(1)函数readfile()读入文件的整个内容
int readfile(string $filename);
该函数的参数$filename是要打开的文件名称,如果打开文件成功,函数的返回值是从文件读入的字节数,否则返回FALSE。
(2)函数file()可以将整个文件读入一个数组
array file(string $filename,[int include_path]);
函数file()的参数$filename是要打开的文件,第二个参数是可选的,如果其值为1,表示PHP将在include_path中查找该文件,include_path是php.ini文件中的一个配置项。该函数读入整个文件的内容,将其存入数组后返回该数组。数组中的每个单元对应文件中的每一行,包括换行符在内。如果file()处理失败,返回值是FALSE.
(3)函数get_file_contents()和函数file()类似,只不过它将整个文件内容读入一个字符串。
string get_file_contents(string $filename);
该函数返回文件$filename的所有内容,如果失败,返回值是FALSE.
6.向文件写入内容
(1)函数fwrite()的语法
int fwrite($fp,string $conten[, int $length]);
参数$fp是已打开的文件的句柄,$content是要向文件写入的内容。第三个参数$length是一个可选参数,表示写入数据的最大的字节数,这就是说,当向文件写入了length字节后,写入就会停止。当然,如果$content的长度小于$length,函数写完$content后就已停止写入。如果写入成功,该函数返回写入的字符数,否则返回FALSE。
(3)函数file_put_contents()也可以完成向文件写入数据,该函数的语法如下
int file_put_contents(string $fileame,string $data);
该函数主要有两个参数,参数$filename是要写入数据的文件的名称,参数$data是要写入的数据。使用函数file_put_contents(),相当于一次调用了fopen(),fwrite(),和fclose().因此,程序中不必再使用这三个函数,如果执行成功,该函数返回写入文件的自己数,否则返回FALSE。
7.判断文件或目录是否存在
调用函数file_exists()可以检查指定的文件或目录是否村子
bool file_exists(string $filename);
该函数判断由参数$filename指定的文件或目录是否存在,如果存在,函数返回TRUE,否则函数返回FALSE
8.用PHP建立目录和删除目录
PHP提供了再文件系统中建立目录和删除目录的函数,在PHP程序中可以很方便地使用它们。这些函数如下所示
函数mkdir($pathname,$mode),用来创建一个目录。参数$pathname是指要创建的目录的路径或名称,参数$mode是指所建目录的路径或名称,参数$mode是指所建目录的访问权限,它通常是指UNIX系统下的访问权限。如果目录创建成功,函数返回TRUE,否则返回FALSE。
函数rmdir($pathname),用来删除一个目录。参数$pathname是指要删除的目录,但该目录必须是空目录,并且在UNIX下,该目录要有相应的删除权限。如果目录删除成功,函数返回TRUE,否则返回FALSE。
9.用PHP复制、删除和移动文件
·函数copy($source,$desc),用来把文件从参数$source指定的位置,复制到由参数$desc指定的位置。如果复制成功,该函数返回TRUE,否则该函数返回FALSE。
·函数unlink($file),用来删除有参数$file指定的文件。如果删除成功,该函数返回TRUE,否则返回FALSE。
·函数rename($oldname,$newname),用来把由参数$oldname指定的文件重命名为由参数$newname指定的名字。这两个参数都可以是一个带文件名的完整路径,从而完成文件从一个目录到另一个目录的移动。
10.用PHP处理文件的锁定
为了保证文件中的数据的完整有效,在操作文件时,需要对文件进行加锁操作。PHP通过函数flock完成对文件的锁定操作。
bool flock($fp,int $operation [,int &wouldblock]);
该函数的第一个参数是文件的句柄;第二个参数表示锁定种类,它是一个常量;第三个参数是可选的,如果锁定会阻塞(即需要等待)的话,该参数设置为TRUE。如果成功锁定了文件,该函数会返回TRUE,否则返回FALSE。
LOCK_SH 读锁定,也叫共享锁定,针对读取的程序。文件可以被其他读取者共享
LOCK_EX 写锁定,也叫独享锁定,针对写入的程序。文件不能被共享
LOCK_UN 释放锁定,无论共享与独占
LOCK_NB 方盒子锁定时阻塞
小结~
打开目录函数opendir()和关闭目录函数closedir()
获取目录下文件名的函数readdir()
列出某一目录下所有文件的函数scandir()
获取和改变PHP工作目录的函数:getcwd()和chdir()
打开和关闭文件的函数:fopen()和fclose()
读取文件内容额函数:fgets() readfile() file() get_file_contents()
向文件写入内容的函数:fwrite() fputs() file_put_contents()
获取文件有关信息的函数:fileowner() filesize() filetype()
判断文件性质的函数:is_dir() is_file() is_readable() is_writeable()
获取路径中文件名和目录名的函数:basename() dirname()
判断文件或目录是否存在的函数:file_exists()
建立和删除目录的函数:mkdir() rmdir()
复制、删除、移动文件的函数:copy() unlink() rename()
处理文件锁定的函数:flock()
更改文件属性的函数:chgrp() chmod() chown()
获取文件时间属性的函数:fileatime() filemtime() filectime()
要完成对目录的操作,首先要获取操作的目录句柄,即打开一个目录,句柄,可以理解为目录的别名,或者理解成句柄代表的就是目录本身。PHP提供函数opendir()完成打开目录的操作,该函数的语法如下所示
$dh=opendir(string $path)
参数$path是要打开的目录。如果处理成功,函数返回目录的句柄,否则函数返回FALSE。如果$path不是一个合法的目录或因为权限、文件系统等错误而无法打开目录,该函数也会返回FALSE.
对一个目录的操作结束之后,需要关闭已打开的目录,即释放操作目录时所占用的资源。PHP提供函数closedir()完成关闭目录的操作,该函数的语法如下所示
void closedir($dh);
2.使用函数readdir()可以获取目录中下一个文件的文件名。该函数的语法如下所示
string readdir($dh)
参数$dh是由函数opendir()打开的目录句柄,该函数返回这个句柄所指目录中的文件名,如果失败,返回FALSE。
<?php $dir="d:\Software"; if($dh=opendir($dir)) { while(($file_name=readdir($dh))!= FALSE) { echo "file name:".$file_name; echo "<br/>"; echo "<br/>"; } closedir($dh); } ?>3.列出某一目录下的所有文件
array scandir(string $directory);
参数$directory是指定的目录,函数返回值是一个含有文件名的数组,如果失败,函数返回FALSE。如果参数$directory不是一个目录,函数也会返回FALSE。该函数还有一个常用的可选参数作为第二个参数,用来为文件名做排序。
<?php $dir="d:\Software"; $file_list1=scandir($dir); $file_list2=scandir($dir,1); echo "<pre>"; print_r($file_list1); print_r($file_list2); ?>
4.打开和关闭文件
要通过PHP读出文件内容,或者向文件写入数据,首先要做的是打开文件。在PHP中使用函数fopen()打开一个文件,该函数的语法如下所示:
$fp=fopen(string $filename,string $mode)
函数fopen()可以打开本地或远程文件夹,参数$filename是指要打开的文件的文件名,返回值是文件处理句柄$fp,程序通过$fp来操作文件夹。如果打开失败,函数返回FALSE。该函数的第二个参数$mode是字符串类型,指打开文件的模式。打开文件时,之所以要指定模式,是为了告诉操作系统如何处理即将打开的文件。例如,如果需要向某文件写入一些数据,可以向该函数的第二个参数'w',此时,这个参数表示的含义是,以写入的方式打开文件。
r 以只读方式打开文件,文件指针指到文件开始处
r+ 以读写方式打开文件,文件指针指到文件开始处
w 以写入方式打开文件,文件指针指向文件开始处,并将文件大小设为0,如果文件不存在则尝试创建该文件
w+ 以读写方式打开文件,文件指针指向文件开始处,并将文件大小设为0,如果文件不存在则尝试创建该文件
a 以写入方式打开文件,将文件指向文件末尾,如果文件不存在则尝试创建该文件
a+ 以读写方式打开文件,将文件指向文件末尾,如果文件不存在则尝试创建该文件
$fp=fopen($_SERVER['DOCUMENT_ROOT']."/../files/read.txt",'w');
==在Linux/UNIX系统中指定文件路径时,使用斜杠(/)。如果实在Windows环境下,指定目录时,可以使用斜杠(/)或者左斜杠(\)。如果使用的是\,在使用函数fopen打开指定目录的文件时,需要对\转义,即使用\\来指定目录。
一般实际开发中,很少使用\来指定目录,因为这样的代码只能运行于Windows环境下,不利于程序的移植。除了打开本机文件,函数fopen()还可以通过HTTP协议,FTP协议或其他网络协议打开远程文件。打开文件后,就可以向文件写入数据,或者从文件中读取数据。当完成数据的写入或读取后,作为文件操作的最后一步,需要关闭文件。PHP程序中,使用函数fclose()关闭一个已经打开的文件。如果文件成功关闭,该函数返回TRUE,否则返回FALSE。下面代码片段演示了使用函数fcolse()关闭打开的文件。这行代码中的变量$fp就是已经打开的文件的处理句柄。
fcolse($fp);
5.读出文件的内容
<?php $fp=fopen($_SERVER['DOCUMENT_ROOT']."/../data/info.dat",'r'); if(!$fp) { echo "<b>Error:open file error</b>"; exit; } while(!feof($fp)) { $line=fgets($fp); echo $line; echo '<br/>'; } fclose($fp); ?>
取出文件中的一行赋给变量$line,函数fgets()会读取文件中的一行,直到遇到换行字符(\n)。该函数接收的参数是已打开的文件的句柄,返回值是文件的一行内容。函数fgets()可以接收第二个参数,表示读取一行内容的字节数(byte),如果没有传入该参数,fgets()默认读取1024字节内容。
(1)函数readfile()读入文件的整个内容
int readfile(string $filename);
该函数的参数$filename是要打开的文件名称,如果打开文件成功,函数的返回值是从文件读入的字节数,否则返回FALSE。
(2)函数file()可以将整个文件读入一个数组
array file(string $filename,[int include_path]);
函数file()的参数$filename是要打开的文件,第二个参数是可选的,如果其值为1,表示PHP将在include_path中查找该文件,include_path是php.ini文件中的一个配置项。该函数读入整个文件的内容,将其存入数组后返回该数组。数组中的每个单元对应文件中的每一行,包括换行符在内。如果file()处理失败,返回值是FALSE.
(3)函数get_file_contents()和函数file()类似,只不过它将整个文件内容读入一个字符串。
string get_file_contents(string $filename);
该函数返回文件$filename的所有内容,如果失败,返回值是FALSE.
6.向文件写入内容
(1)函数fwrite()的语法
int fwrite($fp,string $conten[, int $length]);
参数$fp是已打开的文件的句柄,$content是要向文件写入的内容。第三个参数$length是一个可选参数,表示写入数据的最大的字节数,这就是说,当向文件写入了length字节后,写入就会停止。当然,如果$content的长度小于$length,函数写完$content后就已停止写入。如果写入成功,该函数返回写入的字符数,否则返回FALSE。
<?php $file="data.txt"; $content="内容标题\r\n内容第一行\r\n内容第二行"; if(!$fp=fopen($file,'a')) { echo "打开文件$file失败!"; exit; } if(fwrite($fp,$content)===FALSE) { echo "写入文件失败!"; exit; } echo "写入文件成功!"; fclose($fp); ?>(2)函数fputs()是函数fwrite()的别名,其实它就是函数fwrite(),用法和fwrite()一样。
(3)函数file_put_contents()也可以完成向文件写入数据,该函数的语法如下
int file_put_contents(string $fileame,string $data);
该函数主要有两个参数,参数$filename是要写入数据的文件的名称,参数$data是要写入的数据。使用函数file_put_contents(),相当于一次调用了fopen(),fwrite(),和fclose().因此,程序中不必再使用这三个函数,如果执行成功,该函数返回写入文件的自己数,否则返回FALSE。
7.判断文件或目录是否存在
调用函数file_exists()可以检查指定的文件或目录是否村子
bool file_exists(string $filename);
该函数判断由参数$filename指定的文件或目录是否存在,如果存在,函数返回TRUE,否则函数返回FALSE
8.用PHP建立目录和删除目录
PHP提供了再文件系统中建立目录和删除目录的函数,在PHP程序中可以很方便地使用它们。这些函数如下所示
函数mkdir($pathname,$mode),用来创建一个目录。参数$pathname是指要创建的目录的路径或名称,参数$mode是指所建目录的路径或名称,参数$mode是指所建目录的访问权限,它通常是指UNIX系统下的访问权限。如果目录创建成功,函数返回TRUE,否则返回FALSE。
函数rmdir($pathname),用来删除一个目录。参数$pathname是指要删除的目录,但该目录必须是空目录,并且在UNIX下,该目录要有相应的删除权限。如果目录删除成功,函数返回TRUE,否则返回FALSE。
9.用PHP复制、删除和移动文件
·函数copy($source,$desc),用来把文件从参数$source指定的位置,复制到由参数$desc指定的位置。如果复制成功,该函数返回TRUE,否则该函数返回FALSE。
·函数unlink($file),用来删除有参数$file指定的文件。如果删除成功,该函数返回TRUE,否则返回FALSE。
·函数rename($oldname,$newname),用来把由参数$oldname指定的文件重命名为由参数$newname指定的名字。这两个参数都可以是一个带文件名的完整路径,从而完成文件从一个目录到另一个目录的移动。
<?php $dir_name="tmp_data"; $new_file="tmp_new.txt"; if(!copy($dir_name."/tmp.txt",$new_file)) { echo "Copy 文件tmp.txt失败"; exit; } echo "文件tmp.txt复制成功"; echo "<br/>"; echo "<br/>"; echo "<br/>"; echo "<br/>"; if(unlink($new_file)) { echo "文件".$new_file."删除成功"; } else { echo "文件".$new_file."删除成功"; } ?>
10.用PHP处理文件的锁定
为了保证文件中的数据的完整有效,在操作文件时,需要对文件进行加锁操作。PHP通过函数flock完成对文件的锁定操作。
bool flock($fp,int $operation [,int &wouldblock]);
该函数的第一个参数是文件的句柄;第二个参数表示锁定种类,它是一个常量;第三个参数是可选的,如果锁定会阻塞(即需要等待)的话,该参数设置为TRUE。如果成功锁定了文件,该函数会返回TRUE,否则返回FALSE。
LOCK_SH 读锁定,也叫共享锁定,针对读取的程序。文件可以被其他读取者共享
LOCK_EX 写锁定,也叫独享锁定,针对写入的程序。文件不能被共享
LOCK_UN 释放锁定,无论共享与独占
LOCK_NB 方盒子锁定时阻塞
小结~
打开目录函数opendir()和关闭目录函数closedir()
获取目录下文件名的函数readdir()
列出某一目录下所有文件的函数scandir()
获取和改变PHP工作目录的函数:getcwd()和chdir()
打开和关闭文件的函数:fopen()和fclose()
读取文件内容额函数:fgets() readfile() file() get_file_contents()
向文件写入内容的函数:fwrite() fputs() file_put_contents()
获取文件有关信息的函数:fileowner() filesize() filetype()
判断文件性质的函数:is_dir() is_file() is_readable() is_writeable()
获取路径中文件名和目录名的函数:basename() dirname()
判断文件或目录是否存在的函数:file_exists()
建立和删除目录的函数:mkdir() rmdir()
复制、删除、移动文件的函数:copy() unlink() rename()
处理文件锁定的函数:flock()
更改文件属性的函数:chgrp() chmod() chown()
获取文件时间属性的函数:fileatime() filemtime() filectime()
相关文章推荐
- PHP从零单排(八)用PHP处理日期和时间 分类: PHP 2014-04-23 17:59 108人阅读 评论(0) 收藏
- PHP从零单排(十一)操作MySQL的PHP函数 分类: PHP 2014-04-29 10:21 152人阅读 评论(0) 收藏
- PHP从零单排(九)在PHP中生成cookie 分类: PHP 2014-04-23 22:49 147人阅读 评论(0) 收藏
- PHP从零单排(十六)PHP操作MySQL常见错误信息及分析 分类: 技巧总结 2014-05-03 11:34 139人阅读 评论(0) 收藏
- PHP从零单排(四)PHP中的文件上传处理 分类: PHP 2014-04-21 11:13 191人阅读 评论(0) 收藏
- PHP从零单排(十)PHP中生成随机数 分类: PHP 2014-04-24 09:09 120人阅读 评论(0) 收藏
- PHP从零单排(十九)生成带有底纹的数字验证码图片 分类: PHP 2014-05-06 12:48 124人阅读 评论(0) 收藏
- ubuntu各文件目录作用以及启动流程 分类: ubuntu学习 服务器等硬件学习 2014-12-01 16:06 142人阅读 评论(0) 收藏
- #小练习 os.remove() 删除目录文件 分类: python 小练习 2013-05-21 15:49 2774人阅读 评论(0) 收藏
- python 操作windows下的目录 分类: python python基础学习 2013-07-30 17:30 274人阅读 评论(0) 收藏
- PHP从零单排(三)PHP中的session 分类: PHP 2014-04-21 09:20 169人阅读 评论(0) 收藏
- 【总结】纯php 操作 mysql 数据库 分类: php mysql 数据库 增删改查 2014-04-16 14:47 461人阅读 评论(0) 收藏
- PHP从零单排(五)PHP对数组的处理 分类: PHP 2014-04-22 09:35 151人阅读 评论(0) 收藏
- # 输出目录下的文件 os模块 分类: python 小练习 2013-05-13 18:01 205人阅读 评论(0) 收藏
- PHP从零单排(十二)使用PHP连接MySQL数据库 分类: PHP 2014-04-29 11:01 130人阅读 评论(0) 收藏
- 文件操作注意事项 分类: python 小练习 python基础学习 open()文件读写 2013-12-03 11:05 532人阅读 评论(0) 收藏
- PHP从零单排(十八)图片处理 分类: PHP 2014-05-06 10:44 377人阅读 评论(0) 收藏
- Android - 文件读写操作 总结 分类: Android 2015-07-20 18:01 4人阅读 评论(0) 收藏
- vc++实现avi文件的操作 分类: 文件格式 2014-10-11 16:11 631人阅读 评论(2) 收藏
- Linux系统常用目录操作函数 分类: B3_LINUX 2013-02-18 16:44 486人阅读 评论(0) 收藏