HEX
Server: LiteSpeed
System: Linux kapuas.iixcp.rumahweb.net 5.14.0-427.42.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Nov 1 14:58:02 EDT 2024 x86_64
User: mirz4654 (1666)
PHP: 8.1.33
Disabled: system,exec,escapeshellarg,escapeshellcmd,passthru,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec,popen,pclose,dl,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setsid,posix_setuid,posix_setpgid,ini_alter,show_source,define_syslog_variables,symlink,syslog,openlog,openlog,closelog,ocinumcols,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dll,ftp,myshellexec,socket_bind,mail,posix_getwpuid
Upload Files
File: //opt/alt/php-xray/php/profiler/classes/xray-profiler-collector-blocking-resources.php
<?php

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

namespace XrayProfiler;

if (! class_exists('\XrayProfiler\CollectorBlockingResources')) {
    class CollectorBlockingResources extends Collector
    {
        /**
         * Number of blocking CSS resources found.
         *
         * @var int
         */
        private $css_resource_count = 0;

        /**
         * How many times empty buffer occurred.
         *
         * @var int
         */
        private $empty_buffer_occurred = 0;

        /**
         * @var self|null
         */
        private static $instance = null;

        private function __construct()
        {
            $this->data = [
                'css' => 0,
            ];
        }

        private function __clone()
        {
        }

        /**
         * @return self
         */
        public static function instance()
        {
            if (is_null(self::$instance)) {
                self::$instance = new self();
                self::$instance->clean();
            }

            return self::$instance;
        }

        /**
         * Filter the output buffer contents.
         *
         * @param string $buffer Contents of the output buffer.
         *
         * @return string
         */
        public function startOutputBuffering($buffer)
        {
            if (empty($buffer)) {
                $this->empty_buffer_occurred++;

                return $buffer;
            }

            $this->scanForBlockingCss($buffer);

            return $buffer;
        }

        /**
         * Flush the output buffer.
         *
         * @return void
         */
        public function stopOutputBuffering()
        {
            if (ob_get_contents()) {
                ob_end_flush();
            }
        }

        /**
         * Looks for blocking CSS resources in given HTML code.
         *
         * The number of found resources is added to a local counter.
         *
         * @param string $html
         *
         * @return void
         */
        private function scanForBlockingCss($html)
        {
            $parser = new CssResourceParser();
            $parser->parse($html);

            $this->css_resource_count += $parser->getCount();
        }

        /**
         * @return array
         */
        public function getData()
        {
            $value = $this->css_resource_count;
            if (0 === $value && $this->empty_buffer_occurred > 0) {
                $value = $this->empty_buffer_occurred * -1;
            }

            return [
                'css' => $value,
            ];
        }

        /**
         * {@inheritDoc}
         */
        public function getXrayData()
        {
            return $this->getData();
        }

        /**
         * {@inheritDoc}
         */
        public function clean()
        {
            $this->css_resource_count    = 0;
            $this->empty_buffer_occurred = 0;
            $this->data                  = [];

            return $this;
        }
    }
}