Всем привет! Существует проблема при загрузке файлов в опере с моего сайта. Файлы скачиваются с расширением htm Вот список заголовков: ------ HTTP/1.1 200 OK Date: Mon, 05 Sep 2011 13:10:38 GMT Content-Type: text/html; charset=windows-1251 Connection: close Set-Cookie: PHPSESSID=c7931adebb085db8a3d41f07766a3ed0; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Content-Disposition: attachment; filename="(forstud.info)_image_072(2).jpg" Server: Jino.ru/mod_pizza Last-Modified: Wed, 31 Aug 2011 08:39:30 GMT ETag: "157c999-c85a0-4abc91111d480" Accept-Ranges: bytes Content-Length: 820640 ------ Вопрос -- какого не хватает?
Отдаю файл так : ---- header('X-Accel-Limit-Rate: "2"'); header('Content-Disposition: attachment; filename="'.$this->properties['new_name'].'"'); header('X-Accel-Redirect: /'.$this->properties['old_name']); ---- Где Имя с которым нужно отдать и Имя реального файла на сервере выглядят примерно так: $this->properties['new_name'] = "(forstud.info)_image_072(2).jpg" $this->properties['old_name'] = "uploads/sdS45FDEF77VDvv43"
Ну попробуй разные... по идее должно рабоать и image/jpeg. В общем все так же, как если бы отдавал файл полностью через php.
не не не, файлы разные все, есть zip rar rtf doc тоесть вообще что-угодно может быть, вот с этим - то и проблема....
Если пхп 5.3+ то http://ru.php.net/manual/en/function.finfo-file.php Если меньше 5.3, то этот fileinfo как отдельный pecl шел Так просто... красивей, что ли. Но, наверно, можно и тупо application/octet-stream на все отдавать попробовать.
Проблема видимо не в этом..... даже со строчкой: header("Content-type: image/jpeg"); Всё равно расширение htm
Проблемы не было когда я перед отдачей переименовывал файл из хэша в надлежащий вид. Но ведь копирование это уж через чур..
Короче, вот функция, с версией = 1 всё работает но я считаю что это неправильный подход. С версией 2 в Опере расширение htm у всех файлов... PHP: function download_file() { $ver = 1; #$ver = 2; if ($ver == 1) { if ( !copy( $this->properties['old_name'], 'uploads/tmp/'.$this->properties["new_name"])) { SysLogTrace('ERROR','Error while creating TMP file. From: '.$this->properties['old_name'].' To: uploads/tmp/'.$this->properties["new_name"]); exit(); } header('X-Accel-Limit-Rate: "2"'); header('Content-Disposition: attachment; filename="'.$this->properties['new_name'].'"'); header('X-Accel-Redirect: /uploads/tmp/'.$this->properties['new_name']); #$un_res = unlink('uploads/tmp/'.$this->properties['new_name']); #echo $un_res.'<br/>'; #echo '/uploads/tmp/'.$this->properties['new_name']; exit(); } else if ($ver == 2) { header('X-Accel-Limit-Rate: "2"'); header("Content-type: application/force-download"); header('Content-Disposition: attachment; filename="'.$this->properties['new_name'].'"'); header('X-Accel-Redirect: /'.$this->properties['old_name']); exit(); } }
Конкретный URL давай - посмотрю. Мне вообще непонятно как в условиях виртуального хостинга работает X-Accel-Redirect. Эта директива дает команду nginx (который, вероятно, как фронт-енд стоит перед апачем) сделать внутренний редирект. Что бы отдался файл - это правило должно быть описано в nginx... а как оно там описано? Никто же не знает.
Проблема вернулась.... Почему-то опере не нравится расширение *.docx - предлагает скачать его как htm Вот ссылка: http://forstud.info/download3.php?name=(forstud.info)_ivlev.docx !!! При этом в остальных браузерах(FF,Chrome) и в Opere(кроме проблемы, строкой выше) файлы всех расширений грузятся на ура! Отдаю так: header('X-Accel-Limit-Rate: "2"'); header('Content-Disposition: attachment; filename="'.$this->properties['new_name'].'"'); header('X-Accel-Redirect: /uploads/tmp/'.$this->properties['new_name']);
оч странно. я всегда полагал, что форсед даунлоад как раз вроде как всегда приводит к сохранялке, разве нет? =(