博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php intval 函数
阅读量:2183 次
发布时间:2019-05-02

本文共 1744 字,大约阅读时间需要 5 分钟。

不论什么类型 假如是数字,便前往数字,假如没有是数字便往归0 

正在PHP顶用$_GET['id']的时分就能够这样来一个转换
...太佳了 

PHP代码 

$id = intval($_GET['id']);


echo intval(42); // 42 

echo intval(4.2); // 4 

echo intval('42'); // 42 

echo intval('+42'); // 42 

echo intval('-42'); // -42 

echo intval(042); // 34 

echo intval('042'); // 42 

echo intval(1e10); // 1410065408 

echo intval('1e10'); // 1 

echo intval(0x1A); // 26 

echo intval(42000000); // 42000000 

echo intval(420000000000000000000); // 0 

echo intval('420000000000000000000'); // 2147483647 

echo intval(42, 8); // 42 

echo intval('42', 8); // 34 

?> 

intval最常用的是在程序中功滤入进数据库的变量,将其转换为整型,避免SQL注进攻打的发生 

但是使用没有该的话则会止不到检讨的做用,下里便联合一个真例来阐明那个答题 

海内某个CMS体系,经由ZEND加稀了,解稀后某白件代码如下: 

  1. $id = isset( $_GET['id'] ) ? $_GET['id'] : 0;
  2. if ( intval( $id ) )
  3. {
  4. $sql = "SELECT url FROM ".$tablepre."feed WHERE id={$id} AND uploader='{$SESSION['uid']}'";


代码很简略,获与GET来的id用intval函数断定,假如是整型则带进数据库查询,
,望似逻辑上出有什么答题,但实践上那段代码出有止就任何的check做用,为什么呢?瞅如下足原: 

  1. <?
  2. $var="20070601";
  3. if (intval($var))
  4. echo "it's safe";
  5. echo '$var='.$var;
  6. echo "<br>";
  7. $var1="1 union select 1,1,1 from admin";
  8. if (intval($var1))
  9. echo "it's safe too";
  10. echo '$var1='.$var1;
  11. ?>


运转以上足原能够望到,两个断定的成果皆是safe的,但实践上只要$var是平安的$var1变质后已经附带的有额定的SQL查询语句了,那么intval是如何判别的呢?这就须要瞅intval函数正在PHP中是如何完成的,代码如下: 

  1. PHP_FUNCTION(intval)
  2. {
  3. zval **num, **arg_base;
  4. int base;
  5. switch (ZEND_NUM_ARGS()) {
  6. case 1:
  7. if (zend_get_parameters_ex(1, &num) == FAILURE) {
  8. WRONG_PARAM_COUNT;
  9. }
  10. base = 10;
  11. break;
  12. case 2:
  13. if (zend_get_parameters_ex(2, &num, &arg_base) == FAILURE) {
  14. WRONG_PARAM_COUNT;
  15. }
  16. convert_to_long_ex(arg_base);
  17. base = Z_LVAL_PP(arg_base);
  18. break;
  19. default:
  20. WRONG_PARAM_COUNT;
  21. }
  22. RETVAL_ZVAL(*num, 1, 0);
  23. convert_to_long_base(return_value, base);
  24. }


intval函数只断定参数的第一个字符能否为整型,那样假如搁正在if中,只需知足变质第一个字符为整型,则前往值为ture,
,所以道用if来判别intval后的变质是没有平安的

转载地址:http://eookb.baihongyu.com/

你可能感兴趣的文章
阿里云《云原生》公开课笔记 第八章 应用配置管理
查看>>
阿里云《云原生》公开课笔记 第九章 应用存储和持久化数据卷:核心知识
查看>>
linux系统 阿里云源
查看>>
国内外helm源记录
查看>>
牛客网题目1:最大数
查看>>
散落人间知识点记录one
查看>>
Leetcode C++ 随手刷 547.朋友圈
查看>>
手抄笔记:深入理解linux内核-1
查看>>
内存堆与栈
查看>>
Leetcode C++《每日一题》20200621 124.二叉树的最大路径和
查看>>
Leetcode C++《每日一题》20200622 面试题 16.18. 模式匹配
查看>>
Leetcode C++《每日一题》20200625 139. 单词拆分
查看>>
Leetcode C++《每日一题》20200626 338. 比特位计数
查看>>
Leetcode C++ 《拓扑排序-1》20200626 207.课程表
查看>>
Go语言学习Part1:包、变量和函数
查看>>
Go语言学习Part2:流程控制语句:for、if、else、switch 和 defer
查看>>
Go语言学习Part3:struct、slice和映射
查看>>
Go语言学习Part4-1:方法和接口
查看>>
Leetcode Go 《精选TOP面试题》20200628 69.x的平方根
查看>>
leetcode 130. Surrounded Regions
查看>>