有胆量你就来跟着路老师卷起来! -- 纯干货,技术知识分享
路老师给大家分享PHP语言的知识了,旨在想让大家入门PHP,并深入了解PHP语言。
上篇文章简单的实现了柱形图、折线图、3D饼图的制作,本篇文章我们开始着手文件系统的学习。
1 文件处理
文件处理包括文件的读取、关闭和重写等,例如访问一个文件需要3步:打开文件、读取文件和关闭文件。其他的操作要么包含在读写文件中(如显示内容、写入内容等),要么与文件自身的属性有关系(如文件遍历、文件重命名等)。本文将对常用的文件处理技术进行详细的讲解。
1.1 打开文件
对文件进行操作首先要打开文件,这是进行数据存取的第一步。在PHP中使用fopen()函数打开文件,其语法如下:
resource fopen(string $filename, string $mode[, bool $use_include_path =false[,resource $context]])
- filename是文件名
- mode是打开方式
- use_include_path是指定打开文件的指定路径,可选参数
- context上下文支持参数
mode打开方式取值列表如下:
mode取值 | 模式名称 | 说明 |
---|---|---|
r | 只读 | 读模式--进行读取,文件指针位于文件的开头 |
r++ | 只读 | 读写模式--进行读写,文件指针位于文件的开头。在现有文件内容的末尾之前进行写入就会覆盖原有内容。 |
w | 只写 | 写模式--进行写入文件,文件指针指向头文件。如果该文件存在,则所有文件内容被删除;否则函数将创建这个文件。 |
w+ | 只写 | 写模式--进行读写,文件指针指向头文件。如果该文件存在,则所有文件内容被删除;否则函数将创建这个文件。 |
x | 谨慎写 | 写模式--打开文件,从文件头开始写。如果文件已经存在,则该文件将不会被打开,函数返回false,PHP将产生一个警告。 |
x++ | 谨慎写 | 读、写模式--打开文件,从文件头开始写,如果文件按已经存在,则文件将不会被打开,函数返回false,PHP将产生一个警告。 |
a | 追加 | 追加模式--打开文件,文件指针指向尾文件。如果该文件已有内容,则将从文件末尾开始追加;如果该文件不存在,则函数将创建这个文件。 |
a+ | 追加 | 追加模式--打开文件,文件指针指向头文件。如果该文件已有内容,则将从文件末尾开始追加或读取;如果该文件不存在,则函数将创建这个文件。 |
b | 二进制 | 二进制模式--用于与其他模式进行连接。如果文件系统能够区分二进制文件和文本文件,可能会使用它。Windows可以区分:UNIX则不区分。推荐使用这个选项,便于获取最大程度的可移植性。它t是默认模式。 |
t | 文本 | 用于与其他模式相结合。这个模式知识Windows下的一个选项。 |
1.2 关闭文件
对文件操作结束后应该关闭这个文件,否则可能引起错误。在PHP中使用fclose()函数关闭文件,语法如下:
bool fclose(resource handle)
handle 指向的文件关闭,成功返回true,失败返回false。其往往配合fopen()一起使用。
<?php
//打开文件
$file = fopen("../file.txt","rb");
//... 操作
// 关闭文件
fclose($file);
?>
1.3 从文件中读取数据
读取文件数据分为读取整个文件数据、读取一行数据、读取一个字符和读取任意长度字符串操作。
1.3.1 读取整个文件数据
(1)readfile()函数
readfile()函数读取文件的时候不需要打开关闭文件,不需要echo/print等输出语句,直接写出文件路径即可。其语法如下:
int readfile(string $filename [, bool $use_include_path = false])
<?php
$res = readfile("./file/testFile.txt");
?>
(2) file()函数
file()函数读取整个文件内容的时候是将内容按行存储到数组中,包括换行符在内。如果失败返回false。语法如下:
array file(string $filename [, int $flags = 0])
<?php
$resArr = file("./file/testFile.txt");
echo "<pre>";
print_r($resArr);
?>
(3) file_get_contents()函数
将文件读入一个字符串。语法如下:
string file_get_contents( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen]]]])
- offset 开始读取的位置
- maxlen读取的字符串长度
<?php
$resArr = file_get_contents("./file/testFile.txt");
echo $resArr;
?>
1.3.2 读取一行数据
读取一行数据的函数有两个fgets()函数和fgetss()函数。
(1) fgets()函数
fgets()函数用于以此读取一行数据,语法如下:
string fgets(resource $handle [, int $length])
<?php
$res = fopen("./file/testFile.txt","rb");
while(!feof($res)){
echo fgets($res);
}
fclose($res);
?>
(2) fgetss()函数
fgetss()函数是fgets()的变体,用于读取一行数据,同时,fgetss()函数会过滤掉HTML标签,语法如下:
string fgetss(resource $handle [, int $length [, string $allowable_tags]])
allowable_tags值就是指定的html标签,入"<span>",表示只保留HTML的<span>标签,其他标签都被过滤掉。
文本内容如下:
123
abc
luTeacher
<span style="color:red;font-size:40px">mySpan</span>
<html>
<body>
<br>
<h1>test html </h1>
</body>
</html>
PHP
<?php
$res = fopen("./file/testFile.txt","rb");
while(!feof($res)){
echo fgetss($res,100,'<span>');
}
fclose($res);
?>
1.3.3 读取一个字符
(1)fgetc()函数
在对某个字符进行查找、替换时,需要有针对性地对某个字符进行读取。语法如下:
string fgetc(resource $handle)
注意:该函数返回一个字符,该字符从handle指向的文件中得到,遇到EOF则返回false。
<?php
$res = fopen("./file/testFile.txt","rb");
while(!feof($res)){
//一个字符一个字符的输出
echo fgetc($res);
}
fclose($res);
?>
1.3.4 读取任意长度的字符串
fread()函数可以从文件中读取指定长度的数据,语法如下:
string fread(resource $handle, int $length)
<?php
header('Content-type:text/html;charset=utf-8');
$res = fopen("./file/testFile.txt","rb");
echo "原始内容:<br>";
echo readfile('./file/testFile.txt')."<br><br><br>";
echo"fread读取字符串内容:<br><br>";
echo fread($res,18);
fclose($res);
?>
下一篇 PHP文件系统之写文件