Народ, выручайте, не могу догнать в чём прикол. PHP: <?php set_time_limit(0); require_once("include/bittorrent.php"); dbconn(); loggedinorreturn(); $filename = preg_split("/\//", ((isset($_SERVER['ORIG_PATH_INFO'])) ? $_SERVER['ORIG_PATH_INFO'] : $_SERVER['PATH_INFO'])); $id = array_reverse($filename); $id = $id[0]; if (!$id){ httperr(); } $res = mysql_query('SELECT id, name, video_link AS link FROM trailers WHERE id='.$id.' ') or sqlerr(__FILE__, __LINE__); $row = mysql_fetch_assoc($res); if (!$row || !file_exists("/home/file/www/trailers/trailers/".$row['link']) || !is_readable("/home/file/www/trailers/trailers/".$row['link'])){ echo 'File is temporary unavaliable!'; exit; httperr(); } $i = strrpos($row['link'], "."); if ($i !== false) { $ext = strtolower(substr($row['link'], $i)); } else { echo 'File is temporary unavaliable!'; exit; httperr(); } switch ($ext) { case ".mov": $content_type = "video/quicktime"; break; case ".avi": $content_type = "video/x-msvideo"; break; case ".mpeg": case ".mpg": case ".mpe": $content_type = "video/mpeg"; break; default: $content_type = "application/octet-stream"; break; } $name = str_replace(" ", "", $row['name'].$ext); $name = str_replace("/", "-", $name); $length = filesize("/home/file/www/trailers/trailers/".$row['link']); header('Pragma: public'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Cache-Control: public'); header('Content-Description: File Transfer'); header('Content-Type: '.$content_type); header('Content-Length: '.$length); header('Content-Disposition: attachment; filename="'.$name.'"'); /* header("Pragma: public"); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: public"); header("Content-Description: File Transfer"); header('Content-Type: '.$content_type); header('Content-Disposition: attachment; filename="'.$name.'";'); header("Content-Transfer-Encoding: binary\n"); header('Content-Length: '.$length); header('Accept-Ranges: bytes');*/ readfile('/home/file/www/trailers/trailers/'.$row['link'].''); exit(); ?> В IE не показываеться прогресс бар сколько скачано - только downloaded xxx so far. В FireFox всё нормально - показывает сколько общий объём и сколько осталось скачать. Вторая пролема в том, что скачанное получаеться битым. Там видео фаилы. Плеер их не открывает Если скачать напрямую - всё ОК. Так что проблема где в скрипте, только в чём она - не понимаю. Стоит: Код (Text): WEB ~ # uname -a Linux WEB 2.6.20-gentoo-r8 #1 SMP Sat Jun 30 00:57:09 EEST 2007 x86_64 Intel(R) Core(TM)2 CPU 6600 @ 2.40GHz GenuineIntel GNU/Linux WEB ~ # lighttpd -v lighttpd-1.4.13 (ssl) - a light and fast webserver Build-Date: Jul 31 2007 23:54:41 WEB ~ # php -v PHP 5.2.2-pl1-gentoo (cli) (built: Jul 13 2007 20:17:52) Copyright (c) 1997-2007 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies with XCache v1.2.1, Copyright (c) 2005-2007, by mOo WEB ~ #
Насчёт второй проблемы. Уже один раз кто-то столкнулся с этой проблемой, но никто не помог http://php.ru/forum/viewtopic.php?t=6717 может хоть сейчас разберёмся.
Dagdamor Sergey89 По второй проблеме - оказалось плеер отказывался играть потому, что в названии была кирилица. Rename помог. По первой - врублена. Если отрубаем само собой всё ОК становиться. Значит если я хочу что бы у меня качалось с прогресс баром то нужно отрубать компрессию?
Psih Отрубать не обязательно, но надо понимать, что длина сжатого файла отличается от длины исходного, поэтому заголовок "header('Content-Length: '.$length);" посылает клиенту ерунду. Как именно включается компрессия в скрипте, каким образом?