2012-06-14 12 views
8

Powiel możliwe:
How to check file types of uploaded files in PHP?jak sprawdzić typ pliku przesłanego jest pdf

mam przesyłania funkcję w moim miejscu i tylko pdf przesłania jest allowed.Than jak sprawdzić, że przesłany plik to tylko pdf. Tak jak getimagesize(), aby uzyskać dostęp do plików graficznych. Czy istnieje sposób, aby sprawdzić plik z pewnością jest pdf. mój kod jest pokazany poniżej.

$whitelist = array(".pdf"); 

foreach ($whitelist as $item) { 

    if (preg_match("/$item\$/i", $_FILES['uploadfile']['name'])) { 

    } 
    else { 

     redirect_to("index.php"); 
    } 
} 

$uploaddir='uploads/'; 

$uploadfile = mysql_prep($uploaddir . basename($_FILES['uploadfile']['name'])); 

if (move_uploaded_file($_FILES['uploadfile']['tmp_name'], $uploadfile)) { 

    echo "succussfully uploaded"; 
} 

w tym redirect_to i mysql_prep są funkcja zdefiniowana przez mnie. Ale typ mime można zmienić za pomocą nagłówków. Czy istnieje sposób sprawdzenia pliku w formacie PDF?

+1

Dlaczego masz pusty 'if'? I proszę użyj odpowiedniego wcięcia dla twojego kodu lub złe rzeczy się wydarzą. – PeeHaa

+0

Chciałem tylko sprawdzić, czy to maches, czy nie ..? – StaticVariable

+0

Po prostu wykonaj: 'if (! Preg_match ("/$ item \ $/i ", $ _FILES ['uploadfile'] ['name'])) {redirect_to (" index.php "); } ' – PeeHaa

Odpowiedz

14

Możesz sprawdzić typ MIME pliku przy użyciu PHP File Info Functions. Jeśli wróci z typem "application/pdf", powinien to być plik PDF.

Funkcje informacji o pliku zostały dodane w PHP 5.3, ale wcześniej można użyć funkcji mime_content_type.

+1

, ale jeśli mam plik php i zapisu (header: type = "application/pdf") ... niż to też pokażę to samo – StaticVariable

+0

To prawda, ale to jest mniej prawdopodobne i zależy od tego, jak krytyczne jest to –

+0

+1, to tylko poprawna odpowiedź tutaj. funkcja informacji o pliku zapewnia sposób na uzyskanie ** prawdziwego *** typu mime pliku – Sarfraz

7

Wyszukaj plik PDF magic number, otwierając plik i odczytywanie pierwszych kilku bajtów danych. Większość plików ma określony format, a pliki PDF zaczynają się od %PDF.

Możesz sprawdzić pierwsze 5 znaków pliku, jeśli są one równe "% PDF-", jest to prawdopodobnie prawdziwy plik PDF (jednak to nie definitywnie nie dowodzi, że jest to plik PDF, jak każdy plik może zaczynać się od tych 5 znaków). Następne 4 znaki w odpowiednim pliku PDF zawierają numer wersji (tj. 1.2).

+0

To bardzo drogie rozwiązanie! : D – HBv6

+1

Czy nie jest to w zasadzie to, co sprawdzają typy MIME, ale w tańszy sposób? – Frog

+2

Dobra rada, to jest to, co prawdopodobnie już robi kontrola typu mime. Ale jeśli chcesz mieć pewność, że jest to poprawny plik PDF (i nie masz nic przeciwko dodatkowemu czasowi przetwarzania), możesz przeskanować plik pod kątem innych oczekiwanych konstrukcji, takich jak znacznik PDF "%% EOF" pod adresem koniec pliku. (zakładając, że jest to coś więcej niż to, co sprawdza mim). – Mike

8
mime_content_type('file.ext'); 

mime_content_type()

+4

Należy jednak pamiętać, że [jest przestarzałe] (http://php.net/manual/en/function.mime-content-type.php). – PeeHaa

+1

@PeeHaa Och, dziękuję ... Muszę zaktualizować swoją wiedzę: X – HBv6

+0

@PeeHaa możesz zaktualizować swoją odpowiedź? To nie jest przestarzałe. (Zobacz link.) Może został przywrócony do życia? – daprezjer

Powiązane problemy