Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]sprawdzanie mime dowolnego pliku ?
Forum PHP.pl > Forum > Przedszkole
nowy_pehapowiec
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
erix
  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.
nowy_pehapowiec
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
erix
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.
marcio
  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
nospor
@marcio:
Cytat
Ale plików jest dużo i zależy mi na szybkości.
Mozna wiec podejrzewac iż nie robi tego przy uploadzie winksmiley.jpg
marcio
Sorki nie wyczytalem wszystkiego.
nowy_pehapowiec
dzięki, jak sprawdzę, to napisze jak to wychodzi w praktyce.

pozdro
cojack
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...
erix
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ś. 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.
nowy_pehapowiec
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 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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.