За последние 24 часа нас посетили 16983 программиста и 1652 робота. Сейчас ищут 1009 программистов ...

Content-type

Тема в разделе "Прочие вопросы по PHP", создана пользователем energy2008, 1 июл 2008.

  1. energy2008

    energy2008 Активный пользователь

    С нами с:
    24 июн 2008
    Сообщения:
    47
    Симпатии:
    0
    Каким образом можно автоматически получить Content-type файла для того чтобы указать в заголовке при выдаче (когда пользователь скачивает файл)? Например в Опере поумолчанию без этого определения файл сохраняется как HTML.

    PHP:
    1. <? $cd = 'dir/breaks';
    2. $fn = 'radium_-_noise_poison.mp3';
    3. $filename = $cd."/".$fn;
    4. if (!file_exists($filename))
    5.    {
    6.     header ("HTTP/1.0 404 Not Found");
    7.     exit;
    8.    }
    9. $fsize = filesize($filename);
    10. $ftime = date("D, d M Y H:i:s T", filemtime($filename));
    11. $fd = @fopen($filename, "rb");
    12. if (!$fd){
    13.   header ("HTTP/1.0 403 Forbidden");
    14.   exit;
    15. }
    16. // Если запрашивающий агент поддерживает докачку
    17. if ($HTTP_SERVER_VARS["HTTP_RANGE"]) {
    18.   $range = $HTTP_SERVER_VARS["HTTP_RANGE"];
    19.   $range = str_replace("bytes=", "", $range);
    20.   $range = str_replace("-", "", $range);
    21.   if ($range) {fseek($fd, $range);}
    22. }
    23. $content = fread($fd, filesize($filename));
    24. fclose($fd);
    25. if ($range) {
    26.   header("HTTP/1.1 206 Partial Content");
    27. }
    28. else {
    29.   header("HTTP/1.1 200 OK");
    30. }
    31. header("Content-Disposition: attachment; filename=".$fn."");
    32. header("Last-Modified: $ftime");
    33. header("Accept-Ranges: bytes");
    34. header("Content-Length: ".($fsize-$range));
    35. header("Content-Range: bytes $range-".($fsize -1)."/".$fsize);
    36. header("Content-type: audio/mpeg");
    37. print $content;
    38.  
    39. ?>
     
  2. energy2008

    energy2008 Активный пользователь

    С нами с:
    24 июн 2008
    Сообщения:
    47
    Симпатии:
    0
    Нашел самостоятельно, но теперь при работе этого кода вываливается
    HTTP 500 - внутренняя ошибка сервера

    PHP:
    1. <?
    2. $cd = 'dir/breaks';
    3. $fn = '000000000000000000000.jpg';
    4. $filename = $cd."/".$fn;
    5.  
    6. if (!file_exists($filename))
    7.    {
    8.     header ("HTTP/1.0 404 Not Found");
    9.     exit;
    10.    }
    11. $fileCType = mime_content_type($filename);
    12. $fsize = filesize($filename);
    13. $ftime = date("D, d M Y H:i:s T", filemtime($filename));
    14. $fd = @fopen($filename, "rb");
    15. if (!$fd){
    16.   header ("HTTP/1.0 403 Forbidden");
    17.   exit;
    18. }
    19. // Если запрашивающий агент поддерживает докачку
    20. if ($_SERVER['HTTP_RANGE']) {
    21.   $range = $_SERVER['HTTP_RANGE'];
    22.   $range = str_replace("bytes=", "", $range);
    23.   $range = str_replace("-", "", $range);
    24.   if ($range) {fseek($fd, $range);}
    25. }
    26. $content = fread($fd, filesize($filename));
    27. fclose($fd);
    28. if ($range) {
    29.   header("HTTP/1.1 206 Partial Content");
    30. }
    31. else {
    32.   header("HTTP/1.1 200 OK");
    33. }
    34. header("Content-Disposition: attachment; filename=".$fn."");
    35. header("Last-Modified: $ftime");
    36. header("Accept-Ranges: bytes");
    37. header("Content-Length: ".($fsize-$range));
    38. header("Content-Range: bytes $range-".($fsize -1)."/".$fsize);
    39. header("Content-type: ".$fileCType."");
    40. print $content;
    41.  
    42. ?>
     
  3. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    energy2008

    error_log что говорит?
     
  4. energy2008

    energy2008 Активный пользователь

    С нами с:
    24 июн 2008
    Сообщения:
    47
    Симпатии:
    0
    думаю дело mime_content_type(), буду разбираться