PHP笔记(文件的操作)

存储数据有两种基本方法:保存到普通文件或保存到数据库中。
普通文件可以具有多种格式,但是,通常所知的普通文件是简单的文本文件。但这如果使用存储文件作为存储大量数据的方式会有很多弊端。

1 文件处理

1.1 打开文件

服务器上的操作系统必须要知道要对打开的文件进行什么操作,需要了解这个文件是否还允许其它脚本在打开,还需要了解使用者是否有在这种方式下使用该文件的权限。
要在PHP中打开一个文件,可以使用 fopen() 函数。如果 fopen() 成功地打开一个文件,该函数将发挥一个指向这个文件的文件指针,此时可以使用这个变量来访问文件。
fopen() 函数的参数如下:

  • 文件位置
  • 文件模式,模式有以下几种:
    • r:只读,打开文件,从文件头开始读(该文件必须存在)
    • r+:用于读和写,从文件头开始读写(该文件必须存在)
    • w:只写,从文件头开始读,如果该文件存在,则删除所有文件已有内容,反之创建该文件
    • w+:用于读和写,从文件头开始读写,如果该文件存在,则删除所有文件已有内容,反之创建该文件
    • a:只读追加模式,打开文件,如果文件存在,则从文件末尾开始追加,反之创建该文件
    • a+:可读可写追加模式,打开文件,如果文件存在,则从文件末尾开始追加,反之创建该文件
    • b:二进制模式
  • 布尔值(可选),是否在 include_path 中搜索一个文件(此值在PHP的配置中设置)
  • 协议名称(可选),除了打开一个本地文件进行督学操作之外,还可以通过 FTPHTTP 或其他协议打开文件。

指定文件路径时可以使用到超级全局变量中的 $_SERVER['DOCUMENT_ROOT'],这个变量指向了Web服务器文档树的根目录,同时指定路径可以为绝对路径或者是相对路径,在UNIX环境中,目录之间的间隔符是 /正斜线),而使用Windows平台可以使用正斜线或反斜线,如果使用的是反斜线,则需要转义,所以最好还是使用正斜线,一劳永逸。
在使用 fopen() 函数的时候,需要顾及到是否创建文件指针成功,此时可以使用 @ 抑制错误符,然后检测储存文件指针的变量是否为空。

1.2 写文件

在PHP中写文件可以使用 fwrite() 或者 fputs(),其中 fputsfwrite() 的别名函数。也可以使用 file_put_contents() 函数。

1.2.1 fwrite() 函数

fwrite() 函数的语法是 int fwrite($fp, $outputstring, [,length]); ,其中的 $fp 为文件指针,$outputstring 为输入内容,可选参数是写入的最大字符数。

1.2.2 file_put_contents() 函数

file_put_contents() 函数是 PHP5 才有的函数,它的语法是 int file_put_contents(filename, data, [,int flags, rescource context]);,此函数无需调用 fopen() 函数打开要写的文件以及也无需使用 fclose() 关闭文件。

1.3 读取文件

读取文件可以使用 fgets() 函数、 file_get_contents() 函数等等。

1.3.1 fgets() 函数、fgetss() 函数、fgetcsv() 函数

fgets() 函数的语法是 fgets($fp, int length); ,第二个参数为读取的长度。
fgetss() 函数的用法与 fgets() 函数的用法差不多,区别在于前者可以过滤掉字符串中包含的PHP和HTML
标记。
fgetcsv() 函数的语法是 fgetcsv() 语法是 fgetcsv($fp, length, enclosure),其中 enclosure 表示一个定界符,将它换成的换行符显示。

1.3.2 readfile()fpassthru()file()

以上函数可用为读取整个文件。

1.4 关闭文件 fclose()

当文件使用完后,应该将其关闭,此时要使用 fclose() 函数,如果文件成功关闭,将返回一个 true 值。

1.5 锁定文件 flock()

在操作写入文件时,必须要注意到与此同时有没有其他用户也正在使用该文件,以免发生冲突,此时锁定文件就很有必要了。
flock() 函数语法是 bool flock($fp, int operation),锁定成功返回 true,其中的 operation 为:

  • LOCK_SH:读操作锁定,意味着文件可以共享
  • LOCK_EX:写操作锁定,意味着文件不能共享
  • LOCK_UN:释放所有的锁定
  • LOCK_NB:防止在请求加锁时发生阻塞

1.6 其他一些关于文件操作的函数

  • 检测读取文件是否到达末尾 feof()while (!feof($fp))
  • 查看文件是否存在 file_exists()
  • 确定文件大小 filesize()
  • 删除文件 unlink()
  • 文件定位及定位查询:fwind()fseek()ftell()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值