设为首页 收藏本站
查看: 672|回复: 0

[经验分享] PHP 的 fopen()函数

[复制链接]

尚未签到

发表于 2015-8-27 11:42:09 | 显示全部楼层 |阅读模式
  打开文件操作:



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

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-104976-1-1.html 上篇帖子: 菜鸟学PHP之Smarty入门 下篇帖子: 把php.exe加入系统环境变量-使用命令行可快速执行PHP命令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表