Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odczytanie typu pliku graficznego / nie przez rozszerzenie!
Forum PHP.pl > Forum > PHP
ewcik_z
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 !
Black-Berry
  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. ?>
mike
getimagesize() lub mime_content_type()
Black-Berry
nie wiem czemu ale ucieło mi returny w tym switchu. Chyba forum nie przepuszcza. Wywal ostatni else bo i tak ci nei potrzebny.
ewcik_z
Black niestety ta funkcja widzi takze jpg .. czyli nici z tego
Black-Berry
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?
ewcik_z
no mime reader found
Black-Berry
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ą.
ewcik_z
ehh ... no nic ... szkoda ...
Black-Berry
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
mike
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.
ewcik_z
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
mike
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.
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.