Posts Tagged ‘mysql’

php邮件发送类推荐 PHPMailer:smtp法

星期四, 五月 26th, 2011

这里说明下 我用的是SMTP 其他方法的请继续 GOOGLE
刚拿到的时候 测试了下发信 无异常 支持HTML
但是SMTP 发送的过程中 需要先于SMTP 服务器建立连接 然后发信
这个过程可能需要1-3秒 可能会导致网页响应较长时间
所以呢. 我们建立一个表用于存放发送的邮件队列
每次发送邮件是将 邮件内容加入表中
然后 用CRON 每分钟检查下表 若存在 则 队列发送
目前在起哄网上使用中.用于发送EMAIL认证邮件

 
--
-- 表的结构 `qlj_sendmail`
--
 
CREATE TABLE IF NOT EXISTS `qlj_sendmail` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(50) DEFAULT NULL,
  `subject` varchar(120) DEFAULT NULL,
  `body` text,
  `error` tinyint(1) NOT NULL DEFAULT '0',
  `dateline` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
#!/usr/local/php/bin/php -q
<?php
include_once('mysql.class.php');
include_once('class.phpmailer.php');
$mail                = new PHPMailer();
$db = new DB;
$db->connect('', '', '', '');
$mail->IsSMTP(); 
	$mail->Host = "";  //SMTP服务器
	$mail->Username = "no-reply@qihoon.com";  
	$mail->Password = "";    
	$mail->FromName =  "起哄网信使";   
	$mail->SMTPAuth = true;          
	$mail->From = $mail->Username;
	$mail->CharSet = "utf8";           
	$mail->Encoding = "base64"; 
	$mail->AddAddress($sendto_email);  
$result=$db->query("SELECT id,email,subject,body FROM `qlj_sendmail` where error='0' LIMIT 0 , 30");
if($db->num_rows($result)<1) exit(); 
while ($row =$db->fetch_array($result)) {
$mail->AltBody ="text/html"; 
$mail->Subject = $row['subject'];
$mail->MsgHTML($row['body']);
  $mail->AddAddress($row["email"], $row["full_name"]);
  if(!$mail->Send()) {
    //$errorid[]=array(id=>$row['id'],error=>$mail->ErrorInfo);//本来想记录出错信息的.但是表是INT 不浪费字段了.
	  $errid[]=$row['id'];
  } else {
     $okid[]=$row['id'];
  }
  $mail->ClearAddresses();
}
if(count($okid)>0){
	$sok=implode(',',$okid);
	$db->query("delete from `qlj_sendmail` where id in($sok) ;");
	}
	if(count($errid)>0){
	$serr=implode(',',$errid);
	$db->query("update `qlj_sendmail` set error='1' where id in($serr) ;");
	}
?>

最后在 CRONTAB中 加入 每分钟的计划任务
*/1 * * * * /usr/local/php/bin/php /home/yingouqlj/send_mail.php

参考官方实例.

php延时更新点击数[文件缓存]

星期三, 三月 9th, 2011

想法来源

用户积分增加

列入 用户访问空间时增加1分

用户首次登陆增加10分

那么每次操作都要insert一次

这显然很浪费

如果可以缓存一次性写入那么就可以降低MYSQL的压力了

像上面的情况我只要一次性增加11分即可

在THINKPHP中找到了方法

下面代码转载自THINKPHP(advmodel.class.php)

setLazyInc($field,$condition='',$step=1,$lazyTime=0) { //缓存累加
        if(empty($condition) && isset($this->options['where']))
            $condition   =  $this->options['where'];
        if(empty($condition)) { // 没有条件不做任何更新
            return false;
        }
        if($lazyTime>0) {// 延迟写入
            $guid =  md5($this->name.'_'.$field.'_'.serialize($condition));
            $step = $this->lazyWrite($guid,$step,$lazyTime);
            if(false === $step ) return true; // 等待下次写入
        }
        return $this->setField($field,array('exp',$field.'+'.$step),$condition);
    }
 
