johnbillion / query-monitor

The developer tools panel for WordPress
https://querymonitor.com
GNU General Public License v2.0
1.58k stars 207 forks source link

PHP Warning: Undefined array key (probably Windows-only issue) #866

Open siliconforks opened 3 months ago

siliconforks commented 3 months ago

When running Query Monitor with the Twenty Twenty-Four theme on Windows I get these warnings:

PHP Warning:  Undefined array key "O:/Apache24/htdocs/wordpress/wp-content/themes/twentytwentyfour/parts/header.html" in O:\\Apache24\\htdocs\\wordpress\\wp-content\\plugins\\query-monitor\\output\\html\\theme.php on line 163
PHP Warning:  Undefined array key "O:/Apache24/htdocs/wordpress/wp-content/themes/twentytwentyfour/parts/post-meta.html" in O:\\Apache24\\htdocs\\wordpress\\wp-content\\plugins\\query-monitor\\output\\html\\theme.php on line 163
PHP Warning:  Undefined array key "O:/Apache24/htdocs/wordpress/wp-content/themes/twentytwentyfour/parts/footer.html" in O:\\Apache24\\htdocs\\wordpress\\wp-content\\plugins\\query-monitor\\output\\html\\theme.php on line 163

I believe the cause of the issue is here:

https://github.com/johnbillion/query-monitor/blob/3.16.0/collectors/theme.php#L473-L500

Note the following:

So, $this->data->count_template_parts does not have the same keys as the other arrays.

LoranRendel commented 3 months ago

Also encountered this error.

The problem is that target array items on Windows actual value is not O:/Apache24/htdocs/wordpress/wp-content/themes/twentytwentyfour/parts/header.html, but O:\Apache24\htdocs\wordpress/wp-content/themes/twentytwentyfour/parts/header.html

The plugin should use wp_normalize_path when forming this array.

siliconforks commented 3 months ago

The plugin should use wp_normalize_path when forming this array.

That's what QM_Util::standard_dir does (among other things). Query Monitor performs

$file = QM_Util::standard_dir( $file );

but it does it too late, because it has already used $file before then.