diff --git a/src/Dibi/Event.php b/src/Dibi/Event.php index 5b883d7a..0d0c7af4 100644 --- a/src/Dibi/Event.php +++ b/src/Dibi/Event.php @@ -70,7 +70,11 @@ class Event $dibiDir = dirname((new \ReflectionClass('dibi'))->getFileName()) . DIRECTORY_SEPARATOR; foreach (debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS) as $row) { - if (isset($row['file']) && is_file($row['file']) && strpos($row['file'], $dibiDir) !== 0) { + if ( + isset($row['file']) + && preg_match('~\.(php.?|phtml)$~', $row['file']) + && substr($row['file'], 0, strlen($dibiDir)) !== $dibiDir + ) { $this->source = [$row['file'], (int) $row['line']]; break; } diff --git a/tests/dibi/Event.source.phpt b/tests/dibi/Event.source.phpt new file mode 100644 index 00000000..484eaaf0 --- /dev/null +++ b/tests/dibi/Event.source.phpt @@ -0,0 +1,21 @@ +source); + +eval('$event = new Dibi\Event($conn, Dibi\Event::CONNECT);'); +Assert::same([__FILE__, __LINE__ - 1], $event->source); + +array_map(function () use ($conn) { + $event = new Dibi\Event($conn, Dibi\Event::CONNECT); + Assert::same([__FILE__, __LINE__ - 1], $event->source); +}, [null]);