Support » Plugin: W3 Total Cache » Fatal Error: Output buffering issue

  • We have been seeing the following issue in our error logs:

    PHP Fatal error: Unknown: Cannot use output buffering in output buffering display handlers in Unknown on line 0

    We see this issue about once a day and it appears to be very random. A search does bring up some other instances:
    https://wordpress.org/support/topic/unknown-cannot-use-output-buffering-in-output-buffering-display-handlers-in-unk (2yrs ago)
    https://wordpress.org/support/topic/strange-random-error-cannot-use-output-buffering-in-output-buffering-display-ha (1yr ago, includes stack trace)

    When we see this log entry, our access logs show something strange — it appears the web client is requesting the same page several times in a row even though the HTTP code was 200.

    Log format:
    [{time}] "{METHOD} {path} {version}" {RESPONSE_CODE} {RESPONSE_SIZE} {REFERRER} {USER-AGENT}

    All from IP1 for /path1:

    [04:12:59] "GET /path1 HTTP/1.1" 304 - "http://www.google.com/" "Mozilla/5.0 (Linux; Android 4.4.4; Z970 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36"
    -- PHP error is logged --
    [04:12:58] "GET /path1 HTTP/1.1" 200 27252 "http://www.google.com/" "Mozilla/5.0 (Linux; Android 4.4.4; Z970 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36"
    [04:12:56] "GET /path1 HTTP/1.1" 200 27252 "http://www.google.com/" "Mozilla/5.0 (Linux; Android 4.4.4; Z970 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36"
    [04:12:56] "GET /path1 HTTP/1.1" 200 27252 "http://www.google.com/" "Mozilla/5.0 (Linux; Android 4.4.4; Z970 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36"

    All from IP2 for /path2:

    [09:44:29] "GET /path2 HTTP/1.1" 200 25955 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36"
    -- PHP error is logged --
    [09:44:28] "GET /path2 HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36"
    [09:44:27] "GET /path2 HTTP/1.1" 200 25947 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36"
    [09:44:27] "GET /path2 HTTP/1.1" 200 25947 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36"

    All from IP3 for /path3:

    [14:02:19] "GET /path3 HTTP/1.1" 304 - "-" "Mozilla/5.0 (Linux; Android 5.0.1; SCH-I545 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.92 Mobile Safari/537.36"
    -- PHP error is logged --
    [14:02:18] "GET /path3 HTTP/1.1" 200 25062 "-" "Mozilla/5.0 (Linux; Android 5.0.1; SCH-I545 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.92 Mobile Safari/537.36"

    My best guess is that PgCache->_send_headers (http://plugins.svn.wordpress.org/w3-total-cache/trunk/lib/W3/PgCache.php) is sending a bad Content-Length header and the browser is invalidating the response body because it doesn’t match… but that doesn’t make a whole lot of sense.

    Can someone with more experience with this plugin take a look at this edge case?

    https://wordpress.org/plugins/w3-total-cache/

Viewing 3 replies - 1 through 3 (of 3 total)
  • I have seen this issue in a number of cases.

    Case 1. You are using something like Auto Optimize while the W3TC minify is running and it causes this issue to display. If you have any other plugin running that optimizes CSS Js or html disable it.

    Case 2. You have a gzip plugin and browser cache running. Disable the other plugin.

    Case 3. You have some GZIP code in the theme and is causing this error remove it.

    What are you running as far as plugins. As well as your W3TC configuration

    Config:
    W3TC config is set to ONLY enable Disk:Basic Page Caching and “Browser Caching” to add expires headers. No other features are enabled.

    Plugins:
    We have no Gzip plugins enabled. After searching, I do see plugins that call ob_start():
    * WordPress SEO uses ob_start() so it can replace the <title> tag
    * Page Navi uses ob_start() to capture <link>’s
    * Our custom theme uses ob_start() twice to capture and replace WordPress content.

    We do use gzip compression but not in PHP; we let our CDN handle last-mile acceleration for us.

    This issue occurs once a day (~1 in 50k-70k WordPress requests). So I suspect it’s related to a rare race condition involving temp/cache files or headers. I just don’t have enough experience with this plugin to isolate it.

    Why are you running Disk Basic and not Enhanced?

    Disk basic serves it from php while Enhanced uses rewrites. Try using Enhanced if u can.

Viewing 3 replies - 1 through 3 (of 3 total)
  • The topic ‘Fatal Error: Output buffering issue’ is closed to new replies.