Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SF][SF2][Symfony2]Błędny MIME-TYPE plików
macq
post
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
Go to the top of the page
+Quote Post
cadavre
post
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
Go to the top of the page
+Quote Post
macq
post
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.
Go to the top of the page
+Quote Post
cadavre
post
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.
Go to the top of the page
+Quote Post
macq
post
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
Go to the top of the page
+Quote Post

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: 23.12.2025 - 13:01