名家之声
所谓科学的论辩,从总体上来说则是没有多大效果的,更不用说论辩几乎总是各持己见的这个事实。
——弗洛伊德
在PHP中后端开发中,像经常要接触到Excel文件的导入导出,这就涉及到文件处理。本节,就来介绍PHP中的文件处理。
1 文件打开与关闭
对数据存储入文件的第一步,首先咱得打开文件不是。在PHP中文件打开使用的函数是 fopen(),如下是函数语法:
int fopen(string filename,string mode);
参数中filename,要包括文件的完整路径和文件名,路径可以是相对路径也可以是绝对路径;参数mode表示文件的打开方式,如下所示:
文件打开方式 | 含义 |
---|---|
rt | 只读打开一个文本文件,只允许读数据 |
wt | 只写打开或建立一个文本文件,只允许写数据 |
at | 追加打开一个文本文件,并在文件末尾写数据 |
rb | 只读打开一个二进制文件,只允许读数据 |
wb | 只写打开或建立一个二进制文件,只允许写数据 |
ab | 追加打开一个二进制文件,并在文件末尾写数据 |
rt+ | 读写打开一个文本文件,允许读和写 |
wt+ | 读写打开或建立一个文本文件,允许读写 |
at+ | 读写打开一个文本文件,允许读,或在文件末追加数据 |
rb+ | 读写打开一个二进制文件,允许读和写 |
wb+ | 读写打开或建立一个二进制文件,允许读和写 |
ab+ | 读写打开一个二进制文件,允许读,或在文件末追加数据 |
可以见得文件的打开方式由r、w、a、t、b 和 + 六个字符拼成,它们的含义做如下总结:
方式 | 含义 |
---|---|
r(read) | 读 |
w(write) | 写 |
a(append) | 追加 |
t(text) | 文本文件,可省略不写 |
b(binary) | 二进制文件 |
+ | 读和写 |
文件使用完毕,为了不占用资源,是需要及时关闭文件。PHP中关闭文件的函数是fclose(),如下为语法格式:
fclose(resource handle);
handle为我们要关闭的文件,注意是关闭文件的资源。
2 读取部分文件
1、读取一个字符:fgetc()
在文件中,真对某一个字符进行查找,替换时,就需要对这个字符进行读取,在PHP中使用fgetc()函数进行字符读取。如下为函数的语法格式:
string fgetc(resource handle);
fgetc()函数从文件指针中读取字符,返回一个字符的字符串。该字符从handle指向的文件中得到。如下代码:
a.txt内容:
首先他们无视于你,而后是嘲笑你,接着是批斗你,再来就是你的胜利之日。--甘地
index.php中测试代码:
<?php
$f_open=fopen("a.txt","rt"); //打开文件
$chr=fgetc($f_open); //读取一个字符
while(false!==$chr) //判断是不是读到文件的末尾
{
echo $chr;
$chr=fgetc($f_open);
}
fclose($f_open); //关闭文件
?>
浏览器中运行效果:
2、读取任意长度字符:fread()
在文件中,想要读取任意长度字符的函数使用 fread()函数,如下语法格式:
string fread(int handle,int length);
该函数从文件指针handle读取length个字节。在读取了length个字节数或到达文件末尾时,就会停止读取文件。
根据上面例子的文本,我们测试一下:
index.php中测试代码:
<?php
$f_open=fopen("a.txt","rt"); //打开文件
$chr=fread($f_open,5);
echo $chr;
?>
浏览器下运行效果:由于读取的是字节,一个中文一般占据3个字符,而我们这里只读取5个字节,所以中文会显示乱码。
3、读取一行数据:fgets()和fgetss()
文件读取中,想要按行对文件读取,可以使用fgets()函数和fgetss()函数,如下是fgets()语法格式,fgetss()类似。
string fgets(int handle [,length]);
handle是被打开的文件,参数length是要读取的数据长度,函数能够实现从handle指向文件中读取一行返回长度最大值为length-1个字节的字符串,如果没有指定长度,默认为1KB。
而fgetss()函数是fgets()函数的变体,用于读取一行数据,同时fgetss函数会过滤掉被读取内容中的html和php标记,而fgetss()函数需要指定长度。
<?php
$f_open=fopen("a.txt","rt"); //打开文件
$chr=fgets($f_open,5);
echo $chr;
?>
浏览器下运行效果:
3 文件处理读取整个文件:
想要读取整个文件,PHP中可以使用的函数是readfile()和file()函数。
1、readfile()函数
该函数用于读入一个文件,将读入的文件写入到输出缓冲,返回从文件中读入的字节数。如果出错返回false。如下语法格式:
readfile("a.txt");
2、file()
file()函数可以把文件读入到一个数组中,将文件作为一个数组来返回,数组中每个单元都是文件中相应的一行,包括换行符在内。失败将返回false。如下代码示例:
<?php
$chr=file("a.txt");
foreach($chr as $i=>$chr)
echo $i.$chr."<br>";
?>
浏览器运行效果:
4 写入文件
想在文件中写入数据,PHP中使用的函数是 fwrite()函数,如下语法格式:
int fwrite(resource handle,string string[,int length]);
把内容string写入文件指针handle处。如果指定了长度长度,当写入了length个字节,定入就会停止。如果文件内容长度小于length,则会无法写入。如下代打示例:
<?php
$chr=fopen("a.txt",'a');
if(!fwrite($chr,"尊称“圣雄甘地”")){
print '不能写入';
exit;
}
print '成功';
fclose($chr);
?>
浏览器下运行结果:
再去看下我们的文本文件,已经被写入:尊称“圣雄甘地”
5 删除文件
在PHP中,删除文件使用的函数是 ulink()函数。我们使用电脑都知道,文件要删除,前提是文件不能是在运行状态中。同理,在使用这个删除函数时,要确保文件是关闭的(fclose函数关闭文件)。成功删除返回true,否则返回false。
此函数需慎重使用,一经删除文件就无法恢复。
<?php
ulink("./a.txt");
?>
6 复制文件
在PHP中文件复制使用copy()函数,如下语法格式:
bool copy (string file1,string file2);
使用该函数将文件file1复制到file2。复制成功返回true,否则返回false。代码示例:
<?php
$file1="./a.txt";
$file2="./b.txt";
copy($file1,$file2); //从file1中复制到file2中。
readfile($file2);
?>
浏览器下运行效果:可以看到项目根目录下也生成文件 b.txt
7 移动和重命名文件
在PHP中移动和重命名文件都使用一个函数就可以解决,这个函数就是 rename()函数。如下函数语法:
bool rename(string oldname,string newname);
函数会把oldname重命名为newname,成功返回true,否则返回false。实现移动,则只要给指定的文件移动到另外一个路径下的文件夹中,不改变文件的名称,就实现了对指定文件的移动。如下代码示例:
<?php
$old_name="a.txt";
$new_name="c.txt";
if(rename($old_name,$new_name))
echo "重命名成功<br>";
if(rename($new_name,"public/$new_name"))//要先有public目录存在
echo "移动文件成功";
?>
浏览器下运行结果:在项目的目录中,a.txt被重命名为c.txt,并被移动到public目录中。
PHP中文件处理的相关函数,就介绍到这里,这些函数可一定要熟悉掌握哦,编码中设计到文件处理一定会使用到的哦。