Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Odczytanie typu pliku graficznego / nie przez rozszerzenie!
ewcik_z
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 18.09.2008

Ostrzeżenie: (0%)
-----


Witam mam do czynienia z plikami graficznymi, niestety okazalo się, że częśc z nich pomimo iz posiadaja rozszerzenie jpg systemowo sa plikami typu wbmp. Macie jakis pomysl jak automatycznie (funkcja - ale jaką) odczytac ich format ?

Kod
if ($name['ext']=='jpeg' || $name['ext']=='jpg'){
             $img = imagecreatetruecolor($width, $height);
             $temp_img     = imagecreatefromjpeg ($path);
         }
  imagecopyresampled($img, $temp_img, 0, 0, 0, 0, $width, $height, $old_width, $old_height);


wykłada sie przy takich plikach w 2 i 5 linijce ...

help please !
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
Black-Berry
post
Post #2





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


  1. <?php
  2. function file_mime_type( $a_file )
  3.    {
  4.        if( function_exists(finfo_open) )
  5.        {
  6.            $handle = finfo_open( FILEINFO_MIME );
  7.            $mime_type = finfo_file( $handle, $a_file );
  8.            finfo_close( $handle );
  9.            return $mime_type;
  10.        }
  11.        else if( function_exists(mime_content_type) )
  12.        {
  13.            return mime_content_type($a_file);
  14.        }else{
  15.            preg_match("/.(.*?)$/", $a_file, $m);
  16.            switch(strtolower($m[1]))
  17.            {
  18.                case 'js''application/javascript';
  19.                case 'json''application/json';
  20.                case 'jpg''image/jpeg';
  21.                case 'jpe"''image/jpeg';
  22.                case 'png''image/png';
  23.                case 'gif''image/gif';
  24.                case 'bmp''image/bmp';
  25.                case 'css''text/css';
  26.                case 'xml''application/xml';
  27.                case 'html''text/html';
  28.                case 'htm''text/html';
  29.                case 'doc''text/vnd.ms-word';
  30.                defaul: return 'text/plain';
  31.            }
  32.        }
  33.    }
  34. ?>


--------------------
Go to the top of the page
+Quote Post
mike
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


getimagesize() lub mime_content_type()
Go to the top of the page
+Quote Post
Black-Berry
post
Post #4





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


nie wiem czemu ale ucieło mi returny w tym switchu. Chyba forum nie przepuszcza. Wywal ostatni else bo i tak ci nei potrzebny.


--------------------
Go to the top of the page
+Quote Post
ewcik_z
post
Post #5





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 18.09.2008

Ostrzeżenie: (0%)
-----


Black niestety ta funkcja widzi takze jpg .. czyli nici z tego
Go to the top of the page
+Quote Post
Black-Berry
post
Post #6





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Daj tak:
  1. <?php
  2. function file_mime_type( $a_file )
  3.   {
  4.       if( function_exists(finfo_open) )
  5.       {
  6.           $handle = finfo_open( FILEINFO_MIME );
  7.           $mime_type = finfo_file( $handle, $a_file );
  8.           finfo_close( $handle );
  9.           return $mime_type;
  10.       }
  11.       else if( function_exists(mime_content_type) )
  12.       {
  13.           return mime_content_type($a_file);
  14.       } else {
  15.            return 'no mime reader found';
  16.       }
  17.   }
  18. ?>

i użyj tak:
  1. <?php
  2. echo file_mime_type('my_file.jpg');
  3. ?>

Co ci wyświetla?

Ten post edytował Black-Berry 18.09.2008, 16:20:23


--------------------
Go to the top of the page
+Quote Post
ewcik_z
post
Post #7





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 18.09.2008

Ostrzeżenie: (0%)
-----


no mime reader found
Go to the top of the page
+Quote Post
Black-Berry
post
Post #8





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


To nie odczytasz rozszerzenia chyba że doinstalujesz do php mime reader. Napisanie własnego graniczy chyba z cudem bo z tego co wiem to działa on tak że ma listę rzeczy po którym można rozpoznać dany typ pliku i podstawia sobie do klucza. Są to takie rzeczy jak np rozmiar, początkowy bajt, końcowy bajt itp. itd; Php nie ma tego w standardzie ale ponoć ma być w wersji 6. Sam chciałbym mieć własny mime_reader bo mnie denerwuje jego brak na niektórych serwerach. Stale z tym problemy są.


--------------------
Go to the top of the page
+Quote Post
ewcik_z
post
Post #9





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 18.09.2008

Ostrzeżenie: (0%)
-----


ehh ... no nic ... szkoda ...
Go to the top of the page
+Quote Post
Black-Berry
post
Post #10





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Poczytaj jeszcze o tej funkcji "getimagesize()" w manualu. Nie wiem dokładnie o co chodzi ale coś tam pisze o jakimś markerze. Może dzięki temu da się odczytać typ pliku. Niestety mike jak zwykle lakoniczny jak tylko się da winksmiley.jpg No ale przynajmniej Cie nie zmieszał z błotem za nie znanie manuala na pamięć. Powinieneś się cieszyć biggrin.gif

Ten post edytował Black-Berry 18.09.2008, 16:37:01


--------------------
Go to the top of the page
+Quote Post
mike
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(Black-Berry @ 18.09.2008, 17:35:28 ) *
Niestety mike jak zwykle lakoniczny jak tylko się da winksmiley.jpg No ale przynajmniej Cie nie zmieszał z błotem za nie znanie manuala na pamięć. Powinieneś się cieszyć biggrin.gif
~mike woli kogoś czegoś nauczyć lub podsunąć mu kąsek, który sprawi, że osoba sama się nauczy (patrz cytat w mojej sygnaturze). ~mike uważa że podawanie gotowców na tacy częściej rodzi problemy niż je rozwiązuje. A na pewno oducza smodzielności.

Funkcja getimagesize() zwraca tablicę, w której element o indeksie 2 zawiera informację o typie pliku.
Cytat
Index 2 is one of the IMAGETYPE_XXX constants indicating the type of the image.

Naprawde wystarczy sobie to uruchomić kilka razy i zadanie jest rozwiązane.

Zresztą komentarze użytkowników (na przykład ten) w dokumentacji zawierają gotowe przykłady użycia.
Go to the top of the page
+Quote Post
ewcik_z
post
Post #12





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 18.09.2008

Ostrzeżenie: (0%)
-----


Dzięki, mike - mialeś racje imagesize( ) bardzo ładnie czytał typ pliku, niestety utknełam na formatach bmp - ale to już bajka inna .... nierozwiązalna winksmiley.jpg tak czy siak dzięki uważam temat za zamkniety
Go to the top of the page
+Quote Post
mike
post
Post #13





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Dodatkowym gratisem, który dostajemy od getimagesize() jest sprawdzanie poprawności pliku. Jeśli plik nie jest plikiem graficznym funkcja zwróci false.
Często nawet jeśli nie potrzebujemy żadnych informacji od getimagesize() to warto z niej skorzystać żeby dowiedzieć się co przesyła nam użyszkodnik.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 19:04