文件上传漏洞
Php wrapper
流操作
感觉就是,php读取服务器里的任意文件,为了用一个格式,读取所有文件
对不同的文件格式,搭配上不同的解释方法
转载大佬:
https://www.csdn.net/tags/NtDaIg4sODMwNzAtYmxvZwO0O0OO0O0O.html
php官方:
https://www.php.net/manual/en/function.stream-get-wrappers.php
注册一个类:
<?php
$existed = in_array("var", stream_get_wrappers());//in_array 检测数组中是否存在函数值,stream_get_wrappers()检测已注册流的列表,返回一个索引组,其中包含正在运行的系统上可用的所有流包装器的名称, 这var个整个就是检查流包装器是否存在(我咋感觉流包装器,就是流解释器)
//在stream_get_wrappers()列表中是否含有var这个包装器
if ($existed) {
stream_wrapper_unregister("var");
//取消注册url包装器,如果存在就取消
}
stream_wrapper_register("var", "VariableStream");
//注册一个实现为php类的url包装器,var是要注册的包装器名称(有效协议名称)
//后面是实现第一个参数
$myvar = "";
$fp = fopen("var://myvar", "r+");//使用给定模式打开文件
//写入
fwrite($fp, "line1\n");
fwrite($fp, "line2\n");
fwrite($fp, "line3\n");
//输出
rewind($fp);//rewind()将文件内部的位置,重新指向一个流
while (!feof($fp)) {//feof()检测是否读到文件结尾
echo fgets($fp);//也是输出
}
fclose($fp);//关闭流,刷新所有的缓冲区
//输出
var_dump($myvar);//var_dump输出变量相关信息
if ($existed) {
stream_wrapper_restore("var");//恢复以前未注册的内置包装器,把自己修改的var抹去,复原成原本自带的
}
?>
以上例程会输出:
第1行
线2
第 3 行
字符串(18)“第 1 行
线2
第 3 行
"