什么更快?file_put_contents(); fopen()函数; 的fwrite(); FCLOSE();?

gen*_*sis 38 php file-io

什么是更好的?我有自己的MySQL日志,所以它有大约90MB,但我不确定应该使用哪一个.它打开文件EVERYTIME有执行的查询.

什么更快?

hwr*_*kns 41

根据这篇文章,这fwrite()是一个更快的smidgen.(链接到Wayback Machine,因为站点不再存在.)

我的猜测是,这file_put_contents()只是这三种方法的包装,所以你会失去开销.

编辑:这个网站有相同的信息.

  • -1 这怎么可能是一个仅仅引用一个不再存在的网站的答案 - 你可以引用该网站或其中的参考文章 - 否决 (2认同)
  • 原始文章仍然可以在Wayback Machine上看到:http://web.archive.org/web/20100109103851/http://balancedbraces.com/2008/06/12/fopen-fwrite-fclose-vs-file_put_contents/ (2认同)

sha*_*ain 27

此函数与连续调用fopen(),fwrite()和fclose()以将数据写入文件相同.

查看文档:http: //php.net/manual/en/function.file-put-contents.php

肖恩


cwa*_*ole 10

取决于您的用例.我打开了超过.5 GB的文件,我当然不想使用file()或file_get_contents(); 并且file_put_contents无法工作,因为我也需要读取文件.

如果你真的只是想在没有阅读的情况下附加文件,那就不是很重要了; 如果你试图将整个文件读入内存(或从内存中写入一个完整的文件),它同样并不重要 - 速度增益,就像我看到的那样,是四舍五入的错误.

但是,如果你期望这些文件会变成庞大的野兽,或者如果你只需要一小部分给定文件的行数,我就不能建议SplFileObject强烈使用fopen(或者,这是真棒)足够 - 用这些文件从文件中间读取真的很容易.


另一方面,由于您只是记录,我个人认为只需将file_put_contents与append标志一起使用就更清晰,更简洁.它让每个人都知道发生了什么,而不必看两次.


Mar*_*c B 7

按照惯例,你有基准吗?file_put_contents本质上只是一个围绕3个f*()调用的包装器,所以最多你通过做一个额外的函数调用而失败,但通过减少前端代码来解析会有所收获.


小智 7

  1. 如果请求中的一个文件只有一个写操作,则file_put_contents优于fwrite,因为它包含了打开,写入和关闭函数,并且与fwrite一样快.
  2. 如果请求中有一个文件有多个写入,我们首先需要打开文件,然后多次写入,因此fwrite更快.但是,如果它是一个非常繁忙的系统,它有很多"打开文件"(ulimit -a | grep"打开文件"),file_put_contents将是一个更合理的选择,因为它使文件处理程序比fwrite更短.