За последние 24 часа нас посетили 19659 программистов и 1659 роботов. Сейчас ищут 1453 программиста ...

Как получить от IE тип файла?

Тема в разделе "Вопросы от блондинок", создана пользователем Driver86, 28 апр 2008.

  1. Driver86

    Driver86 Активный пользователь

    С нами с:
    27 апр 2008
    Сообщения:
    15
    Симпатии:
    0
    Поиск ничего не дал, так что создам топик здесь (если что, модератор не злитесь, а мирно перенесите тему в нужный раздел...)
    Итак... При создании загрузчика файлов столкнулся с такой проблемой...
    Дана форма:
    HTML:
    1. <form method="post" enctype="multipart/form-data" action="engine.php"> <b>01</b><input name="userfile1" type="file" size="40" /> <b>02</b><input name="userfile2" type="file" size="40" /> <b>03</b><input name="userfile3" type="file" size="40" /> <input name="upload" type="submit" value="Загрузить"></form>
    А вот и сам engine.php:
    PHP:
    1. <?php
    2. if ((is_uploaded_file($HTTP_POST_FILES['userfile1']['tmp_name']) || is_uploaded_file($HTTP_POST_FILES['userfile2']['tmp_name']) || is_uploaded_file($HTTP_POST_FILES['userfile3']['tmp_name'])) & ($HTTP_POST_FILES['userfile1']['type']=="image/jpg" || $HTTP_POST_FILES['userfile1']['type']=="image/jpeg" || $HTTP_POST_FILES['userfile2']['type']=="image/jpg" || $HTTP_POST_FILES['userfile2']['type']=="image/jpeg" || $HTTP_POST_FILES['userfile3']['type']=="image/jpg" || $HTTP_POST_FILES['userfile3']['type']=="image/jpeg"))
    3. {
    4. $nm = mt_rand(12345,999999999);
    5. $ras = '.jpg';
    6. if (($HTTP_POST_FILES['userfile1']['type']=="image/jpg") || ($HTTP_POST_FILES['userfile1']['type']=="image/jpeg"))
    7. {
    8. $nbr="_1";
    9. $iname = $nm.$nbr.$ras;
    10. copy ($HTTP_POST_FILES['userfile1']['tmp_name'], $iname);
    11. }
    12. if (($HTTP_POST_FILES['userfile2']['type']=="image/jpg") || ($HTTP_POST_FILES['userfile2']['type']=="image/jpeg"))
    13. {
    14. $nbr="_2";
    15. $iname = $nm.$nbr.$ras;
    16. copy ($HTTP_POST_FILES['userfile2']['tmp_name'], $iname);
    17. }
    18. if (($HTTP_POST_FILES['userfile3']['type']=="image/jpg") || ($HTTP_POST_FILES['userfile3']['type']=="image/jpeg"))
    19. {
    20. $nbr="_3";
    21. $iname = $nm.$nbr.$ras;
    22. copy ($HTTP_POST_FILES['userfile3']['tmp_name'], $iname);
    23. }
    24. }
    25. else
    26. {
    27. print 'Нельзя загрузить данный файл';
    28. }
    29. ?>
    Странно, но вот беда - в IE код НЕ работает, т.е. выдаёт текст 'Нельзя загрузить данный файл'... поэксперементировав со кодом, я понял, что дело в "$HTTP_POST_FILES['userfile']['type']" - т.е. убрав это из кода, всё заработало и в IE... Как же так, IE не передаёт тип файла скрипту? Тогда как обеспечить проверку типа файла и для IE?
     
  2. Victor Bazinov

    Victor Bazinov Активный пользователь

    С нами с:
    30 окт 2007
    Сообщения:
    69
    Симпатии:
    0
    а HTTP_POST_FILES ещё существует ? :)
    попробуй работает ли такой код:
    PHP:
    1.  
    2. <?
    3. $max_image_width    = 380;
    4. $max_image_height   = 600;
    5. $max_image_size     = 64 * 1024;
    6. $valid_types        =  array("gif","jpg", "png", "jpeg");
    7.  
    8. if (isset($_FILES["userfile"])) {
    9.     if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
    10.         $filename = $_FILES['userfile']['tmp_name'];
    11.         $ext = substr($_FILES['userfile']['name'],
    12.             1 + strrpos($_FILES['userfile']['name'], "."));
    13.         if (filesize($filename) > $max_image_size) {
    14.             echo 'Error: File size > 64K.';
    15.         } elseif (!in_array($ext, $valid_types)) {
    16.             echo 'Error: Invalid file type.';
    17.         } else {
    18.             $size = GetImageSize($filename);
    19.             if (($size) && ($size[0] < $max_image_width)
    20.                 && ($size[1] < $max_image_height)) {
    21.                 if (@move_uploaded_file($filename, "/www/htdocs/upload/".$filename.".".$ext)) {
    22.                     echo 'File successful uploaded.';
    23.                 } else {
    24.                     echo 'Error: moving fie failed.';
    25.                 }
    26.             } else {
    27.                 echo 'Error: invalid image properties.';
    28.             }
    29.         }
    30.     } else {
    31.         echo "Error: empty file.";
    32.     }
    33. } else {
    34.     echo  '
    35.     <form enctype="multipart/form-data" method="post">
    36.     <input type="hidden" name="MAX_FILE_SIZE" value="64000">
    37.     Send this file: <input name="userfile" type="file">
    38.     <input type="submit" value="Send File">
    39.     </form>';
    40. }
    41. ?>
    42.  
     
  3. IgorH

    IgorH Активный пользователь

    С нами с:
    15 июл 2007
    Сообщения:
    15
    Симпатии:
    0
    Адрес:
    Нижний Тагил
    я сталкивался с подобной проблемой, дело в том что допустим ИЕ и Опера передают разные типы одних и тех же файлов
    допустим в ИЕ джипег это - image/pjpeg, в опере это - image/jpeg

    сам просто создал скрипт который загружает файл и выдает его тип, и гружу файлики с разных браузеров и смотрю какой тип у них в разных браузерах
     
  4. Victor Bazinov

    Victor Bazinov Активный пользователь

    С нами с:
    30 окт 2007
    Сообщения:
    69
    Симпатии:
    0
    я вот такое использую:
    PHP:
    1.  
    2. <?
    3. function getImgByTypeIn($type)
    4. {
    5.     if($type == "image/pjpeg" || $type == "image/jpeg")
    6.     {
    7.         $type="jpeg";
    8.     }
    9.     if($type == "image/x-png" || $type == "image/png")
    10.     {
    11.         $type="png";
    12.     }
    13.     if($type == "image/gif")
    14.     {
    15.         $type="gif";
    16.     }
    17.     return $type;
    18. }
    19. ?>
    20.