file_put_contents以及file_get_contents的用法与在使用过程中遇到的问题(PHP学习)
对数据的操作最基本的是增删改查,file_put_contents以及file_get_contents是对文件里的数据进行存入与取出。
先上代码:
<?php $str = 'hello world' ; if ( file_put_contents ( '01.txt' , $str )){ echo '数据存入成功' , '<br />' ; } else { echo '数据存入失败' , '<br />' ; } //返回的是:数据存入成功 //原来相应的目录下是没有这个文件的 //现在有这个文件了 //从这里可以看出,如果没有这个文件的话 //调用file_put_contents方法会自动创建这样的一个文件 //然后把数据存入 echo file_get_contents ( '01.txt' ), '<br />' ; //返回hello world //把这个文件里的数值读出来 //如果file_get_contents是要读一个不存在的文件 //那么会报错,要读的文件一定要存在的 if ( file_put_contents ( '01.txt' , 'new data to be insert' )){ echo '数据存入成功2' , '<br />' ; } else { echo '数据存入失败2' , '<br />' ; } echo file_get_contents ( '01.txt' ), '<br />' ; //返回new data to be insert //说明用file_put_contents方法只能对数据进行替换 //而不能在原来的基础上进行添加 ?> |
在用户登录或者查询数据等时候有些时候可能会有引号等对sql语句有影响的符号(sql注入攻击),这样等对他们进行数据库里的操作的时候会有影响,
这种情况应该怎么办呢?
答:可以用addslashes 和 stripslashes
addslashes是可以使单引号(,),双引号("),反斜线(\)与NULL(NULL字符)加上反斜线进行转义
stripslashes是与addslashes相对的一个方法,是把这些转义过的,还原
如下代码:
<?php $str = 'abcdfjaslffdfa"jflsadj' ; if ( file_put_contents ( '01.txt' , $str )){ echo '数据存入成功' , '<br />' ; } else { echo '数据存入失败' , '<br />' ; } echo file_get_contents ( '01.txt' ), '<br />' ; //返回abcdfjaslffdfa"jflsadj $str = addslashes ( $str ); if ( file_put_contents ( '01.txt' , $str )){ echo '数据存入成功2' , '<br />' ; } else { echo '数据存入失败2' , '<br />' ; } echo file_get_contents ( '01.txt' ), '<br />' ; //返回 abcdfjaslffdfa\"jflsadj //经过转义 echo stripslashes ( file_get_contents ( '01.txt' )), '<br />' ; //返回abcdfjaslffdfa"jflsadj //对转义字符串进行还原 ?> |
这种情况很多都是在用户进行表单输入的时候,后台处理的时候用
有些PHP版本magic_quotes_gpc这个配置是有用的,即自动魔术引号,即如果这个配置开启的话,$_POST ,$_COOKIE,$_SESSION这些值会自动进行转义,就不需要我们来转义
这种情况下怎么办呢?
答:为了兼容性和移植性,我们要对他进行判断,
看如下代码:
<?php $textarea = $_POST [ 'textarea' ]; if (get_magic_quotes_gpc()){ echo '魔术引号以开启,$textarea不需要转义' , '<br />' ; } else { echo '魔术引号未开启,$textarea需要转义' , '<br />' ; $textarea = addslashes ( $textarea ); } ?> |
我们来看下面一个例子:
这是在网站里经常碰到的
先是一个form表单里填写数据,然后提交到php页面进行处理,然后对数据进行显示
form表单代码如下
< html > < head > </ head > < body > < form action="01.php" method="post"> < div > < label for="name">Text Input:</ label > < input type="text" name="name" id="name" value="" tabindex="1" /> </ div > < div > < label for="textarea">Textarea:</ label > < textarea cols="40" rows="8" name="textarea" id="textarea"></ textarea > </ div > < div > < input type="submit" value="Submit" /> </ div > </ form > </ body > </ html > |
php处理页面,即01.php代码如下:
<?php file_put_contents ( '01.txt' , $_POST [ 'textarea' ]); echo file_get_contents ( '01.txt' ), '<br />' ; ?> |
如果在form表单的textarea控件里面输入
<script type= "text/javascript" > while ( true ) { alert( 'a' ); }; </script> |
就会无限弹出a,,而更有甚至利用这个漏洞,执行一些操作,如document.cookie等等
这种行为叫做XSS攻击
什么叫做XSS攻击呢?这种情况又该怎么办呢?
答:XSS攻击:跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。
我们可以用htmlspecialchars方法,即html实体转义,即<>等这些html符号,都会被转化,那么当打印出来的时候,只会当他们是文字,而不是脚本了
<?php file_put_contents ( '01.txt' , htmlspecialchars( $_POST [ 'textarea' ])); echo file_get_contents ( '01.txt' ), '<br />' ; //返回<script type="text/javascript"> while (true) { alert('a'); }; </script> ?> |
与htmlspecialchars方法相对的是htmlspecialchars_decode
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析
· 重磅发布!DeepSeek 微调秘籍揭秘,一键解锁升级版全家桶,AI 玩家必备神器!