Debian设置mail发邮件功能命令

# 设置mail发邮件功能
# 安装msmtp

apt-get install -y msmtp

# 回到root用户默认目录root用户

cd

# 设置.msmtprc

cat > .msmtprc

粘贴以下内容:

tls on
tls_starttls on
tls_certcheck off
protocol smtp
auth on

host smtp.gmail.com
domain gmail.com
port 587

user yourname@gmail.com
password yourpassword
from yourname@gmail.com

# 设置.mailrc

cat > .mailrc

粘贴以下内容:

set sendmail=”/usr/bin/msmtp”

# 测试

echo -e “content” | mail -s “test” 1351010***@139.com

mysql表删除重复记录方法总结及效率对比

下面这些方法在我虚拟机上做的测试,内存384M,交换分区1024M, test共300W数据,重复记录3.5W,需求如题目所示,表结构如下:

CREATE DATABASE /*!32312 IF NOT EXISTS*/`test` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `test`;

/*Table structure for table `test` */

DROP TABLE IF EXISTS `test`;

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(20) DEFAULT NULL COMMENT '姓名',
  `age` tinyint(4) DEFAULT NULL COMMENT '年龄',
  `mate` tinyint(4) DEFAULT '1' COMMENT '有无配偶(1-有 0-无)',
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`),
  KEY `idx_age` (`age`)
) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

现有记录:

insert  into `test`(`id`,`name`,`age`,`mate`) values (2,'aaaaa',28,0),
(3,'bbbb',23,0),
(4,'cccc',25,1),
(5,'dddd',26,0),
(6,'eeee',24,0),
(7,'fffff',18,0),
(8,'eeee',40,1),
(9,'eeee',60,1);

想去掉name重名的记录,方法如下:
1.给name字段修改成唯一索引:

drop index idx_name on test;
alter table test add unique index (name);

这样当向表中添加相同记录的时候,会返回1062的添加失败信息。
但是有一种情况是表中已经有n个重复的记录,这时候我们才想起来要添加唯一索引,再执行上面的操作时,数据库会告诉你已经有重复的记录了,建立索引失败,这时候,我们可以用下面的操作:

alter ignore table test add unique idx_name (name);

它会删除重复的记录(别怕,会保留一条),然后建立唯一索引,高效而且人性化。 继续阅读mysql表删除重复记录方法总结及效率对比

Curl封闭类Curl.class.php

<?php
//curl类
class Curl
{
    function Curl(){
        return true;
    }
	
    function execute($method, $url, $fields='', $userAgent='', $httpHeaders='', $username='', $password=''){
        $ch = Curl::create();
        if(false === $ch){
            return false;
        }
        if(is_string($url) && strlen($url)){
            $ret = curl_setopt($ch, CURLOPT_URL, $url);
        }else{
            return false;
        }
        //是否显示头部信息
        curl_setopt($ch, CURLOPT_HEADER, false);
        //
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        if($username != ''){
            curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password);
        }
        $method = strtolower($method);
        if('post' == $method){
            curl_setopt($ch, CURLOPT_POST, true);
            if(is_array($fields)){
                $sets = array();
                foreach ($fields AS $key => $val){
                    $sets[] = $key . '=' . urlencode($val);
                }
                $fields = implode('&',$sets);
            }
            curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
        }else if('put' == $method){
            curl_setopt($ch, CURLOPT_PUT, true);
        }
        //curl_setopt($ch, CURLOPT_PROGRESS, true);
        //curl_setopt($ch, CURLOPT_VERBOSE, true);
        //curl_setopt($ch, CURLOPT_MUTE, false);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);//设置curl超时秒数
        if(strlen($userAgent)){
            curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
        }
        if(is_array($httpHeaders)){
            curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeaders);
        }
        $ret = curl_exec($ch);
        if(curl_errno($ch)){
            curl_close($ch);
            return array(curl_error($ch), curl_errno($ch));
        }else{
            curl_close($ch);
            if(!is_string($ret) || !strlen($ret)){
                return false;
            }
            return $ret;
        }
    }
	
    function post($url, $fields, $userAgent = '', $httpHeaders = '', $username = '', $password = ''){
        $ret = Curl::execute('POST', $url, $fields, $userAgent, $httpHeaders, $username, $password);
        if(false === $ret){
            return false;
        }
        if(is_array($ret)){
            return false;
        }
        return $ret;
    }
	
    function get($url, $userAgent = '', $httpHeaders = '', $username = '', $password = ''){
        $ret = Curl::execute('GET', $url, '', $userAgent, $httpHeaders, $username, $password);
        if(false === $ret){
            return false;
        }
        if(is_array($ret)){
            return false;
        }
        return $ret;
    }
	
    function create(){
        $ch = null;
        if(!function_exists('curl_init')){
            return false;
        }
        $ch = curl_init();
        if(!is_resource($ch)){
            return false;
        }
        return $ch;
    }
}
?>

GET用法:

$curl = new Curl();
$curl->get(‘http://www.hdj.me/’);

POST用法

$curl = new Curl();
$curl->get(‘http://www.hdj.me/’, ‘p=1&time=0’);

win7命令行实现目录影射

大家都知道linux下命令ln的作用,就是将目录或文件影射到其他目录,最大的作用就是当某目录空间不足的时候,但又不想重装应用。
在win7下它不叫ln,叫mklink。
用法:

MKLINK [[/D] | [/H] | [/J]] Link Target

/D 创建目录符号链接。默认为文件
符号链接。
/H 创建硬链接,而不是符号链接。
/J 创建目录联接。
Link 指定新的符号链接名称。
Target 指定新链接引用的路径
(相对或绝对)。

例子:

mklink /D “C:\Users\hdj\AppData\Local\GoogleChrome\User Data\Default” “D:\ChromeCache”

以上例子就是将chrome的缓存目录影射到其他盘符。
温馨提示:win7下要以管理员身份执行该命令。

IEMobile条件注释

微软在IE5开始就引入了条件注释的功能,可以通过注释型的语法,来对不同版本的IE浏览器指定不同的样式和内容。而在Windows Phone7中,微软又引入了 IEMobile这个关键字,将条件注释功能带入了WP7手机浏览器中。
语法和普通的条件注释类似:

<!--&#91;if IEMobile&#93;> 
哇,你在用Mobile IE啊! 
<!&#91;endif&#93;—>
&#91;/html&#93;
其实IEMobile是WP7中IE7浏览器的UA中的一个token,类似于普通浏览器中的MSIE,后面的版本号可以作为一个参数:
&#91;html&#93;
<!-- &#91;if IEMobile 7&#93;>
哇,你在用Mobile IE 7啊!
<!&#91;endif&#93;-->

以为WP7有很多很酷的功能,顺便多玩了下,然后发现各种杯具:
不再支持media=”handheld”。我们知道,对于普通的移动终端,我们可以用media type来为其指定特殊的样式文件,在之前的Windows Mobile版本的系统中,media=”handheld”是被支持的,但是到了wp7,可能微软觉得自己的Mobile IE7可以和iOS的Safari以及Android的webkit lite媲美了?总之,它不再支持handheld类型了!
wp7中的IEMobile不支持媒体查询(media query)!既然,IEMobile条件注释后面可以加版本号,那么,以微软的作风,估计以后大家可以不用在Windows Phone上纠结媒体查询的功能了!

[转]robbin的PHP,Python和Ruby之路

因为看到一篇讨论PHP,Python和Ruby的编程语言讨论贴,就说说我的PHP,Python和Ruby之路吧:

我2000-2001年用PHP用了两年,那还是第一次互联网泡沫时期,到2001年后期,Servlet/JSP流行,然后我就发现:你说用PHP写的东西,都会被人鄙视。当时我们其实也用Java了,只不过用Java写后端的消息队列。

2001年后期泡沫破灭,我跑去做企业应用,就主要写Java写了很多年,中间2003年开始做JavaEye网站,到2006年用Rails重写JavaEye之前的3年,用的是phpbb搭建的,所以PHP也断断续续一直用到了2006年。 继续阅读[转]robbin的PHP,Python和Ruby之路

互联网不全面应用HTTPS

HTTPS意味着连接是安全的,但为什么主要是网上银行等服务使用HTTPS加密连接,互联网不全面应用HTTPS?
W3C专家Yves Lafon解释说,真正的问题是HTTPS增加了响应时间,失去了缓存能力。如果服务器和客户端在同一地区,这不是问题,但如果是间隔天南地北,用户肯定希望能有缓存加快访问。此外,SSL初始密钥交换也会增加延迟。另一个问题是虚拟主机不支持HTTPS,廉价的虚拟主机供应商让多个网站使用相同的IP地址,这种方式能在HTTP下工作,但不能用于HTTPS,一种解决方法是TLS Extensions协议,但还不成熟。未来随着宽带速度的增加,服务器对安全连接的优化,网民对安全而不是速度的关注将会推动HTTPS的部署。

检测磁盘空间是否快满

#!/bin/sh
MAX=99
LIST=$(df -h|awk '{print $5}'|sed 's/%//g'|sed '/[a-zA-Z]/d')

mailto="135********@139.com"
subject="$(hostname)'s partition alert"
content="$(hostname)'s used detail:\n $(df -h |awk '{print$6,$5}') \ntime:$(date -d today +'%Y-%m-%d %H:%M:%S')"

for PERCENT in $LIST; do
    if [ $PERCENT -gt $MAX ]; then
        echo -e "MAX Used:$PERCENT%\n$content" | mail -s "$subject" $mailto
        exit
    fi
done

exit

MySql中如何用LIKE来查找带反斜线“\”的记录

使用 \\\\ 还是 \\ 看你如何的定义字符串的。其实只有两处转义:PHP 中 和 MySQL 中。

PHP 中 如果你用双引号”” 定义字符串, 那么这里有一次转义。如果用单引号就不会转义。

$sql = “SELECT * FROM table WHERE col LIKE ‘%a\\\\%’ “;

这样实际上经过转义发给 MySQL 的是

SELECT * FROM table WHERE col LIKE ‘%a\\%’;

用单引号则不会转义(除了单引号,当然变量也不会展开):

$sql = ‘SELECT * FROM table WHERE col LIKE \’%a\\%\’ ‘;

发给 MySQL 的也是

SELECT * FROM table WHERE col LIKE ‘%a\\%’;

jQuery事件之防调戏下拉效果

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
<title>jQuery事件之防调戏下拉效果</title>
<style>
#bar{border: 1px dashed rgb(255, 0, 0); padding: 10px; background: rgb(255, 255, 255) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; display: none; width: 250px; list-style-type: none; list-style-image: none; list-style-position: outside;}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
	var $bar = $('#bar');
	
	$('#foo').hover(function(){
		$bar.slideToggle();
	},function(){
		$bar.slideUp();
	});
	
	$('#foo1').hover(function(){
		if($bar.queue().length<=1)//判断长度
			$bar.slideToggle();
	},
	function(){
		$bar.slideUp();
	});
});
</script>
</head>
<body>
<a href="javascript:;" id="foo">来,调戏我几下:)</a> <a href="javascript:;" id="foo1">我可不是那么随便的</a>
<ul id="bar">
    <li>哈哈……</li>
    <li>你是傻瓜!</li>
    <li>小样了吧!</li>
</ul>
</body>
</html>