Hot For Coding
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的区别
 * Nicholas Lee 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
/**
 * 自己修整的一个邮箱正则表达式
 * Nicholas Lee 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

jQuery使用场景

jQuery自从发布至今,已获得百万站点的市场份额,在没有jQuery之前,其实没有一个类似jQuery这个量级的插件来简化开发成本,其实没有jQuery之前jQuery能帮你干的那些事你都得自己取实现,好一点的开发团队或许已经在长期的开发过程中提炼除了自己的函数库

选择器

不得不承认,jQuery发明了一套非常易用的选择器,凭借优秀的选择器可以快速的选择Element

浏览器兼容性

那么jQuery最大的特性,其实就是降低开发成本,目前浏览器之前仍然还没有统一标准,只能自己写代码兼容各个浏览器,其实这些工作可以服用量的

简化Ajax请求

$.get$.post确实是太方便了,如果要写一个原生的Ajax请求,那是非常繁琐的

...

READ ALL

DOM与jQuery对象相互转换

jQuery已经被许多站点引用,并且官方正在致力开发jQuery2.0版本。在实际中,我们可能会有这样的需求,如使用jQuery获取DOM对象,然后转换到JavaScript对象使用。或者JavaScript获取的DOM对象转到jQuery对象使用。其实实现JavaScript与jQuery对象互转是非常容易的。

DOM对象转到jQuery对象

// Nicholas Lee www.qttc.net

// 获取DOM对象
var obj = document.getElementById('id');

// 把DOM对象转换到jQuery对象
var $obj = $(obj);

...

READ ALL

Go里字符串与数字互相转换

Go里的字符串与数字互相转换主要使用strconv

数字转字符串

package main

import "strconv"

func main () {
  s := strconv.Itoa(-32)
}

字符串转数字

假定要转换为int类型

package main

import "strconv"

func main () {
  i, err := strconv.Atoi("-32")

  if err != nil {
    ...
  }
}

当然,也要注意长度,其中有一句话

The parse functions return the widest type (float64, int64, and uint64), but if the size argument specifies a narrower width the result can be > converted to that narrower type without data loss:

...

READ ALL

查看SELinux状态及关闭

检测状态

检测状态可以使用sestatusgetenforce两个命令

[root@test01 ~]# sestatus -v 
SELinux status:                 disabled
[root@test01 ~]# getenforce
Disabled
  • enabled 开启
  • disabled 关闭

关闭SELinux

临时关闭,不重启机器

[root@test01 ~]# setenforce 0 

永久关闭

vi /etc/selinux/config

...

READ ALL

MySQL字符集UTF8与GBK之间如何选择

字符集是一套文字符号、编码、比较规则的集合。对数据库来说,字符集更加重要,因为数据库存储的数据几乎都是各种文字,字符集对数据库的存储、处理性能,以及日后系统的移植都有影响。

MySQL中支持几十种字符集,在这些字符集之间我们应该如何选择合适的字符集呢?做为国内用户来讲,基本都在UTF8与GBK之间徘徊。

UTF8

UTF8是Unicode字符集,是UTF16改良版本,1至4字节编码规范,国际流行通用使用此编码,如果你的网站是多国语言就首选这个字符集。

GBK

这个应该是国内站长最熟悉的编码之一了,是汉字编码GB2312的扩充,目前GB2312已经废弃全部采用GBK方式。GBK属于双字节编码。如果数据库大量存储的是中文,性能要求高,就应该选择GBK编码方式。因为如果存储汉字的话,GBK比UTF8所占空间要小,GBK每个汉字只占用2个字节,UTF8汉字编码需要3个字节,所以PHP中截取或计算中英混合或者全中文字符串长度的时候比较麻烦就是因为编码原因导致。汉字内容采用GBK编码这样不仅占空间小,还可以减少磁盘I/O,数据库cache,以及网络传输时间(现在可忽略不计)从而提高性能。

...

READ ALL

MySQL存储引擎MyISAM与InnoDB如何选择?

虽然MySQL里的存储引擎不只是MyISAM与InnoDB这两个,但常用的就是它俩了。可能有站长并未注意过MySQL的存储引擎,其实存储引擎也是数据库设计里的一大重要点,那么博客系统应该使用哪种存储引擎呢?下面我们分别来看两种存储引擎的区别。

  • InnoDB支持事务,MyISAM不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了
  • MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及设计到安全性就高的应用
  • InnoDB支持外键,MyISAM不支持
  • MyISAM是默认引擎,InnoDB需要指定
  • InnoDB不支持FULLTEXT类型的索引
  • InnoDB中不保存表的行数,如select count(*) from table时,InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含where条件时MyISAM也需要扫描整个表
  • 对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引
  • 清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表
  • InnoDB支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like '%qttc%'

...

READ ALL

JavaScript中isNaN判断非数字

isNaN的全称是Not-a-Number,意思就是:不是一个数字

使用也简单,只需要传入一个值,返回true/false,看看这个例子

语法

isNaN(value)

isNaN(123) //false
isNaN(-1.23) //false
isNaN(5-2) //false
isNaN(0) //false
isNaN('123') //false
isNaN('Hello') //true
isNaN('2005/12/12') //true
isNaN('') //false
isNaN(true) //false
isNaN(undefined) //true
isNaN('NaN') //true
isNaN(NaN) //true
isNaN(0 / 0) //true

...

READ ALL

1 2 3 4