首页 > 其他 > 详细

关于intval函数的特性

时间:2020-04-07 17:08:13      阅读:80      评论:0      收藏:0      [点我收藏+]

intval函数有个特性:直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(\0)结束转换

PHP_FUNCTION(intval) // intval函数处理的流程
{
        zval **num, **arg_base;
        int base;
      switch (ZEND_NUM_ARGS()) { //判断传参的个数
                case 1:
                        if (zend_get_parameters_ex(1, &num) == FAILURE) {
                                WRONG_PARAM_COUNT;
                        }
                        base = 10; // base为10
                        break;
                case 2:
                        if (zend_get_parameters_ex(2, &num, &arg_base) == FAILURE) {
                                WRONG_PARAM_COUNT;
                        }
                        convert_to_long_ex(arg_base);
                        base = Z_LVAL_PP(arg_base);
                        break;
                default:
                        WRONG_PARAM_COUNT;
        }
        RETVAL_ZVAL(*num, 1, 0);
        convert_to_long_base(return_value, base); //重点convert_to_long_base中的处理
}
Zend/zend_operators.c->>convert_to_long_base()
……
case IS_STRING:
            strval = Z_STRVAL_P(op);
            Z_LVAL_P(op) = strtol(strval, NULL, base); // strtol()会扫描字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(\0)结束转换,并将结果返回。
            STR_FREE(strval);
            break;

当intval用在if等的判断里面,将会导致这个判断失去意义!

<?php
//intval.php
$var="20070601";
if (intval($var))
    echo "it‘s safe";
echo ‘  $var=‘.$var;
echo "<br>";
$var1="1 union select 1,1,1 from admin";
if (intval($var1))
    echo "it‘s safe too";
echo ‘  $var1=‘.$var1;
?>

技术分享图片

学习文章:https://github.com/80vul/phpcodz/blob/master/research/pch-001.md

关于intval函数的特性

原文:https://www.cnblogs.com/zpchcbd/p/12653780.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!