为什么file_put_contents()并不总是重写文件?

时间:2015-04-23 08:05:07

标签: php

我想知道,为什么PHP file_put_contents()函数以奇怪的方式工作。

我在循环中使用它来将一些日志写入文件,一切都很好(即使没有指定标志,也会附加新行)。当我再次启动脚本时,它重新创建了我的文件。

来自PHP doc:

  

如果filename不存在,则创建该文件。否则,   除非设置了FILE_APPEND标志,否则将覆盖现有文件。

好的,所以我的问题是:为什么(当在一个循环中使用时)它不会覆盖我的文件(当然没有FILE_APPEND标志)?错误或功能? :)

编辑:发生这种情况时使用的示例上下文:

$logFile = dirname ( __FILE__ ) . '/example.log';
foreach($something1 as $sth1) {
    $logData .= "Something\n";
    foreach($something2 as $sth2) {
        if($something_else) {
            $logData .= "Line: \t" . $sth2 . "\n";
            file_put_contents($logFile, $logData);
        }
    }
}

3 个答案:

答案 0 :(得分:1)

正如this link中标记内容(您应该阅读)中已经非常明确地提到的那样,它明确指出如果文件文件名已经存在,则将数据附加到文件而不是覆盖它(当这个时候标志设置)。因此,当设置FILE_APPEND的标志时,它会附加,而不会重写。希望这能帮到你。

答案 1 :(得分:0)

替代方式

 <?php

        $file = 'file.txt';

        $append = true;

        if (file_exists($file)) {

            if ($append) {
                // append file
                $file = fopen($file, 'a+');
            } else {
                // overwrite file
                $file = fopen($file, 'a');
            }

        } else {

            // create file

            $file = fopen($file, 'a');

        }

        fwrite($file, 'text');

        fclose($file);

    ?>

这是一个php fopen documentation

php file

阅读相关主题

答案 2 :(得分:-1)

好的,当你每次尝试使用random number or currentdate timestamp重命名日志文件时运行脚本并尝试将其保存在数据库中 当你再次运行脚本并从数据库获取日志文件名并在需要时更新它