2012.01.27 3:49 上午 »Author: qlj » 22 views
我需要把一些内容存放在数据库,感觉这些没必要建立字段,于是索性放在数组中序列化后存入数据库.
使用serialize序列化后的字符串很多内容都是不需要的,比如长度信息,数据类型.
感觉平时用的json不错.
打算用json代替,
网上好多结果都是json语serialize的速度比较,这个倒没很大的必要.
需要注意的是 json_decode时返回的是object,需要
后来发现也不是那么完美..
json_encode会对中文进行编码.如果含有大量的中文,那长度超过了serialize.
这让人很蛋疼,网上给出的办法是对内容进行urlencode,json_enocde后再urldecode
function jsonencode($code){ //新json_encode
$code = json_encode(urlencodearray($code));//对数组处理
return urldecode($code);
}
function urlencodearray($data){//urlencode数组
if(is_array($data)){
foreach($data as $key=>$val){
$data[$key] = urlencodearray($val);
}
return $data;
}else{
return urlencode($data);
}
}
真是菊花一紧啊….
再这之后还可以进行一次压缩.
当然,如果不考虑内容的可读性,用其他的扩展也不错,比如msgpack,
serialize php
2011.11.19 4:16 下午 »Author: qlj » 635 views
discuz 回帖必要的参数
header 中
referer 帖子地址 若出现 意外提交一般为这个不对
cookies 登录状态
内容中
formhash
message
有了这些 就可以模拟发帖了
Read More »
linux
2011.05.26 3:48 上午 »Author: qlj » 1,296 views
这里说明下 我用的是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
参考官方实例.
email, mysql, php php
2011.03.20 3:30 上午 »Author: qlj » 1,089 views
想让自己的网站支持应用平台
个人能力有限.不可能自己搭建应用平台
国内的开源SNS程序中 只有DISCUZ提供了应用平台(漫游)
GOOGLE 的OPENSOCIAL 目前没找到方法
FACEBOOK 的是被墙的..
刚好THINKSNS 也已经使用了漫游平台.
那应该是没问题的.. 用THINKSNS 的代码看了下差不多是从UCHOME 移过来的
所以打算吧THINKSNS 的这个移动到我自己的SNS程序上

Read More »
discuz, 开放平台, 漫游 discuz
2011.03.14 4:01 上午 »Author: qlj » 2,145 views
挺有意思的活动,来自GOOGLE GROUP 分享一下 也算是宣传吧 shanghai-gtug@googlegroups.com

内容安排:
18:00 – 18:30 Set Up / Registration 签到
18:30 – 18:50 Opening 开场
18:50 – 19:00 HTML5 Identity
19:00 – 20:00 Chrome / HTML5
20:00 – 20:15 Break 休息
20:15 – 21:00 Andriod
21:00 – 21:20 AdMob
21:20 – 21:30 Q & A 问答
Read More »
android, google, html5, ncf journal
2011.03.12 3:31 上午 »Author: qlj » 516 views
依据Google著名的开源JavaScript引擎V8来进行二次开发的Web I/O服务器(http://nodejs.org/)。V8本身是非常快的JavaScript引擎,处理JS执行运行的速度非常高。相关测试表明,FireFox、Opera和IE的JS引擎速度都不及V8来得快。而且,还可以说,只要浏览器之间的JS引擎大战一日不减,NodeJs就可以从中受益。有竞争才有进步:)。
以上简介 网络复制。。不介绍了
Read More »
node.js, ubuntu web
2011.03.09 12:56 上午 »Author: qlj » 798 views
想法来源
用户积分增加
列入 用户访问空间时增加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的方式
memcache, mysql, php, thinkphp php
2011.02.15 10:31 下午 »Author: qlj » 904 views
凡客诚品邮件过来的卡号跟密码
顺序自己试 一次性用品 点查询 如果可以使用就用吧 ,不能使用就是已经有人用了
面值10圆
您礼品卡的余额为10.00元,有效期截止2011-02-28
![]() |
![]() |
![]() |
![]() |
| 卡 号 |
密 码 |
| 1SCCL1104282X |
57745797 |
| 1SCCL1104282Y |
53541496 |
| 1SCCL1104282Z |
13692279 |
| 1SCCL11042830 |
16297680 |
| 1SCCL11042831 |
27648202 |
|
![]() |
|
![]() |
凡客 ad
2011.02.05 3:08 上午 »Author: qlj » 1,813 views
半年没啥动静的博客..真对不起我自己..HOHO .借着生日.发篇文章凑个数.
首先.事件的开端是..
阴沟历经3个月的努力..从3个俯卧撑可以坚持到30个了..(虽然不是标准的30个…但也算可以凑数啊…前20个没问题..后10个人挺不直了)
接着..引起了我们为人民服务的好敬察胖绝泪的兴趣…
Read More »
第几个100天 journal
2010.11.11 10:38 上午 »Author: qlj » 2,281 views
不容易习惯这感觉。。
按Alt+F2快捷键打开”运行对话框”,并输入gconf-editor或者直接在终端中输入gconf-editor命令,打开Ubuntu的 Configuration Editor对话框。找到”apps/metacity/general”项,在右边的列表中找到”button_layout”键,双击修改它的值为
menu:maximize,minimize,close
保存并关闭Configuration Editor。
ubuntu linux