| Name | Size | Mode | Actions |
|---|---|---|---|
| Debug/ | - | 0755 | rm |
| Middleware/ | - | 0755 | rm |
| BaseErrorHandler.php | 12433 | 0644 | editdlrm |
| ConsoleErrorHandler.php | 3558 | 0644 | editdlrm |
| Debugger.php | 37319 | 0644 | editdlrm |
| ErrorHandler.php | 7436 | 0644 | editdlrm |
| ErrorLogger.php | 4802 | 0644 | editdlrm |
| ErrorLoggerInterface.php | 1611 | 0644 | editdlrm |
| ExceptionRenderer.php | 14158 | 0644 | editdlrm |
| ExceptionRendererInterface.php | 950 | 0644 | editdlrm |
| FatalErrorException.php | 1293 | 0644 | editdlrm |
/var/www/vhosts/ihelp.ro/_OLD/vendor/cakephp/cakephp/src/Error/Debugger.php (37319B)
{:trace}',
'code' => '',
'context' => '',
'links' => [],
'escapeContext' => true,
],
'html' => [
'trace' => 'Trace', 'context' => '{:trace}
Context', 'escapeContext' => true, ], 'txt' => [ 'error' => "{:error}: {:code} :: {:description} on line {:line} of {:path}\n{:info}", 'code' => '', 'info' => '', ], 'base' => [ 'traceLine' => '{:reference} - {:path}, line {:line}', 'trace' => "Trace:\n{:trace}\n", 'context' => "Context:\n{:context}\n", ], ]; /** * A map of editors to their link templates. * * @var array */ protected $editors = [ 'atom' => 'atom://core/open/file?filename={file}&line={line}', 'emacs' => 'emacs://open?url=file://{file}&line={line}', 'macvim' => 'mvim://open/?url=file://{file}&line={line}', 'phpstorm' => 'phpstorm://open?file={file}&line={line}', 'sublime' => 'subl://open?url=file://{file}&line={line}', 'textmate' => 'txmt://open?url=file://{file}&line={line}', 'vscode' => 'vscode://file/{file}:{line}', ]; /** * Holds current output data when outputFormat is false. * * @var array */ protected $_data = []; /** * Constructor. */ public function __construct() { $docRef = ini_get('docref_root'); if (empty($docRef) && function_exists('ini_set')) { ini_set('docref_root', 'https://secure.php.net/'); } if (!defined('E_RECOVERABLE_ERROR')) { define('E_RECOVERABLE_ERROR', 4096); } $config = array_intersect_key((array)Configure::read('Debugger'), $this->_defaultConfig); $this->setConfig($config); $e = '{:context}
';
$e .= '{:error} ({:code}): {:description} ';
$e .= '[{:path}, line {:line}]';
$e .= '';
$e .= '';
$this->_templates['js']['error'] = $e;
$t = '';
$this->_templates['js']['info'] = $t;
$links = [];
$link = 'Code';
$links['code'] = $link;
$link = 'Context';
$links['context'] = $link;
$this->_templates['js']['links'] = $links;
$this->_templates['js']['context'] = '_templates['js']['context'] .= 'style="display: none;">{:context}';
$this->_templates['js']['code'] = '_templates['js']['code'] .= 'style="display: none;">{:code}';
$e = '{:error} ({:code}) : {:description} ';
$e .= '[{:path}, line {:line}]';
$this->_templates['html']['error'] = $e;
$this->_templates['html']['context'] = 'Context ';
$this->_templates['html']['context'] .= '{:context}
';
}
/**
* Returns a reference to the Debugger singleton object instance.
*
* @param string|null $class Class name.
* @return static
*/
public static function getInstance(?string $class = null)
{
static $instance = [];
if (!empty($class)) {
if (!$instance || strtolower($class) !== strtolower(get_class($instance[0]))) {
$instance[0] = new $class();
}
}
if (!$instance) {
$instance[0] = new Debugger();
}
return $instance[0];
}
/**
* Read or write configuration options for the Debugger instance.
*
* @param string|array|null $key The key to get/set, or a complete array of configs.
* @param mixed|null $value The value to set.
* @param bool $merge Whether to recursively merge or overwrite existing config, defaults to true.
* @return mixed Config value being read, or the object itself on write operations.
* @throws \Cake\Core\Exception\Exception When trying to set a key that is invalid.
*/
public static function configInstance($key = null, $value = null, bool $merge = true)
{
if ($key === null) {
return static::getInstance()->getConfig($key);
}
if (is_array($key) || func_num_args() >= 2) {
return static::getInstance()->setConfig($key, $value, $merge);
}
return static::getInstance()->getConfig($key);
}
/**
* Reads the current output masking.
*
* @return array
*/
public static function outputMask(): array
{
return static::configInstance('outputMask');
}
/**
* Sets configurable masking of debugger output by property name and array key names.
*
* ### Example
*
* Debugger::setOutputMask(['password' => '[*************]');
*
* @param array $value An array where keys are replaced by their values in output.
* @param bool $merge Whether to recursively merge or overwrite existing config, defaults to true.
* @return void
*/
public static function setOutputMask(array $value, bool $merge = true): void
{
static::configInstance('outputMask', $value, $merge);
}
/**
* Add an editor link format
*
* Template strings can use the `{file}` and `{line}` placeholders.
* Closures templates must return a string, and accept two parameters:
* The file and line.
*
* @param string $name The name of the editor.
* @param string|\Closure $template The string template or closure
* @return void
*/
public static function addEditor(string $name, $template): void
{
$instance = static::getInstance();
if (!is_string($template) && !($template instanceof Closure)) {
$type = getTypeName($template);
throw new RuntimeException("Invalid editor type of `{$type}`. Expected string or Closure.");
}
$instance->editors[$name] = $template;
}
/**
* Choose the editor link style you want to use.
*
* @param string $name The editor name.
* @return void
*/
public static function setEditor(string $name): void
{
$instance = static::getInstance();
if (!isset($instance->editors[$name])) {
$known = implode(', ', array_keys($instance->editors));
throw new RuntimeException("Unknown editor `{$name}`. Known editors are {$known}");
}
$instance->setConfig('editor', $name);
}
/**
* Get a formatted URL for the active editor.
*
* @param string $file The file to create a link for.
* @param int $line The line number to create a link for.
* @return string The formatted URL.
*/
public static function editorUrl(string $file, int $line): string
{
$instance = static::getInstance();
$editor = $instance->getConfig('editor');
if (!isset($instance->editors[$editor])) {
throw new RuntimeException("Cannot format editor URL `{$editor}` is not a known editor.");
}
$template = $instance->editors[$editor];
if (is_string($template)) {
return str_replace(['{file}', '{line}'], [$file, (string)$line], $template);
}
return $template($file, $line);
}
/**
* Recursively formats and outputs the contents of the supplied variable.
*
* @param mixed $var The variable to dump.
* @param int $maxDepth The depth to output to. Defaults to 3.
* @return void
* @see \Cake\Error\Debugger::exportVar()
* @link https://book.cakephp.org/4/en/development/debugging.html#outputting-values
*/
public static function dump($var, int $maxDepth = 3): void
{
pr(static::exportVar($var, $maxDepth));
}
/**
* Creates an entry in the log file. The log entry will contain a stack trace from where it was called.
* as well as export the variable using exportVar. By default the log is written to the debug log.
*
* @param mixed $var Variable or content to log.
* @param int|string $level Type of log to use. Defaults to 'debug'.
* @param int $maxDepth The depth to output to. Defaults to 3.
* @return void
*/
public static function log($var, $level = 'debug', int $maxDepth = 3): void
{
/** @var string $source */
$source = static::trace(['start' => 1]);
$source .= "\n";
Log::write($level, "\n" . $source . static::exportVar($var, $maxDepth));
}
/**
* Outputs a stack trace based on the supplied options.
*
* ### Options
*
* - `depth` - The number of stack frames to return. Defaults to 999
* - `format` - The format you want the return. Defaults to the currently selected format. If
* format is 'array' or 'points' the return will be an array.
* - `args` - Should arguments for functions be shown? If true, the arguments for each method call
* will be displayed.
* - `start` - The stack frame to start generating a trace from. Defaults to 0
*
* @param array $options Format for outputting stack trace.
* @return string|array Formatted stack trace.
* @link https://book.cakephp.org/4/en/development/debugging.html#generating-stack-traces
*/
public static function trace(array $options = [])
{
return Debugger::formatTrace(debug_backtrace(), $options);
}
/**
* Formats a stack trace based on the supplied options.
*
* ### Options
*
* - `depth` - The number of stack frames to return. Defaults to 999
* - `format` - The format you want the return. Defaults to the currently selected format. If
* format is 'array' or 'points' the return will be an array.
* - `args` - Should arguments for functions be shown? If true, the arguments for each method call
* will be displayed.
* - `start` - The stack frame to start generating a trace from. Defaults to 0
*
* @param array|\Throwable $backtrace Trace as array or an exception object.
* @param array $options Format for outputting stack trace.
* @return string|array Formatted stack trace.
* @link https://book.cakephp.org/4/en/development/debugging.html#generating-stack-traces
*/
public static function formatTrace($backtrace, array $options = [])
{
if ($backtrace instanceof Throwable) {
$backtrace = $backtrace->getTrace();
}
$self = Debugger::getInstance();
$defaults = [
'depth' => 999,
'format' => $self->_outputFormat,
'args' => false,
'start' => 0,
'scope' => null,
'exclude' => ['call_user_func_array', 'trigger_error'],
];
$options = Hash::merge($defaults, $options);
$count = count($backtrace);
$back = [];
$_trace = [
'line' => '??',
'file' => '[internal]',
'class' => null,
'function' => '[main]',
];
for ($i = $options['start']; $i < $count && $i < $options['depth']; $i++) {
$trace = $backtrace[$i] + ['file' => '[internal]', 'line' => '??'];
$signature = $reference = '[main]';
if (isset($backtrace[$i + 1])) {
$next = $backtrace[$i + 1] + $_trace;
$signature = $reference = $next['function'];
if (!empty($next['class'])) {
$signature = $next['class'] . '::' . $next['function'];
$reference = $signature . '(';
if ($options['args'] && isset($next['args'])) {
$args = [];
foreach ($next['args'] as $arg) {
$args[] = Debugger::exportVar($arg);
}
$reference .= implode(', ', $args);
}
$reference .= ')';
}
}
if (in_array($signature, $options['exclude'], true)) {
continue;
}
if ($options['format'] === 'points' && $trace['file'] !== '[internal]') {
$back[] = ['file' => $trace['file'], 'line' => $trace['line']];
} elseif ($options['format'] === 'array') {
$back[] = $trace;
} else {
if (isset($self->_templates[$options['format']]['traceLine'])) {
$tpl = $self->_templates[$options['format']]['traceLine'];
} else {
$tpl = $self->_templates['base']['traceLine'];
}
$trace['path'] = static::trimPath($trace['file']);
$trace['reference'] = $reference;
unset($trace['object'], $trace['args']);
$back[] = Text::insert($tpl, $trace, ['before' => '{:', 'after' => '}']);
}
}
if ($options['format'] === 'array' || $options['format'] === 'points') {
return $back;
}
return implode("\n", $back);
}
/**
* Shortens file paths by replacing the application base path with 'APP', and the CakePHP core
* path with 'CORE'.
*
* @param string $path Path to shorten.
* @return string Normalized path
*/
public static function trimPath(string $path): string
{
if (defined('APP') && strpos($path, APP) === 0) {
return str_replace(APP, 'APP/', $path);
}
if (defined('CAKE_CORE_INCLUDE_PATH') && strpos($path, CAKE_CORE_INCLUDE_PATH) === 0) {
return str_replace(CAKE_CORE_INCLUDE_PATH, 'CORE', $path);
}
if (defined('ROOT') && strpos($path, ROOT) === 0) {
return str_replace(ROOT, 'ROOT', $path);
}
return $path;
}
/**
* Grabs an excerpt from a file and highlights a given line of code.
*
* Usage:
*
* ```
* Debugger::excerpt('/path/to/file', 100, 4);
* ```
*
* The above would return an array of 8 items. The 4th item would be the provided line,
* and would be wrapped in ``. All of the lines
* are processed with highlight_string() as well, so they have basic PHP syntax highlighting
* applied.
*
* @param string $file Absolute path to a PHP file.
* @param int $line Line number to highlight.
* @param int $context Number of lines of context to extract above and below $line.
* @return array Set of lines highlighted
* @see https://secure.php.net/highlight_string
* @link https://book.cakephp.org/4/en/development/debugging.html#getting-an-excerpt-from-a-file
*/
public static function excerpt(string $file, int $line, int $context = 2): array
{
$lines = [];
if (!file_exists($file)) {
return [];
}
$data = file_get_contents($file);
if (empty($data)) {
return $lines;
}
if (strpos($data, "\n") !== false) {
$data = explode("\n", $data);
}
$line--;
if (!isset($data[$line])) {
return $lines;
}
for ($i = $line - $context; $i < $line + $context + 1; $i++) {
if (!isset($data[$i])) {
continue;
}
$string = str_replace(["\r\n", "\n"], '', static::_highlight($data[$i]));
if ($i === $line) {
$lines[] = '' . $string . '';
} else {
$lines[] = $string;
}
}
return $lines;
}
/**
* Wraps the highlight_string function in case the server API does not
* implement the function as it is the case of the HipHop interpreter
*
* @param string $str The string to convert.
* @return string
*/
protected static function _highlight(string $str): string
{
if (function_exists('hphp_log') || function_exists('hphp_gettid')) {
return htmlentities($str);
}
$added = false;
if (strpos($str, '', '<?php bool`
* - Convert newlines into `$1', $message);
$message = nl2br($message);
return $message;
}
/**
* Verifies that the application's salt and cipher seed value has been changed from the default value.
*
* @return void
*/
public static function checkSecurityKeys(): void
{
if (Security::getSalt() === '__SALT__') {
trigger_error(sprintf(
'Please change the value of %s in %s to a salt value specific to your application.',
'\'Security.salt\'',
'ROOT/config/app.php'
), E_USER_NOTICE);
}
}
}