对数据的操作最基本的是增删改查,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学习)的更多相关文章

  1. 关于void*类型的用法(相当于OC中的id类型)

    关于void*类型的用法(相当于OC中的id类型) 1.C++语言在对于void* 类型的使用很特别,因为void* 可以间接引用任何其他数据类型的指针,比如int*.float*甚至抽象数据类型的指 ...

  2. vue第四单元(初识vue-在页面中直接引入vue框架-学习使用vue语法-vue的指令-介绍data用法-methods用法)

    第四单元(初识vue-在页面中直接引入vue框架-学习使用vue语法-vue的指令-介绍data用法-methods用法) #课程目标 了解 vue 框架的特点 掌握创建 vue 实例 掌握 data ...

  3. select into from 和 insert into select 的区别和用法及 SQL SELECT INTO 中Undeclared variable错误解决办法

    今天试了一下数据表中的数据备份到另一个空的数据表,然后使用了SQL SELECT INTO语句,然后提示Undeclared variable......错误,现在在这里做下总结并给出解决办法. 应用 ...

  4. 【摘抄】meta系列用法总结【持续更新中】

    meta标签分两大部分:HTTP标题信息(HTTP-EQUIV)和页面描述信息(NAME). ★页面描述信息NAME变量  name是描述网页的,对应于Content(网页内容),以便于搜索引擎机器人 ...

  5. Android--Handler的用法:在子线程中更新界面

    本文主要介绍Android的Handler的用法.Handler能够发送Messsage和Runnable对象到与其相关联的线程的消息队列. 每一个Handler对象与创建它的线程相关联.而且每一个H ...

  6. ES6-Symbol的用法 ,symbol在对象中的应用,改变值

    ES6-Symbol的用法,,symbol在对象中的应用,改变值 let a = new String; let b = new Number; let c = new Boolean; let d ...

  7. sass用法总结(持续更新中)

    官网:https://www.sass.hk/ 1,嵌套规则 1.1普通嵌套:Sass 允许将一套 CSS 样式嵌套进另一套样式中,内层的样式将它外层的选择器作为父选择器 1.2父选择器 &: ...

  8. textContent、innerText的用法,在文档中插入纯文本

    有时候需要查询纯文本形式的元素内容,或者在文档中插入纯文本.标准的方法是用Node的textContent属性来实现: var para = document.getElementsByTagName ...

  9. (转载)MySQL LIKE 用法:搜索匹配字段中的指定内容

    (转载)http://www.5idev.com/p-php_mysql_like.shtml MySQL LIKE 语法 LIKE 运算符用于 WHERE 表达式中,以搜索匹配字段中的指定内容,语法 ...

随机推荐

  1. MVC viewbag & viewdata

    弱类型:ViewData[""] 动态型:ViewBag dynamic ViewData 是字典型的(Dictionary),ViewBag 不再是字典的键值对结构,而是dyna ...

  2. Android中APK安装过程及原理解析

    [原文] 来自华为内部资料 应用安装是智能机的主要特点,即用户可以把各种应用(如游戏等)安装到手机上,并可以对其进行卸载等管理操作.APK是Android Package的缩写,即android安装包 ...

  3. ActiveMQ_01

    http://shhyuhan.iteye.com/blog/1278103http://www.cnblogs.com/blsong/archive/2012/09/26/2704337.htmlh ...

  4. 智课雅思词汇---二十四、形容词后缀-al-ial-ar-ary-ic-id-ish-ile-ine-oid-ory

    智课雅思词汇---二十四.形容词后缀-al-ial-ar-ary-ic-id-ish-ile-ine-oid-ory 一.总结 一句话总结: 1.形容词后缀-al? autumnal 英 [ɔː'tʌ ...

  5. C++轮子队-第三周(需求改进&原型设计)

    需求改进&原型设计 一.需求完善 (一)系统功能(补充) 图形界面(图片如下图所示:) 根据需求与组内讨论结果,现归纳图形界面方面需要的设计与相应功能: 数据-图形界面中间类: 数字方块类 N ...

  6. Agilent RF fundamentals (2)- fundamental units of RF

    1Amplitude AM调制 2 Frequency FM调制 3Phase Phase 调制 复合调制 三者关系:

  7. 关于vsftpd.conf配置

    vsftpd配置文件详解   转自http://yuanbin.blog.51cto.com/363003/108262/   1.默认配置: 1>允许匿名用户和本地用户登陆.      ano ...

  8. 在ubuntu14.4里编译UBOOT出错

    出错信息如下: OBJCOPY examples/standalone/hello_world.bin  LDS     u-boot.lds  LD      u-boot./scripts/dtc ...

  9. [置顶] 【机器学习PAI实践六】金融贷款发放预测

    一.背景 很多农民因为缺乏资金,在每年耕种前会向相关机构申请贷款来购买种地需要的物资,等丰收之后偿还.农业贷款发放问题是一个典型的数据挖掘问题.贷款发放人通过往年的数据,包括贷款人的年收入.种植的作物 ...

  10. SlowHTTPTest-慢速DoS攻击

    Slowhttptest是一个依赖于实际HTTP协议的Slow HTTP DoS攻击工具,它的设计原理是要求服务器所有请求被完全接收后再进行处理. SlowHTTPTest是一款对服务器进行慢攻击的测 ...