title: MP4 plays when accessed directly, but not when read through PHP, on iOS
body: <p>I use a PHP script to validate video requests before serving them.  This script works as expected on the desktop, with Safari and Chrome.  But on iOS, I get a broken play button.</p>
  
  <p>I'm sure the video is properly encoded for iPhone/iPad, because when I access it directly, it works as expected.</p>
  
  <p>The relevant PHP code:</p>
  
  <pre><code>$file_name = 'test-video.mp4';
  $file_size = (string)(filesize($file_name));
  header('Content-Type: video/mp4');
  header('Content-Length: '.$file_size);
  readfile_chunked($file_name);
  exit;
  </code></pre>
  
  <p>(<code>readfile_chunked()</code> is similar to <code>readfile()</code> but for very large files, found in the comments on the PHP manual page: <a href="http://php.net/manual/en/function.readfile.php" rel="noreferrer">http://php.net/manual/en/function.readfile.php</a>.  In any event, <code>test-video.mp4</code> is only ~5 MB, which is less than the memory limit — and in this case I actually can substitute in the normal <code>readfile()</code> and produce the exact same behavior.)</p>
  
  <p>The headers I get when I access <code>test-video.mp4</code> directly are:</p>
  
  <pre><code>Accept-Ranges:bytes
  Connection:Keep-Alive
  Content-Length:5558749
  Content-Type:video/mp4
  Date:Sun, 27 Jun 2010 21:02:09 GMT
  Etag:"1c04757-54d1dd-489944c5a6400"
  Keep-Alive:timeout=10, max=30
  Last-Modified:Tue, 22 Jun 2010 01:25:36 GMT
  Server:Apache/2.2.15 (CentOS) mod_ssl/2.2.15 0.9.8l DAV/2 mod_auth_passthrough/2.1 FrontPage/5.0.2.2635
  </code></pre>
  
  <p>The headers from the PHP script are:</p>
  
  <pre><code>Connection:Keep-Alive
  Content-Disposition:inline; filename="test-video.mp4"
  Content-Length:5558749
  Content-Type:video/mp4
  Date:Sun, 27 Jun 2010 21:03:32 GMT
  Keep-Alive:timeout=10, max=15
  Server:Apache/2.2.15 (CentOS) mod_ssl/2.2.15 0.9.8l DAV/2 mod_auth_passthrough/2.1 FrontPage/5.0.2.2635
  X-Powered-By:PHP/5.2.13
  </code></pre>
  
  <p>I've tried many different permutations of headers, even matching them exactly to those from a direct request, to no avail.</p>
  
  <p>Has anyone had success serving HTML5 video through PHP, on iOS?</p>
  
  <p>[Note: I would try using X-Sendfile, but the site is on a shared host with very limited access.]</p>
  
  <p><strong>EDIT:</strong> I was reading that iOS can be sensitive about file extensions, so I tried setting up a RewriteRule that rewrites MP4 requests back to my original PHP script, but that didn't help either.</p>