is_binary()

Latrekc

Новичок
is_binary()

Мне необходимо проверять является ли некоторый файл текстовым или бинарным. В поиске наткнулся на возможное
решение , но реализовать что то не получается - все файлы определяются как бинарные.

PHP:
function is_binary($link) {
        $tmpStr  = '';

        @$fp    = fopen($link, 'rb');
        @$tmpStr = fread($fp, 256);
        @fclose($fp);

        if($tmpStr != '') {
                $tmpStr = str_replace(chr(10), '', $tmpStr);
                $tmpStr = str_replace(chr(13), '', $tmpStr);
                $tmpInt = 0;

                for($i =0; $i < strlen($tmpStr); $i++) {
                        if(preg_match("/^[\х20-\x7f]|\x0a|\x0d|\x09/s", $tmpStr{$i})) {

                                return TRUE;
                        }

                }

                return FALSE;

        } else {
                return FALSE;
        }
}
Скорее всего я ошибся в регулярном выражении, но где именно пока понять не могу
 

Фанат

oncle terrible
Команда форума
ааа... эээ...
зачем здесь регулярное выражение?
просто по коду символа определять некошерно?
мне кажется, нагляднее будет, быстрее, и без ошибки в регулярном выражении.
если же применять регулярку, то сразу ко всему куску, а не к каждомук символу по очереди.

зачем заменять 10 и 13?
вот это - @ повешено для красоты, как гирлянда?

да и более корректным названием этой функции было бы
"соответствуют ли первые 256 байт файла определенному диапазону"
 

Latrekc

Новичок
Хм ... действительно
Все заработало
Спасибо

Очевидно я испугался шестнадцатеричных чисел
 

Crazy

Developer
Re: is_binary()

Автор оригинала: Latrekc
Мне необходимо проверять является ли некоторый файл текстовым или бинарным. В поиске наткнулся на возможное
решение
Посмотрим на рецепт:

если все символы в пределе диапазона 0х20-0x7f, 0x0a, 0x0d, 0x09, то файл ascii
В ASCII бывают еще и другие символы. Например -- разделители страниц. Вертикальные табуляции. Символ конца файла. Может быть -- что-то еще.

Кроме того, непонятно, с какого бодуна здесь 0x7f -- мы что, работаем исключительно с латинскими буквами? Кстати, сам 0x7f -- как раз признак ДВОИЧНОГО файла. Так что это какая-то нелепая каша, а не алгоритм.

Так что если хочешь им пользоваться, то:

1. Приведи в здравый вид список символов.
2. Проверяй весь свой кусок, как тебе уже посоветовали, разом.
 

Demiurg

Guest
Интересно, а для чего это надо ?

Latrekc
в следующий раз потрудись тему нормально называть.
 
Сверху