Hot For Coding
  • Nginx设置proxy_cache缓存

    Nginx原先是没有proxy_cache功能的,貌似从0.8.x版本以后就加入了这个类似Squid缓存的功能,proxy_cache是吧URL当作Key,用md5编码哈希后保存在磁盘上,支持任意的URL,也支持非200状态码,如404/302等。这个功能已经可以取代Squid,特别是性能上,Nginx对多核CPU的利用就比Squid强很多。

    nginx.conf里的http块加入以下代码

    # proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
    proxy_temp_path   /tmp/proxy_temp_dir;
    # 设置名称为nginx_cache,内存缓存空间大小为500MB,30天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。
    proxy_cache_path  /tmp/proxy_cache_dir  levels=1:2   keys_zone=nginx_cache:200m inactive=3d max_size=30g;
    

    ...

    READ ALL

  • JavaScript写的一个石头剪子布游戏,大家进来玩玩吧!

    游戏通常都要做到以下两点

    • 电脑随机
    • 判断胜负

    首先是胜负算法,游戏规则

    • 石头 杀 剪子
    • 剪子 杀 抹布
    • 抹布 杀 石头
    • 石头 杀 剪子

    根据以上规则找出规律,写出算法即可。

    让电脑随机,这点比较容易,前面我有写过文章介绍,不明白的童鞋可以去看看。

    随机刷屏,其实这个效果不是游戏的关键性,但为了看起来更加互动,好玩,我就给加上了。这里用到了一个取模算法,根据余数去循环显示即可达到效果。

    完整代码

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8" />
        <title>JS写的石头剪子布游戏 - 琼台博客</title>
        <style type="text/css">
          div{margin:20px auto;padding:10px;border:2px solid #999;width:200px;background:#ffe;}
          div#cu{font-weight:bold;font-size:30px;height:40px;color:red;}
          div#la{border:none;background:none;display:none;}
          span{color:red;font-weight:bold;}
        </style>
        <script type="text/javascript">
            var se = null,time=20,you=0,arr=['石头','抹布','剪子'];
            function p(n){
              you = n;
              document.getElementById('you').innerHTML=s(n);
              document.getElementById('st').disabled=true;
              document.getElementById('mb').disabled=true;
              document.getElementById('jz').disabled=true;
              document.getElementById('cu').innerHTML = '...';
              se = setInterval('t()',50);
            }
            function agin(){
              document.getElementById('st').disabled=false;
              document.getElementById('mb').disabled=false;
              document.getElementById('jz').disabled=false;       
              document.getElementById('la').style.display = 'none';
              document.getElementById('you').innerHTML = '';      
              document.getElementById('pc').innerHTML = '';
              document.getElementById('cu').innerHTML = '';
              document.getElementById('you').innerHTML= '请选择';        
            }
            function bt(){
              var pc = Math.floor(Math.random() * 3 + 1);
              document.getElementById('pc').innerHTML = s(pc);
              var str='';
              if(pc==you){
                  str += '平局';    
              }else{
                var b = pc-you;
                if(b>0){
                  if(b==1){
                    str += '电脑赢';   
                  }else{
                    str += '你赢啦';   
                  }               
                }else{
                  b = b*-1;   
                  if(b==1){
                    str += '你赢啦';   
                  }else{
                    str += '电脑赢';   
                  }   
                }       
              }
              document.getElementById('la').style.display = 'block';
              document.getElementById('cu').innerHTML = str;
            }
            function t(){
              if(time>0){
                document.getElementById('pc').innerHTML = arr[time%3];
                time--;
              }else{
                clearInterval(se);
                se = null;
                time = 20;
                bt();
              }
            }
            function s(n){
              if(n==1){
                return '石头';    
              }else if(n==2){
                return '抹布';    
              }else{
                return '剪子';    
              }
            }
        </script>
      </head>
      <body>
        <div>
          <p>你出什么?<span id="you">请选择</span></p>
          <p><button id="st" onclick="p(1);">石头</button></p>
          <p><button id="mb" onclick="p(2);">抹布</button></p>
          <p><button id="jz" onclick="p(3);">剪子</button></p>
        </div>
        <div>
          <p>电脑出?</p>
          <span style="" id="pc"></span>
        </div>
        <div id="cu"></div>
        <div id="la"><button id="agin" onclick="agin()">再来一次</button></div>
        <div><p><a href="https://www.qttc.net" target="_blank">琼台博客 www.qttc.net</a></p></div>
      </body>
    </html> 
    

    ...

    READ ALL

  • JavaScript实现N到M的总和

    有这样一个需求,计算从N到M的总和,要实现这个需求并不困难,只是要看哪种方式更简洁,执行效率更快

    简单的for循环

    var sum = function (n, m) {
      var t = 0;
    
      for (;n <= m; n++) {
        t += n;
      }
    
      return t;
    }
    
    console.log(sum(1, 10)) // Output: 55
    

    while循环

    var sum = function (n, m) {
      var t = 0;
    
      while (n <= m) {
        t += n;
        n++;
      }
    
      return t;
    }
    
    console.log(sum(1, 10)) // Output: 55
    

    ...

    READ ALL

  • JavaScript统计GBK/UTF8字符串长度

    大家都知道,在JavaScript中字符串的长度不分中英文字符, 每一个字符都算一个长度,这跟PHP里的strlen()函数就不太一样。PHP里的strlen()函数根据字符集把GBK的中文每个2累加,把UTF-8的中文字符每个按3累加。

    var s = 'www.qttc.net'
    
    console.log(s.length) // Output: 12
    

    有些童鞋可能要问了,为什么要计算GBK/UTF8长度?

    主要是为了匹配数据库的长度范围内,比如GBK的数据库某字段是varchar(10),那么就相当于5个汉字长度,一个汉字等于两个字母长度。如果是UTF8的数据库则是每个汉字长度为3。

    ...

    READ ALL

  • 推荐大家一款jQuery插件jQuery UI

    这款插件是基于jQuery运行的,所以语法跟jQuery类似,这款插件集合了多种功能,如浮窗,日期选择等等,自己可以到官网看看都有哪些功能。

    下载地址

    http://jqueryui.com/download/jquery-ui-1.8.21.custom.zip

    下载后得到以下文件夹

    full

    我们需要js与css文件夹里的内容,把它拷贝到桌面jquery ui文件夹内,并新建一个demo.html

    full

    ...

    READ ALL

  • 微软发布IE6使用统计,中国IE6用户占全球最高

    full

    十年前,IE6问世,曾经辉煌。但近几年,每一个写CSS的前端都把IE6给骂臭了,它已经沦落为最垃圾的浏览器,当然,好多非开发的人都不知道自己在使用的是浏览器,而且这个浏览器叫IE6,也就除了Web开发对它比较敏感。

    微软发布了一个网站统计全球IE6使用概况,中国的IE6用户居然高达百分之二十四。

    地址 www.ie6countdown.com

    ...

    READ ALL

  • 个人博客几点优化

    虽然小站不大,但对于博客站点的优化却是自己的个人经验积累,希望对那些有需要的博主们有所帮助,这里所指的个人博客是指类似我这样小型的,大型博客我就不说了,你懂的。

    分清主次功能

    不少个人博客站做的非常绚丽多彩,功能N多,这一点的确有点吸引人。但无论功能,或者华丽的界面对于个人博客站来说,意义不大。功能太多会影响页面的加载速度,留下一些实用的功能即可,同样界面越是绚丽,图片与样式就越多,目前还是简约的博客占上风。

    因此在给自己的站点添加功能的时候,不仅只是想着添加功能的好处,同时也要兼顾站点的运行速度,别到最后把站点整的跟综合站点那就跑题了。

    ...

    READ ALL

  • PHP中exec与shell_exec函数区别

    这两个函数都是可以执行Linux命令函数,不同的是获取返回结果不一样,exec只能获取最后一行数据,shell_exec则可以获取全部数据。

    假如脚本路径下有如下文件

    -bash-4.1# ll
    总用量 12
    -rw-rw-r--. 1 www web 133  7月 16 15:00 a.php
    -rw-r--r--. 1 lee web  59  2月 29 17:05 b.php
    -rw-r--r--. 1 lee web  81  3月  8 17:00 c.php
    

    exec例子

    <?php
    /**
     * exec与shell_exec的区别
     * 琼台博客 www.qttc.net
     */
    $data = exec('/bin/ls -l');
    print_r($data);
    ?>
    

    ...

    READ ALL

  • 如何使用vim

    前面我已说过vim是编辑利器,许多程序员必掌握的编辑器之一。但对于新手来说,开始很难接受vim的命令模式,所以本文以简单引导vim的操作方法介绍vim的几种使用方法。Win平台的gVim或者Linux的vi均可

    在vim里命令区分大小写,注意了

    插入字符

    打开文件,按i,然后输入字符

    复制行

    打开文件,在需要复制的行处按yy,然后按p键即可实现粘贴。

    移动光标

    打开文件

    • h
    • l
    • j
    • k

    剪切删除行

    打开文件,把光标定在需要删除的行,然后按dd即可实现删除,在按p即可实现粘贴,其实就是剪切作用,只是剪切后你不粘贴就可以当作删除使用

    ...

    READ ALL

  • 一个PHP邮箱正则验证方法

    几乎学习程序的童鞋,开始最怕的就莫过于正则表达式了,简单的还好,复杂的简直让你头疼。网上一堆邮箱正则表达式,但通过验证发现都有一些小bug,这个邮箱正则是根据目前域名命名规则以及长度写出的。

    • 不做总长度判断,长度判断可以自己加上
    • 支持.net.cn.com.cn这样的域名后缀
    • 邮箱名部分以字母或者数字开头,中间可以有-_符号
    • 域名部分以字母或者数字开头,中间可以有-_符号
    <?php
    /**
     * 自己修整的一个邮箱正则表达式
     * 琼台博客 www.qttc.net
     */
    
    function c_email($email){
      $reg='/^([a-zA-Z0-9]{1,20})(([\_\-\.])?([a-zA-Z0-9]{1,20}))*@([a-zA-Z0-9]{1,20})(([\-\_])?([a-zA-Z0-9]{1,20}))*(\.[a-z]{2,4}){1,2}$/';
      if(preg_match($reg,$email))
        return true;    
      return false;
    }
    
    $email = 'hi@example.com';
    $check_result = c_email($email);
    if($check_result){
      echo 'Success';
    }else{
      echo 'Error';
    }
    
    // Output: Success
    

    ...

    READ ALL