есть такой класс Параметр $resume вкл выкл докачку Так вот если он выкл, то опера не докачивает, а вот ФФ начинает докачивать как ни в чём не бывало...пАчиму? =) PHP: <? class download{ var $properties = array( 'old_name' => "", 'new_name' => "", 'type' => "", 'size' => "", 'resume' => "", 'max_speed' => "" ); var $range = 0; function cnf_download($path, $name="", $resume=0, $max_speed=0){ $name = ($name == "") ? substr(strrchr("/".$path,"/"),1) : $name; $file_size = @filesize($path); $this->properties = array( 'old_name' => $path, 'new_name' => $name, 'type'=> "application/force-download", 'size' => $file_size, 'resume' => $resume, 'max_speed' => $max_speed ); if ($this->properties['resume']) { if(isset($_SERVER['HTTP_RANGE'])) { $this->range = $_SERVER['HTTP_RANGE']; $this->range = str_replace("bytes=", "", $this->range); $this->range = str_replace("-", "", $this->range); } else { $this->range = 0; } if ($this->range > $this->properties['size']) $this->range = 0; } else { $this->range = 0; } } function download_file(){ if ($this->range) { header($_SERVER['SERVER_PROTOCOL']." 206 Partial Content"); } else { header($_SERVER['SERVER_PROTOCOL']." 200 OK"); } header("Pragma: public"); header("Expires: 0"); header("Cache-Control:"); header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Type: ".$this->properties["type"]); header('Content-Disposition: attachment; filename="'.$this->properties["new_name"].'";'); header("Content-Transfer-Encoding: binary"); if ($this->properties['resume']) header("Accept-Ranges: bytes"); if ($this->range) { header("Content-Range: bytes {$this->range}-".($this->properties['size']-1)."/".$this->properties['size']); header("Content-Length: ".($this->properties['size']-$this->range)); } else { header("Content-Length: ".$this->properties['size']); } @ini_set('max_execution_time', 0); @set_time_limit(); $this->_download($this->properties["old_name"], $this->range); } function _download ($filename, $range=0) { @ob_end_clean(); if (($speed = $this->properties['max_speed']) > 0) $sleep_time = (8 / $speed) * 1e6; else $sleep_time = 0; $handle = fopen($filename, 'rb'); fseek($handle,$range); if ($handle === false) { return false; } while (!feof($handle)) { print (fread($handle, 1024*8)); ob_flush(); flush(); usleep($sleep_time); } fclose($handle); return true; } } ?>
вроде все так и ренж не расчитывается если запрет на докачку стоит и значит выдает указатель - что качать с 0 ... (если ты конечно сам не напутал и заставляешь скрипт перебирать cnf_download при каждом обращение к файлу, а не пытаешься запомнить значения в сессии) но вот когда сам делал скрипт докачки .. то обратил внимание что фаерфокс лукавит и когда говорит что типа закачка остановлена - соединение на самом деле не ревет, просто ставит сокет в какуюто задержку .. и когда говоришь восстановить передачу, то просто продолжает принимать данные ... а на самом деле обрыва-то небыло! была пауза .... и вот тебе вопрос - а ты проверял он точно рвет соединение, а потом восстанавливает и продолжает докачивать ??
есть фаервол - "Аутпост"... очень помогает при работе с сетью .. посмотреть какая прога с чем держит соединения и т.д. но можно эмпирически вычислить через netstat
ээ я вот так сделал =) не знаю правельно или нет Вставил в download.php такую строчку PHP: $fp=fopen("log.txt","a+"); fputs($fp,"start\r\n"); fclose($fp); потом несколько раз первал и востановил загрузку записало только один start.. значит не рвёт?