写入函数怎么在PHP中使用

  介绍

写入函数怎么在PHP中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

下写入函数第二个参数数据的官网定义:

数据   要写入的数据。类型可以是,字符串,array 或者是,stream 资源(如上面所说的那样)。   ,   如果,data 指定为,stream 资源,这里,stream 中所保存的缓存数据将被写入到指定文件中,这种用法就相似于使用,stream_copy_to_stream(),函数。   ,   参数,data 可以是数组(但不能为多维数组),这就相当于,写入(文件名,美元,加入(& # 39;& # 39;,,数组)美元)。

可以看的到,数据参数可以是数组,会自动做<代码>加入(& # 39;& # 39;美元数组)转换为字符串的

<强>该函数访问文件时,遵循以下规则:

<李>

如果设置了FILE_USE_INCLUDE_PATH,那么将检查*文件名*副本的内置路径

<李>

如果文件不存在,将创建一个文件

<李>

打开文件

<李>

如果设置了LOCK_EX,那么将锁定文件

<李>

如果设置了FILE_APPEND,那么将移至文件末尾。否,则将会清除文件的内容

<李>

向文件中写入数据

<李>

关闭文件并对所有文件解锁

<李>

如果成功,该函数将返回写入文件中的字符数。如果失败,则返回错误的。

但我们字符串过滤函数一般是用preg_match函数来过滤的,如:

如果(preg_match (& # 39;/\ & lt;/& # 39;,元数据)){   ,死(& # 39;黑客# 39;);   }

我们知道,很多处理字符串的函数如果传入数组会出错返回零,如比较字符串,函数md5等,但preg_match函数出错返回假,这里我们可以通过<代码> var_dump (preg_match (& # 39;/\ & lt;/& # 39;,元数据));>

因此,猜测文件上传的代码是这样写的

& lt; ? php    ,   如果(收取($ _POST[& # 39;内容# 39;]),,,,收取($ _POST [& # 39; ext # 39;])) {=,美元data  $ _POST[& # 39;内容# 39;];=,美元ext  $ _POST [& # 39; ext # 39;];   ,   ,//var_dump (preg_match (& # 39;/\ & lt;/& # 39;,元数据));   ,如果(preg_match (& # 39;/\ & lt;/& # 39;,元数据)){   死才能(& # 39;黑客# 39;);   ,}   时间,filename 美元;=,();   ,用file_put_contents(文件名。ext美元,美元数据);   }   ,   ?在

于是我么可以传入<代码>内容[]=& lt; ?php phpinfo(); ?祝辞,ext=php代码这样来绕过

<强>修复方法

修复方法是使用写入文件函数来代替危险的写入函数,写入文件函数只能传入字符串,如果是数组会出错返回假

& lt; ? php    ,   如果(收取($ _POST[& # 39;内容# 39;]),,,,收取($ _POST [& # 39; ext # 39;])) {=,美元data  $ _POST[& # 39;内容# 39;];=,美元ext  $ _POST [& # 39; ext # 39;];   ,   ,//var_dump (preg_match (& # 39;/\ & lt;/& # 39;,元数据));   ,如果(preg_match (& # 39;/\ & lt;/& # 39;,元数据)){   死才能(& # 39;黑客# 39;);   ,}   时间,filename 美元;=,();   ,//写入(文件名。ext,美元,美元数据);   ,f 美元;=,fopen(文件名。ext美元);   f,美元,var_dump(写入文件(数据));   }   ,   ?在

关于写入函数怎么在PHP中使用问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

写入函数怎么在PHP中使用