zoukankan      html  css  js  c++  java
  • PHP细节,PHP手册中常见的一句话:该函数是二进制安全的

    以下内容转自 http://wuxinjie.github.io/php-02/

    在看PHP手册的时候,经常看到一句话”该函数是二进制安全的”。

    • 二进制安全是什么呢?
    • 他是如何实现的?

    二进制安全是什么?

    先看一段代码:

    1 <?php
    2 $string1 = "Hello"; 
    3 $string2 = "HelloHello"; 
    4 echo strcoll($string1, $string2); /*返回0, 由于是非二进制安全,误判为相等 */
    5 echo strcmp($string1, $string2);  /*返回<0,不相等*/
    6 ?>

    这是为什么呢?PHP是基于C实现的,PHP代码都会被zend引擎编译成opcode,最终作为C语言去执行。 而对于c语言‘’是字符串的结束符,它读到’’就会默认字符读取已经结束,从而抛掉后面的字符串。

    1 //这里是C语言哦!
    2 main(){  
    3     char ab[] = "Hello";  
    4     char ac[] = "HelloHello";  
    5     strcmp(ab, ac); /*返回0, 由于是非二进制安全,误判为相等 */
    6  }

    有一个二进制安全的定义,我挺喜欢的:

    程序不会对其中的数据做任何限制、过滤、或者假设 —— 数据在写入时是什么样的, 它被读取时就是什么样。

    PHP是如何实现二进制安全的?

    那么,既然PHP是基于C实现的,C 字符串类型不是二进制安全的,PHP又是如何实现的呢?这就是数据结构的功劳了。 PHP的内核中,是如此定义字符串类型的。

    1 struct{
    2     char *val;
    3     int len;
    4 } str;

    val是指向字符串内存的指针,len表示该字符串的长度,无论是否遇到“”字符,C都按照len长度读取该字符串。

  • 相关阅读:
    office 2007
    关于网站爬虫的爬取
    华为交换机默认密码大合集
    一些不错的网站工具箱
    HDU 2023 求平均成绩
    HDU 2056 Rectangles
    HDU 2022 海选女主角
    HDU 2045 不容易系列之(3)—— LELE的RPG难题
    HDU 2042 不容易系列之二
    HDU 2044 一只小蜜蜂...
  • 原文地址:https://www.cnblogs.com/html55/p/10515514.html
Copyright © 2011-2022 走看看