本篇文章是对php中的打开文件fopen函数的使用进行了详细的分析介绍
需要的朋友参考下
resource fopen(string $filename string $mode [bool $use_include_path [ resource $zcontext]])
函数功能
fopen() 将 filename 指定的名字资源绑定到一个流上如果filename 是 "scheme://" 的格式则被当成一个 URLPHP 将搜索协议处理器(也被称为封装协议)来处理此模式如果该协议尚未注册封装协议PHP 将发出一条消息来帮助检查脚本中潜在的问题并将filename 当成一个普通的文件名继续执行下去
如果 PHP 认为 filename 指定的是一个本地文件将尝试在该文件上打开一个流该文件必须是 PHP 可以访问的因此需要确认文件访问权限允许该访问如果激活了安全模式或者open_basedir 则会应用进一步的限制
如果 PHP 认为 filename 指定的是一个已注册的协议而该协议被注册为一个网络 URLPHP 将检查并确认allow_url_fopen 已被激活如果关闭了PHP 将发出一个警告而 fopen 的调用则失败
filename规定要打开的文件或URL
mode规定要求到该文件/流的访问类型
include_path可选如果也需要在include_path中检索文件的话可以将该参数设为或TRUE
context可选规定文件句柄的环境Context是可以修该流的行为的一套选项
mode 参数的可能的值
mode 说明
"r" 只读方式打开将文件指针指向文件头
"r+" 读写方式打开将文件指针指向文件头
"w" 写入方式打开将文件指针指向文件头并将文件大小截为零如果文件不存在则尝试创建之
"w+" 读写方式打开将文件指针指向文件头并将文件大小截为零如果文件不存在则尝试创建之
"a" 写入方式打开将文件指针指向文件末尾如果文件不存在则尝试创建之
"a+" 读写方式打开将文件指针指向文件末尾如果文件不存在则尝试创建之
"x"
创建并以写入方式打开将文件指针指向文件头如果文件已存在则 fopen() 调用失败并返回 FALSE并生成一条 E_WARNING 级别的错误信息如果文件不存在则尝试创建之
这和给底层的 open() 系统调用指定 O_EXCL|O_CREAT 标记是等价的
此选项被 PHP 以及以后的版本所支持仅能用于本地文件
"x+"
创建并以读写方式打开将文件指针指向文件头如果文件已存在则 fopen() 调用失败并返回 FALSE并生成一条 E_WARNING 级别的错误信息如果文件不存在则尝试创建之
这和给底层的 open() 系统调用指定 O_EXCL|O_CREAT 标记是等价的
此选项被 PHP 以及以后的版本所支持仅能用于本地文件
Note:
不同的操作系统家族具有不同的行结束习惯当写入一个文本文件并想插入一个新行时需要使用 符合操作系统的行结束符号基于 Unix 的系统使用n 作为行结束字符基于 Windows 的系统使用 rn 作为行结束字符基于 Macintosh 的系统使用 r 作为行结束字符
如果写入文件时使用了错误的行结束符号则其它应用程序打开这些文件时可能会表现得很怪异
Windows 下提供了一个文本转换标记(t)可以透明地将 n 转换为 rn与此对应还可以使用b 来强制使用二进制模式这样就不会转换数据要使用这些标记要么用 b 或者用 t 作为 mode 参数的最后一个字符
默 认的转换模式依赖于 SAPI 和所使用的 PHP 版本因此为了便于移植鼓励总是指定恰当的标记如果是操作纯文本文件并在脚本中使用了n 作为行结束符但还要期望这些文件可以被其它应用程序例如 Notepad 读取则在 mode 中使用 t在所有其它情况下使用b
在操作二进制文件时如果没有指定 b 标记可能会碰到一些奇怪的问题包括坏掉的图片文件以及关于 rn 字符的奇怪问题