![]() Server : Apache System : Linux pod-100823:apache2_74:v0.5.9 5.4.0-1138-gcp #147~18.04.1-Ubuntu SMP Mon Oct 7 21:46:26 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33.9 Disable Function : apache_child_terminate,apache_get_modules,apache_get_version,apache_getenv,apache_note,apache_setenv,disk_free_space,disk_total_space,diskfreespace,dl,exec,fastcgi_finish_request,link,opcache_compile_file,opcache_get_configuration,opcache_invalidate,opcache_is_script_cached,opcache_reset,passthru,pclose,pcntl_exec,popen,posix_getpid,posix_getppid,posix_getpwuid,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_uname,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,realpath_cache_get,shell_exec,show_source,symlink,system Directory : /nas/content/live/attorneyexperi/wp-content/plugins/diva/src/DevTools/ |
<?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 => '', ]; } }