|
Server : LiteSpeed System : Linux srv104790275 5.15.0-161-generic #171-Ubuntu SMP Sat Oct 11 08:17:01 UTC 2025 x86_64 User : dewac4139 ( 1077) 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, Directory : /home/mentaribetslot.com/public_html/wp-content/plugins/amp/src/DevTools/ |
Upload File : |
<?php
/**
* Class LikelyCulpritDetector.
*
* @package AmpProject\AmpWP
*/
namespace AmpProject\AmpWP\DevTools;
use AmpProject\AmpWP\Infrastructure\Service;
use Error;
use Exception;
use InvalidArgumentException;
use Throwable;
/**
* Go through a debug backtrace and detect the extension that is likely to have
* caused that backtrace.
*
* @package AmpProject\AmpWP
* @since 2.0.2
* @internal
*/
final class LikelyCulpritDetector implements Service {
/**
* File reflector to use.
*
* @var FileReflection
*/
private $file_reflection;
/**
* LikelyCulpritDetector constructor.
*
* @param FileReflection $file_reflection File reflector to use.
*/
public function __construct( FileReflection $file_reflection ) {
$this->file_reflection = $file_reflection;
}
/**
* Detect the themes and plugins responsible for causing the current debug
* backtrace.
*
* @return array {
* Type and name of extension that is the likely culprit.
*
* @type string $type Type. Empty if none matched.
* @type string $name Name. Empty if none matched.
* }
*/
public function analyze_backtrace() {
return $this->analyze_trace( debug_backtrace( 0 ) ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace
}
/**
* Detect the themes and plugins responsible for causing the exception.
*
* @param Throwable|Exception $throwable Exception or Error to analyze. The Throwable type does not exist in PHP 5,
* which is why type is absent from the function parameter.
* @throws InvalidArgumentException If $throwable is not an Exception or an Error.
* @return array {
* Type and name of extension that is the likely culprit.
*
* @type string $type Type. Empty if none matched.
* @type string $name Name. Empty if none matched.
* }
*/
public function analyze_throwable( $throwable ) {
if ( ! ( $throwable instanceof Exception || $throwable instanceof Error ) ) {
throw new InvalidArgumentException( 'Parameter must be Throwable (Exception or Error).' );
}
$trace = $throwable->getTrace();
array_unshift( $trace, [ FileReflection::SOURCE_FILE => $throwable->getFile() ] );
return $this->analyze_trace( $trace );
}
/**
* Detect the themes and plugins responsible for an issue in a trace.
*
* @param array $trace Associative array of trace data to analyze.
* @return array {
* Type and name of extension that is the likely culprit.
*
* @type string $type Type. Empty if none matched.
* @type string $name Name. Empty if none matched.
* }
*/
public function analyze_trace( $trace ) {
foreach ( $trace as $call_stack ) {
if ( empty( $call_stack[ FileReflection::SOURCE_FILE ] ) ) {
continue;
}
$source = $this->file_reflection->get_file_source( $call_stack[ FileReflection::SOURCE_FILE ] );
if (
empty( $source )
||
FileReflection::TYPE_CORE === $source[ FileReflection::SOURCE_TYPE ]
||
(
FileReflection::TYPE_PLUGIN === $source[ FileReflection::SOURCE_TYPE ]
&&
// Per \AmpProject\AmpWP\PluginRegistry::get_plugins(), AMP and Gutenberg are considered core.
in_array( $source[ FileReflection::SOURCE_NAME ], [ 'amp', 'gutenberg' ], true )
)
) {
// We skip WordPress Core (likely hooks subsystem) and the AMP
// plugin itself.
continue;
}
return $source;
}
return [
FileReflection::SOURCE_TYPE => '',
FileReflection::SOURCE_NAME => '',
];
}
}