Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Mime type z pliku na serwerze
franki01
post
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 (IMG:http://forum.php.pl/style_emoticons/default/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
Sedziwoj
post
Post #2





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]+|(?(IMG:http://forum.php.pl/style_emoticons/default/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ć :|
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 10.10.2025 - 06:49