简明PHP进阶【5-文件处理】

名家之声

所谓科学的论辩,从总体上来说则是没有多大效果的,更不用说论辩几乎总是各持己见的这个事实。

——弗洛伊德

在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中文件处理的相关函数,就介绍到这里,这些函数可一定要熟悉掌握哦,编码中设计到文件处理一定会使用到的哦。

原文发布于微信公众号 - Lemon黄(lemonhunag)

原文发表时间:2019-10-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券