对数据的操作最基本的是增删改查,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. Java子类强制转父类类型不会变

    class  A{    void a(){        System.out.println("parent'a()");    }} class  AA extends A{ ...

  2. redis、kafka、rabittMQ对比 (转)

    本文不对三者之间的性能进行对比,只是从三者的特性上区分他们,并指出三者的不用应用场景. 1.publish/subscribe 发布订阅模式如下图所示可以具有多个生产者和发布者,redis.kafka ...

  3. Linux命令详解-cd

    Linux cd 命令可以说是Linux中最基本的命令语句,其他的命令语句要进行操作,都是建立在使用 cd 命令上的. 所以,学习Linux 常用命令,首先就要学好 cd 命令的使用方法技巧.     ...

  4. Selenium with Python 009 - WebDriver API

    官方API文档:https://seleniumhq.github.io/selenium/docs/api/py/api.html 更多详情,最好的学习方式可以查阅官方API文档或直接阅读源码,本文 ...

  5. Python 面向对象-------补充

    Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过 ...

  6. css中zoom:1以及z-index的作用

    一.CSS中zoom:1的作用在做IE6.IE7.IE8浏览器兼容的时候,经常会遇到一些问题,可以使用zoom:1来解决,有如下作用:1.触发IE浏览器的haslayout2.解决IE下的浮动,mar ...

  7. 服务器证书安装配置指南(IIS7.0)

    一.  生成证书请求 1.    进入IIS控制台   进入IIS控制台,并选择服务器的服务器证书设置选项.  2.    添加证书请求   进入服务器证书配置页面,并选择“创建证书申请”  3.   ...

  8. Xcode And iOS9新特性

    Xcode And iOS9 1. Xcode7 新特性 > 可直接在真机上运行自己的应用,只需要有苹果账号,无需购买苹果开发者账号. > 可设置在出现 EXC_BAD_ACCESS 错误 ...

  9. Vue: webpack js basic structure

    vue webpack所用基础包: nom install vue vue-loader webpack webpack-cli webpack-dev-server vue-template-com ...

  10. 【python】没有root权限的时候安装Python package

    下载相关位置的包 1.首先在git上下载对应的包: 搜索package github,找到地址.使用 git clone https://xxx.git 命令 2.使用python setup.py ...