Realizza mp3 cercabili in PHP

Ho fatto questo script PHP

     $ file_name = 'sample.mp3';

     intestazione ('Content-Type: audio / mpeg');

     $ opts = arrays ('http' =>
                       arrays (
                           'method' => 'GET',
                           'protocol_version' => 1.1,
                       )
     );
     $ context = stream_context_create ($ opts);
     $ stream = fopen ($ file_name, 'rb', FALSE, $ context);
     $ metadata = stream_get_meta_data ($ stream);
     $ data = stream_get_contents ($ stream);
     print ($ data);
     fclose ($ stream);

Potresti eseguire lo streaming dei media mp3 con successo ma non sono in grado di cercare il file mp3 che viene riprodotto anche nei tag video HTML5 non sono in grado di estrarre i metadati da esso, per favore dimmi where sto sbagliando e come far funzionare questo process , Grazie

Qui prova questo, support download parziali e cerca qualsiasi file, anche ora funziona correttamente in chrome:

 <?php $file_name = './sample.mp3'; stream($file_name, 'audio/mpeg'); /** * Stream-able file handler * * @param String $file_location * @param Header|String $content_type * @return content */ function stream($file, $content_type = 'application/octet-stream') { @error_reporting(0); // Make sure the files exists, otherwise we are wasting our time if (!file_exists($file)) { header("HTTP/1.1 404 Not Found"); exit; } // Get file size $filesize = sprintf("%u", filesize($file)); // Handle 'Range' header if(isset($_SERVER['HTTP_RANGE'])){ $range = $_SERVER['HTTP_RANGE']; }elseif($apache = apache_request_headers()){ $headers = arrays(); foreach ($apache as $header => $val){ $headers[strtolower($header)] = $val; } if(isset($headers['range'])){ $range = $headers['range']; } else $range = FALSE; } else $range = FALSE; //Is range if($range){ $partial = true; list($param, $range) = explode('=',$range); // Bad request - range unit is not 'bytes' if(strtolower(trim($param)) != 'bytes'){ header("HTTP/1.1 400 Invalid Request"); exit; } // Get range values $range = explode(',',$range); $range = explode('-',$range[0]); // Deal with range values if ($range[0] === ''){ $end = $filesize - 1; $start = $end - intval($range[0]); } else if ($range[1] === '') { $start = intval($range[0]); $end = $filesize - 1; }else{ // Both numbers present, return specific range $start = intval($range[0]); $end = intval($range[1]); if ($end >= $filesize || (!$start && (!$end || $end == ($filesize - 1)))) $partial = false; // Invalid range/whole file specified, return whole file } $length = $end - $start + 1; } // No range requested else $partial = false; // Send standard headers header("Content-Type: $content_type"); header("Content-Length: $filesize"); header('Accept-Ranges: bytes'); // send extra headers for range handling... if ($partial) { header('HTTP/1.1 206 Partial Content'); header("Content-Range: bytes $start-$end/$filesize"); if (!$fp = fopen($file, 'rb')) { header("HTTP/1.1 500 Internal Server Error"); exit; } if ($start) fseek($fp,$start); while($length){ set_time_limit(0); $read = ($length > 8192) ? 8192 : $length; $length -= $read; print(fread($fp,$read)); } fclose($fp); } //just send the whole file else readfile($file); exit; } ?> 

Questo dovrebbe risolvere il problema, si spera, seguire questo metodo.

Quello che devi fare è usare readfile() e impostare file_exists() modo che tu possa dire che stai aprendo il file corretto.

 $extension = "mp3"; $mime_type = "audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3"; if(file_exists($file_name)){ header('Content-type: {$mime_type}'); header('Content-length: ' . filesize($file_name)); header('Content-Disposition: filename="' . $file_name); header('X-Pad: avoid browser bug'); header('Cache-Control: no-cache'); readfile($file_name); } 

Riferimento