Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z uploadem plików w IE7
Forum PHP.pl > Forum > Przedszkole
drzalek
Mam następujący problem.
Na stronie daję możliwość użytkownikom dodawania fotek, kod wygląda tak:
  1. <?php
  2. if($_FILES['plik']['error']!=4)
  3. {
  4. if($_FILES['plik']['error']>0)
  5. {
  6. echo '<p>Błąd: ';
  7. switch ($_FILES['plik']['error'])
  8. {
  9. case 1: echo 'Plik jest zbyt duży (maksymalny rozmiar to 100 KB)</p>';
  10. case 2: echo 'Plik jest zbyt duży (maksymalny rozmiar to 100 KB)</p>';
  11. case 3: echo 'Nie udało się przesłać całego pliku</p>';
  12. case 4: echo 'Nie załączono żadnego pliku</p>';
  13. }
  14. }
  15. else if ($_FILES['plik']['type'] != 'image/gif' && $_FILES['plik']['type'] != 'image/jpeg')
  16. {
  17. echo '<p>Błąd: nieprawidłowy format pliku</p>';
  18. }
  19. else
  20. {
  21. if($_FILES['plik']['type'] == 'image/jpeg')
  22. {
  23. $filenamenew = $login.'_logo'.'.jpg';
  24. }
  25. else
  26. {
  27. $filenamenew = $login.'_logo'.'.gif';
  28. }
  29. $lokalizacja = '/home/okpl/public_html/anonse/logogalery/'.$filenamenew;
  30. if (is_uploaded_file($_FILES['plik']['tmp_name']))
  31. {
  32. if (!move_uploaded_file($_FILES['plik']['tmp_name'], $lokalizacja))
  33. {
  34. echo 'Plik nie może zostać skopiowany';
  35. echo $_FILES['plik']['tmp_name'];
  36. }
  37. }
  38. else
  39. {
  40. echo 'Problem podczas wysyłania pliku;';
  41. }
  42. }
  43. }
  44. ?>


Problem polega na tym, że wszystko pięknie działa w Firefox'ie, natomiast w IE7 wywala błąd i fotki się nie dodają - wywala błąd, że nieprawidłowy format pliku, a nie to jest chyba przyczyną.
Może ktoś miał podobne doświadczenie jak tak to proszę o pomoc.

Z góry dzięki.
wookieb
to wyświetl sobie format pliku
Kod
echo $_FILES['plik']['type'];

i sobie go zobacz.
Ale jak mysle to pewnie musisz dac strtolower($_FILES['plik']['type']) i wtedy porownywac.
drzalek
to nie to niestety sad.gif

No i udało się smile.gif

Problem polegał na tym, że w IE zamiast image/jpg jest image/pjpg, co niesamowicie utrudnia sprawę... z każdym dniem moja niechęć do IE wzrasta :/
Raffuss
Cytat(drzalek @ 9.10.2008, 01:31:32 ) *
Problem polegał na tym, że w IE zamiast image/jpg jest image/pjpg, co niesamowicie utrudnia sprawę... z każdym dniem moja niechęć do IE wzrasta :/


Dzieki za info, bo i mnie to bedzie potrzebne do szczescia. Szkoda tylko, ze uzytkownicy wciaz lubuja sie w tej przegladarce..
drzalek
Heh, to nie tylko kwestia lubienia IE, wielu przeciętnych internautów nie wie o istnieniu innych przeglądarek, ale to w sumie nie ich wina.

