2018-11-10 22:03:03 +03:00
|
|
|
<?php
|
|
|
|
|
2018-11-10 22:44:23 +03:00
|
|
|
/**
|
|
|
|
* Implements functions for debugging purposes. Debugging can be enabled by
|
|
|
|
* placing a file named 'DEBUG' in PATH_ROOT.
|
|
|
|
*
|
|
|
|
* The file specifies a whitelist of IP addresses on which debug mode will be
|
|
|
|
* enabled. An empty file enables debug mode for everyone (highly discouraged
|
|
|
|
* for public servers!). Each line in the file specifies one client in the
|
|
|
|
* whitelist. For example:
|
|
|
|
*
|
|
|
|
* 192.168.1.72
|
|
|
|
* 127.0.0.1
|
|
|
|
* ::1
|
|
|
|
*
|
|
|
|
* Notice: If you are running RSS-Bridge on your local machine, you need to add
|
|
|
|
* localhost (either 127.0.0.1 for IPv4 or ::1 for IPv6) to your whitelist!
|
|
|
|
*
|
|
|
|
* Warning: In debug mode your server may display sensitive information! For
|
|
|
|
* security reasons it is recommended to whitelist only specific IP addresses.
|
|
|
|
*/
|
2018-11-10 22:03:03 +03:00
|
|
|
class Debug {
|
2018-11-10 22:44:23 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Indicates if debug mode is enabled.
|
|
|
|
* Use Debug::isEnabled() instead of accessing this parameter directly!
|
|
|
|
*/
|
|
|
|
private static $enabled = false;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Indicates if debug mode is secure (not enabled for everyone).
|
|
|
|
* Use Debug::isSecure() instead of accessing this parameter directly!
|
|
|
|
*/
|
|
|
|
private static $secure = false;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return bool Indicates if debug mode is enabled
|
|
|
|
*/
|
|
|
|
public static function isEnabled() {
|
|
|
|
static $firstCall = true; // Initialized on first call
|
|
|
|
|
|
|
|
if($firstCall && file_exists(PATH_ROOT . 'DEBUG')) {
|
|
|
|
|
|
|
|
$debug_whitelist = trim(file_get_contents(PATH_ROOT . 'DEBUG'));
|
|
|
|
|
|
|
|
Debug::$enabled = empty($debug_whitelist) || in_array($_SERVER['REMOTE_ADDR'],
|
|
|
|
explode("\n", str_replace("\r", '', $debug_whitelist)
|
|
|
|
)
|
|
|
|
);
|
|
|
|
|
|
|
|
if(Debug::$enabled) {
|
|
|
|
ini_set('display_errors', '1');
|
|
|
|
error_reporting(E_ALL);
|
|
|
|
|
|
|
|
Debug::$secure = !empty($debug_whitelist);
|
|
|
|
}
|
|
|
|
|
|
|
|
$firstCall = false; // Skip check on next call
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return Debug::$enabled;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns true if debug mode has been enabled for specific IP addresses
|
|
|
|
* only, false otherwise.
|
|
|
|
*
|
|
|
|
* Notice: The security flag is set by Debug::isEnabled(). If this function
|
|
|
|
* is called before Debug::isEnabled(), the default value is false!
|
|
|
|
*
|
|
|
|
* @return bool Indicates if debug mode is secure
|
|
|
|
*/
|
|
|
|
public static function isSecure() {
|
|
|
|
return Debug::$secure;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds a debug message to error_log if debug mode is enabled
|
|
|
|
*/
|
2018-11-10 22:03:03 +03:00
|
|
|
public static function log($text) {
|
2018-11-10 22:44:23 +03:00
|
|
|
if(!Debug::isEnabled()) {
|
2018-11-10 22:03:03 +03:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 3);
|
|
|
|
$calling = $backtrace[2];
|
|
|
|
$message = $calling['file'] . ':'
|
|
|
|
. $calling['line'] . ' class '
|
|
|
|
. (isset($calling['class']) ? $calling['class'] : '<no-class>') . '->'
|
|
|
|
. $calling['function'] . ' - '
|
|
|
|
. $text;
|
|
|
|
|
|
|
|
error_log($message);
|
|
|
|
}
|
|
|
|
}
|