is_binary()

  • Автор темы Автор темы Latrekc
  • Дата начала Дата начала

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;
        }
}

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

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

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

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

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

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

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

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

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

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