2013-04-16 17:41:31 +02:00
|
|
|
<?php
|
2021-02-25 15:10:03 +01:00
|
|
|
class Logger_SQL implements Logger_Adapter {
|
2013-04-16 17:41:31 +02:00
|
|
|
|
2018-09-10 20:49:31 +02:00
|
|
|
private $pdo;
|
|
|
|
|
2021-02-25 15:10:03 +01:00
|
|
|
function log_error(int $errno, string $errstr, string $file, int $line, $context) {
|
2013-04-17 14:05:52 +02:00
|
|
|
|
2018-09-10 20:49:31 +02:00
|
|
|
// separate PDO connection object is used for logging
|
|
|
|
if (!$this->pdo) $this->pdo = Db::instance()->pdo_connect();
|
|
|
|
|
|
|
|
if ($this->pdo && get_schema_version() > 117) {
|
2017-12-01 23:08:30 +01:00
|
|
|
|
2019-05-31 09:31:43 +02:00
|
|
|
// limit context length, DOMDocument dumps entire XML in here sometimes, which may be huge
|
|
|
|
$context = mb_substr($context, 0, 8192);
|
2019-02-24 05:26:14 +01:00
|
|
|
|
2019-08-20 07:09:05 +02:00
|
|
|
$server_params = [
|
2021-01-05 08:17:24 +01:00
|
|
|
"Real IP" => "HTTP_X_REAL_IP",
|
|
|
|
"Forwarded For" => "HTTP_X_FORWARDED_FOR",
|
|
|
|
"Forwarded Protocol" => "HTTP_X_FORWARDED_PROTO",
|
|
|
|
"Remote IP" => "REMOTE_ADDR",
|
2019-08-20 07:09:05 +02:00
|
|
|
"Request URI" => "REQUEST_URI",
|
|
|
|
"User agent" => "HTTP_USER_AGENT",
|
|
|
|
];
|
|
|
|
|
|
|
|
foreach ($server_params as $n => $p) {
|
|
|
|
if (isset($_SERVER[$p]))
|
|
|
|
$context .= "\n$n: " . $_SERVER[$p];
|
|
|
|
}
|
|
|
|
|
2019-05-01 07:38:52 +02:00
|
|
|
// passed error message may contain invalid unicode characters, failing to insert an error here
|
|
|
|
// would break the execution entirely by generating an actual fatal error instead of a E_WARNING etc
|
|
|
|
$errstr = UConverter::transcode($errstr, 'UTF-8', 'UTF-8');
|
|
|
|
$context = UConverter::transcode($context, 'UTF-8', 'UTF-8');
|
|
|
|
|
2018-09-10 20:49:31 +02:00
|
|
|
$sth = $this->pdo->prepare("INSERT INTO ttrss_error_log
|
2013-04-16 17:41:31 +02:00
|
|
|
(errno, errstr, filename, lineno, context, owner_uid, created_at) VALUES
|
2017-12-01 22:13:28 +01:00
|
|
|
(?, ?, ?, ?, ?, ?, NOW())");
|
2021-02-25 15:10:03 +01:00
|
|
|
$sth->execute([$errno, $errstr, $file, $line, $context, $_SESSION["uid"] ?? null]);
|
2013-04-16 17:41:31 +02:00
|
|
|
|
2017-12-01 22:13:28 +01:00
|
|
|
return $sth->rowCount();
|
2013-04-16 17:41:31 +02:00
|
|
|
}
|
2013-04-17 14:05:52 +02:00
|
|
|
|
2013-04-16 17:41:31 +02:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2018-09-10 20:49:31 +02:00
|
|
|
}
|