Что в PHP означает, что функция является бинарно-безопасной?

Если вы используете TortoiseGit, выполните следующие шаги:

  1. Перейдите в свою местную папку проверки и щелкните правой кнопкой мыши, чтобы перейти к TortoiseGit -> Settings
  2. В левой выберите Git -> Remote
  3. На правой панели выберите origin
  4. Теперь измените значение текстового поля URL на место, где когда-либо был ваш новый удаленный репозиторий

Ваша ветка и все ваши локальные коммиты останутся нетронутыми, и вы можете продолжать работать так, как раньше.

110
задан Zacky112 16 July 2010 в 11:52
поделиться

2 ответа

Это означает, что функция будет работать правильно, когда вы передадите ей произвольные двоичные данные (то есть строки, содержащие байты, отличные от ASCII, и / или нулевые байты).

Например, небезопасная функция может быть основана на функции C, которая ожидает строки с завершающим нулем, поэтому, если строка содержит нулевой символ, функция проигнорирует все, что находится после него.

Это актуально, потому что PHP не разделяет чисто строковые и двоичные данные.

98
ответ дан 24 November 2019 в 02:49
поделиться

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

В PHP значение более конкретное и относится только к тому, что Майкл приводит в качестве примера.

У всех строк в PHP есть связанная длина, которая представляет собой количество байтов, из которых они состоят. Когда функция манипулирует строкой, она может:

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

Также верно, что все строковые переменные PHP, которыми манипулирует движок, также завершаются нулем. Проблема с функциями, которые полагаются на 2., заключается в том, что, если сама строка содержит байт со значением 0 , функция, которая управляет этим, будет думать, что строка закончилась в этой точке, и будет игнорировать все, что после этого .

Например, если бы функция PHP strlen работала как стандартная библиотека C strlen , результат здесь был бы неверным:

$str = "abc\x00abc";
echo strlen($str); //gives 7, not 3!
89
ответ дан 24 November 2019 в 02:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: