赞
踩
$a==1 & $test[$a]=t 时
知识点1)php在处理数字时,如果数字的位数超过 16 位是可以弱等于1的,也就是
var_dump( 9999999999999999999 == 1 );//true
因为当数字位数超过 16 位时,是将该数字转换成了数值为 1 的字符串进行处理
知识点2)在科学计数法中也有种特殊情况,0.1e1 是代表 0.1*10,而 .1e1 代表的也是 0.1*10 ,但在数组中时,由于 . 代表的是字符串,所以会于数组中变成 0 ,于 is_numeric 中有点则正常输出为数字
- // 打印数组b下标为0的数据
- echo $b['.1e1'] //输出t
当使用 switch 并且没有使用 break 来跳出循环时,代码是会继续往下执行。这属于程序员在编写程序出现的人为漏洞,并不是语言本身的问题。
如何使 $a==0 的同时 $a 又为真?
- <?php
- $a=$_GET['a'],
- if ($a==0){
- echo "1";
- }
- if ($a) {
- echo "must";
- }
- ?>
答:接收参数$a得存在,并且$a==0可用 . 绕过(非数字都可绕过) ,例如输入 .1e1
接收参数中不能出现某一字符,但下面又必须使用时,就可以php://伪协议绕过
- $s=file_get_contents(php://input);
- <?php
- $res=file_get_contents('php://input');
- var_dump('file_get_contents 数据是:'.$res);
- echo '<br>post 数据是:';
- var_dump($_POST);
运行后我们会发现:file_get_contents('php://input')不能接收curlpost过来的数组
解释:如果POST的原始数据是一维数组或&拼接的标准格式的键值对字符串,那么可以用$-POST来获取。
如果要通过file_get_contents获取,这种情况下可以发送json字符串,用ison_encode转一下或者使用http_build_query:比如上面修改如下:curl_setopt($ch, CURLOPT_POSTFIELDS, http _build_query($data));//POST数据结果:
string(97)"file_get_contents 数据是:username=%E5%91%A8%E4%BC%AF%E9%80%9A&password=123456&sign=asdfg123456"
post 数据是:array(3){["username"]=> string(9)"周伯通"["password"]=> string(6)"123456"["sign"]=>string(11)"asdfg123456"}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。