From: Aleksey Filippov Date: Tue, 24 Mar 2026 11:49:26 +0000 (+0300) Subject: fix(ERP-33): TelegramTarget — экранировать \n в error_tracking.log X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=3113e5090560ec3847d4dfef898bcbfd93a74202;p=erp24_rep%2Fyii-erp24%2F.git fix(ERP-33): TelegramTarget — экранировать \n в error_tracking.log Многострочные ошибки (содержащие $_SERVER dump) ломали формат файла error_tracking.log: file() разбивала одну запись на множество строк, каждая выводилась как "Некорректная строка". Фикс: str_replace \n → \\n при записи, убран error_log спам. --- diff --git a/erp24/log/TelegramTarget.php b/erp24/log/TelegramTarget.php index bd4435ea..8018f470 100644 --- a/erp24/log/TelegramTarget.php +++ b/erp24/log/TelegramTarget.php @@ -52,10 +52,12 @@ class TelegramTarget extends \yii\log\Target $normalizedCurrentError = $this->normalizeText($currentError); $currentErrorHash = md5($normalizedCurrentError); + // Экранируем переносы строк для хранения — одна запись = одна строка файла + $escapedError = str_replace(["\r\n", "\n", "\r"], '\\n', $currentError); + foreach ($errorLines as &$line) { $parts = explode('|', $line, 4); if (count($parts) < 4) { - error_log("Некорректная строка: " . $line); continue; } [$date, $count, $hash, $errorText] = $parts; @@ -68,19 +70,16 @@ class TelegramTarget extends \yii\log\Target return false; } - $count++; $line = implode('|', [$currentDate, $count, $hash, $errorText]); break; } } - if (!$errorExists) { - $errorLines[] = implode('|', [$currentDate, 1, $currentErrorHash, $currentError]); + $errorLines[] = implode('|', [$currentDate, 1, $currentErrorHash, $escapedError]); } - file_put_contents($filePath, implode(PHP_EOL, $errorLines) . PHP_EOL); return true;