• php操作服务器中json文件 进行读写操作用ajax交互


    因为不打算使用数据库,所以使用了json进行数据存储
    有很多基础的东西需要注意
    逻辑是html通过ajax提交数据给php,php收到新数据后打开服务器的sql.json文件,json文件内容为

    [{"name":1,"where":1},{"name":3,"where":3}]
    
    • 1

    php读取整个json文件后在最后的]位置写入新获取到的数据,这里用到了php中fwrite函数,首先php打开json文件

    $file = 'sql.json';
    $fp1 = @fopen($file,'rb+');
    
    • 1
    • 2

    注意是要用rb+模式,进行读写
    使用fseek($fp1, 0, SEEK_END);移动到最后一位
    获取当前位置,存进变量$zishu

    $zishu=ftell($fp1);
    
    • 1

    移动位置到倒数第二位

    fseek($fp1,$zishu-1);
    
    • 1

    现在就移动到了

    [{"name":1,"where":1},{"name":3,"where":3}]
    
    • 1

    中的]位置
    然后使用fwrite写进新的内容就可以了。
    fwrite是分段谢json格式的
    注意字母类型的数据需要加" "号
    {“name”:“z”,“where”:“z”}

    fwrite($fp1,',{"name":"');//把123替换文件前三个字节
    fwrite($fp1,$user);//把123替换文件前三个字节
    fwrite($fp1,'","where":"');//把123替换文件前三个字节
    fwrite($fp1,$where);//把123替换文件前三个字节
    fwrite($fp1,'"}]');//把123替换文件前三个字节
    fclose($fp1);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    {“name”:3,“where”:3}
    下面是参考文章
    PHP file() 函数
    ajax发送json到php,使用ajax将JSON发送到PHP
    json标准格式举例_json几个小例子
    PHP基础与Ajax网络请求教程_尚学堂PHP零基础入门到精通_学好AJA
    PHP fseek 文件系统函数
    PHP fseek( )实例讲解
    php fseek函数,php fseek函数怎么用
    PHP fgets() 函数
    php怎么删除txt里指定行
    php怎么删除txt里指定行
    php如何删除文本文件内容
    PHP 写入文件
    几个小例子

    
    $file = fopen("1.txt","rb+");
    
    // 输出当前位置
    
    echo ftell($file);
    echo "。。。";
    //输出读取一行内容(这里只有一行)
    echo fgets($file);
    echo "。。。";
    
    // 改变当前位置
    
    #fseek($file,"12");
    //改变到最后位置
    fseek($file, 0, SEEK_END);
    
    
    
    echo "。。。";
    // 再次输出当前位置
    echo ftell($file);
    //将当前位置保存到变量
    $zishu=ftell($file);
    //移动光标到最后一位减一的地
    fseek($file,$zishu-1);
    fwrite($file,"r");
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    小李子

    
     <?php 
    
    
    
    
    $file = 'sql.json';
    $fp1 = @fopen($file,'rb+');//r+指针在文件头部,改成a表示文件指针在文件末尾
    
    echo ftell($fp1);
    echo "。。。";
    //输出读取一行内容(这里只有一行)
    echo fgets($fp1);
    echo "。。。";
    
    // 改变当前位置
    
    
    //改变到最后位置
    fseek($fp1, 0, SEEK_END);
    
    
    
    echo "。。。";
     //再次输出当前位置
    echo ftell($fp1);
    //将当前位置保存到变量
    $zishu=ftell($fp1);
    //移动光标到最后一位减一的地
    fseek($fp1,$zishu-1);
    
    fwrite($fp1,',{"name":');//把123替换文件前三个字节
    fwrite($fp1,"ff");//把123替换文件前三个字节
    fwrite($fp1,',"where":');//把123替换文件前三个字节
    fwrite($fp1,"kl");//把123替换文件前三个字节
    fwrite($fp1,'}]');//把123替换文件前三个字节
    fclose($fp1);
    echo $user,$where;
    
     ?>
     
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    1.txt

    [{"name":3,"where":3},{"name":3,"where":3},{"name":3,"where":3},{"name":44,"where":4},{"name":1,"where":1},{"name":1,"where":1}]
    
    • 1

    下面是完整代码
    html

      
    DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    <html>  
    <head>  
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
    
    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">script>
    <title>ServletJsontitle>  
     
    
    script>
    <style>
    
    
    body {
    	background-color:#a9e3ee;
    }
    style>
    <head runat="server">
         <title>title>
         <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js" type="text/javascript">script>
         <script type="text/javascript">
         $.ajax({
                    url: "sql.json",//同文件夹下的json文件路径
                    type: "GET",//请求方式为get
                    dataType: "json", //返回数据格式为json
                    success: function (data) {//请求成功完成后要执行的方法 
                        //data.push(cc);
                        
                        console.log(data);
                        
    
                    }
                    })
                    
             var sz=[];
             function zs(){     
                var na=$("#name").val();
                var wh=$("#where").val();
                sz.push({name:na,where:wh});
                $.ajax({
                    url: "sql.json",//同文件夹下的json文件路径
                    type: "GET",//请求方式为get
                    dataType: "json", //返回数据格式为json
                    success: function (data) {//请求成功完成后要执行的方法 
                        //data.push(cc);
                        sz.push(data);
                        console.log(sz);
                        
    
                    }
                    })
               } 
       
                
                function tj(){
                var na=$("#name").val();
                var wh=$("#where").val();
                var dataString = JSON.stringify(sz);
                console.log(dataString);
                 $.ajax({
                type: "post",      //get or post  个人感觉post安全很多
                url: "c.php",   // 目的url
                dataType: "json",  //数据类型  可以有很多种
                //data: {s:dataString},   //传输的数据  在验证文件接受
                data:{name:na,where:wh},
                success: function(res){   //请求成功后的回调函数
                    console.log(res);
                }
            });
    }
                
         script>
     head>
     <body>
        <form method="post" action="">
            <div>物品名称
         <input type="text" id="name" name="name" />
         放在哪里
          <input type="text" id="where" >
         <input type="submit" id="button"  value="form" />
         
         div>
          
        form>
         <button type="button" onclick="tj()">ajaxbutton>
         <button type="button" onclick="zs()">zsbutton>
     body>
     html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89

    下面是php

    
     <?php 
    
    #header('Content-type:text/json;charset=utf-8');
      #file_put_contents('sql.json', "cc")
    
    
    #$c=array();
    
    $user = $_POST['name'];
    $where =$_POST['where'];
    
    
    
    
    $file = 'sql.json';
    $fp1 = @fopen($file,'rb+');//r+指针在文件头部,改成a表示文件指针在文件末尾
    
    echo ftell($fp1);
    echo "。。。";
    //输出读取一行内容(这里只有一行)
    echo fgets($fp1);
    echo "。。。";
    
    // 改变当前位置
    
    
    //改变到最后位置
    fseek($fp1, 0, SEEK_END);
    
    
    
    echo "。。。";
     //再次输出当前位置
    echo ftell($fp1);
    //将当前位置保存到变量
    $zishu=ftell($fp1);
    //移动光标到最后一位减一的地
    fseek($fp1,$zishu-1);
    
    fwrite($fp1,',{"name":');//把123替换文件前三个字节
    fwrite($fp1,$user);//把123替换文件前三个字节
    fwrite($fp1,',"where":');//把123替换文件前三个字节
    fwrite($fp1,$where);//把123替换文件前三个字节
    fwrite($fp1,'}]');//把123替换文件前三个字节
    fclose($fp1);
    echo $user,$where;
    
     ?>
     
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
  • 相关阅读:
    前端菜鸡学习日记 -- computed和watch的用法
    点的数量对迭代次数的影响
    科大讯飞--C++开发工程师一面
    线程安全案例 --- 阻塞队列
    AUTOSAR汽车电子嵌入式编程精讲300篇-车载网络 CAN 总线报文异常检测
    LeetCode50天刷题计划(Day 39 —恰好移动 k 步到达某一位置的方法数目(8.00-8.50)
    当遇到修复错误0xc000000e时,你的电脑需要修复。如何在Windows 11/10上修复此错误
    百度Apollo自定义安装第三方库(以libtorch为例)
    【算法挨揍日记】day13—— DP34 【模板】前缀和、DP35 【模板】二维前缀和
    事实表的分类
  • 原文地址:https://blog.csdn.net/weixin_40938312/article/details/127561420