文件操作
在实际开发中,经常涉及文件的相关操作,如文件的读写、修改文件名称等。接下来将为大家讲解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>标签,表示内容写入到文件中。