对PHP中file_put_contents的认知误区

之前写的一个定时任务里用到了file_put_contents,大致代码如下:

<?php
$file = "/tmp/data.log";
$data = array(
    0 => a,
    1 => b,
    2 => c
);
foreach ($data as $item)
    file_put_contents($file, $item);
?>

结果今天发现日志中丢失了很多数据,排查之后才发现只有最后一条数据写入到了日志中。定位到的原因是 file_put_contents 每次的写入都是覆盖,而不是追加。

查询文档之后,又重新理解了一遍这个函数的意思:

file_put_contents 等同于 fopen -> fwrite -> fclose,也就是等同于打开文件,然后写入文件,最后关闭文件这一系列操作。

他的第一个参数是文件名,第二个参数是数据,这两个参数是必选的;

第三个参数是写入模式,可选。如果不传,默认就是覆盖之前的内容。如果传了 FILE_APPEND ,就是追加模式写入。

这个函数成功时返回写入文件的字节数,失败时返回 false。所以判断这个函数是否成功需要用 === false 来判断,因为他有可能返回0。

对PHP中file_put_contents的认知误区》有1个想法

发表评论