服务报价 | 域名主机 | 网络营销 | 软件工具| [加入收藏]
 热线电话: #
当前位置: 主页 > php教程 > php教程 >

PHP 二进制安全

时间:2016-12-26 23:18来源:未知 作者:最模板编辑 点击:
补充一下 PHP 的基础知识,什么是二进制安全? 这得从 C 语言说起。 C字符串中的字符必须符合某种编码( 比如 ASCII), 并且除了字符串的末尾之外, 字符串里面不能包含空字符, 否
补充一下 PHP 的基础知识,什么是二进制安全?
 
这得从 C 语言说起。
 
C字符串中的字符必须符合某种编码( 比如 ASCII), 并且除了字符串的末尾之外, 字符串里面不能包含空字符, 否则最先被程序读入的空字符将被误认为是字符串结尾, 这些限制使得 C 字符串只能保存文本数据, 而不能保存像图片、 音频、 视频、 压缩文件这样的二进制数据。
 
以上这段文字摘自《Redis设计与实现》。
 
举个例子,如果一个字符串包含 C 语言中表示结束的 ‘\0’, 如字符串:Redis\0Cluster\0,这个时候会误以为在第一个”\0″处字符串结束了,这也是非二进制安全的。
 
PHP 二进制安全简单说就是传入的参数支持二进制数据,包括”\0″这种在 C 中表示字符串结束的字符,如 strlen 函数,可以传入 strlen(‘Redis\0Cluster\0’) 这种参数。
 
再如 PHP 中的 strcoll 和 strcmp 函数:
 
$string1 = "Hello";
$string2 = "Hello\x00Hello";
echo strcoll($string1, $string2); // 返回0, 由于是非二进制安全,误判为相等
echo strcmp($string1, $string2); // 返回负数
他们分别用于非二进制安全和二进制安全的情况。因此很多函数会表明是否是二进制安全的,要注意在正确的场景下使用。
(责任编辑:最模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容