Проблема с upload'ом файла: *.gif заливается, *.rar - нет.

Sardonix

Новичок
Проблема с upload'ом файла: *.gif заливается, *.rar - нет.

Имеется такой код:
PHP:
...
if ($_FILES['new_tovar_file']['error'] > 0)
   {
        print "<br />";
        switch ($_FILES['new_tovar_file']['error'])
                   {
                      case 1 : print '<font color="RED">Проблема при загрузке файла: Размер файла больше upload_max_filesize</font><br>';
                            break;
                      case 2 : print '<font color="RED">Проблема при загрузке файла: Размер файла больше max_file_size</font><br>';
                             break;
                      case 3 : print "<font color='red'>Проблема при загрузке файла: Файл загружен не полностью</font><br>";
                              break;
                      case 4 :
                                 {
                                    //ФАЙЛ НЕ БЫЛ ПЕРЕДАН
                                    print "<font color='#B38659' size='+2'>Товар успешно добавлен.</font><br />";
                                    Print "<a id='link'href='/admin/cat/cat_edit.php?cat_flag=$id&cat_name=$return_cat_name_post'                                                                                 title='$return_cat_name_post'>Вернуться к редактированию раздела: $return_cat_name_post</a><br />";
                                    print "<a id='link'href='/admin/adm_cat.php' title='Каталог'>Вернуться управлению каталогом</a><br>";
                                    print "<a id='link'href='/admin/master.php' title='Главная '>Вернуться к  главной  странице</a><br>";
                                    print "<a id='link'href='/admin/logout.php' title='Выход из режима администрирования'>Выход</a><br>";
                                    exit;
                                  }
                        }
                       print "<a id='link'href='/admin/adm_cat.php'>Вернуться к управлению каталогом</a><br>";
                       print "<a id='link'href='/admin/master.php'>Вернуться к главной административной странице</a><br>";
                       print "<a id='link'href='/admin/logout.php' title='Выход из режима администрирования'>Выход</a><br>";
                       exit;
                   }
                    //ПРОВЕРКА ПРАВИЛЬНОСТИ ТИПА ФАЙЛА
                    if ($_FILES['new_tovar_file']['type'] != 'image/gif')
                       {
                           print "<font color='#B38659' size='+2'>Файл не является изображением .GIF</font><br>";
                           print "<a id='link'href='/admin/files/index.php'>Вернуться к управлению файлами</a><br>";
                           print "<a id='link'href='/admin/index.php'>Вернуться к главной административной странице</a><br>";
                           print "<a id='link'href='/admin/logout.php'>Выход</a><br>";
                           exit;
                        }
...
Данный фрагмент показывает проверки заливаемого файла - в том числе и по типу.
Здесь всё работает прекрасно.
Меняю
PHP:
if ($_FILES['new_tovar_file']['type'] != 'image/gif')
на
PHP:
if ($_FILES['new_tovar_file']['type'] != 'application/x-compressed')
- и всё: стопроцентно РАР-овский архив отторгается с негодованием.
Понятно, что где-то не установлен соответсвующий MIME-тип, но никак не пойму, где именно.
Что делать?
 

WP

^_^
http:/phpfaq.ru/debug
Смотри какой type у rar файла. Хотя я бы проверял по расширению, а не по mime-типу.
 

Sardonix

Новичок
Автор оригинала: WP
http:/phpfaq.ru/debug
Смотри какой type у rar файла. Хотя я бы проверял по расширению, а не по mime-типу.
Писал и так:
PHP:
if ($_FILES['new_tovar_file']['type'] != 'application/rar')
- тоже безрезультатно.

-~{}~ 01.05.06 22:43:

Автор оригинала: WP
http:/phpfaq.ru/debug
Смотри какой type у rar файла. Хотя я бы проверял по расширению, а не по mime-типу.
Т.е., ты предлагаешь скинуть $_FILE['new_tovar_file']['name'] в какую-то промежуточную переменную,
а потом работать с этой переменной как со строкой, выделяя расширение и сравнивая его с шаблоном?
Можно и так, но хочется проще. При использовании MIME и проверка-то в одну строку, да и к тому же -
мне не только не хочется городить огород, мне еще и разобраться бы, почему ентая ошибка возникла.
 

Sardonix

Новичок
Автор оригинала: Andreika
Sardonix
http://www.yandex.ru/yandsearch?text=rar+mime&stype=www

в какую-то промежуточную переменную,
а потом работать с этой переменной как со строкой

а как с чем с ней еще можно работать?
...Это всё лирика - зачеми придираться к словам?
Что-нибудь по поводу MIME скажешь?
 

Andreika

"PHP for nubies" reader
Sardonix
да, сохрани текст моего предыдущего сообщения как строку и обработай ее всю, а не через строчку
 

Andreika

"PHP for nubies" reader
Sardonix
var_dump($_FILES);

постить сюда результат не надо, сам думай
 

Sardonix

Новичок
Автор оригинала: Andreika
Sardonix
var_dump($_FILES);

постить сюда результат не надо, сам думай
Спасибо за подсказку, но никакой путней (внятной, доступной) инфы
по поводу использования функции var_dump($_FILES) я не нашел.
Потому пришлось отказаться от мысли с MIME и сделать поросто:
PHP:
//ПРОВЕРКА ПРАВИЛЬНОСТИ ТИПА ФАЙЛА
$input_name=$_FILES['new_tovar_file']['name'];
$index=0;
$full_name_array=explode('.',$input_name);
    foreach ($full_name_array as $temp_array)
                {
	            $index++;
	       }
   $exp=$full_name_array[$index-1];
   if ($exp != "rar")
      {
         print "<font color='#B38659' size='+2'>Файл не является архивом с расширением .RAR</font><br>";
         print "<a id='link'href='/admin/files/index.php' title='Файлы'>Вернуться к странице управления разделом \"Файлы\"</a><br>";
         print "<a id='link'href='/admin/index.php'>Вернуться к главной административной странице</a><br>";
         print "<a id='link'href='/admin/logout.php' title='Выход из режима администрирования'>Выход</a><br>";
         exit;
       }
Может быть, кому-нибудь это и пригодится. :confused:
 

WP

^_^
Это не ты решил а,
WP>Хотя я бы проверял по расширению, а не по mime-типу.
:D
 

zerkms

TDD infected
Команда форума
TheBattle
ты совершенно прав - расширений из четырёх и более, а также двух и одного символа уже не бывает, а pathinfo() отменили ввиду наличия более гибкого substr()

ps: substr($str, -3); // если уж делать костыль
 

WP

^_^
TheBattle
Иногда лучше жевать чем говорить (С) реклама.

Правильный пример:
PHP:
$ext = pathinfo($input_name,PATHINFO_EXTENSION));
-~{}~ 02.05.06 06:22:

zerkms
Ы... я написал сообщение и не нажал отправить сразу :D
 

TheBattle

Новичок
Молодцы, какие все умные.
А правильнее, было бы всё таки так:
$info = pathinfo($file);
$ext = strtolower($info['extension']);
и потом уж сравнивать с "rar"
 

alpes

Весь мир на ладони
Спасибо за подсказку, но никакой путней (внятной, доступной) инфы
по поводу использования функции var_dump($_FILES) я не нашел.
подсказка была посмотреть какой тип определяется при передаче твоего rar и его потом использовать при разборе
 
Сверху