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
file_put_contents以及file_get_contents的用法与在使用过程中遇到的问题(PHP学习)的更多相关文章
- 关于void*类型的用法(相当于OC中的id类型)
关于void*类型的用法(相当于OC中的id类型) 1.C++语言在对于void* 类型的使用很特别,因为void* 可以间接引用任何其他数据类型的指针,比如int*.float*甚至抽象数据类型的指 ...
- vue第四单元(初识vue-在页面中直接引入vue框架-学习使用vue语法-vue的指令-介绍data用法-methods用法)
第四单元(初识vue-在页面中直接引入vue框架-学习使用vue语法-vue的指令-介绍data用法-methods用法) #课程目标 了解 vue 框架的特点 掌握创建 vue 实例 掌握 data ...
- select into from 和 insert into select 的区别和用法及 SQL SELECT INTO 中Undeclared variable错误解决办法
今天试了一下数据表中的数据备份到另一个空的数据表,然后使用了SQL SELECT INTO语句,然后提示Undeclared variable......错误,现在在这里做下总结并给出解决办法. 应用 ...
- 【摘抄】meta系列用法总结【持续更新中】
meta标签分两大部分:HTTP标题信息(HTTP-EQUIV)和页面描述信息(NAME). ★页面描述信息NAME变量 name是描述网页的,对应于Content(网页内容),以便于搜索引擎机器人 ...
- Android--Handler的用法:在子线程中更新界面
本文主要介绍Android的Handler的用法.Handler能够发送Messsage和Runnable对象到与其相关联的线程的消息队列. 每一个Handler对象与创建它的线程相关联.而且每一个H ...
- ES6-Symbol的用法 ,symbol在对象中的应用,改变值
ES6-Symbol的用法,,symbol在对象中的应用,改变值 let a = new String; let b = new Number; let c = new Boolean; let d ...
- sass用法总结(持续更新中)
官网:https://www.sass.hk/ 1,嵌套规则 1.1普通嵌套:Sass 允许将一套 CSS 样式嵌套进另一套样式中,内层的样式将它外层的选择器作为父选择器 1.2父选择器 &: ...
- textContent、innerText的用法,在文档中插入纯文本
有时候需要查询纯文本形式的元素内容,或者在文档中插入纯文本.标准的方法是用Node的textContent属性来实现: var para = document.getElementsByTagName ...
- (转载)MySQL LIKE 用法:搜索匹配字段中的指定内容
(转载)http://www.5idev.com/p-php_mysql_like.shtml MySQL LIKE 语法 LIKE 运算符用于 WHERE 表达式中,以搜索匹配字段中的指定内容,语法 ...
随机推荐
- autofac.webapi2
quick start https://autofaccn.readthedocs.io/en/latest/integration/webapi.html#quick-start To get Au ...
- forever让nodejs后台运行
nodejs一般是当成一条用户命令执行的,当用户断开客户连接,运用也就停了,很烦人.如何让nodejs应用当成服务,在后台执行呢? 最简单的办法: $ nohup node app.js 但是,for ...
- javascript日期格式处理
一. 服务端返回的日期和时间之间有T Asp.net MVC中 action返回前台的日期类型数据 是带有 T的,如: 2015-07-07T10:15:01. 这样的数据在Chrome浏览器,会自动 ...
- HTML5 地理定位 【来自百度应用分享平台】
百度给的地图API接口相当完善,复制过来一下,以后备用 基本使用方法: <!--引入百度地图API--> <scriptsrc="http://api.map.baidu. ...
- python 实现简单点名程序
程序会遍历文件所有姓名,遍历完之前不会有重复值,遍历所有后将提示推出. #-*-coding:utf-8-*-#author:wangxing #点名程序 import randomimport os ...
- 复制文件夹的方法 .net
void CopyDirectory(string SourcePath,string DestinationPath) { //创建所有目录 foreach(string dirPath inDir ...
- 如何批量更改linux文件的内容
在工作当中,我们往往需要修改某个文件夹下面所有文件的内容,例如把里面的日期统一替换成新的日期,或者把某一串字符替换成另外一串字符,这时我们就可以使用sed命令: sed -i "s/olds ...
- https://www.adminsub.net/tcp-udp-port-finder/14000 ——查找tcp端口对应的服务 可以看某些端口是否让恶意软件开启
效果: TCP/UDP Port FinderPort number or name:Enter port number (e.g. 21), service (e.g. ssh, ftp) or t ...
- fastjson缺陷--map转换json时出现$ref的情况
DisableCircularReferenceDetect来禁止循环引用检测: JSON.toJSONString(..., SerializerFeature.DisableCircularRef ...
- canvas压缩图片成base64,传到后台解码需要注意的问题
去除压缩完后的头部标志,data:imge一直到,位置,然后看看有没有空格,有的就替换成+号,传送的时候+号被http协议去掉了