Почему я не могу добавить строку в мой файл журнала? - PullRequest
0 голосов
/ 04 декабря 2011

Считать старый контент в $content, затем записать $string . $content обратно в файл: не работает, новые сообщения печатаются в конце файла.

Соответствующие методы в классе Logger:

public function __construct($filename)
{
    $this->filename = $filename;
    $this->fp = fopen($this->filename, "w+");

    if (!$this->fp) throw new Exception("Errore nel file: " . $this->filename);
}

protected function log($severity, $message)
{
    $string = sprintf("[%s] (%s): %s", $severity, date('d/m/Y H:i:s'), $message);
    $content = !filesize($this->filename)? '' :
        fread($this->fp, filesize($this->filename));

    fwrite($this->fp, $string . $content . "\n");

    return $message;
}

Ответы [ 3 ]

2 голосов
/ 04 декабря 2011

Для регистрации вы должны использовать:

file_put_contents($filename, $content, FILE_APPEND|LOCK_EX);

Это не только меньше кода, но и заботится о блокировке файла (без одновременного доступа и перезаписи добавленного содержимого).

0 голосов
/ 04 декабря 2011

попробуйте заменить этот код

$this->fp = fopen($this->filename, "w+");

с этим:

$this->fp = fopen($this->filename, "a+");
0 голосов
/ 04 декабря 2011

Как насчет:

$contents = file_get_contents($file);
$contents = $string . $contents;
... fwrite();
...