-
Notifications
You must be signed in to change notification settings - Fork 143
Performance Lab: PHP Warning: "Undefined array key 1" #2158
Copy link
Copy link
Closed
Labels
[Plugin] Performance LabIssue relates to work in the Performance Lab Plugin onlyIssue relates to work in the Performance Lab Plugin only[Type] BugAn existing feature is brokenAn existing feature is broken
Milestone
Description
Bug Description
Loading up my home page of my site, I get two PHP warnings from performance-lab:
Warning: Undefined array key 1 in plugins/performance-lab/includes/server-timing/defaults.php on line 57 [{closure:{closure:{closure:perflab_register_default_server_timing_before_template_metrics():28}:47}:56}(), plugins/performance-lab/includes/server-timing/defaults.php:54 array_reduce(), plugins/performance-lab/includes/server-timing/class-perflab-server-timing.php:121 {closure:{closure:perflab_register_default_server_timing_before_template_metrics():28}:47}(), plugins/performance-lab/includes/server-timing/load.php:87 Perflab_Server_Timing->register_metric(), plugins/performance-lab/includes/server-timing/defaults.php:44 perflab_server_timing_register_metric(), plugins/performance-lab/includes/server-timing/defaults.php:77 {closure:perflab_register_default_server_timing_before_template_metrics():28}(), wp-includes/class-wp-hook.php:324 {closure:perflab_register_default_server_timing_before_template_metrics():75}(), wp-includes/plugin.php:205 WP_Hook->apply_filters(), wp-includes/template-loader.php:104 apply_filters('template_include'), wp-blog-header.php:19 require_once('wp-includes/template-loader.php'), index.php:17 require('wp-blog-header.php')]
Warning: Undefined array key 1 in plugins/performance-lab/includes/server-timing/defaults.php on line 170 [{closure:{closure:{closure:perflab_register_default_server_timing_template_metrics():151}:156}:169}(), plugins/performance-lab/includes/server-timing/defaults.php:167 array_reduce(), plugins/performance-lab/includes/server-timing/class-perflab-server-timing.php:121 {closure:{closure:perflab_register_default_server_timing_template_metrics():151}:156}(), plugins/performance-lab/includes/server-timing/load.php:87 Perflab_Server_Timing->register_metric(), plugins/performance-lab/includes/server-timing/defaults.php:153 perflab_server_timing_register_metric(), wp-includes/class-wp-hook.php:324 {closure:perflab_register_default_server_timing_template_metrics():151}(), wp-includes/class-wp-hook.php:348 WP_Hook->apply_filters(), wp-includes/plugin.php:517 WP_Hook->do_action(), plugins/performance-lab/includes/server-timing/class-perflab-server-timing.php:160 do_action('perflab_server_timing_send_header'), plugins/performance-lab/includes/server-timing/class-perflab-server-timing.php:274 Perflab_Server_Timing->send_header(), Perflab_Server_Timing->{closure:Perflab_Server_Timing::start_output_buffer():271}(), wp-includes/functions.php:5472 ob_end_flush(), wp-includes/class-wp-hook.php:324 wp_ob_end_flush_all(), wp-includes/class-wp-hook.php:348 WP_Hook->apply_filters(), wp-includes/plugin.php:517 WP_Hook->do_action(), wp-includes/load.php:1307 do_action('shutdown'), shutdown_action_hook()]
Steps to reproduce
I'm not sure how to reproduce if you're not already experiencing this issue. I think it might be related to using HyperDB?
Dumping $query from Line 57 gives me:
array (
'elapsed' => 0.00029397010803222656,
'host' => '[REMOVED]',
'microtime' => '0.27954500 1757014437',
'debug' => 'require, require_once, require_once, require_once, do_action, WP_Hook->do_action, WP_Hook->apply_filters, wpcom_vip_qm_require, apply_filters, WP_Hook->apply_filters, wpcom_vip_qm_enable, current_user_can, wp_get_current_user, _wp_get_current_user, wp_set_current_user, do_action, WP_Hook->do_action, WP_Hook->apply_filters, {closure:/var/www/wp-content/mu-plugins/000-vip-init.php:161}, get_user_by, WP_User->get_data_by, wpdb->get_row, hyperdb->query',
'query' => 'SELECT * FROM wp_users WHERE user_login = \'[REMOVED]\' LIMIT 1',
'dbhname' => 'global__r',
'dataset' => 'global',
'callback_result' => NULL,
'connection' =>
array (
'dbhname' => 'global__r',
'host' => '[REMOVED]',
'port' => '[REMOVED]',
'user' => '[REMOVED]',
'name' => '[REMOVED]',
'server_state' => 'up',
'elapsed' => 0.0012891292572021484,
'success' => true,
'queries' => 1,
'lag' => 0,
),
)Additional Context
- PHP Version: 8.4.12
- WordPress Version: 6.9-alpha-60637
- OS: MacOS?
- Browser: Latest Chrome and Firefox?
- Plugin Version: 4.0.0
- Device: MacBook Pro?
I threw this in for a quick fix, if I'm understanding correctly what the code is doing:
diff --git a/plugins/performance-lab/includes/server-timing/defaults.php b/plugins/performance-lab/includes/server-timing/defaults.php
index db92f30..5ac1001 100644
--- a/plugins/performance-lab/includes/server-timing/defaults.php
+++ b/plugins/performance-lab/includes/server-timing/defaults.php
@@ -54,7 +54,13 @@ function perflab_register_default_server_timing_before_template_metrics(): void
$GLOBALS['perflab_query_time_before_template'] = array_reduce(
$GLOBALS['wpdb']->queries,
static function ( $acc, $query ) {
- return $acc + $query[1];
+ $query_time = 0.0;
+ if ( isset( $query[1] ) && is_float( $query[1] ) ) {
+ $query_time = $query[1];
+ } elseif ( isset( $query['elapsed'] ) && is_float( $query['elapsed'] ) ) {
+ $query_time = $query['elapsed'];
+ }
+ return $acc + $query_time;
},
0.0
);
@@ -167,7 +173,13 @@ function perflab_register_default_server_timing_template_metrics(): void {
$total_query_time = array_reduce(
$GLOBALS['wpdb']->queries,
static function ( $acc, $query ) {
- return $acc + $query[1];
+ $query_time = 0.0;
+ if ( isset( $query[1] ) && is_float( $query[1] ) ) {
+ $query_time = $query[1];
+ } elseif ( isset( $query['elapsed'] ) && is_float( $query['elapsed'] ) ) {
+ $query_time = $query['elapsed'];
+ }
+ return $acc + $query_time;
},
0.0
);Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
[Plugin] Performance LabIssue relates to work in the Performance Lab Plugin onlyIssue relates to work in the Performance Lab Plugin only[Type] BugAn existing feature is brokenAn existing feature is broken
Type
Fields
Give feedbackNo fields configured for issues without a type.
Projects
Status
Done 😃