/usr/share/php/Nette/Diagnostics/OutputDebugger.php is in php-nette 2.1.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | <?php
/**
* This file is part of the Nette Framework (http://nette.org)
* Copyright (c) 2004 David Grudl (http://davidgrudl.com)
*/
namespace Nette\Diagnostics;
use Nette;
/**
* @author David Grudl
*/
class OutputDebugger extends Nette\Object
{
const BOM = "\xEF\xBB\xBF";
/** @var array of [file, line, output] */
private $list = array();
/** @var string */
private $lastFile;
public static function enable()
{
$me = new static;
$me->start();
}
public function start()
{
foreach (get_included_files() as $file) {
if (fread(fopen($file, 'r'), 3) === self::BOM) {
$this->list[] = array($file, 1, self::BOM);
}
}
ob_start(array($this, 'handler'), PHP_VERSION_ID >= 50400 ? 1 : 2);
}
public function handler($s, $phase)
{
$trace = debug_backtrace(FALSE);
if (isset($trace[0]['file'], $trace[0]['line'])) {
if ($this->lastFile === $trace[0]['file']) {
$this->list[count($this->list) - 1][2] .= $s;
} else {
$this->list[] = array($this->lastFile = $trace[0]['file'], $trace[0]['line'], $s);
}
}
if ($phase === PHP_OUTPUT_HANDLER_FINAL) {
return $this->renderHtml();
}
}
private function renderHtml()
{
$res = '<style>code, pre {white-space:nowrap} a {text-decoration:none} pre {color:gray;display:inline} big {color:red}</style><code>';
foreach ($this->list as $item) {
list($file, $line, $s) = $item;
$res .= Helpers::editorLink($item[0], $item[1]) . ' '
. str_replace(self::BOM, '<big>BOM</big>', Dumper::toHtml($item[2])) . "<br>\n";
}
return $res . '</code>';
}
}
|