• PHP函数date与time使用

    time()在PHP中是得到一个数字,这个数字表示从1970-01-01到现在共走了多少秒,这样方便做一些时间计算

    要找出前一天的时间就是

    // 琼台博客 www.qttc.net
    
    echo time() - 60 * 60 * 24;
    

    要找出前一年的时间就是

    // 琼台博客 www.qttc.net
    
    echo time() * 60 * 60 * 24 * 365;
    

    那么如何把这个数字换成日期格式呢,就要用到date函数了

    // 琼台博客 www.qttc.net
    
    $t = time();
    echo date("Y-m-d H:i:s", $t);
    

    ...

    READ ALL

  • PHP header函数

    作用

    PHP只是以HTTP协议将HTML文档的标头送到浏览器,告诉浏览器具体怎么处理这个页面,至于传送的内容则需要熟悉一下HTTP协议了,与PHP无关了,可参照

    http://www.w3.org/Protocols/rfc2616/rfc2616

    传统的标头一定包含下面三种标头之一,并只能出现一次。

    Location: xxxx:yyyy/zzzz
    Content-Type: xxxx/yyyy
    Status: nnn xxxxxx
    

    用法

    header(string,replace,http_response_code)

    ...

    READ ALL

  • PHP循环函数foreach与while性能比较

    foreach是对数组副本进行操作(通过拷贝数组),而while则通过移动数组内部指标进行操作,一般逻辑下认为,while应该比foreach快(因为foreach在开始执行的时候首先把数组复制进去,而while直接移动内部指标。),但结果刚刚相反。

    • 在循环里进行的是数组reading操作,foreach比while快
    • 在循环里进行的是数组writing操作,while比foreach快
    /**
     * while跟foreach函数性能比较
     * 琼台博客 www.qttc.net
     */
     
    // foreach 函数
    foreach ($array as $key => $value) {
      echo $array[$key] = $value . '...';
    }
     
    // while 函数
    while (list($key) = each($array)) {
      $array[$key] = $array[$key] . '...';
    }
    

    ...

    READ ALL

  • 通过WEB服务器来实现PHP多线程功能

    当然,对多线程有深入理解的人都知道通过WEB服务器实现的多线程只能模仿多线程的一些效果,并不是真正意义上的多线程。

    但不管怎么样,它还是能满足我们的一些需要的,在需要类似多线程的功能方面还是可以采用这个类。

    实例代码

    /**
     *  琼台博客 www.qttc.net
     *
     *  PHP多线程应用使用方法:
     *  require_once 'thread.class.php';
     *  $thread = new thread();
     *  $thread->addthread('action_log','a');
     *  $thread->addthread('action_log','b');
     *  $thread->addthread('action_log','c');
     *  $thread->runthread();
     *
     *  function action_log($info) {
     *    $log = 'log/' . microtime() . '.log';
     *    $txt = $info . "\r\n\r\n" . 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "\r\n";
     *    $fp = fopen($log, 'w');
     *    fwrite($fp, $txt);
     *    fclose($fp);
     *  }
     */
     
    class thread {
     
      var $hooks = array();
      var $args = array();
    
      function thread() {
      }
    
      function addthread($func) {
        $args = array_slice(func_get_args(), 1);
        $this->hooks[] = $func;
        $this->args[] = $args;
        return true;
      }
    
      function runthread() {
        if (isset($_GET['flag'])) {
          $flag = intval($_GET['flag']);
        }
    
        if ($flag || $flag === 0) {
          call_user_func_array($this->hooks[$flag], $this->args[$flag]);
        } else {
          for ($i = 0, $size = count($this->hooks); $i < $size; $i++) {
            $fp=fsockopen($_SERVER['HTTP_HOST'],$_SERVER['SERVER_PORT']);
            if ($fp) {
              $out = "GET {$_SERVER['PHP_SELF']}?flag=$i HTTP/1.1\r\n";
              $out .= "Host: {$_SERVER['HTTP_HOST']}\r\n";
              $out .= "Connection: Close\r\n\r\n";
              fputs($fp,$out);
              fclose($fp);
            }
          }
        }
      }
    }
    

    ...

    READ ALL

  • PHP执行Linux命令函数

    目前,PHP环境几乎都搭载在Linux环境,有时候,我们需要PHP去执行Linux命令实现一些特殊功能。介绍以下5个PHP执行Linux函数。

    exec

    返回结果如下

    string exec ( string $command [, array &$output [, int &$return_var ]] )

    // 琼台博客 www.qttc.net
    
    echo exec("ls");
    
    Array
    (
    [0] => index.html
    [1] => 10.log
    [2] => 10.tar.gz
    [3] => aaa.tar.gz
    [4] => mytest
    [5] => test1101
    [6] => test1102
    )
    

    ...

    READ ALL

  • Nginx配置虚拟主机

    配置虚拟主机恐怕是许多服务器常用的方式,只需要一个IP就可以划分出多个站点,下面介绍在nginx下如何配置虚拟主机

    打开文件/etc/nginx/nginx.conf

    vim /etc/nginx/nginx.conf
    

    找到http,在里边加入以下代码

    server
    {
      listen       80;                        #端口,通常默认就好(必须)
      server_name  www.qttc.net qttc.net;     #域名,多个用空格隔开(必须)
      index index.html index.htm index.php;   #默认首页文档,多个可以增加(必须)
      root  /webs/www.qttc.net;               #虚拟主机目录(必须)
    
      #--自动在域名前补齐www(非必要) --#
      if ($host != 'www.qttc.net' ) {
        rewrite ^/(.*)$ https://www.qttc.net/$1 permanent;
      }
    
      #--为WordPress伪静态--(非必要)--#
      if (-f $request_filename/index.html) {
        rewrite (.*) $1/index.html break;
      }
    
      if (-f $request_filename/index.php){
        rewrite (.*) $1/index.php;
      }
    
      if (!-f $request_filename){
        rewrite (.*) /index.php;
      }
      #--WordPress伪静态结束--#
    
      #--PHP支持--如果你搭建的是PHP环境则此段要加--#
      location ~ .*\.(php|php5)?$
      {
        #fastcgi_pass  unix:/tmp/php-cgi.sock;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        include fcgi.conf;
      }
      #--PHP支持结束--#
    
      #--额外配置,如果线上运行最好去掉,如第一行代表开开检索(不安全)--#
      autoindex on;
      autoindex_exact_size off;
      autoindex_localtime on;
      #--额外配置--#
    
      #日志打开(最新版本格式)
      access_log  /webs/logs/access_qttc.log  logs;
    }
    

    ...

    READ ALL

  • 关于Nginx升级后提示日志格式错误的解决方法

    Nginx升级到1.1.1*版本后

    会出现如下警告

    nginx: [warn] the "log_format" directive may be used only on "http" level in /etc/nginx/nginx.conf:84
    

    主要是Nginx新版本的日志声明代码位置发生了变化,原来旧版本中,需要在每一段虚拟主机server里写如下日志格式声明

    log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" $http_x_forwarded_for';
    

    ...

    READ ALL

  • Nginx支持shtml格式

    对于静态网站有公共头尾需要包含,又不想用动态语言编写的,那么shtml是最佳选择了。shtml可以包含指定文件到文档中如同PHP中的include功能类似。

    Nginx本身已经支持了shtml格式文件解析,但默认是不开启的,需要手动开启。

    打开Nginx配置文件nginx.conf,在http里加入以下三句话。

    ssi on;
    ssi_silent_errors on;
    ssi_types text/shtml;
    

    保存重启nginx即可

    nginx -s reload
    

    如果需要添加默认首页,可以在nginx.conf里找到Index选项,写成

    ...

    READ ALL

  • PHP获取客户端IP

    有时候我们需要获取客户端的IP去实现一些Web功能,比如天气预报就需要根据访客的IP去算出客户端的地理位置才能显示相应的信息

    在PHP中获取客户端的IP非常简单,主要根据$_SERVER['REMOTE_ADDR']或者$_SERVER['REMOTE_HOST']这几个变量获取

    以下代码是一个获取客户端IP的例子

    // 琼台博客 www.qttc.net
    
    function getClientIP() {
      $ipaddress = '';
      if (isset($_SERVER['HTTP_CLIENT_IP']))
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
      else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
      else if(isset($_SERVER['HTTP_X_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
      else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
      else if(isset($_SERVER['HTTP_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
      else if(isset($_SERVER['REMOTE_ADDR']))
        $ipaddress = $_SERVER['REMOTE_ADDR'];
      else
        $ipaddress = 'UNKNOWN';
      return $ipaddress;
    }
    

    ...

    READ ALL

  • MySQL常用命令

    连接

    mysql -h[host] -u[user] -p[pass]

    例如

    mysql -h127.0.0.1 -uroot -p123456
    

    修改密码

    mysqladmin -u[user] -p[old pass] password [new pass]

    例如

    mysqladmin -uroot -p123456 password 654321
    

    添加用户

    grant select on [db].* to [user]@[host] identified by "[pass]"

    ...

    READ ALL