Hot For Coding
PHP替换字符串函数strtr()

strtr(string,from,to)

逐个字符开始替换,以from跟to中长度较较短的一个为准,例如:

// Nicholas Lee www.qttc.net

echo strtr("aidenliu", "ai", "b");
// Output: bidenliu
// Nicholas Lee www.qttc.net

echo strtr("aidenliu", "a", "bc");
// Output: bidenliu

此函数是大小写敏感的,具如果发生多次替换,每一次替换的蓝本都是最原始的那个字符串,而不是在前一次替换的基础上替换,如

...

READ ALL

jQuery中使用Ajax

jQuery封好了许多直接可以使用的Ajax请求函数

GET请求

$.get()这个方法可以发起一个GET请求

// Nicholas Lee www.qttc.net

$.get('/api_by_get', ($res) => {
  console.log($res);
})

在回调中获取响应结果

POST请求

$.post()这个方法可以发起一个POST请求

// Nicholas Lee www.qttc.net

$.post'/api_by_post', "Hello world", ($res) => {
  console.log($res);
})

...

READ ALL

PHP数据库对象PDO简单使用

什么是PDO

PDO是PHP 5新加入的一个特性,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,什么 php_mysql.dll、php_pgsql.dll、php_mssql.dll、php_sqlite.dll等等扩展来连接MySQL、PostgreSQL、SQLite,同样的,我们必须借助 ADOdb、PEAR::DB、PHPlib::DB之类的数据库抽象类来帮助我们,无比烦琐和低效?PDO就是弥补这些缺陷的,做一个统一的DB层抽象处理

安装PDO

打开php.ini找到extension_dir配置它,比如

...

READ ALL

PHP函数date与time使用

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

要找出前一天的时间就是

// Nicholas Lee www.qttc.net

echo time() - 60 * 60 * 24;

要找出前一年的时间就是

// Nicholas Lee www.qttc.net

echo time() * 60 * 60 * 24 * 365;

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

// Nicholas Lee 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函数性能比较
 * Nicholas Lee 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服务器实现的多线程只能模仿多线程的一些效果,并不是真正意义上的多线程。

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

实例代码

/**
 *  Nicholas Lee 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 ]] )

// Nicholas Lee 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