打开文件操作:
resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )
可以看到,函数返回的是一个资源句柄(resource handle),类似与C中的文件指针,读和写都从文件的指针处开始。
$filename是文件的路径,可以使用绝对路径和相对路径。
$mode是打开文件的模式,也就是文章的重点。
$use_include_path 规定是否搜索指定的包含路径。
$context是上下文选项。
后面两个可以不用管,主要是mode参数。mode是告诉计算机对文件的访问操作及权限设置。在操作手册中可以看到:
mode 说明
'r'
只读方式打开,将文件指针指向文件头。
'r+'
读写方式打开,将文件指针指向文件头。
'w'
写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'w+'
读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'a'
写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+'
读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'x'
创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE ,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。
'x+'
创建并以读写方式打开,其他的行为和 'x' 一样。
在学C的时候,就对文件操作存在恐惧感和抵触情绪,当时觉得对数据库的操作才是王道,更何况有这么多文件的mode.....
后来看了神作《Unix编程思想》,才知道 文本 才是数据表示的精髓......废话不多说,我们用比较的方法来方便记住:
r类 (表示r和r+,下同):主打读 (read)操作。文件若存在,指针指向文件头 ,文件不存在则返回false 。
w类: 主打写 (write)操作。文件若存在,清空文件 ,指针指向文件头 ,文件不存在则创建 文件。
a类 :主打添加 (append)操作。指针指向文件尾 ,文件不存在则创建 文件。
x类 :谨慎写 操作。与w类类似,但文件若存在则返回false 。
现在能清晰点了,通过例子来看看几个易混的模式:
同为读写的r+、 w+、a+、x+ :
/*
*例如存在文件article.txt,内容如下:
'Always be thankful!. We all have so much thankful for.'
*/
$file = fopen($_SERVER['DOCUMENT_ROOT'].'/learn/document/article.txt', 'mode')
or exit('Unable to open file');
$output = 'something new.';
fwrite($file,$output);
fclose($file);
若mode为‘rb+ ’,那么文件被改为:
'Something new.kful!. We all have so much thankful for.'
若mode为‘wb+ ’,那么文件被改为:
'Something new.'
若mode为‘ab+ ’,那么文件被改为:
Always be thankful!We all have so much thankful for. something new.
若mode为‘xb+ ’,那么显示错误:
Unable to open file 并停止脚本。
另外,还有一个c 模式,可不用记住了。
操作文件还有b (二进制)和t (文本)模式,t模式可以转换一些\t \n类的标记符号,但如果要打开图片等二进制文件,或者保证code的移植性,建议指定b模式。
最后说一下换行符,这得追溯到电传打字机的历史,有兴趣的可以百度。
在原始的表示里,/n表示newline,即光标向下移动一行,左右位置不动;而/r表示return,即光标回到行首。按理说,正常的换行应该是/n/t,但在unix 系统里换行用 /n 来代替,windows 则用 /r/n ,而在mac 中用 /r 。这样,不同的文本在不同的系统里表现也大相径庭,给代码带来不少的麻烦。
PHP为我们考虑了这个问题,通过引入一个常量PHP_EOL(PHP_End Of Line,好记吧!),就可让PHP自动在不同的平台下选择相应的换行符,大大加强了代码的可移植性。
OK,打完收工。
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com