zoukankan      html  css  js  c++  java
  • 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

      

      

  • 相关阅读:
    node.js fs,http
    node.js global object,util and so on
    node.js second day
    node.js
    mysql 多个and的简写
    mysql 返回结果按照指定的id顺序返回
    php file_get_contents fopen 连接远程文件
    软考例题1
    Skyline中使用AxTE3DWindowEx打开新的一个球体
    使用AE进行点的坐标投影变换
  • 原文地址:https://www.cnblogs.com/ggbd-lie/p/3265421.html
Copyright © 2011-2022 走看看