学科分类
目录
PHP基础

文件操作

在实际开发中,经常涉及文件的相关操作,如文件的读写、修改文件名称等。接下来将为大家讲解PHP中的文件操作。

1. 打开文件

在PHP中打开文件使用fopen()函数,该函数执行成功后,返回资源类型的文件指针,用于其他操作。fopen()函数的声明方式如下。

resource fopen( string $filename, string $mode [, bool $use_include_path = false [,resource $context ]] )

在上述声明中,$filename表示打开的文件路径,不仅可以是本地文件,还可以是HTTP或FTP协议的URL地址;$mode表示文件打开的模式,常用的模式如表1所示。

表1 常用文件打开模式

模式 说明
r 只读方式打开,将文件指针指向文件头
r+ 读写方式打开,将文件指针指向文件头
w 写入方式打开,将文件指针指向文件头并将文件大小截为0
w+ 读写方式打开,将文件指针指向文件头并将文件大小截为0
a 写入方式打开,将文件指针指向末尾
a+ 读写方式打开,将文件指针指向末尾
x 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则fopen()调用失败,返回false,并生成E_WARNING级别的错误信息
x+ 创建并以读写方式打开,其他行为和“x”相同

表1中,除“r”和“r+”模式外的其他操作,如果文件不存在,会尝试自动创建。

下面演示使用fopen()函数的使用,具体代码如下。

   // 只读方式打开,不会创建文件,文件不存在会提示Warning信息
   $f1 = fopen('test1.html', 'r');
   $f2 = fopen('test2.html', 'w');  // 写入方式打开,文件不存在自动创建
   fclose($f1);
   fclose($f2);

上述代码中,使用fopen()函数打开文件,文件打开后返回资源,对文件操作后需要将资源关闭。

2. 删除文件

删除文件使用unlink()函数实现,其声明方式如下。

bool unlink( string $filename [, resource $context ] )

在上述声明中,$filename表示文件路径,如果删除成功返回值为true,失败返回false。

下面通过代码进行演示,具体代码如下。

unlink('./test2.html');

上述代码执行后,当前目录下的test2.html文件将被删除。如果文件不存在,则会提示Warning错误。

3. 修改文件

修改文件的名称使用rename()函数即可实现,在文件夹操作的章节中已经学习了该函数的具体使用,此处的修改文件,主要是指修改文件的内容,通过fwrite()函数实现,其声明方式如下。

int fwrite( resource $handle , string $string [, int $length ] )

在上述声明中,$handle表示文件指针;$string表示要写入的字符串;$length表示指定写入的字节数,如果省略,表示写入整个字符串。

下面通过代码演示fwrite()函数的使用。

   $f3 = fopen('test3.html', 'w');
   fwrite($f3, '<html><body>Hello world<body></html>');
   fclose($f3);

上述代码执行完成后,打开test3.html,验证文件中的内容是否正确。

4. 重命名文件

重命名文件夹和文件都可以使用rename()函数来实现。前面在讲解文件夹操作时已经为大家讲过了rename()函数的使用,这里不再赘述。

5. 读取文件

使用fopen()函数打开文件后,通过fread()函数进行文件读取操作,其声明方式如下。

string fread( resource $handle , int $length )

上述声明中的$handle表示文件指针,$length用于指定读取的字节数。该函数在读取到$length指定的字节数,或读取到文件末尾时就会停止读取,返回读取到的内容。当读取失败时返回false。

下面通过代码演示fread()函数的使用。

   $filename = 'test3.html';
   $f3 = fopen($filename, 'r');
   $data = fread($f3, filesize($filename));
   echo $data;    // 输出内容: <html><body>Hello world<body></html>
   fclose($f3); 

上述代码中,使用fread()函数读取文件内容,通过filesize()函数计算文件的大小,将test3.html中的内容全部读取出来。

6. file_get_contents()和file_put_contents()函数

自PHP 5版本以后,通常使用一种更方便快捷的方式对文件进行读写操作,即使用file_get_contents()和file_put_contents()函数,接下来学习两个函数的具体使用。

file_get_contents()函数用于将文件的内容全部读取到一个字符串中,其声明方式如下。

string file_get_contents( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = 0 [, int $maxlen ]]]] )

在上述声明中,$filename指定要读取的文件路径,其他参数不常用,可以参考PHP手册。函数执行成功返回读取到的内容。

file_put_contents()函数用于在文件中写入内容,其声明方式如下。

int file_put_contents( string $filename , mix $data [, int $flags = 0 [, resource $context ]] )

在上述声明中,$filename指定要写入的文件路径;$data指定要写入的内容;$flags指定写入选项,使用常量FILE_APPEND表示追加写入。函数执行成功返回写入到文件内数据的字节数,失败返回false。

接下来演示file_get_contents()函数和file_put_contents()函数的使用,具体如下。

   $filename = 'test3.html';
   $content = file_get_contents($filename);
   echo $content;  // 输出内容: <html><body>Hello world<body></html>
   // 文件内容不会改变,覆盖原文件内容
   $str = '<html><body>Hello world<body></html>';
   file_put_contents($filename, $str);
   // 追加内容
   file_put_contents($filename, $str, FILE_APPEND);

在上述代码中,第6行代码执行后,原文件内容不会改变,默认会覆盖原文件中的内容。第8行代码指定写入方式为追加,代码执行完毕后,查看test3.html中的内容,如果出现两组<html>标签,表示内容写入到文件中。

点击此处
隐藏目录