![]() ![]() |
Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 8.11.2012 Ostrzeżenie: (0%)
|
Witam,
czy ktoś z Was napotkał problemy związane z wykrywaniem MIME-TYPE korzystając z Symfony\Component\HttpFoundation\File\File::getMimeType()? Właśnie zrobiłem test na kilku rodzajach plików i wyszły mi bardzo dziwne wyniki: pliki/Kalimba.mp3 - application/octet-stream (powinno być: audio/mpeg) pliki/Aplikacja.docx - application/zip (powinno być: application/vnd.openxmlformats-officedocument.wordprocessingml.document) pliki/Wildlife.wmv - video/x-ms-asf (powinno być: video/x-ms-wmv) Rozszerzenia również są źle wykrywane i jestem niemal pewny że związane to jest z MIME TYPE. dla plików Desert.jpg, Oferta.pdf, Zrzut.png, lista.txt typy MIME i rozszerzenia wykrywane są poprawnie. Może ktoś z Was wie dlaczego tak się dzieje i jak sobie z tym poradzić? Walczę z tym już od rana, przeszukałem sieć bez skutecznie i powoli nie starcza mi na to sił... Będę mega wdzięczny za pomoc! Moje środowisko to: Ubuntu 12.04 PHP 5.5.1 Apache 2.4.6 Pozdrawiam, Maciek Ten post edytował macq 13.08.2013, 16:04:58 |
|
|
|
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 472 Pomógł: 7 Dołączył: 7.12.2005 Skąd: Gliwice Ostrzeżenie: (0%)
|
Wg dokumentacji:
Kod public string|null getMimeType() Returns the mime type of the file. The mime type is guessed using a MimeTypeGuesser instance, which uses finfo(), mimecontenttype() and the system binary "file" (in this order), depending on which of those are available. http://api.symfony.com/2.3/Symfony/Compone...e/MimeType.html - tak wygląda struktura owych guesserów. https://github.com/symfony/HttpFoundation/t...r/File/MimeType - tutaj masz ich kod. finfo_open() działa domyślnie dla PHP od 5.3 i wykorzystuje tzw. "magiczną sekwencję bajtów", których baza przechowywana jest w /etc/magic. Sprawdź, który guesser wykorzystywany jest w Twoim projekcie, jeśli on okaże się felerny - uzupełnij wymagania, żeby skorzystać z lepszego. Albo napisz takiego guessera sam. : ) Ten post edytował cadavre 13.08.2013, 22:40:18 |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 8.11.2012 Ostrzeżenie: (0%)
|
@cadavre - dzięki za odpowiedź, przyznam się że już myślałem aby w ten sposób się do tego dobrać ale czy nie uważasz że lepszym rozwiązaniem będzie zaktualizowanie bazy dla finfo_open?
No i finfo_open() korzysta z pliku w /usr/share/misc/magic (binarny), a nie /etc/magic (tekstowy). Co ciekawe korzystając z /etc/magic MIME TYPE wykrywany jest poprawnie. |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 472 Pomógł: 7 Dołączył: 7.12.2005 Skąd: Gliwice Ostrzeżenie: (0%)
|
Teraz to już zależy tylko na co możesz sobie pozwolić w kodzie i na serwerze. Z tego co widzę MimeTypeGuesser tworzy instancję bez podawania magic file.
Zatem zgodnie z http://php.net/manual/en/function.finfo-open.php możesz albo nadpisać MimeTypeGuesser'a w Symfony2 i ustawić swoją ścieżkę, albo ustawić zmienną env MAGIC, z której skorzysta finfo. Jeśli ani jedno ani drugie nie jest ustawione wykorzystywana jest baza dostarczona z dystrybucją PHP, teoretycznie zatem przestarzała. |
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 8.11.2012 Ostrzeżenie: (0%)
|
@cadavre - Wielkie dzięki za pomoc! Na razie okroiłem funkcjonalność modułu do plików dla których mime type jest wykrywany poprawnie ale na pewno w przeciągu kilku dni wrócę do tego aby obsłużyć kolejne typy. Dam znać czy mi się udało i w jaki sposób to zrobiłem.
Pozdrawiam, Maciek |
|
|
|
![]() ![]() |
|
Aktualny czas: 23.12.2025 - 13:01 |