Hot For Coding
  • PHP单例模式

    什么是单例

    首先我们要知道明确单例模式这个概念,那么什么是单例模式呢?单例模式顾名思义,就是只有一个实例。

    作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类我们称之为单例类。

    单例模式的要点有三个

    • 某个类只能有一个实例
    • 它必须自行创建这个实例
    • 它必须自行向整个系统提供这个实例

    单例有什么用

    下面我们讨论下为什么要使用PHP单例模式?

    多数人都是从单例模式的字面上的意思来理解它的用途, 认为这是对系统资源的节省, 可以避免重复实例化, 是一种"计划生育". 而PHP每次执行完页面都是会从内存中清理掉所有的资源。 因而PHP中的单例实际每次运行都是需要重新实例化的, 这样就失去了单例重复实例化的意义了。 单单从这个方面来说, PHP的单例的确有点让各位失望. 但是单例仅仅只有这个功能和应用吗? 答案是否定的,我们一起来看看。

    ...

    READ ALL

  • MySQL存储过程

    可以这么创建

    DROP PROCEDURE IF EXISTS text;
    CREATE PROCEDURE text()
      BEGIN
         #这里写过程语句
      END;
    

    比如,存储过程我需要查询一个表,可以这么写

    DROP PROCEDURE IF EXISTS text;
    CREATE PROCEDURE text()
      BEGIN
        SELECT * from users;
      END;
    

    你也可以查询多张表,如

    DROP PROCEDURE IF EXISTS text;
    CREATE PROCEDURE text()
      BEGIN
        SELECT * from table1;
        SELECT * from table2;
        SELECT * from table3;
      END;
    

    ...

    READ ALL

  • CentOS更改ssh端口禁止root登录

    修改端口

    ssh默认端口为22,把默认端口改成别的端口可以极大提升服务器的安全性

    vim /etc/ssh/ssh_config
    

    找到port,然后修改为

    port 7000
    

    重启sshd服务

    service sshd restart
    

    再次使用ssh登录的时候,需要使用7000端口了,而不是默认的22端口

    禁止root登录

    生产机器禁止root远程SSH登录,可以这么干

    vim /etc/ssh/sshd_config
    

    PermitRootLogin yes
    

    ...

    READ ALL

  • Nginx反向代理

    Nginx反向代理非常强大,先来看看一个图

                      +--- host --------> node.js on localhost:8080
                      |
    users --> nginx --|--- host/blog ---> node.js on localhost:8181
                      |
                      +--- host/mail ---> node.js on localhost:8282
    

    用户访问Nginx,再由Nginx转发给后端node.js服务,而后端的node.js服务可以无限水平扩展来解决后端流量过大的问题

    ...

    READ ALL

  • PHP清理Memcached过期缓存内容

    Memcached缓存可以很大的提升动态页面性能,特别是对于实时性要求不高的内容,但通常缓存都是要求又周期性的,否则新的内容就无法再次被缓存。所以通常缓存的内容都有一个时效性以便再次进行更新,这个看不同的业务场景分不同类型的数据进行设置时效性,有的每分钟,有的每一个小时,有的甚至上月

    我们经常会使用Memcached的存储过期功能,而实际上在过期后,Memcached并不能马上回收过期内容,这样会很快存满至配置限制,根据不同配置,Memcached会采用LRU算法删除缓存内容或使用时删除过期内容,而有时Memcached这样的释放内存的机制并不能满足所有应用,故我们在PHP基础上实现了统一删除过期内容的功能,适用于定时清理。

    ...

    READ ALL

  • CentOS查看内存信息和频率

    内存条数

    Linux查看内存的插槽数,已经使用多少插槽。每条内存多大,已使用内存多大可以使用以下命令

    [root@test01 ~]# dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range
            Size: 4096 MB
    

    上面的结果中,只看到一个4096 MB表示我只插了一条内存,大小是4G

    [root@test02 ~]# dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range
            Size: 4096 MB
            Size: 4096 MB
    

    ...

    READ ALL

  • PHP中memcached()函数使用

    PHP中提供两个函数可以访问memcached,一个是旧的memcache()和一个新的memcached(),两个函数都差不多,后者据说比前者有一些优化

    环境

    在使用memcached()函数之前,需要确认一下有没有配好环境

    phpinfo.php

    <?php
    // 琼台博客 www.qttc.net
    echo phpinfo();
    ?>
    

    假如你能在页面中看见memcached support关键字就表示你可以使用了,如果没看见那需要先把环境配置好

    使用

    使用特别简单,它是一个类,直接实例化既可以使用

    <?php
    // 琼台博客 www.qttc.net
    $mem_var = new Memcached();
    $mem_var->addServer("127.0.0.1", 11211);
    $response = $mem_var->get("qttc");
    if ($response) {
      echo $response;
    } else {
      echo "Hello";
      $mem_var->set("qttc", "Hello") or die(" Keys Couldn't be Created : qttc Not Found :'( ");
    }
    

    ...

    READ ALL

  • PHP中strtotime()函数使用

    这个函数的作用是传入一定文本格式的参数,返回一个时间戳,可以使用它来获取一个时间戳,比如获取前一天,前一个月,前一年等等。

    这个函数的使用场景非常多,比如查询一个月内的数据,查询一天内的数据。

    语法

    int strtotime ( string $time [, int $now = time() ] )

    参数

    例子

    // 琼台博客 www.qttc.net
    
    echo strtotime("now"), "\n";
    echo strtotime("10 September 2000"), "\n";
    echo strtotime("+1 day"), "\n";
    echo strtotime("+1 week"), "\n";
    echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
    echo strtotime("next Thursday"), "\n";
    echo strtotime("last Monday"), "\n";
    

    ...

    READ ALL

  • PHP中file_get_contents函数不能使用的解决方法

    有些主机服务商把PHP的allow_url_fopen选项是关闭了,就是没法直接使用file_get_contents来获取远程web页面的内容。那就是可以使用另外一个函数curl

    下面是file_get_contents和curl两个函数同样功能的不同写法

    file_contents

    // 琼台博客 www.qttc.net
    
    $file_contents = file_get_contents("https://www.qttc.net/");
    echo $file_contents;
    

    换成curl函数的使用示例

    ...

    READ ALL

  • HTML5新特性

    WebSocket

    HTML5开始支持WebSocket,在这之前只能通过长连接或者flash控件去做通讯,WebSocket使用的业务场景最多应该是聊天室了。

    格式

    var Socket = new WebSocket(url, [protocal] );

    // 琼台博客 www.qttc.net
    
    if ("WebSocket" in window)
    {
      alert("WebSocket is supported by your Browser!");
      
      // Let us open a web socket
      var ws = new WebSocket("ws://localhost:9998/echo");
    
      ws.onopen = function()
      {
        // Web Socket is connected, send data using send()
        ws.send("Message to send");
        alert("Message is sent...");
      };
    
      ws.onmessage = function (evt) 
      { 
        var received_msg = evt.data;
        alert("Message is received...");
      };
    
      ws.onclose = function()
      { 
        // websocket is closed.
        alert("Connection is closed..."); 
      };
    
      window.onbeforeunload = function(event) {
        socket.close();
      };
    }
    
    else
    {
      // The browser doesn't support WebSocket
      alert("WebSocket NOT supported by your Browser!");
    }
    

    ...

    READ ALL