В PHP что означает функция, являющаяся бинарно-безопасной?
на PHP
Что означает функция, являющаяся binary-safe
?
что делает их особенными и где они обычно используются ?
3 ответа:
Это означает, что функция будет работать правильно, когда вы передаете ей произвольные двоичные данные (т. е. строки, содержащие не ASCII байты и/или нулевые байты).
например, небинарная безопасная функция может быть основана на функции C, которая ожидает строки с нулевым завершением, поэтому, если строка содержит нулевой символ, функция будет игнорировать что-либо после него.
Это актуально, потому что PHP не разделяет чисто строковые и двоичные данные.
другие пользователи уже упоминали, что
binary safe
значит в целом.в PHP значение более конкретно, ссылаясь только на то, что Майкл дает в качестве примера.
все строки в PHP имеют связанную длину, которая является количеством байтов, которые ее составляют. Когда функция манипулирует строкой, она может либо:
- рассчитывать на то, что длина мета-данных.
- полагаться на строку с нулевым завершением, т. е., что после данных, которые на самом деле часть строки, байт со значением
0
появится.также верно, что все строковые переменные PHP, управляемые движком, также заканчиваются нулем. Проблема с функциями, которые полагаются на 2., если сама строка содержит байт со значением
0
, функция, которая управляет им, будет думать, что строка закончилась в этот момент и будет игнорировать все после этого.например, если PHP
strlen
функция работала как C стандартная библиотекаstrlen
, результат здесь будет не так:$str = "abc\x00abc"; echo strlen($str); //gives 7, not 3!
примеры:
<?php $string1 = "Hello"; $string2 = "Hello\x00World"; // This function is NOT ! binary safe echo strcoll($string1, $string2); // gives 0, strings are equal. // This function is binary safe echo strcmp($string1, $string2); // gives <0, $string1 is less than $string2. ?>
\x
указывает на шестнадцатеричную систему счисления. Смотрите:в PHP строки0x00 = NULL 0x04 = EOT (End of transmission)
таблица ASCII чтобы увидеть список символов ASCII