|WP_Error */ public function get_debug_state() { $path = $this->resolve_config_path(); if ( is_wp_error( $path ) ) { return $path; } $content = @file_get_contents( $path ); if ( ! is_string( $content ) ) { return new WP_Error( 'wteam_executor_config_read_failed', __( 'Executor could not read wp-config.php.', 'wteam-executor' ) ); } $state = []; foreach ( WTeam_Executor_Config_Policy::readable_constants() as $constant ) { $state[ $constant ] = $this->read_boolean_define( $content, $constant ); } return [ 'path' => $this->display_path( $path ), 'constants' => $state, ]; } /** @return string|WP_Error */ private function resolve_config_path() { $candidates = [ ABSPATH . 'wp-config.php', dirname( untrailingslashit( ABSPATH ) ) . '/wp-config.php' ]; foreach ( $candidates as $candidate ) { $real = realpath( $candidate ); if ( $real && is_file( $real ) && is_readable( $real ) ) { return wp_normalize_path( $real ); } } return new WP_Error( 'wteam_executor_config_not_found', __( 'Executor could not locate a readable wp-config.php.', 'wteam-executor' ) ); } /** @return bool|null */ private function read_boolean_define( $content, $constant ) { $pattern = '/define\s*\(\s*([\'\"])' . preg_quote( $constant, '/' ) . '\1\s*,\s*(true|false|1|0)\s*\)\s*;/i'; if ( ! preg_match( $pattern, (string) $content, $match ) ) { return null; } return in_array( strtolower( $match[2] ), [ 'true', '1' ], true ); } /** @return string */ private function display_path( $path ) { $path = wp_normalize_path( $path ); $root_real = realpath( ABSPATH ); $root = $root_real ? trailingslashit( wp_normalize_path( $root_real ) ) : ''; return $root && 0 === strpos( $path, $root ) ? ltrim( substr( $path, strlen( $root ) ), '/' ) : 'wp-config.php'; } }