function lazyWrite($guid,$step,$lazyTime) {   
        if(false !== ($value = F($guid))) { // 存在缓存写入数据
            if(time()>F($guid.'_time')+$lazyTime) {
                // 延时更新时间到了,删除缓存数据 并实际写入数据库
                F($guid,NULL);
                F($guid.'_time',NULL);
                return $value+$step;
            }else{
                // 追加数据到缓存
                F($guid,$value+$step);
                return false;
            }
        }else{ // 没有缓存数据
            F($guid,$step);
            // 计时开始
            F($guid.'_time',time());
            return false;
        }
    }

上面有个 FUNCTION F 在FACTIONS.PHP

// 快速文件数据读取和保存 针对简单类型数据 字符串、数组
function F($name,$value='',$path=DATA_PATH) { //修改$path为自己的缓存路径
    static $_cache = array();
    $filename   =   $path.$name.'.php';
    if('' !== $value) {
        if(is_null($value)) {
            // 删除缓存
            return unlink($filename);
        }else{
            // 缓存数据
            $dir   =  dirname($filename);
            // 目录不存在则创建
            if(!is_dir($dir))  mkdir($dir);
            return file_put_contents($filename,"<?php\nreturn ".var_export($value,true).";\n?>");
        }
    }

调用方法

setLazyDec($field,$condition='',$step=1,$lazyTime=0) 
//根据需要 自己修改吧我加入了table 等多个
function lazyaddint($table,$field,$condition='',$num=1,$ltime=0)
//调用方法 更具实际需要修改吧
lazyaddint('表明','字段名',"WHERE条件",增加数量,缓存时间);

此方法 会在缓存目录中创建2个临时文件

//07e8c1b06dbdc4f282bf7bf9311a1fce_time.php
<?php
return 1299602761;
?>
 
//07e8c1b06dbdc4f282bf7bf9311a1fce.php
<?php
return 21;
?>

根据时间超过 设定的时间就写入数据库
此方法已经适用无问题
感觉方法不太好.. 期待MEMCACHED的方式

php+mysql模仿android中短信界面的效果

星期二, 四月 13th, 2010

十分喜欢android的短信
像 QQ一样。。
缺点是。。 发消息也想QQ一样。。。
一条接一条。。 钱也一条接一条的扣。。
哈哈
现在大部分网站的短信都类似于 GMAIL 一样。或者说。跟论坛主题一样。 。 一个贴。。后面回复。。
改变下模式。。做自己喜欢的效果。。
(全文…)

MYSQL替换语句

星期四, 四月 1st, 2010

HOHO采来的数据还是需要改改的
比如删除不需要的HTML标签
收集到了批量替换语句

UPDATE 表名 SET
指定字段 = replace(指定字段, ’要替换的字符串’, ’想要的字符串’) 
WHERE 条件;

今天用到的删除空格的

UPDATE `qlj_joke` SET content = replace(content,'&nbsp;','') ;

mysql错误ERROR 1062 (23000) Duplicate entryfor key 2

星期二, 一月 5th, 2010

之前服务器数据丢失后决定搬家了
用PHPMYADMIN导出
因为数据库文件比较大
所以直接使用MYSQL命令直接导入
(全文…)

Ubuntu 9.04 APT-GET 安装nginx+php+mysql

星期六, 八月 15th, 2009

前面因为CENTOS LIVE的缘故(UBUNTU你赢了),阴沟已换上了UBUNTU SERVER
传言 源里面已经加入了NGINX
(全文…)

MYSQL导入导出工具mysqldump详细手册

星期四, 八月 13th, 2009

备份数据需要用的..先收藏
经常需要翻翻的

只是图一个方便

(全文…)

MySQL导出导入命令

星期五, 七月 10th, 2009

1.导出整个数据库

mysqldump -u 用户名 -p 数据库名 > 导出的文件名

mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql

2.导出一个表

mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql

3.导出一个数据库结构

mysqldump -u wcnc -p -d –add-drop-table smgp_apps_wcnc >d:wcnc_db.sql

-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table

4.导入数据库

常用source 命令

进入mysql数据库控制台,

如mysql -u root -p

mysql>use 数据库

然后使用source命令,后面参数为脚本文件(如这里用到的.sql)

mysql>source d:wcnc_db.sql

mysql出错代码收集

星期一, 二月 4th, 2008

 mysql错误代码收集

(全文…)