Браузеры по разному реагируют на закачку файлов

ayrat9

Новичок
Браузеры по разному реагируют на закачку файлов

В админской части моего сайта есть скриптик, позволяющий закачивать изображения с удаленного компа на сервак. Идея там, вкратце, такая: фотка отсылается на сервак в определенную папку, и если отсылка прошла удачно, автомат. пишется файлик галереи с закач. фотками, который затем подключается к сайту. Так вот возник такой трабл: в Опере7 этот скриптик отлично работает, я бы даже сказал на 5 баллов, а вот ИЕ6 не позволяет, выкидывая запланированную (прописанную мной ранее в классе utils) ошибку ($err[44]="Проблема! Загруженный файл не является изображением или имеет неподдерживаемый формат -GIF-, -BMP-."). Скрипт использует ф-цию in_gallery_upload_image() из класса in_gallery
______________________
PHP:
function in_gallery_upload_image()
{
 $err=$this->in_gallery_count_img($this->PATH_WWW_PIC."/gallery/".$this->in_gallery_add_image_id."/");
 if($err) return($err);
 
   if ($this->in_gallery_image=="")
   {
   return(52);
   }
  if ($this->in_gallery_image_size==0) {return(43);}  
  if (($this->in_gallery_image_type!="image/jpeg") && ($this->in_gallery_image_type!="image/jpg") && ($this->in_gallery_image_type!="image/png")) {return(44);}
  if (!is_uploaded_file($this->in_gallery_image)) {return(45);}
  $upfile=$this->PATH_WWW_PIC."/gallery/".$this->in_gallery_add_image_id."/".$this->in_gallery_image_name;
  if (!copy($this->in_gallery_image, $upfile)) {return(46);}
  
  $err=$this->in_gallery_create($this->in_gallery_add_image_id);
  if($err) return($err);
    
  return(0);
}
____________________

Очень хочется, чтобы скриптик исполнялся в обоих браузерах.
Если кто заинтересуется, вышлю по почте коды класса и скрипта.
сайт - hockey.tomos.ru
 

Krisha

pain in the neck
Re: Браузеры по разному реагируют на закачку файлов

Автор оригинала: ayrat9
Проблема! Загруженный файл не является изображением или имеет неподдерживаемый формат -GIF-, -BMP-.").
PHP:
  if (($this->in_gallery_image_type!="image/jpeg") && ($this->in_gallery_image_type!="image/jpg") && ($this->in_gallery_image_type!="image/png")) {return(44);}
&& != ||
 

ayrat9

Новичок
Re: Re: Браузеры по разному реагируют на закачку файлов

Originally posted by Krisha

[/B]&& != || [/B]
К сожалению, я не совсем понял, ваше решение.
Если вы указываете на некорректные условия проверки, то почему тогда Опера7 воспринимает их так, как я и задумывал?
Тем более, я уже пробовал экспериментировать с условиями, но представленный мной вариант оказался единственным (хотя и наполовину) рабочим.

Может быть можно совсем поменять запрос? Мне нужно, чтобы на сайт закачивались только изображения, MIME-тип которых "image/jpeg" или "image/png". Если у вас возникнут какие-то замечания или конструктивные предложения - буду рад их прочесть.
 

Krisha

pain in the neck
ayrat9
1. Ты загружаешь файл. Сделай плиз вот так:
PHP:
echo "<pre>";
var_dump($_FILES);
echo "</pre>";
И посмотри какой тип изображения в случае с IE и с Opera.

2. Есть разница между условием OR (||) и AND (&&). Если ты хочешь проверить не является ли тип пришедшей картинки ОДНИМ ИЗ допустимых (jpeg,jpg,png), тебе необходимо делать такую проверку:
PHP:
if (($this->in_gallery_image_type != "image/jpeg") OR ($this->in_gallery_image_type!="image/jpg") OR ($this->in_gallery_image_type!="image/png")) {return(44);}
Воспользуйся гуглом или любым другим поисковиком и почитай про Булеву логику.
 

lucas

Guest
Krisha

Он-то проверяет, что тип НЕ ЯВЛЯЕТСЯ ОДНИМ ИЗ ДОПУСТИМЫХ (а не ЯВЛЯЕТСЯ): $type != 'type1' && $type != 'type2'.

Если это так, то возвращается код ОШИБКИ (44).

Поэтому и использована такая логика.
 

IL78

Guest
ayrat9, а что по поводу данного конкретного файла пишут смотрелки графики типа ACDSee?

Расширение файла не всегда соответствует его истинному формату. Эксплорер, насколько я могу судить, проверяет именно истинный формат, а вот Опера ИМХО бывает склонна полагаться на расширение...
 

crocodile2u

http://vbolshov.org.ru
Делай проверку не на MIME-тип, а на расширение.

У меня была недавно подобная проблема с чужим скриптом, причем дело было даже не в браузере, просто фотки (jpeg) были сделаны цифровой камерой, и она в них чего-то такого понаписала, что тип в заголовке отсылался хитрый - (что-то типа image/canon_digital :)).

А защиты от левых файлов ты таким образом не получишь - все равно это уж браузер решает, какой тип присвоить тому или мному файлу.
 

f1

formula 1
ie шлет jpeg с mime image/pjpeg

для проверки типа используй ф-ю getimagesize
 

ayrat9

Новичок
Всем большое спасибо, f1 спасибо в квадрате. Добавил в строку проверки, запрос на наличие image/pjpeg - и все заработало.
Если не трудно, подскажи какой МИМЕ тип ИЕ шлет о PNG-файлах, и вообще где можно посмотреть инфу о МИМЕ заголовках, посылаемых майкрософтовским браузером.
 

crocodile2u

http://vbolshov.org.ru
Originally posted by ayrat9
Если не трудно, подскажи какой МИМЕ тип ИЕ шлет о PNG-файлах, и вообще где можно посмотреть инфу о МИМЕ заголовках, посылаемых майкрософтовским браузером.
Попробуй зааплоадить PNG из IE, и распечатать $_FILES
 

ayrat9

Новичок
ИЕ6 посылает такие МИМЕ-заголовки изображений:

GIF - "image/gif"
PNG - "image/x-png"
BMP - "image/bmp"
JPEG - "image/pjpeg"

Опера7 такие:

GIF - "image/gif"
PNG - "image/png"
BMP - "image/bmp"
JPEG - "image/jpeg"
 
Сверху