| Server IP : 185.252.147.100 / Your IP : 216.73.217.33 Web Server : nginx/1.27.3 System : Linux mitrofanov.ru 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64 User : mitr ( 1000) PHP Version : 8.2.29 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /www/html/tour.mitrofanov.ru/public/wp-content/plugins/site-reviews/plugin/Modules/ |
Upload File : |
<?php
namespace GeminiLabs\SiteReviews\Modules;
use GeminiLabs\SiteReviews\Helper;
use GeminiLabs\SiteReviews\Helpers\Arr;
class Backtrace
{
public function buildLine(array $backtrace): string
{
return sprintf('%s:%s', $this->getClassName($backtrace), $this->getLineNumber($backtrace));
}
public function line(int $limit = 10): string
{
return $this->buildLine(array_slice($this->trace($limit), 4));
}
/**
* @param mixed $data
* @param \Throwable|mixed $data
*/
public function lineFromData($data): string
{
$backtrace = ((interface_exists('Throwable') && $data instanceof \Throwable) || $data instanceof \Exception)
? $data->getTrace()
: debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1);
return $this->buildLine($backtrace);
}
public function normalizeLine(string $line): string
{
$search = array_unique([
'GeminiLabs\\SiteReviews\\',
glsr()->path('plugin/'),
glsr()->path('plugin/', false),
trailingslashit(glsr()->path()),
trailingslashit(glsr()->path('', false)),
WP_CONTENT_DIR,
ABSPATH,
]);
return str_replace('/', '\\', str_replace($search, '', $line));
}
public function trace(int $limit = 6): array
{
$trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, $limit + 2);
array_shift($trace); // remove the first entry
if ('glsr_trace' === ($trace[0]['function'] ?? '')) {
array_shift($trace); // remove the second entry
} else {
array_pop($trace); // remove the last entry
}
return $trace;
}
protected function getClassName(array $backtrace): string
{
$file = Arr::get($backtrace, '0.file');
$class = Arr::get($backtrace, '1.class');
$search = Arr::searchByKey('glsr_log', $backtrace, 'function');
if (false !== $search) {
$class = Arr::get($search, 'class', Arr::get($search, 'file'));
} elseif (str_ends_with($file, 'helpers.php')) {
$file = Arr::get($backtrace, '1.file');
$class = Arr::get($backtrace, '2.class');
} elseif (str_ends_with($file, 'BlackHole.php') && 'WP_Hook' !== Arr::get($backtrace, '2.class')) {
$class = Arr::get($backtrace, '2.class');
}
return Helper::ifEmpty($class, $file);
}
protected function getLineNumber(array $backtrace): string
{
$search = Arr::searchByKey('glsr_log', $backtrace, 'function');
if (false !== $search) {
return Arr::get($search, 'line');
}
$file = Arr::get($backtrace, '0.file');
$line = Arr::get($backtrace, '0.line');
if (str_ends_with($file, 'helpers.php')) {
return Arr::get($backtrace, '1.line');
} elseif (str_ends_with($file, 'BlackHole.php') && 'WP_Hook' !== Arr::get($backtrace, '2.class')) {
return Arr::get($backtrace, '1.line');
}
return $line;
}
}