0

0

PHP中fwrite与file_put_contents的区别

php中文网

php中文网

发布时间:2016-07-06 13:34:26

|

2726人浏览过

|

来源于php中文网

原创

PHP中fwrite与file_put_contents在细节上在区别但在性能上file_put_contents更强大了,我们下面举例来对比一下吧。

相同点:file_put_contents() 函数把一个字符串写入文件中,与依次调用 fopen(),fwrite() 以及 fclose() 功能一样。

不同点:在file_put_contents()函数中使用 FILE_APPEND 可避免删除文件中已有的内容,即实现多次写入同一个文件时的追加功能。

例如: 

echo file_put_contents("test.txt","Hello World. Testing!",FILE_APPEND);

file_put_contents是以追加的形式将字符串写入到test.txt中,

立即学习PHP免费学习笔记(深入)”;

fwrtie则是会清除之前的记录,只保留当前写入的内容

$file = fopen("test.txt","w");
echo fwrite($file,"Hello World. Testing!");
fclose($file);

file_put_contents代替fwrite优点多多

如下为file_put_contents的实例代码:

php
$filename = 'file.txt';
$word = "你好!\r\nwebkaka";  //双引号会换行 单引号不换行
file_put_contents($filename, $word);
?>

同样的功能使用fwrite的实例代码:

$filename = 'file.txt';
$word = "你好!\r\nwebkaka";  //双引号会换行  单引号不换行
$fh = fopen($filename, "w"); //w从开头写入 a追加写入
echo fwrite($fh, $word);
fclose($fh);
?>

从以上两个例子看出,其实file_put_contents是fopen、fwrite、fclose三合一的简化写法,这对程序代码的优化是有好处的,一方面在代码量上有所减少,另一方面不会出现fclose漏写的不严密代码,在调试、维护上方便很多。

上述例子里,file_put_contents是从头写入,如果要追加写入,怎么办呢?

在file_put_contents的语法里,有个参数FILE_APPEND,这是追加写入的声明。实例代码如下:

nitc免费效益型企业网站PHP版3.2 本地体验包
nitc免费效益型企业网站PHP版3.2 本地体验包

NITC效益型企业网站系统(PHP)产品特色1、企业网站模块:1)网站设计精美:前台页面全部采用DIV+CSS,设计严谨,布局合理,页面精美大气。2)管理操作方便:后台管理界面友好,简单易用,区别于一般CMS系统的复杂与繁琐,功能强大,系统安全,性能稳定。用户使用全自动化控制,功能模块可扩展性强。2、搜索引擎优化: 经众多网络营销专家制定,系统自带搜索引擎基础优化功能,能在最短的时间内提升网站的曝

下载

echo file_put_contents('file.txt', "This is another something.", FILE_APPEND);
?>

FILE_APPEND就是追加写入的声明。在追加写入时,为了避免其他人同时操作,往往需要锁定文件,这时需要加多一个LOCK_EX的声明,写法如下:

echo file_put_contents('file.txt', "This is another something.", FILE_APPEND|LOCK_EX);
?>

注意,以上代码中echo输出到显示器里的是写入文件字符串的长度。

常见问题:

Warning: fopen(file.txt) [function.fopen]: failed to open stream: Permission denied

当写入文件时,有时会遇到上述问题,这是因为文件没有写权限的原因。为了避免这个错误的出现,在写入文件时需要判断下文件是否可写,这需要用到is_writable()这个函数。实例代码如下:

$filename = 'file.txt';
if (is_writable($filename)) {
echo file_put_contents($filename, "This is another something.", FILE_APPEND);
} else {
    echo "文件 $filename 不可写";
}
?>

fwrite简单的把数据写到handler里面
file_put_contents可能需要处理contenxt,数据类型为mixed,需要更多处理
虽然看file_put_contents的函数说明:和依次调用 fopen(),fwrite() 以及 fclose() 功能一样。
但是肯定有细微差别的,尤其是在重复写入大量数据的时候,file_put_contents无疑会重复的fopen,fclose .而 fwrite则可以只一次fopen,fwrite即可

写个简单程序测试一下,一个250M文件


结论:多次执行结果类试,说明fopen,fwrite,fclose方式比直接file_put_contents要快一点!

那么为什么呢? 查看源代码

我用的ubuntu12.04
直接sudo apt-get source php5
解压:silver@silver-desktop:~/php/php5-5.3.3

查找函数fwrite 函数:silver@silver-desktop:~/php/php5-5.3.3$ grep -rn “PHP_FUNCTION(fwrite)” .
./ext/standard/file.c:1233:PHPAPI PHP_FUNCTION(fwrite)
./ext/standard/file.h:43:PHPAPI PHP_FUNCTION(fwrite);

fwrite

找到对应源码,该函数非常简单:

file_put_contents
该函数的处理操作就多多了



什么时候用fwrite,file_put_contents ?

1,函数原型已经说明了它们处理的数据类型不一样
2,简单的文件处理,追求速度用fwrite
3,书写简单用file_put_contents – (啥类型的数据都能处理,magic阿。但是要理解类型判断机制,否则保存的数据可能不是你想要的)

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

23

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

11

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

2

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

4

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

13

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

93

2026.01.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

112

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

155

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
极客学院Java8新特性视频教程
极客学院Java8新特性视频教程

共17课时 | 3.8万人学习

PHP课程
PHP课程

共137课时 | 8.9万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 8.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号