PHP fwrite 与 file_put_contents 两个函数的区别
一、fwrite函数和file_put_contents函数的区别:
fwrite()函数和file_put_contents()函数都是将字符串写入到文件,但它们又有一定区别,具体如下表:
二、写入文件演示:
1、使用fwrite函数将字符串写入文件:
2、使用file_put_contents函数将字符串写入到文件:
三、追加文件演示:
1、使用fwrite函数追加文件:
2、使用file_put_contents函数追加文件:
四、性能比较:
1、写入性能比较:
本例可以看出,对于覆写文件内容,file_put_contents函数会比fwrite函数稍快。
2、追加内容性能比较:
通过上面两例,发现更令人惊奇的一点,两个函数的追加内容比覆写内容,快近百倍,这是为什么呢?大家可以亲自测一下。
五、总结:
写入少量内容,单次写入,我们建议使用file_put_contents函数、一行代码,简单方便,性能也不错。对于连续写入多次,或者写入大块内容,建议使用fwrite函数配合其他函数,使用二进制流的方式,边读边写,减少内存占用。
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函数配合其他函数,使用二进制流的方式,边读边写,减少内存占用。