php file_put_contents fwrite 比较,PHP fwrite 与 file_put_contents 两个函数的区别

一、fwrite函数和file_put_contents函数的区别:

fwrite()函数和file_put_contents()函数都是将字符串写入到文件,但它们又有一定区别,具体如下表:函数名功能简介

fwrite()将字符串写入或追加到文件中;

写入文件前,需使用fopen()函数打开文件,

写入文件后,需使用fclose()函数关闭文件。

file_put_contents()将字符串写入或追加到文件中;

函数会自动执行打开文件、写入文件、关闭文件操作。

二、写入文件演示:

1、使用fwrite函数将字符串写入文件:<?php

//以从文件头开始写入的方式打开文件,会覆盖文件原有的内容

$handle = fopen('a.txt', 'w');

$num = fwrite($handle, "爱E族\n");

fclose($handle);

echo $num; //输出:8(汉字为3字节,E和换行符各一个字节)

2、使用file_put_contents函数将字符串写入到文件:<?php

$num = file_put_contents('b.txt', "爱E族\n");

echo $num; // 输出:8

三、追加文件演示:

1、使用fwrite函数追加文件:<?php

//以追加的方式打开文件,将文件尾部开始写入,不会覆盖原有内容

$handle = fopen('a.txt', 'a');

$num = fwrite($handle, "Aiezu.com\n");

fclose($handle);

echo $num; //输出:10

2、使用file_put_contents函数追加文件:<?php

// LOCK_EX: 写文件的时候先锁定,防止多人同时写入造成内容丢失

$num = file_put_contents('b.txt', "Aiezu.com\n", FILE_APPEND|LOCK_EX);

echo $num; // 输出:10

四、性能比较:

1、写入性能比较:<?php

$num = 1000;

$start = microtime(true);

for($i=1; $i<=$num; $i++) {

file_put_contents('b.txt', "Aiezu.com\n");

}

$time = microtime(true)-$start;

echo sprintf("file_put_contents函数写入%d次耗时%.3f秒\n", $num, $time);

$start = microtime(true);

for($i=1; $i<=$num; $i++) {

$handle = fopen('a.txt', "w");

fwrite($handle, "Aiezu.com\n");

fclose($handle);

}

$time = microtime(true)-$start;

echo sprintf("fwrite函数写入%d次耗时%.3f秒\n", $num, $time);输出:file_put_contents函数写入1000次耗时0.994秒

fwrite函数写入1000次耗时1.108秒

本例可以看出,对于覆写文件内容,file_put_contents函数会比fwrite函数稍快。

2、追加内容性能比较:<?php

$num = 100000;

$start = microtime(true);

for($i=1; $i<=$num; $i++) {

file_put_contents('a.txt', "爱E族", FILE_APPEND);

}

$time = microtime(true)-$start;

echo sprintf("file_put_contents函数追加内容%d次耗时%.3f秒\n", $num, $time);

$start = microtime(true);

for($i=1; $i<=$num; $i++) {

$handle = fopen('b.txt', "a");

fwrite($handle, "爱E族");

fclose($handle);

}

$time = microtime(true)-$start;

echo sprintf("fwrite一次打开追加内容一次,重复%d次耗时%.3f秒\n", $num, $time);

$start = microtime(true);

$handle = fopen('c.txt', "a");

for($i=1; $i<=$num; $i++) {

fwrite($handle, "爱E族");

}

fclose($handle);

$time = microtime(true)-$start;

echo sprintf("fwrite一次打开,追加内容%d次耗时%.3f秒\n", $num, $time);输出:file_put_contents函数追加内容100000次耗时0.765秒

fwrite一次打开追加内容一次,重复100000次耗时0.580秒

fwrite一次打开,追加内容100000次耗时0.112秒  本例可以看出,对于追加文件内容来说,fwrite函数比file_put_contents函数快很多,如果是fwrite一次打开写入多次,那更是快很多倍。

通过上面两例,发现更令人惊奇的一点,两个函数的追加内容比覆写内容,快近百倍,这是为什么呢?大家可以亲自测一下。

五、总结:

写入少量内容,单次写入,我们建议使用file_put_contents函数、一行代码,简单方便,性能也不错。对于连续写入多次,或者写入大块内容,建议使用fwrite函数配合其他函数,使用二进制流的方式,边读边写,减少内存占用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值