您的位置:首页 > 编程语言 > PHP开发

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。

<?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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