Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]sprawdzanie mime dowolnego pliku ?
nowy_pehapowiec
post
Post #1





Grupa: Zarejestrowani
Postów: 220
Pomógł: 0
Dołączył: 24.08.2009

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


Czy można inaczej niż getimagesize sprawdzić typ pliku? Mam skrypt, który sprawdza typy plików i później coś z nimi robi. Ale plików jest dużo i zależy mi na szybkości. A getimagesize sprawdza nie tylko typ. Poza tym działa dla obrazków a dla pdf już nie. Od razu mówię, że nie chce sprawdzać po rozszerzeniach, bo nie zawsze je mam.


pozdro
Go to the top of the page
+Quote Post
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. $x = shell_exec('file -bi '.escapeshellarg($path));

Najpewniejsza z dostępnych metod.

Cytat
A getimagesize sprawdza nie tylko typ.

Różnica wynosi ułamki sekund; większość popularnych formatów (GIF/PNG/BMP) ma zapisane wymiary w nagłówku, wystarczy odczytać wartość z odpowiedniego offsetu. W przypadku JPEG jest ciut trudniej, ale również różnica będzie minimalna.
Go to the top of the page
+Quote Post
nowy_pehapowiec
post
Post #3





Grupa: Zarejestrowani
Postów: 220
Pomógł: 0
Dołączył: 24.08.2009

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


erix jest problem. Mój hosting nie obsługuje tych funkcji - są wyłączone. Na razie nie mogę go zmienić. Czy jest inna metoda?

I getimagesize nie sprawdza plików pdf a to dla mnie bardzo ważne.

pozdro
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
erix jest problem. Mój hosting nie obsługuje tych funkcji - są wyłączone. Na razie nie mogę go zmienić.

Najlepiej zmienić. Gdzie exec wyłączone = admini albo są leniwi, albo niekompetentni.

Cytat
Czy jest inna metoda?

Teoretycznie tak. Możesz spróbować tego rozszerzenia: http://pl.php.net/manual/pl/fileinfo.setup.php

A jeśli jesteś ciut bardziej zdesperowany i nie ma tego PECL - mime_content_type - funkcja zaniechana, ale niektóre serwery ją mają.

Jeśli poziom Twojej desperacji sięga zenitu i wszystko inne zawodzi: http://filext.com/file-extension/pdf
Masz ramkę identifying characters, co w przypadku PDF wygląda:
Kod
Hex: 25 50 44 46 2D 31 2E
ASCII: %PDF-1.

Otwierasz rzekomy PDF do odczytu, sprawdzasz te 7 pierwszych bajtów, czy się zgadzają ze wzorcem. Pozostałe formaty - adekwatnie, opisów MIME szukasz albo na stronie typu filext.com, albo analizujesz mime.magic i implementujesz sprawdzanie każdego z osobna.
Go to the top of the page
+Quote Post
marcio
post
Post #5





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


  1. $_FILES['up_file']['type'];

Mozesz to uzyc pobiera typ z naglowkow ktorym jednak nie mozna ufac w 100% bo mozna je latwo zmienic za pomoca livehttpheaders
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@marcio:
Cytat
Ale plików jest dużo i zależy mi na szybkości.
Mozna wiec podejrzewac iż nie robi tego przy uploadzie (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
marcio
post
Post #7





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Sorki nie wyczytalem wszystkiego.
Go to the top of the page
+Quote Post
nowy_pehapowiec
post
Post #8





Grupa: Zarejestrowani
Postów: 220
Pomógł: 0
Dołączył: 24.08.2009

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


dzięki, jak sprawdzę, to napisze jak to wychodzi w praktyce.

pozdro
Go to the top of the page
+Quote Post
cojack
post
Post #9





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


Cytat
Jeśli poziom Twojej desperacji sięga zenitu i wszystko inne zawodzi: http://filext.com/file-extension/pdf


Niech to będzie jakaś prezentacja lub coś innego microshitu, to serwer na parę minut zawiesi. Odradzam.


Cytat
A jeśli jesteś ciut bardziej zdesperowany i nie ma tego PECL - mime_content_type - funkcja zaniechana, ale niektóre serwery ją mają.

mime_content_type - ja bym też się do tego przychylił

Albo w najłatwiejszy sposób sprawdzić rozszerzenie pliku, gorzej jeżeli nie posiada...
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Niech to będzie jakaś prezentacja lub coś innego microshitu, to serwer na parę minut zawiesi. Odradzam.

Jeśli odczyta kilka pierwszych bajtów pliku? To mnie rozbawiłeś. (IMG:style_emoticons/default/winksmiley.jpg)

Cytat
Albo w najłatwiejszy sposób sprawdzić rozszerzenie pliku, gorzej jeżeli nie posiada...

Najgorszy z możliwych. Poza tym, autor wyraźnie napisał, że nie zawsze jest rozszerzenie. O możliwości podstawienia innej zawartości nie wspomnę.

Cytat
mime_content_type - ja bym też się do tego przychylił

Od PHP 5.3 jest wycofywane, poza tym - funkcja oznaczona jako deprecated.

Przestań nabijać posty, już któryś wątek z Twoimi wypowiedziami oglądam i niewiele nowego wnoszą do dyskusji.
Go to the top of the page
+Quote Post
nowy_pehapowiec
post
Post #11





Grupa: Zarejestrowani
Postów: 220
Pomógł: 0
Dołączył: 24.08.2009

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


Sprawdzanie po rozszerzaniu odpada, to w ogóle chory pomysł. Pomijając fakt, że nie zawsze je mam, to np skutki obrabiania pliku pdf jak obrazka mogą być dziwne (IMG:style_emoticons/default/smile.gif) O bezpieczeństwie nawet nie myślałem, ale pewnie erix ma racje.

Ale do rzeczy:
1 finfo_file - mój hosting nie oferuje, ale sprawdziłem u siebie. Efekty bardzo pozytywne. Wyniki prawie zawsze są dobre, wyjątkiem są pliki pdf typu portfolio z najnowszego acrobat - czasami są pomyłki nie wiem od czego to zależy.

2 mime_content_type - tutaj błędów wyraźnie więcej, a poza tym to funkcja mało przyszłościowa.

3 najlepsze rozwiązanie to zmiana serwera na taki który oferuje pierwsze rozwiązanie.

dzięki again

pozdro
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: 17.09.2025 - 16:25