%PDF- %PDF-
Direktori : /data/www_bck/varak.net_bck/stats.varak.net/plugins/Diagnostics/Diagnostic/ |
Current File : //data/www_bck/varak.net_bck/stats.varak.net/plugins/Diagnostics/Diagnostic/PhpFunctionsCheck.php |
<?php /** * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later */ namespace Piwik\Plugins\Diagnostics\Diagnostic; use Piwik\Translation\Translator; /** * Check the enabled PHP functions. */ class PhpFunctionsCheck implements Diagnostic { /** * @var Translator */ private $translator; public function __construct(Translator $translator) { $this->translator = $translator; } public function execute() { $label = $this->translator->translate('Installation_SystemCheckFunctions'); $result = new DiagnosticResult($label); foreach ($this->getRequiredFunctions() as $function) { if (! self::functionExists($function)) { $status = DiagnosticResult::STATUS_ERROR; $comment = sprintf( '%s <br/><br/><em>%s</em><br/><em>%s</em><br/>', $function, $this->getHelpMessage($function), $this->translator->translate('Installation_RestartWebServer') ); } else { $status = DiagnosticResult::STATUS_OK; $comment = $function; } $result->addItem(new DiagnosticResultItem($status, $comment)); } return array($result); } /** * @return string[] */ private function getRequiredFunctions() { return array( 'debug_backtrace', 'eval', 'hash', 'gzcompress', 'gzuncompress', 'pack', ); } /** * Tests if a function exists. Also handles the case where a function is disabled via Suhosin. * * @param string $function * @return bool */ public static function functionExists($function) { // eval() is a language construct if ($function == 'eval') { // does not check suhosin.executor.eval.whitelist (or blacklist) if (extension_loaded('suhosin')) { return @ini_get("suhosin.executor.disable_eval") != "1"; } return true; } $exists = function_exists($function); if (extension_loaded('suhosin')) { $blacklist = @ini_get("suhosin.executor.func.blacklist"); if (!empty($blacklist)) { $blacklistFunctions = array_map('strtolower', array_map('trim', explode(',', $blacklist))); return $exists && !in_array($function, $blacklistFunctions); } } return $exists; } private function getHelpMessage($missingFunction) { $messages = array( 'debug_backtrace' => 'Installation_SystemCheckDebugBacktraceHelp', 'eval' => 'Installation_SystemCheckEvalHelp', 'hash' => 'Installation_SystemCheckHashHelp', 'gzcompress' => 'Installation_SystemCheckGzcompressHelp', 'gzuncompress' => 'Installation_SystemCheckGzuncompressHelp', 'pack' => 'Installation_SystemCheckPackHelp', ); return $this->translator->translate($messages[$missingFunction]); } }