在PHP中,二进制安全的函数是什么意思?

php
2022-08-30 06:56:48

在二进制安全的函数是什么意思?PHP

是什么让它们特别,它们通常在哪里使用?


答案 1

这意味着当您传递任意二进制数据(即包含非ASCII字节和/或空字节的字符串)时,该函数将正常工作。

例如,非二进制安全函数可能基于 C 函数,该函数需要以 null 结尾的字符串,因此,如果字符串包含 null 字符,则该函数将忽略它后面的任何内容。

这是相关的,因为PHP不会完全分离字符串和二进制数据。


答案 2

其他用户已经提到了一般含义。binary safe

在PHP中,含义更具体,仅引用Michael给出的示例。

PHP 中的所有字符串都有一个关联的长度,即组成它的字节数。当函数操作字符串时,它可以:

  1. 依靠这个长度的元数据。
  2. 依赖于以空值终止的字符串,即在实际是字符串一部分的数据之后,将出现一个带值的字节。0

引擎操作的所有字符串 PHP 变量也是空终止的,这也是事实。依赖于 2. 的函数的问题在于,如果字符串本身包含一个带值的字节,则操作它的函数会认为字符串在该点已结束,并将忽略之后的所有内容。0

例如,如果PHP的函数像C标准库一样工作,这里的结果将是错误的:strlenstrlen

$str = "abc\x00abc";
echo strlen($str); //gives 7, not 3!

推荐