Есть ли простой и простой способ проверить, является ли файл ASCII или двоичным с PHP?
Как проверить, является ли файл ASCII или двоичным в PHP
Ответ 1
Это работает только для 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';
Ответ 2
Так как ASCII - это просто кодировка текста, с двоичным представлением, на самом деле. Вы можете проверить, что все байты меньше 128, но даже это не гарантирует, что он должен быть декодирован как ASCII. Насколько вам известно, это какой-то сумасшедший формат изображения или совсем другая текстовая кодировка, которая также не использует все восемь бит. Это может быть достаточно для вашего использования. Если вы просто хотите проверить, действительно ли файл ASCII, даже если он не является "текстовым файлом", он определенно будет достаточным.
Ответ 3
Вероятно, вы должны проверить файл mimetype, но если вы захотите загрузить файл в память, возможно, вы можете проверить, состоит ли буфер в составе всех печатных символов, используя что-то вроде:
<?php
$probably_binary = (is_string($var) === true && ctype_print($var) === false);
Не идеально, но может быть полезно в некоторых случаях.