Jak będziesz miał jakiś pomysł, lub ktokolwiek, jak sprawdzić typ plików to proszę wrzuć ja wymyśliłem coś takiego:
wcześniej sprawdzam czy plik został w ogóle załączony i czy nie wywala ednego z czterech błędów tak jak wyżej
  1. <?php
  2. else if(eregi('jp', $_FILES['plik']['type']) || eregi('gif', $_FILES['plik']['type'])  || eregi('png', $_FILES['plik']['type']))
  3.                                                                {
  4.                                                                if(eregi('jp', $_FILES['plik']['type']))
  5.                                                                    {
  6.                                                                    $filenamenew = $row_login['login'].'_logo.jpg';
  7.                                                                    }
  8.                                                                else if (eregi('gif', $_FILES['plik']['type']))
  9.                                                                    {
  10.                                                                    $filenamenew = $row_login['login'].'_logo.gif';
  11.                                                                    }
  12.                                                                else
  13.                                                                    {
  14.                                                                    $filenamenew = $row_login['login'].'_logo.png';
  15.                                                                    }
  16.                                                                $lokalizacja = '/home/okpl/public_html/anonse/logogalery/'.$filenamenew;
  17.                                                                if (is_uploaded_file($_FILES['plik']['tmp_name']))
  18.                                                                    {
  19.                                                                        if (!move_uploaded_file($_FILES['plik']['tmp_name'], $lokalizacja))
  20.                                                                            {
  21.                                                                            echo 'Plik nie może zostać skopiowany';
  22.                                                                            echo $_FILES['plik']['tmp_name'];
  23.                                                                            
  24.                                                                            }
  25.                                                                    }
  26.                                                                else
  27.                                                                    {
  28.                                                                    echo 'Problem podczas wysyłania pliku;';
  29.                                                                    }
  30.                                                                                                                
  31.                                                                }
  32.                                                            else
  33.                                                                {
  34.                                                                echo 'Ładowanie obrazka nie powiodło się';
  35.                                                                }
  36. ?>


Niestety nie jest to zbyt bezpieczne podejście, bo chociażby np. plik jp2.exe przejdzie, a nie powinien sad.gif
Zac
ja kiedys napisalem cos takiego i z tego korzystam smile.gif

  1. <?php
  2. $max_file_size=512000; //ustawiamy maksymalny rozmiar pliku
  3.  $typy=array('image/gif','image/jpg','image/jpeg','image/png'); //tablica z typami
  4.  $fn=strtr($_FILES['plik']['name'],'ąęśńćżźół_ĄĘŚŃĆŻŹÓŁ','aesnczzol_AESNCZZOL');
  5.  $time=time().'_'; //pozbywam sie polskich znakow i zamieniam spacje na \"_\" oraz dodaje do nazwy pliku wartosc funkcji time(), wtedy jestem pewien ze nie bede mial 2 plikow o takiej samej nazwie
  6.  $sciezka='pliki/'.$time.$fn;
  7.  
  8.     if (!in_array($_FILES['plik']['type'],$typy))
  9.      {
  10.       $wynik='Zly typ pliku';
  11.      }
  12.     else
  13.     {
  14.       if ($_FILES['plik']['size']>$max_file_size)
  15.        {
  16.         $wynik='plik za duzy';
  17.           unlink($_FILES['plik']['tmp_name']);
  18.        }
  19.       else
  20.        {
  21.          if (move_uploaded_file($_FILES['plik']['tmp_name'],$sciezka))
  22.           {
  23.            $wynik='plik przeslano';
  24.           }
  25.        }
  26.     }
  27.   echo $wynik;
  28. ?>
Pilsener
Podobnie jest z innymi typami MIME - najlepiej ściągnąć sobie po prostu bazę, albo zrobić ją samemu, wysyłając plik każdego interesującego nas typu w każdej popularnej przeglądarce, implementacja nie jest trudna:
  1. <?php
  2. $t_mime = file('dozwolone_typy_mime.txt'); //lub z bazy etc.
  3. if(in_array($_FILES['plik']['type'],$t_mime)){
  4.   //kod
  5. }
  6. ?>

O ile przy uplo można po prostu porównać, czy typ MIME pasuje do tabeli wzorcowej to przy down jest już gorzej - bo trzeba wysłać odpowiedni HEADER do przeglądarki, przez co czasem przeglądarka może źle rozpoznawać typ pliku, rozmiar etc. Życie smile.gif
drzalek
O dzięki, fajny pomysł smile.gif Spodziewam się, że skoro IE ma zamiast image/jpg image/pjpg to jakaś inna śmieszna przeglądarka, której nawet nie znam może mieć np image/x-jpg czy coś w tym stylu, więc trzeba uwzględnić wszystkie typy...

Tak czy inaczej myślę, że problem rozwiązany smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.