Title: tlunt's Replies | WordPress.org

---

# tlunt

  [  ](https://wordpress.org/support/users/tlunt/)

 *   [Profile](https://wordpress.org/support/users/tlunt/)
 *   [Topics Started](https://wordpress.org/support/users/tlunt/topics/)
 *   [Replies Created](https://wordpress.org/support/users/tlunt/replies/)
 *   [Reviews Written](https://wordpress.org/support/users/tlunt/reviews/)
 *   [Topics Replied To](https://wordpress.org/support/users/tlunt/replied-to/)
 *   [Engagements](https://wordpress.org/support/users/tlunt/engagements/)
 *   [Favorites](https://wordpress.org/support/users/tlunt/favorites/)

 Search replies:

## Forum Replies Created

Viewing 1 replies (of 1 total)

 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[WP-Optimize – Cache, Compress images, Minify & Clean database to boost page speed & performance] Fatal TypeError in WebP self-test (has_vary) stops page cache from saving](https://wordpress.org/support/topic/fatal-typeerror-in-webp-self-test-has_vary-stops-page-cache-from-saving/)
 *  Thread Starter [tlunt](https://wordpress.org/support/users/tlunt/)
 * (@tlunt)
 * [22 hours, 59 minutes ago](https://wordpress.org/support/topic/fatal-typeerror-in-webp-self-test-has_vary-stops-page-cache-from-saving/#post-19035065)
 * No problem, thanks for looking into this
 * The site runs Apache 2.4 (Debian) with PHP 8.3, using the official wordpress:
   latest Docker image. It sits behind a Traefik reverse proxy and Cloudflare.
 * Also here are the runtime logs from the container, this was throwing anytime :
 * `[Fri Oct 02 14:03:58.583631 2026] [php:error] [pid 223433:tid 223433] [client]
   PHP Fatal error: Uncaught TypeError: preg_match(): Argument #2 ($subject) must
   be of type string, array given in /var/www/html/wp-content/plugins/wp-optimize/
   webp/class-wpo-webp-self-test.php:43`
   `Stack trace: ``#0 /var/www/html/wp-content/
   plugins/wp-optimize/webp/class-wpo-webp-self-test.php(43): preg_match('/accept/
   i', Array) ``#1 /var/www/html/wp-content/plugins/wp-optimize/webp/class-wpo-webp-
   self-test.php(71): WPO_WebP_Self_Test->has_vary(Array) ``#2 /var/www/html/wp-
   content/plugins/wp-optimize/webp/class-wp-optimize-webp.php(454): WPO_WebP_Self_Test-
   >is_webp_served() ``#3 /var/www/html/wp-content/plugins/wp-optimize/webp/class-
   wp-optimize-webp.php(269): WP_Optimize_WebP->run_webp_serving_self_test() ``#
   4 /var/www/html/wp-content/plugins/wp-optimize/webp/class-wp-optimize-webp.php(
   227): WP_Optimize_WebP->is_webp_redirection_possible() ``#5 /var/www/html/wp-
   content/plugins/wp-optimize/includes/class-wpo-page-optimizer.php(286): WP_Optimize_WebP-
   >maybe_decide_webp_serve_method('...') #6 /var/www/html/wp-content/plugins/wp-
   optimize/includes/class-wpo-page-optimizer.php(51): WPO_Page_Optimizer->maybe_alter_html_for_webp('...')``#
   7 [internal function]: WPO_Page_Optimizer->optimize('...', 9) ``#8 /var/www/html/
   wp-includes/functions.php(5581): ob_end_flush() ``#9 /var/www/html/wp-includes/
   class-wp-hook.php(353): wp_ob_end_flush_all('') #10 /var/www/html/wp-includes/
   class-wp-hook.php(377): WP_Hook->apply_filters('', Array) ``#11 /var/www/html/
   wp-includes/plugin.php(523): WP_Hook->do_action(Array) ``#12 /var/www/html/wp-
   includes/load.php(1308): do_action('shutdown') ``#13 [internal function]: shutdown_action_hook()``#
   14 {main} thrown in /var/www/html/wp-content/plugins/wp-optimize/webp/class-wpo-
   webp-self-test.php on line 43`
 * What triggers it is the Vary header coming back as two separate header lines,
   not one combined line. This is the response to the self-test image request (/
   wp-content/uploads/wpo/images/wpo_logo_small.png with Accept: image/webp):
 * `HTTP/2 200
   content-type: image/webpvary: Accept-Encodingvary: Accept
 * When a header is repeated, wp_remote_retrieve_headers() returns its value as 
   an array. has_vary() then passes that array to preg_match(), which throws the
   TypeError on PHP 8.

Viewing 1 replies (of 1 total)