设为首页收藏本站

就爱编程论坛

 找回密码
 注册

人人连接登陆

无需注册,直接登录

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

查看: 383|回复: 0
打印 上一主题 下一主题

intval()极限 [复制链接]

Rank: 9Rank: 9Rank: 9

  • TA的每日心情
    无聊
    2025-5-27 03:37:20
  • 签到天数: 366 天

    [LV.9]以坛为家II

    论坛先锋 学习至圣 荣誉成员 论坛元老 活跃之星 终极领袖

    我玩的应用:

    跳转到指定楼层
    楼主
    发表于 2012-4-6 05:51:30 |只看该作者 |倒序浏览
    intval()极限

    intval()可以把任何其它类型的数值转换成整型。对于初学者灵活的变量类型是PHP的一个优点。而今天这种灵活也存在着一些缺陷。我们经常使用intval()函数对URL上传来的ID号转化成整型来保证不会有黑客传递字符串。

    然后在工作中我们终于发现,如下的代码存在缺陷。

    ./limit /intval.php

    1.
    <?php

    2.

    3.
    $string = pow(2, 31) - 1;

    4.
    echo "string=$string";

    5.
    $integer = intval($string);

    6.
    echo "<br/>integer=$integer";

    7.

    8.
    echo "<hr/>";

    9.

    10.
    $string = pow(2, 31);

    11.
    echo "string=$string";

    12.
    $integer = intval($string);

    13.
    echo "<br/>integer=$integer";

    14.

    15.
    ?>


    对于2^31-1的数字转换前后是没有问题的,但是对于2^31-1之后的数字就会返回错误的数字,造成程序中出现意外错误。如果观察不够细致是很难发现问题的。

    一种也不太好的解决办法是使用floatval()函数,但也只是上限比较高而已。

    ./limit/floatval.php

    16.
    <?php

    17.

    18.
    $string = pow(2, 31) - 1;

    19.
    echo "string=$string";

    20.
    $float = floatval($string);

    21.
    echo "<br/>float=$float";

    22.

    23.
    echo "<hr/>";

    24.

    25.
    $string = pow(2, 31);

    26.
    echo "string=$string";

    27.
    $float = floatval($string);

    28.
    echo "<br/>float=$float";

    29.

    30.
    echo "<hr/>";

    31.

    32.
    $string = pow(2, 39);

    33.
    echo "string=$string";

    34.
    $float = floatval($string);

    35.
    echo "<br/>float=$float";

    36.

    37.
    echo "<hr/>";

    38.

    39.
    $string = pow(2, 40);

    40.
    echo "string=$string";

    41.
    $float = floatval($string);

    42.
    echo "<br/>float=$float";

    43.

    44.
    ?>

    另外一种解决办法是用正则表达式验证输入内容是否合法。


    分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    分享分享0 收藏收藏0 支持支持0 反对反对0 分享到人人 转发到微博
    [img=http://mail.qq.com/cgi-bin/qm_share?t=qm_mailme&email=fRUcHhYWGAQ9GxIFEBwUEVMeEhA]http://rescdn.qqmail.com/zh_CN/htmledition/images/function/qm_open/ico_mailme_02.png[/img]

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册 人人连接登陆

    晴云孤魂's Blog|就爱编程搜帖|手机版|Archiver|就爱编程论坛     

    GMT+8, 2025-7-1 19:18 , Processed in 0.084198 second(s), 26 queries .

    Powered by Discuz! X2

    © 2001-2011 Comsenz Inc.

    回顶部