Как проверить, является ли файл ASCII или двоичным в PHP

Есть ли быстрый и простой способ проверить, является ли файл ASCII или двоичным с PHP?

Related of "Как проверить, является ли файл ASCII или двоичным в PHP"

Это работает только для PHP> = 5.3.0 и не на 100% надежнее, но эй, это довольно чертовски близко.

// 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

Поскольку ASCII – это просто кодировка текста, с двоичным представлением, на самом деле. Вы можете проверить, что все байты меньше 128, но даже это не гарантирует, что он должен быть декодирован как ASCII. Для всех, кого вы знаете, это какой-то сумасшедший формат изображения или совсем другая текстовая кодировка, которая также не использует все восемь бит. Это может быть достаточно для вашего использования. Если вы просто хотите проверить, действительно ли файл ASCII, даже если он не является «текстовым файлом», его, безусловно, будет достаточно.

Вероятно, вы должны проверить mimetype файла, но если вы захотите загрузить файл в память, возможно, вы можете проверить, есть ли буфер из всех печатных символов, используя что-то вроде:

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

Не идеально, но может быть полезно в некоторых случаях.