Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mime type
Forum PHP.pl > Forum > PHP
andrzejb
  1. <?php
  2. // sprawdzamy format pliku
  3. function format($dir){
  4. switch(mime_content_type($dir)){
  5. //typ pliku 1-obrazy 2-video 3-dzwiek
  6. case "image/pjpeg";
  7. $p['typ']="1";
  8. $p['ext']=".jpg";
  9. return $p;
  10. break;
  11. case "image/jpg";
  12. $p['typ']="1";
  13. $p['ext']=".jpg";
  14. return $p;
  15. break;
  16. case "image/jpeg";
  17. $p['typ']="1";
  18. $p['ext']=".jpg";
  19. return $p;
  20. break;
  21. case "image/gif";
  22. $p['typ']="1";
  23. $p['ext']=".gif";
  24. return $p;
  25. break;
  26. case "image/x-png";
  27. $p['typ']="1";
  28. $p['ext']=".png";
  29. return $p;
  30. break;
  31. case "image/png";
  32. $p['typ']="1";
  33. $p['ext']=".png";
  34. return $p;
  35. break;
  36. case "audio/mpeg";
  37. $p['typ']="3";
  38. $p['ext']=".mp3";
  39. return $p;
  40. break;
  41. case "image/tiff";
  42. $p['typ']="1";
  43. $p['ext']=".tif";
  44. return $p;
  45. break;
  46. default: return 0;
  47. }
  48. }
  49. ?>


Napisalem sobie funkcje do sprawdzenia formatu zapisanego pliku. Można ją jakoś zoptymalizwoać ?


~mike_mech
dr_bonzo
Tak. O tak:
  1. <?php
  2. function format($file)
  3. {
  4. $mimeType = mime_content_type($file);
  5. $mimes = array();
  6. $mimes[ 'image/pjpeg' ] = array( 'typ' => '1', 'ext' => '.jpg' );
  7. $mimes[ 'image/jpg' ] = array( 'typ' => '1', 'ext' => '.jpg' );
  8. // itd...
  9.  
  10. if ( array_key_exists( $mimeType, $mimes ) )
  11.  {
  12. return $mimes[ $mimeType ];
  13. }
  14. else
  15. {
  16.  return FALSE; // lub zero, lub tablice z domyslnymi wartosciami
  17.  }
  18. }
  19.  
  20. ?>

^^ Po to wlasnie sa tablice, a nie switch.

  1. <?php
  2. case "image/pjpeg";
  3. $p['typ']="1";
  4. $p['ext']=".jpg";
  5. return $p;
  6. break;
  7. ?>

zamienia na 1 linijke + kilka wspolnych linijek.
Poza tym kod jest czytelniejszy, a switha uzywa sie gdy w zaleznosci od mimeType wykonywalbys ROZNE dzialania/obliczenia (a nie jak tu identyczne).
mike
A ja proponuję tak, podobnie troche jak wyżej:
  1. <?php
  2.  
  3. function GetExtension( $strPath )
  4. {
  5. return strtolower( end( explode( ".", basename( $strPath ) ) ) );
  6. }
  7.  
  8. function format( $strFile )
  9. {
  10. $strMime = mime_content_type( $strFile );
  11.  
  12. $arrTypes = array( 'image/pjpeg' => 1, 'image/jpg' => 1 , 'image/jpeg' => 1 , 'i tak dalej');
  13.  
  14. $arrTemp = array();
  15. $arrTemp[ 'type' ] = 'unknown';
  16.  
  17. if( in_array( $strMime, $arrPictures )
  18. {
  19. $arrTemp[ 'type' ] = $arrTypes[ $strMime ];
  20. }
  21.  
  22. $arrTemp[ 'ext' ] = GetExtension( $strFile );
  23.  
  24. return $arrTemp;
  25. }
  26.  
  27. ?>
andrzejb
właśnie o takim czymś myślałem smile.gif w 2gim przykladzie
Cytat
  1. <?php
  2.  
  3. function GetExtension( $strPath )
  4. {
  5. return strtolower( end( explode( ".", basename( $strPath ) ) ) );
  6. }
  7. ?>

wydaje mi sie ze poprawniejsze jest rozpoznawanie rozszerzenia po mime a nie na odwrot.

Po drodze napotkałem problem
brak funkkcji mime_content_type szkorzystałem z zamiennika
  1. <?php
  2.  
  3. if (!function_exists('mime_content_type')) {
  4.    function mime_content_type($f) {
  5.        $f = escapeshellarg($f);
  6.        return trim( `file -bi $f);
  7.    }
  8. }
  9.  
  10. ?>

dziala fajnie tylko pliki 3gp na ktorych mi zalezy rozpoznaje jako app'likacje
Kod
pliki.php text/plain; charset=us-ascii
pliki.php.bak text/plain; charset=us-ascii
Sahara.2005.PL.DVDRiP.XViD-DvF.torrent application/octet-stream
Mielno(01).jpg image/jpeg
Video(01).3gp application/octet-stream
Video(04).3gp application/octet-stream
Half-Life_Keygen.zip application/x-zip
widmo17
Cytat
wydaje mi sie ze poprawniejsze jest rozpoznawanie rozszerzenia po mime a nie na odwrot.

Taa, ale niespecjalnie bezpieczne :]
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.