Каким образом можно автоматически получить Content-type файла для того чтобы указать в заголовке при выдаче (когда пользователь скачивает файл)? Например в Опере поумолчанию без этого определения файл сохраняется как HTML. PHP: <? $cd = 'dir/breaks'; $fn = 'radium_-_noise_poison.mp3'; $filename = $cd."/".$fn; if (!file_exists($filename)) { header ("HTTP/1.0 404 Not Found"); exit; } $fsize = filesize($filename); $ftime = date("D, d M Y H:i:s T", filemtime($filename)); $fd = @fopen($filename, "rb"); if (!$fd){ header ("HTTP/1.0 403 Forbidden"); exit; } // Если запрашивающий агент поддерживает докачку if ($HTTP_SERVER_VARS["HTTP_RANGE"]) { $range = $HTTP_SERVER_VARS["HTTP_RANGE"]; $range = str_replace("bytes=", "", $range); $range = str_replace("-", "", $range); if ($range) {fseek($fd, $range);} } $content = fread($fd, filesize($filename)); fclose($fd); if ($range) { header("HTTP/1.1 206 Partial Content"); } else { header("HTTP/1.1 200 OK"); } header("Content-Disposition: attachment; filename=".$fn.""); header("Last-Modified: $ftime"); header("Accept-Ranges: bytes"); header("Content-Length: ".($fsize-$range)); header("Content-Range: bytes $range-".($fsize -1)."/".$fsize); header("Content-type: audio/mpeg"); print $content; exit; ?>
Нашел самостоятельно, но теперь при работе этого кода вываливается HTTP 500 - внутренняя ошибка сервера PHP: <? $cd = 'dir/breaks'; $fn = '000000000000000000000.jpg'; $filename = $cd."/".$fn; if (!file_exists($filename)) { header ("HTTP/1.0 404 Not Found"); exit; } $fileCType = mime_content_type($filename); $fsize = filesize($filename); $ftime = date("D, d M Y H:i:s T", filemtime($filename)); $fd = @fopen($filename, "rb"); if (!$fd){ header ("HTTP/1.0 403 Forbidden"); exit; } // Если запрашивающий агент поддерживает докачку if ($_SERVER['HTTP_RANGE']) { $range = $_SERVER['HTTP_RANGE']; $range = str_replace("bytes=", "", $range); $range = str_replace("-", "", $range); if ($range) {fseek($fd, $range);} } $content = fread($fd, filesize($filename)); fclose($fd); if ($range) { header("HTTP/1.1 206 Partial Content"); } else { header("HTTP/1.1 200 OK"); } header("Content-Disposition: attachment; filename=".$fn.""); header("Last-Modified: $ftime"); header("Accept-Ranges: bytes"); header("Content-Length: ".($fsize-$range)); header("Content-Range: bytes $range-".($fsize -1)."/".$fsize); header("Content-type: ".$fileCType.""); print $content; exit; ?>