В PHP
что это означает, что функция binary-safe
?
Что делает их особенными и где они обычно используются?
В PHP
что это означает, что функция binary-safe
?
Что делает их особенными и где они обычно используются?
Это означает, что функция будет работать правильно, когда вы передадите произвольные двоичные данные (т.е. строки, содержащие байты не 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 char
Это означает, что функция может работать и давать желаемые результаты даже с двоичными данными в качестве части своих аргументов.