zoukankan      html  css  js  c++  java
  • php后台操作以及一些减缓服务器压力的问题

    上次提到一个微信投票系统,做了一个微信重定向解决了,一个授权复用的问题,昨天投票系统正式投入使用;测试的时候没有问题,上线后出现了一点小问题,

      一:php页面参数接受和php中 switch 那个先执行?

        答案: 是switch先执行

      例:在index.php页面 

          header("location:/api/wx.php?action=putprofile&accessToken=".$accessToken."&openId=".$openId."&headImgUrl=".$headImgUrl."&nickName=".$nickName);

          实现跳转到wx.php页面里面带着几个参数 accessToken openId headImgUrl nickName  (php中字符链接符 是 "  .  " );

      下面我在wx.php页面进行接收

            

      $accessToken= $_GET["accessToken"];
      $openid= $_GET["openId"];
      $headimgurl= $_GET["headImgUrl"];
      $nickname = $_GET["nickName"];

      //接收参数

      switch($_GET['action']){

        case "initprofile":
          initprofile();
        break;
        case "getprofile";
          getprofile();
        break;
        case "putprofile";
          putprofile();
        break;
      }

      

      function putprofile($openid, $nickname, $headimgurl){
     
        // echo "<script>alert('$openid');</script>";
        // echo "<script>alert('$headimgurl');</script>";
        // echo "<script>alert('$nickname');</script>";
        //die("INSERT INTO v2016_member (mem_nickname, mem_photo, mem_openid, mem_regdate) VALUES({$nickname}, {$headimgurl},     {$$openid}, {$time}");
        // $user = db_exec_query("SELECT mem_id FROM v2016_member WHERE mem_openid = '{$openid}' LIMIT 1");
        $sql = "SELECT mem_id FROM v2016_member WHERE mem_openid = '{$openid}' LIMIT 1";
        $result = mysql_query($sql);
        if(!$row = mysql_fetch_assoc($result)){
          // echo "<script>alert('gengxin');</script>";
        $time = time();
        $ins_id = db_exec_update("INSERT INTO v2016_member (mem_nickname, mem_photo, mem_openid, mem_regdate) VALUES('{$nickname}',     '{$headimgurl}', '{$openid}', '{$time}'); ");
        }
        $user = db_exec_query("SELECT * FROM v2016_member WHERE mem_openid = '{$openid}' LIMIT 1");
        $info = array(
        'mem_id' => $user[0]['mem_id'],
        'mem_nickname' => json_decode($user[0]['mem_nickname']),
        'mem_photo' => $user[0]['mem_photo'],
        'mem_openid' => $user[0]['mem_openid'],
        );
        //修改php中session的默认时间
        // $lifeTime = 46 * 3600;
        // session_set_cookie_params($lifeTime);
        session_start();
        $_SESSION['user'] = $info;
        header("location:/band.php");
      }

      如上述代码所示,开始我以为在执行  putprofile()这个函数的时候 上面那四个参数已经拿到了呢,当时就是往数据库里插不进去,我在putprofile()alert 了一下那四个参数才知道原来在函数执行的时候还没执行

      $accessToken= $_GET["accessToken"];
      $openid= $_GET["openId"];
      $headimgurl= $_GET["headImgUrl"];
      $nickname = $_GET["nickName"];

      这些代码可把我坑坏了,后来把这些获取参数的代码放到了putprofile()里面才成功的把字段插入到了数据库里面,

      原因是:switch的比$_GET先执行

      二:SESSION的默认保存时间

        php中SESSION的默认保存时间是 1440秒 意思就是时间一过这个缓存就会被清掉

        可以手动去修改两种方法:

          1:去服务器配置php环境的一个ini的文件里找到 session.gc_maxlifetime 改成你想要的数值就可以了,建议不要改的太长,以免造成服务器内存饱满,响应过慢或者直接瘫痪

           2:代码实现:

            // $lifeTime = 46 * 3600;
            // session_set_cookie_params($lifeTime); 

      三:服务器压力问题:

        这个问题很广很多情况下都会造成服务器压力过大,造成响应过慢,对于写代码的程序猿来说要做的就是把代码优化,至于怎么优化减轻服务器压力,太复杂就不多说了,可以自行百度;

       接下来说说我遇到的问题:

          1:我的数据库是操作是php MYSQL代码实现的;

          2: 多余的代码很多

          3:里面有比较多的 SELECT , update等一些操作,没有做到函数复用;

          4:服务器运行内存也比较小;

        在上述几个情况下,一开始代码没什么问题,后来随着用户越来越多,越来越多,我突然发现打开这个投票系统的响应时间变长了,我ping了一下看了一个速度

            

         发现这个IP的响应时间  最短 7ms 最长 13ms 平均8ms 这也太慢了,对于用户来说,体验太不好了,一直反映打开太慢

         后来我就检查我的代码

          发现里面有很多的SELECT , update等一些操作,并且多余的代码比较多,要知道本身MYSQL本身会占用较大虚拟内存,再加上数据库操作很耗内存,就造成了服务器压力比较大,响应时间变长的后果;

          所以在php页面中药尽量减少数据库的操作,同事对代码做良好的优化,不然就会造成服务器压力大,响应慢的结果。

        就这些吧,今天早上我7点跑到公司来维护代码,也是不容易啊!!

          快五一了,预祝快乐!!!!

          

            

        

        

          

  • 相关阅读:
    datetime函数和random.seed()函数的应用
    TP5 display()
    _STORAGE_WRITE_ERROR_
    nginx下基于ThinkPHP框架的网站url重写
    Thinkphp3.2版本Controller和Action的访问方法
    Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'
    如何将word公式粘贴到TinyMCE里面
    如何将word公式粘贴到eWebEditor里面
    如何将word公式粘贴到wangEditor里面
    如何将word公式粘贴到xhEditor里面
  • 原文地址:https://www.cnblogs.com/lijuntao/p/6762166.html
Copyright © 2011-2022 走看看