/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>';
	}
}
 |