2009-03-10 17 views
12

Czy istnieje szybki, prosty sposób sprawdzenia, czy plik jest ASCII lub binarny z PHP?Jak sprawdzić, czy plik jest ASCII lub Binary w PHP

+0

To pytanie zostało zadane wcześniej, ale zawsze zastanawiam się, dlaczego obchodzi Cię jego ascii lub binarny? – Pyrolistical

+0

Podobny, ale nie duplikat. Ta ma łatwą, techniczną odpowiedź, podczas gdy domniemane identyczne pytanie jest znacznie trudniejsze. Istnieje duża różnica między pytaniem, czy plik jest w kodowaniu X, czy w ogóle w kodowaniu. –

+0

Nie czytałem ponownie, te typy były tylko przykładami. Szuka tego samego binarnego i tekstowego. – Pyrolistical

Odpowiedz

18

Działa to tylko dla PHP> = 5.3.0 i nie jest w 100% niezawodny, ale hej, jest bardzo blisko.

// return mime type ala mimetype extension 
$finfo = finfo_open(FILEINFO_MIME); 

//check to see if the mime-type starts with 'text' 
return substr(finfo_file($finfo, $filename), 0, 4) == 'text'; 

http://us.php.net/manual/en/ref.fileinfo.php

+0

Doskonała odpowiedź. + 1 – Cosine

+0

Łącze przerwane: http://php.net/manual/en/book.fileinfo.php –

+1

prawdopodobnie powinien sprawdzić 'if (! $ Finfo) {echo" Nie powiodło się otwarcie bazy danychinfo "; wyjście(); } 'i nie zapomnij:' finfo_close ($ finfo); ... –

2

Ponieważ ASCII jest po prostu kodowaniem tekstu, z reprezentacją binarną, nie jest tak naprawdę. Można sprawdzić, czy wszystkie bajty są mniejsze niż 128, ale nawet to nie gwarantowałoby, że ma być zdekodowany jako ASCII. Dla wszystkich wiesz, że to jakiś zwariowany format obrazu lub zupełnie inne kodowanie tekstu, które również nie wykorzystuje wszystkich ośmiu bitów. Może jednak wystarczyć do twojego użytku. Jeśli chcesz tylko sprawdzić, czy plik jest prawidłowy ASCII, nawet jeśli nie jest to "plik tekstowy", na pewno wystarczy.

1

Powinieneś raczej sprawdzić typ MIME pliku, ale jeśli jesteś gotów, aby załadować plik do pamięci, może można sprawdzić, czy bufor składa się ze wszystkich do zadrukowania-znaków za pomocą coś takiego:

<?php 
$probably_binary = (is_string($var) === true && ctype_print($var) === false); 

Nie jest doskonały, ale może być przydatny w niektórych przypadkach.

+5

Tabulatory i znaki powrotu karetki sprawią, że 'ctype_print()' zwróci FALSE, niestety. – dotancohen

Powiązane problemy