int intval ( mixed $var [, int $base= 10 ] )

这个方法很简单,文档请参阅http://cn2.php.net/intval

这里想强调的一下:

  • 整数在32位系统上的最大值是2^31 – 1 ,如果超过,就会溢出
  • 传给intval的参数如果是字符串类型,且字符串表示的数字超过了最大值,就只会保留最大值

即:

echo intval(2147483648);    // -2147483648
echo intval("2147483648");  // 2147483647

练习题:

康盛公司出品的山寨社会化网络(SNS)软件UCenter Home ,即UCH ,有一个相册功能,其代码( source/function_cp.php )中包含一句:

 
$maxattachsize = intval(checkperm('maxattachsize'));//单位MB

其用途是获取用户的可用空间。里面注释是UCHOME自带的,而且是错误的。实际上checkperm返回的单位是字节,而且是整数类型的字节。引起的直接bug是,如果给用户分配的可用空间超过2G,就会溢出,在这里检查可用空间就变成负数了。

请尝试修改上述代码。

 

下一期学习预告:康盛 UCHOME 教你如何编写内存泄露的javascript代码