Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Mime type z pliku na serwerze
franki01
post 18.05.2007, 19:38:36
Post #1





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

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


Witam.

Mam pytanie. Czy mozna jakos inaczej pobrac typ mime pliku, ktory znajduje sie na moim serwerze, niz wykorzystanie mime_content_type() i finfo_file()? Bo na linuxpl.com zadna z tych funkcji nie jest obslugiwana i mam dylemat ;p Nigdzie niestety nie pisze o innych rozwiazaniach sad.gif

Pozdrawiam, Franki

Ten post edytował franki01 18.05.2007, 19:57:25
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Sedziwoj
post 18.05.2007, 21:56:22
Post #2





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


dla obrazków:
getimagesize() -> image_type_to_mime_type,

a jak nie... no cóż kiedyś się tym chciałem pobawić, musisz mieć plik "magic.mime" który zawiera sygnatury plików, a potem go zinterpretować i porównać z posiadanym.
Ja mam spreparowany plik, bo jakoś nie znalazłem standardu i się niektóre wiersze wywalały... jak chcesz kod interpretujący i szukający od razu typu to mogę wrzucić, ale to jest stare i syfiaste (ale działa w miarę dobrze).
Nie wrzucam, bo wstydzę się kodu a ma do tego prawie 90lini bez komentarzy (prawie).


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
kwiateusz
post 18.05.2007, 22:09:32
Post #3


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




właśnie ja też szukałem i niestety wbudowanego w php nie ma innego odpowiednika, ale zawsze są zew. klasy winksmiley.jpg
np
http://www.phpclasses.org/browse/file/2743.html
http://www.phpclasses.org/browse/package/3051.html
Go to the top of the page
+Quote Post
Sedziwoj
post 18.05.2007, 22:34:45
Post #4





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


@kwiateusz tylko że mój skrypt operuje na prawdziwym rozpoznawaniu mime, tzn na podstawie sygnatury, która zawsze jest w pliku danego typu. Możesz dać plik o nazwie 'aaa' do skryptu a on powie jaki jest rzeczywisty typ.

A oba skrypty co podałeś bazują na rozszerzeniach, może wystarczy, a może nie. Polecenia wbudowane w język bazują na sygnaturach, więc chyba jednak takie jest pewniejsze.
(ta kwestia była poruszana przy weryfikacji plików z upload, bo mime ten który dostajemy to jest z 'przeglądarki' więc może być podszyty, tak jak rozszerzenie)

EDIT lit.

Ten post edytował Sedziwoj 18.05.2007, 22:36:00


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
franki01
post 18.05.2007, 23:09:34
Post #5





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

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


