L'invio di file mp3 tramite PHP da utilizzare con il tag audio di HTML5 non riesce nel bel mezzo del mp3

Sto cercando di submit i miei file mp3 attraverso uno script PHP per hide il path del file nel codice HTML. Tutto funziona perfettamente bene tranne che a metà strada nel mp3 chrome mi dà un errore GET [URL]. E il resto degli mp3 è vuoto. Il tag audio pensa che stia ancora leggendo il file, ma non c'è audio.

Ecco come invio il file mp3 da php:

if (file_exists($filename)) { header("Content-Transfer-Encoding: binary"); header("Content-Type: audio/mpeg"); header('Content-length: ' . filesize($filename)); header('Content-Disposition: inline; filename="' . $filename . '"'); header('X-Pad: avoid browser bug'); header('Cache-Control: no-cache'); readfile($filename); exit; } else { header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404); echo "no file"; } 

Modifica: ho aggiunto l'intestazione Etag. Sembra migliorare le cose. Il problema si verifica ancora ma non altrettanto spesso. : – /

Edit2: Ho notato che le intestazioni delle richieste inviate al mio file PHP sono diverse dalle intestazioni inviate direttamente al file mp3. In realtà c'è una richiesta HTTP_RANGE inviata al file mp3, ma questa richiesta di intervallo manca quando tento di recuperare cose da PHP. (Questo è in Chrome). Qualche idea del perché questo potrebbe essere?

So che questo è un vecchio post ma sono riuscito a farlo funzionare con due file e index.php e example.php.

questo è example.php che sta controllando un databse per un hash e un field usato per sapere se il file è stato usato prima

 <?php if(isset($_GET['hash'])){ $mysqli = new mysqli('host_here','user_here','password_here','database_here'); $result = $mysqli->query("select * from hashes where hash = '{$_GET['hash']}' limit 1"); $row = $result->fetch_arrays(); } if(isset($row['used']) && $row['used'] == 0){ $mysqli->query("update hashes set used=1 where hash = '{$_GET['hash']}'"); $filename = "example.mp3"; header("Content-Transfer-Encoding: binary"); header("Content-Type: audio/mpeg"); header('Content-length: ' . filesize($filename)); header('Content-Disposition: inline; filename="' . $filename . '"'); header('X-Pad: avoid browser bug'); header('Cache-Control: no-cache'); readfile($filename); exit; } elseif(isset($row['used']) && $row['used'] == 1){ die("you can't just download this dude"); } 

ed ecco index.php con il tag audio che permetterà di giocare ma non di scaricare l'mp3.

 <html> <body> <?php $mysqli = new mysqli('localhost','root','','test_mp3'); $rand = mt_rand(); $hash = md5($rand); $result = $mysqli->query("insert into hashes (hash,used) values('$hash',0)"); ?> <audio controls> <source src="example.php?hash=<?=$hash?>" type="audio/mpeg"> </audio> </body> </html> 

c'è una tabella di database con solo un hash e un field usato per questo esempio per funzionare