Как проверить, является ли файл ASCII или двоичным в PHP - PullRequest
13 голосов
/ 11 марта 2009

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

Ответы [ 4 ]

21 голосов
/ 11 марта 2009

Это работает только для 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

3 голосов
/ 11 марта 2009

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

2 голосов
/ 16 июля 2013

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

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

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

1 голос
/ 30 мая 2018

таким образом, в моем проекте все нормально:

function probably_binary($stringa) {
    $is_binary=false;
    $stringa=str_ireplace("\t","",$stringa);
    $stringa=str_ireplace("\n","",$stringa);
    $stringa=str_ireplace("\r","",$stringa);
    if(is_string($stringa) && ctype_print($stringa) === false){
        $is_binary=true;
    }
    return $is_binary;
}

PS: извините, мой первый пост, я хотел добавить комментарий к предыдущему:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...