【问题标题】:PHP - file_put_contents writes content multiple timesPHP - file_put_contents 多次写入内容
【发布时间】:2014-09-26 11:04:24
【问题描述】:

我有一个极其简单的记录器功能:

<?php
class Logger {
    public function __construct($logFile) {
        $this->logFile = $logFile;
    }

    public function log($message) {
        $message = date('c') . $message;
        file_put_contents($this->logFile, $message, FILE_APPEND | LOCK_EX);
        echo "it ran ";
    }
}

这样称呼

$logger = new Logger('log.txt');
$logger->log("message");
echo "called the method";

使消息准确地写入文件 3 次,而不是 1 次。

代码在任何循环之外,由 echo 语句确认,只打印一次。

另外,如果我只是在调用 log 方法的地方运行 file_put_contents() 函数,它可以正常工作并且只写入一次内容。所以这可能与我的班级有关,但不知道是什么。

编辑:@Tommy:这是日志文件内容: 2014-09-26T07:24:51-04:00message2014-09-26T07:24:54-04:00message2014-09-26T07:24:54-04:00message

编辑 2:我在调用该方法后尝试使用 die() 函数,然后它确实只写了一次消息。所以我一直在代码中移动 die(),它在这行之后开始写消息 3 次:

if (isset($_POST['create_account'])) {
    die;

既然它下面有一个骰子,那么进一步的代码中的内容应该无关紧要,对吧?

想知道它是否可能是某种 php 错误,这很奇怪。如果我将 die() 放在这一行之上,它会正常工作并且只写一次消息。

【问题讨论】:

  • 没有什么建议/强制写3次。你能粘贴更多代码吗?
  • 和上面一样,还有其他原因导致这个 - 上面的类没有任何会导致多次写入的东西
  • 是的,这段代码没有任何问题。
  • 删除日志文件并在执行该代码后向我们显示日志
  • 同样的事情发生在我身上......并查看我的代码......但对于相同的 php 函数 file_put_contents......它增加了 3 次相同的行。 CodeVirtuoso 找到解决方案了吗?

标签: php


【解决方案1】:

您的代码很有可能在某处进行重定向或重新加载。这会导致启动一个新请求,该请求会清除原始回显,但不会删除写入文件的回显。结果,它看起来像是一次回显并写了三次。但实际上,它也被重复了三次,只是其他副本已被删除。

如果您想查看发生了什么,请将堆栈跟踪的一部分与消息一起打印到日志文件中。您可以准确地看到消息是在哪一行创建的以及在哪个函数调用期间创建的。

【讨论】:

    【解决方案2】:

    根据我的经验,主要问题是 index.php 被调用了两次。所以,修复:

    • 更改文件名
    • 修复 index.php,使 favicon.ico 丢失!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      • 1970-01-01
      • 2018-03-07
      • 2019-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多