【问题标题】:What's the fastest way to write an array of chars to a file in PHP?在 PHP 中将字符数组写入文件的最快方法是什么?
【发布时间】:2014-07-24 17:14:22
【问题描述】:

假设我有一个数组$arr,我想将其内容写入文件$handle。在 PHP(5) 中最快/最有效的方法是什么?

一些不同的选择:

使用 implode 将数组转换为字符串:

$string = implode($arr);
fwrite($handle, $string);

将其逐个字符写入文件(对我来说似乎会更慢):

foreach($arr as $char) {
    fwrite($handle, $char);
}

使用. 运算符连接,然后写入:

$string = '';
foreach($arr as $char) {
    $string .= $char;
}
fwrite($handle, $string);

第三个对我来说似乎是最慢的,因为我猜测 fwrite 和 implode 是用 C 编写的......但是这些天再次使用 JIT 编译可能它正在优化连接而没有函数调用开销。

其中哪一种——或其他方式——最快,为什么?

【问题讨论】:

  • fwrite($handle, implode($arr)); - 首先分配给字符串没有开销
  • @JayBlanchard 感谢您的链接。虽然这将是解决此问题的另一种方法,但我认为它不符合重复的条件。我也在问,因为我希望听到一些关于为什么某种方式更快的推理,而不是仅仅根据原始速度数据进行评估。
  • 我真的很想知道这点表演对你来说是否至关重要。
  • 由于可能存在系统差异、版本差异等,为什么某些事情更快的原因是推测和基于意见的。@AmadeusDrZaius 您是否对这些进行了性能测试?如果是这样,您可能会就速度得出自己的结论(作为概括)。

标签: php fwrite string-concatenation


【解决方案1】:

不确定最快/最有效;但这会打开文件,将内爆数据写入文件并在一个函数中关闭文件:

file_put_contents('/path/to/file.txt', $arr);

【讨论】:

  • 我以为这有错误,但后来我在php.net上看到了这个:“你也可以将数据参数指定为一维数组。这相当于file_put_contents($filename , implode('', $array)). "
  • 它在手动输入中说这可能会导致并发问题。这是否意味着只要我不尝试在同一个程序执行中写入后读取文件,我就可以了?
  • 我认为在这种情况下使用LOCK_EX 作为第三个参数可能会解决问题。
  • 我明白了,谢谢。对于其他阅读本文的人,我不清楚 LOCK_EX 是否也阻止阅读,但 flock 提供完整的文件锁定功能。
猜你喜欢
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 2014-07-04
  • 2020-09-26
  • 1970-01-01
  • 2011-06-15
相关资源
最近更新 更多