zoukankan      html  css  js  c++  java
  • 解决内存溢出问题

    1.通过php.ini进行设置

      eg:ini_set('memory_limit,'128M');  //如果safe_mode开启的话是没有用的

    2.如果代码块中出现了大量的循环语句,使用过后的没有用的数据,应当及时unset掉

      eg:

      foreach ($ask_lists as $k_1 => $list)
      {
        $ask_img_set = array();
        foreach ($student_info as $k_2 => $info)
        {
          if($list->student_id == $info->student_id)
          {
            $ask_lists[$k_1] -> student_name = $info->student_name;
            $ask_lists[$k_1] -> student_nickname = $info->student_nickname;
          }
          unset($student_info[$k_2]);
        }
       //将提问的图片放置数组
        if(strlen($list->ask_img_1)>0): array_push($ask_img_set,$list->ask_img_1);
        if(strlen($list->ask_img_2)>0): array_push($ask_img_set,$list->ask_img_2);
        unset($ask_lists[$k_1]->ask_img_1);
        unset($ask_lists[$k_1]->ask_img_2);
      }

    3.大文件进行分片读写

      eg:

      public function testFilePutContent(Request $request)
      {
        header("content-type:text/html;charset=utf-8");
        $mp3_url = 'http://oflmvdj34.bkt.clouddn.com/20180325_9x2wesr2.mp3';
        $src_data = fopen("$mp3_url","r");
        $des_data = fopen("test.mp3","w");
        while($str = fread($src_data,4096)){
          fwrite($des_data,$str);
        }
        fclose($des_data);
        fclose($src_data);
        echo "写入完毕";
      }

    3.__destruct

    __destruct() 析构函数,是在垃圾对象被回收时执行。

    4.Session 与PHP垃圾回收机制

    由于PHP的工作机制,它并没有一个daemon线程来定期的扫描Session信息并判断其是否失效,当一个有效的请求发生时,PHP 会根据全局变量 session.gc_probability和session.gc_divisor的值,来决定是否启用一个GC, 在默认情况下,session.gc_probability=1, session.gc_divisor =100也就是说有1%的可能性启动GC(也就是说100个请求中只有一个gc会伴随100个中的某个请求而启动).

    PHP垃圾回收机制的工作就是扫描所有的Session信息,用当前时间减去session最后修改的时间,同session.gc_maxlifetime参数进行比较,如果生存时间超过gc_maxlifetime(默认24分钟),就将该session删除。 
    但是,如果你Web服务器有多个站点,多个站点时,GC处理session可能会出现意想不到的结果,原因就是:GC在工作时,并不会区分不同站点的session.

    那么这个时候怎么解决呢?

      1). 修改session.save_path,或使用session_save_path()让每个站点的session保存到一个专用目录, 
      2). 提供GC的启动率,自然,PHP垃圾回收机制的启动率提高,系统的性能也会相应减低,不推荐。 
      3). 在代码中判断当前session的生存时间,利用session_destroy()删除.

  • 相关阅读:
    JQuery帮助文档整理
    将table信息导出到excel
    jquery 选择器
    程序不小心出现死锁的解决方法
    兼容IE firefox 的全英文自动换行
    第三周2
    Jquery操作Select集锦
    Silverlight初学之:如果调用Silverlight项目中不同的控件
    【转载】很好的解决了asp.net页面ViewState过大的问题
    js得到url的各个部分【转】
  • 原文地址:https://www.cnblogs.com/soaring-sun/p/8675011.html
Copyright © 2011-2022 走看看