【CTF部分基础知识二之PHP(二十一)】

文件系统

文件是用来存取数据的方式之一。相对数据库来说,文件在使用上更方便、直接。如果数据较少、较简单,使用文件无疑是最合适的方法。PHP能非常好地支持文件上传功能,可以通过配置文件和函数来修改上传功能。

文件处理

文件处理包括读取文件、关闭文件、重写文件等。

打开/关闭文件

打开和关闭文件使用fopen()和fclose()函数。打开文件应格外认真,因为一不小心就有可能将文件内容全部删掉。

  1. 打开文件
    对文件进行操作时首先要打开文件,这是进行数据存取的第一步。在PHP中使用fopen()函数打开文件,其语法格式如下:
resource fopen(string filename, string mode [, bool use_include_path]);

其中,filename是要打开的包含路径的文件名,可以是相对路径,也可以是绝对路径,如果没有任何前缀,则表示打开的是本地文件;mode是打开文件的方式,模式字符串可以由r(读)、w(写)、r+(读写)、a(追加)、t(文本模式)、b(二进制模式)和x(谨慎写)等字符组成,具体可取的值如表13.1所示;use_include_path是可选的,该参数在配置文件php.ini中指定一个路径,如E:\wamp\www\ mess.php,如果希望服务器在这个路径下打开指定的文件,可以设置为1或true。
在这里插入图片描述
2. 关闭文件
文件操作结束后应该关闭它,否则可能引起错误。在PHP中使用fclose()函数关闭文件,其语法格式如下:

bool fclose(resource handle);

该函数将参数handle指向的文件关闭,如果成功,则返回true,否则返回false。其中的文件指针必须是有效的,并且是通过fopen()函数成功打开的文件。

读写文件

相对于打开和关闭文件来说,读写文件更复杂一些。

  1. 从文件中读取数据
    从文件中读取数据,可以读取一个字符、一行字串或整个文件,还可以读取任意长度的字串。
    1)读取文件函数readfile()、file()和file_get_contents()
    readfile()函数用于读入一个文件并将其写入输出缓冲,如果出现错误则返回false。其语法格式如下:
int readfile(string filename)

使用readfile()函数不需要打开/关闭文件,不需要echo/print等输出语句,直接写出文件路径即可。
file()函数也可以读取整个文件的内容,它将文件内容按行存放到数组中,包括换行符在内,如果失败则返回false。其语法格式如下:

array file(string filename)

file_get_contents()函数可将文件内容(filename)读入一个字符串。如果有offset和maxlen参数,则将自参数offset指定的位置开始读取长度为maxlen的内容。如果失败,则返回false。其语法格式如下:

string file_get_contents(string filename[, int offset[, int maxlen]])

该函数适用于二进制对象,是将整个文件的内容读入一个字符串中的首选方式。

2)读取行数据函数fgets()
fgets()函数用于一次读取一行数据。其语法格式如下:

string fgets(int handle [, int length])

其中,handle是被打开的文件,length是要读取的数据长度。函数能够从handle指定的文件中读取一行,并返回最大长度为length-1个字节的字符串。在遇到换行符、EOF或者读取了length-1个字节后停止。如果忽略length参数,那么将读取数据到行结束。

3)读取字符函数fgetc()
在对某一个字符进行查找、替换时,需要有针对性地对某个字符进行读取,在PHP中可以使用fgetc()函数实现此功能。其语法格式如下:

string fgetc(resource handle)

该函数返回一个字符,该字符从handle指向的文件中得到,遇到EOF则返回false。

4)读取任意长度字串函数fread()
fread()可以从文件中读取指定长度的数据,其语法格式如下:

string fread(int handle, int length)

其中,handle为指向的文件资源,length是要读取的字节数。当函数读取length个字节或到达EOF时停止执行。

  1. 将数据写入文件
    写入数据也是PHP中常见的文件操作,主要相关函数有两个:fwrite()和file_put_contents()。
    fwrite()函数也称为fputs()函数,它们的用法相同。其语法格式如下:
int fwrite(resource handle, string string [, int length])

该函数把内容string写入文件指针handle处。如果指定了长度length,则写入length个字节后停止。如果文件内容长度小于length,则会输出全部文件内容。
file_put_contents()函数的功能类似于依次调用fopen()、fwrite()和fclose() 3个函数。其语法格式如下:

int file_put_contents(string filename, string data [, int flags])

其中,filename为写入数据的文件;data为要写入的数据;flags可以是FILE_USE_INCLUDE_PATH、FILE_APPEND或LOCK_EX,LOCK_EX为独占锁定。

操作文件
除了可以对文件内容进行读写,还可以对文件本身进行操作,如复制文件、重命名文件、查看修改日期等。PHP内置了大量的文件操作函数。
在这里插入图片描述

说明
在读写文件时,除file()、readfile()等少数几个函数外,其他操作必须要先使用fopen()函数打开文件,最后使用fclose()函数关闭文件。文件的信息函数(如filesize、filemtime等)则都不需要打开文件,只要文件存在即可。

目录处理

目录是一种特殊的文件。要浏览目录下的文件,首先要打开目录,浏览完毕后,同样要关闭目录。目录处理包括打开目录、浏览目录和关闭目录。

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liana-Fany

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值