Wlasnie o to chodzi zeby mime nie bylo oparte o rozszerzenie pliku. Bo mam takie cos: file.php?id=## (## to liczba) i chodzi mi zeby pobrac typ mime tego pliku. Niekoniecznie musi to byc obrazek, wiec image_type_to_mime_type odrzucilem juz na poczatku, a inne funkcje nie dzialaja na serwerze. Jedyne chyba co pozostaje zrobic to poprosic administratorow o wlaczenie finfo_* (jezeli potrzebne jest zainstalowanie nowego modulu) winksmiley.jpg Ale dzieki za pomoc biggrin.gif
Go to the top of the page
+Quote Post
Sedziwoj
post 18.05.2007, 23:26:13
Post #6





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Albo czytanie i użycie słowa proszę ;P
  1. <?php
  2. # Magic data for KMimeMagic (originally for file(1) command)
  3. #
  4. # The format is 4-5 columns:
  5. # Column #1: byte number to begin checking from, ">" indicates continuation
  6. # Column #2: type of data to match
  7. # Column #3: contents of data to match
  8. # Column #4: MIME type of result
  9. # Column #5: MIME encoding of result (optional)
  10. function moja ($aa) {
  11. return chr(hexdec($aa[1]));
  12. }
  13. function ddd ($aa) {
  14.  return dechex(ord($aa[1]));
  15. }
  16. function decimal($liczba) {
  17.  $wynik = '';
  18.  if ($liczba>256){
  19. do{
  20.  $reszta = $liczba%256;
  21.  $calosc = ($liczba-$reszta)/256;
  22.  $wynik = addslashes( chr($reszta) ).$wynik;
  23.  $liczba = $calosc;
  24. } while( $liczba != 0 );
  25.  }else {
  26. $wynik = chr($liczba);
  27.  }
  28.  return $wynik;
  29. }
  30. function hexadecimal ($aa) {
  31.  return decimal(base_convert($aa[1], 16, 10));;
  32. }
  33. function octal ($aa) {
  34.  return decimal(base_convert($aa[1], 8, 10));;
  35. }
  36. while (!$plik = file("magic.mime")){usleep(100000);}
  37. $size = count($plik);
  38. $topt = "sciezka_do_pliku";
  39. $fp = fopen($topt,"r");
  40. $znalazl = false;
  41. for ( $i=0; $i<$size; $i++ ) {
  42.  if ( preg_match( '/^#/', trim($plik[$i]) ) ){
  43. continue;
  44.  }
  45.  preg_match('@^((?:[0-9]+|(?snitch.gif[0-9]+)))(?:[t ]+)([^t]+)(?:[t ]+)((?:[^t ]|(?:.))+)(?:[t ]+)((?:[^t ]|(?:.))+)(?:[t ]*)(.*)@i',trim($plik[$i]),$to);
  46.  preg_match('/^>?([^>]*)/',$to[1],$x);
  47.  fseek($fp, $x[1]);
  48.  switch ($to[2]) {
  49. case "string" :
  50. $to[3] = preg_replace_callback('/[xX]([0-9a-fA-F]{2})/','hexadecimal',$to[3]);
  51. $to[3] = preg_replace_callback('/([0-7]{3})/','octal',$to[3]);
  52. $co = fread($fp, strlen($to[3]));
  53. if ($co == $to[3]) {
  54.  $znalazl = true;
  55.  echo stripslashes($to[4]);
  56. }
  57.  break;
  58. case "lelong" : $dl=isset($dl)?$dl:4;
  59. case "byte" : $dl=isset($dl)?$dl:1;
  60. case "belong" : $dl=isset($dl)?$dl:4;
  61. case "short" : $dl=isset($dl)?$dl:2;
  62. case "leshort" : $dl=isset($dl)?$dl:2;
  63. case "beshort" : $dl=isset($dl)?$dl:2;
  64. /*
  65. * hexadecimal : 0[xX][0-9a-fA-F]+
  66. * octal  : 0[0-7]+
  67. * decimal  : [1-9][0-9]*|0
  68. */
  69. $to[3] = preg_replace_callback('/^0[xX]([0-9a-fA-F]+)$/','hexadecimal',$to[3]);
  70. $to[3] = preg_replace_callback('/^0([0-7]+)$/','octal',$to[3]);
  71. $to[3] = preg_replace_callback('/^([1-9][0-9]+|0)$/','decimal',$to[3]);
  72. fseek($fp, $x[1]+$dl-strlen($to[3]));
  73. $co = fread($fp, strlen($to[3]) );
  74. if ($co == $to[3]) {
  75.  $znalazl = true; //tu nie pamiętam, trzeba sprawdzić
  76.  echo $to[4];
  77. }
  78.  break;
  79. default:
  80.  echo "Błąd pliku wejściowego";
  81.  }
  82.  unset($dl);
  83.  if ($znalazl){
  84. break;
  85.  }
  86. }
  87. fclose($fp);
  88. ?>

i plik:
magic.mime
można używać innych, ale że skrypt nie obsługuje błędów, to trzeba najczęściej poprawić...

Dostajesz tylko sam mime typ, ale z tych skryptów co były wcześniej da się wyciągnąć z mime na rozszerzenie (albo można bezpośrednio z katalogu apache 'config')

A przypomniało mi się, jest kłopot z plikami exela czy word'a, bo niby mają określoną sygnaturę, ale wiecie jak się Microsoft trzyma standardów (nawet swoich), więc tych plików może (a raczej prawie na pewno) nie rozpoznawać :|


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 06:29