<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Zend on Luther Monson</title>
    <link>https://luth.io/tags/zend/</link>
    <description>Recent content in Zend on Luther Monson</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Thu, 13 Aug 2026 21:14:00 -0700</lastBuildDate>
    <atom:link href="https://luth.io/tags/zend/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Requests That End Wrong: A 200 That Was Really a Crash</title>
      <link>https://luth.io/blog/2026/08/requests-that-end-wrong/</link>
      <pubDate>Thu, 13 Aug 2026 21:14:00 -0700</pubDate>
      <guid>https://luth.io/blog/2026/08/requests-that-end-wrong/</guid>
      <description>&lt;p&gt;The scariest response a server can send isn&amp;rsquo;t a 500. It&amp;rsquo;s a 200 that should have been a 500. A crash is loud. The pod&#xA;restarts, an alert fires, somebody looks. A truncated page with a success status code is quiet. Your CDN caches it and&#xA;the health check calls the box healthy. A client parses half a document as if it were the whole thing.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/ephpm/ephpm&#34;&gt;ePHPm&lt;/a&gt; embeds PHP inside a Rust server. So we own the part of PHP that php-fpm&#xA;normally owns: starting a request, running the script and ending it. Over the last couple of months I&amp;rsquo;ve fixed three&#xA;bugs that all live in that start-and-end code. None of them were in the SAPI I/O callbacks like &lt;code&gt;ub_write&lt;/code&gt; and&#xA;&lt;code&gt;read_post&lt;/code&gt;, where you&amp;rsquo;d expect to find embed bugs. They were in the Zend request lifecycle and in TSRM teardown.&#xA;That&amp;rsquo;s code you never touch when you run PHP behind php-fpm.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
