%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /opt/alt/php-xray/php/profiler/
Upload File :
Create Path :
Current File : //opt/alt/php-xray/php/profiler/xray-profiler.php

<?php

// phpcs:disable PSR1.Files.SideEffects

/**
 * Copyright (с) Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2022 All Rights Reserved
 *
 * Licensed under CLOUD LINUX LICENSE AGREEMENT
 * https://www.cloudlinux.com/legal/
 */

use XrayProfiler\Log;
use XrayProfiler\CollectorShortcode;
use XrayProfiler\CollectorCacheability;
use XrayProfiler\CollectorBlockingResources;
use XrayProfiler\WebVitalsInjector;

if (defined('ABSPATH') && defined('WPINC') && function_exists('add_filter') && function_exists('json_encode')) {
    if (!defined('XRAY_RELEASE')) {
        define('XRAY_RELEASE', '0.6-27.el8');
    }

    if (!defined('CL_PHP_XRAY_PROFILER_PATH')) {
        define('CL_PHP_XRAY_PROFILER_PATH', '/opt/alt/php-xray/php/profiler');
    }

    try {
        include 'classes/xray-profiler-log.php';

        if (!function_exists('xray_profiler_log')) {
            /**
             * @param int $errno
             * @param string $errstr
             * @param  ?string $errfile
             * @param  ?int $errline
             *
             * @return void
             */
            function xray_profiler_log($errno, $errstr, $errfile = null, $errline = null)
            {
                if (class_exists('\XrayProfiler\Log')) {
                    Log::instance()->setData($errno, $errstr, $errfile, $errline);
                }
            }
        } else {
            return;
        }

        // Send log
        if (!function_exists('xray_profiler_send_log')) {
            /**
             * @return void
             */
            function xray_profiler_send_log()
            {
                if (class_exists('\XrayProfiler\Log')) {
                    Log::instance()->sendData();
                }
            }

            register_shutdown_function('xray_profiler_send_log');
        }
    } catch (Exception $e) {
        return;
    }

    try {
        include 'classes/xray-profiler-collector.php';
        include 'classes/xray-profiler-collector-shortcodes.php';
        include 'classes/xray-profiler-collector-cacheability.php';
        include 'classes/xray-profiler-css-resource-parser.php';
        include 'classes/xray-profiler-collector-blocking-resources.php';
        include 'classes/xray-profiler-web-vitals-injector.php';


        if (!function_exists('xray_profiler_set_error_handler')) {
            /**
             * @return void
             */
            function xray_profiler_set_error_handler()
            {
                set_error_handler(function ($errno, $errstr, $errfile, $errline) {
                    xray_profiler_log($errno, $errstr, $errfile, $errline);
                    return true;
                }, E_ALL);
            }
        }

        if (!function_exists('xray_profiler_restore_error_handler')) {
            /**
             * @return void
             */
            function xray_profiler_restore_error_handler()
            {
                restore_error_handler();
            }
        }

        if (!function_exists('xray_profiler_get_shortcodes_data')) {
            /**
             * @return string
             */
            function xray_profiler_get_shortcodes_data()
            {
                $result = '';

                if (class_exists('\XrayProfiler\CollectorShortcode')) {
                    xray_profiler_set_error_handler();

                    $xray_data = [
                        'shortcodes' => CollectorShortcode::instance()->getXrayData(),
                    ];

                    if (!($json = json_encode($xray_data))) {
                        trigger_error("Can't prepare json for " . __FUNCTION__, 2);
                    } else {
                        $result = $json;
                    }

                    xray_profiler_restore_error_handler();
                }

                return $result;
            }
        }

        // Filters
        if (class_exists('\XrayProfiler\CollectorShortcode')) {
            // @phpcs:ignore PHPCompatibility.Constants.NewConstants.php_int_minFound
            $priority = defined('PHP_INT_MIN') ? PHP_INT_MIN : 0 - PHP_INT_MAX;

            add_filter('pre_do_shortcode_tag', function ($return, $tag, $attr, $m) {
                xray_profiler_set_error_handler();
                $return = CollectorShortcode::instance()->preDoShortcodeTagEarly($return, $tag, $attr, $m);
                xray_profiler_restore_error_handler();
                return $return;
            }, $priority, 4);

            add_filter('pre_do_shortcode_tag', function ($return, $tag, $attr, $m) {
                xray_profiler_set_error_handler();
                $return = CollectorShortcode::instance()->preDoShortcodeTagLate($return, $tag, $attr, $m);
                xray_profiler_restore_error_handler();
                return $return;
            }, PHP_INT_MAX, 4);

            add_filter('do_shortcode_tag', function ($output, $tag, $attr, $m) {
                xray_profiler_set_error_handler();
                $output = CollectorShortcode::instance()->doShortcodeTagLate($output, $tag, $attr, $m);
                xray_profiler_restore_error_handler();
                return $output;
            }, PHP_INT_MAX, 4);
        }

        if (!function_exists('xray_profiler_get_cacheability_data')) {
            /**
             * @return string
             */
            function xray_profiler_get_cacheability_data()
            {
                $result = '';

                if (class_exists('\XrayProfiler\CollectorCacheability')) {
                    xray_profiler_set_error_handler();

                    $xray_data = [
                        'cacheability' => CollectorCacheability::instance()->getXrayData(),
                    ];

                    if (!($json = json_encode($xray_data))) {
                        trigger_error("Can't prepare json for " . __FUNCTION__, 2);
                    } else {
                        $result = $json;
                    }

                    xray_profiler_restore_error_handler();
                }

                return $result;
            }
        }

        if (!function_exists('xray_profiler_get_blocking_resources_data')) {
            /**
             * @return string
             */
            function xray_profiler_get_blocking_resources_data()
            {
                $result = '';

                if (class_exists('\XrayProfiler\CollectorBlockingResources')) {
                    xray_profiler_set_error_handler();

                    $xray_data = [
                        'blocking_resources' => CollectorBlockingResources::instance()->getXrayData(),
                    ];

                    if (!($json = json_encode($xray_data))) {
                        trigger_error("Can't prepare json for " . __FUNCTION__, 2);
                    } else {
                        $result = $json;
                    }

                    xray_profiler_restore_error_handler();
                }

                return $result;
            }
        }

        // Filters
        if (class_exists('\XrayProfiler\CollectorBlockingResources')) {
            // @phpcs:ignore PHPCompatibility.Constants.NewConstants.php_int_minFound
            $priority = defined('PHP_INT_MIN') ? PHP_INT_MIN : 0 - PHP_INT_MAX;
            add_action(
                'template_redirect',
                function () {
                    ob_start(array(
                        CollectorBlockingResources::instance(),
                        'startOutputBuffering'
                    ));
                },
                $priority
            );

            add_action(
                'shutdown',
                array(
                    CollectorBlockingResources::instance(),
                    'stopOutputBuffering'
                ),
                $priority + 1
            );
        }

        // WebVitals Filters
        if (class_exists('\XrayProfiler\WebVitalsInjector')) {
            if (
                @file_exists('/opt/alt/php-xray/php/advanced_metrics.enabled') ||
                (defined('CL_STAGING_MODE') && CL_STAGING_MODE)
            ) {
                add_action(
                    'wp_footer',
                    array(
                        WebVitalsInjector::instance(),
                        'inject'
                    ),
                    1000
                );
            }
        }
    } catch (Exception $e) {
        xray_profiler_log(E_USER_WARNING, $e->getMessage(), $e->getFile(), $e->getLine());
    }
}

Zerion Mini Shell 1.0