PHP动态拼接
函数的变量名调用法1
$a = "phpinfo";
$a(); //相当于phpinfo(),$a调用函数,()传参
函数的变量名调用法2
$type = $FILE[$type];
$a = imagecreatefrom{$type}; //假如pic的类型为png,则拼接后的函数名为imagecreatefrompng
$a($pic); //动态调用函数
//可以在文件上传的场景当中应用,根据文件类型调用相应的函数,也可以拼接小马进行绕过。
补充1【$_FILE】:
PHP中,使用$FILES变量获取由HTTP POST/GET方式上传而提交的数据。
$_FILES变量是一个数组,包括以下几个成员:
$_FILES[‘uploadfile’][‘name’]:客户端上传文件的原名称
$_FILES[‘uploadfile’][‘type’]:文件的MIME类型,需要浏览器提供该信息的支持,如"image/gif"
$_FILES[‘uploadfile’][‘size’]:已上传文件的大小,以字节为单位
$_FILES[‘uploadfile’][‘tmp_name’]:文件上传后在服务器端存储的临时文件名
$_FILES[‘uploadfile’][‘error’]:与该文件上传相关的错误代码
补充2[花括号]:
1.界定变量名的边界
echo ({$type}one); //为了防止解释器解析$typeone,而不是将变量名单独解析$type
//可以用来向字符串当中引入实时获取的变量,拼接字符串或新的变量
2.指定字符串当中的单个字符
$string = "iamgood";
$string{1} = 't';
//结果输出为itmgood,仅在双引号中变量名会被引用,单引号中无效
3.变量间接引用时对操作对象进行界定
${$arr1[1]}
${$arr1}[1]
//两种写法是不同的
补充3[单双引号]:
''中的内容在PHP中单引号会被直接解析为字符串(包括\n,变量等)
""当中的变量会优先引用,然后在进行其他的操作
一般的拼接方法:
$a = "php";
$b = "info";
$c = $a.$b;
$c(); //拼接结果为phpinfo()