再不用按F5了!

On 2012/04/24, in WEB开发, by lyndon

前提:LINUX系统、安装inotify-tools、xdotool、双显示器

作用:保存代码时,自动刷新浏览器,再不用按F5了!

inotifywait -mrq  –exclude “.svn”  -e close_write /data/www/source | while read line; do
id=`xdotool getactivewindow | head -1`
xdotool search –onlyvisible –class ‘chrome’ windowfocus key –clearmodifiers ctrl+r
#xdotool search –onlyvisible –class ‘firefox’ windowfocus key –clearmodifiers ctrl+r
#xdotool search –onlyvisible –class ‘opera’ windowfocus key –clearmodifiers ctrl+r

xdotool windowactivate $id

done

Tagged with:  

对于唯一索引,插入重复项,

insert into 会导致错误,

insert ignor into不会,

replace into删除已存在的记录再插入,

on duplicate key update会更新已有记录。
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;

没有重复记录插入,如有重复记录,等同于

UPDATE table SET c=c+1 WHERE a=1;//假设a为主键或唯一索引

Tagged with:  

session_destory关闭session文件,清除session id,在本次请求完成前保留$_SESSION数组内容。

<?php

session_start();

$_SESSION['id']=1;

echo session_id(); //t3b39d0521gpvbp2vikkikpb00

echo ‘<br>’;

echo $_SESSION['id']; //1

echo ‘<br>’;

session_destroy();

echo session_id(); //”

echo ‘<br>’;

echo $_SESSION['id']; //1

$_SESSION['id']=2; //再次请求时无此变量

?>

session_unset清空session变量,保留session文件及session id。

<?php

session_start();

$_SESSION['id']=1;

echo session_id(); //t3b39d0521gpvbp2vikkikpb00

echo ‘<br>’;

echo $_SESSION['id']; //1

echo ‘<br>’;

session_unset();

echo session_id(); //t3b39d0521gpvbp2vikkikpb00

echo ‘<br>’;

echo $_SESSION['id']; // Notice: Undefined index: id

$_SESSION['id']=2; //再次请求时id=2;

?>

Tagged with:  

php循环优化

On 2012/04/06, in PHP, WEB开发, 设计, by lyndon

通常要循环处理一个数组的时候,是这样写的

$arr=range(1,10000);
foreach($arr as $k=>$v)
{
$arr[$k]++;
}

如果要优化一个循环,最常见的方法就是减少循环的次数。比如,使用DUFF装置。它以创建者Tom Duff的名字命名,最早在C语言中试用,基本概念是通过计算迭代次数是否为8的倍数,将一个循环展开成一系列的语句。经Andrew B. King优化后,代码如下:

$arr=range(1,10000);
$iterations=floor(count($arr)/8);
$leftover=count($arr)%8;
$i=0;
if($leftover>0)
{
do
{
$arr[$i++]++;
}while(--$leftover>0);
}
do
{
$arr[$i++]++;
$arr[$i++]++;
$arr[$i++]++;
$arr[$i++]++;
$arr[$i++]++;
$arr[$i++]++;
$arr[$i++]++;
$arr[$i++]++;
}while(--$iterations>0);

 

看上去代码更多,但是执行速度更快。上面2个代码执行时间相差60%。

在可读性和效率之间如何取舍,则是另外一个问题。

Tagged with:  

jquery让元素居中

On 2012/03/26, in CSS, JAVASCRIPT, WEB开发, by lyndon

定义一个center方法

jQuery.fn.center = function(parent) {
if (parent) {
parent = this.parent();
} else {
parent = window;
}
this.css({
“position”: ”absolute”,
“top”: ((($(parent).height() - this.outerHeight()) / 2) + $(parent).scrollTop() + ”px”),
“left”: ((($(parent).width() - this.outerWidth()) / 2) + $(parent).scrollLeft() + ”px”)
});
return this;
}

 

然后你就可以

$(element).center(true); //父元素中居中
$(element).center(false); //屏幕居中




来源 http://stackoverflow.com/questions/210717/using-jquery-to-center-a-div-on-the-screen

 

Tagged with:  

图像识别验证码

On 2012/01/04, in PHP, by lyndon

在原来的基础上稍加修改就行了

demo

纯娱乐^^

Tagged with:  

SAE高级开发者证书入手!

On 2011/12/20, in 未分类, by lyndon

貌似也没啥用….装裱,以资纪念…

 

不解释,有demo有图有真相,一切都有!

demo

下载 captcha.zip

 
function parse($m)
{
  return call_user_func("parse{$m[1]}",$m[3]);
}
function parsea($str,$attr=array('href'))
{
  return '<a '.parseattr($str,$attr).'>';
}
function parsep($str,$attr=array('align','id'))
{
  return '<p '.parseattr($str,$attr).'>';
}
function parseattr($str,$attr=array())
{
  if(empty($attr))return '';
  $attrs=explode(' ', $str);
  foreach ($attrs as $k=>$v)
  {
    foreach ($attr as $a)
    {
      if(strtolower(substr($v, 0,strlen($a)).'=')===strtolower($a.'='))
      {
        continue 2;
      }
    }
    unset($attrs[$k]);
  }
  return implode(' ', $attrs);
}
function myreplace($str)
{
  $reg='/<(p|a)(\s+)(.*?[^>])>/is';
  return (preg_replace_callback($reg,'parse',$str));
}

$str='<p align="center" class="asd" id="qwe">adf<a href="#" class="asd" id="qwe" align="center">123</a><div id="iii" style="color:red">4<p id="ww">5</p>6</div></p>';
echo myreplace(strip_tags($str,'<p><a>'));
//<p align="center" id="qwe">adf<a href="#">123</a>4<p id="ww">5</p>6</p>
Tagged with:  

修改host访问Google Plus

On 2011/10/28, in 未分类, by lyndon

至于加哪里,你懂的,这是生活在此地的基本生活技能。

74.125.224.97 plus.google.com
74.125.224.105 plus.google.com
74.125.224.98 plus.google.com
74.125.224.104 plus.google.com
74.125.224.101 plus.google.com
74.125.224.109 plus.google.com
74.125.224.96 plus.google.com
74.125.224.106 plus.google.com
74.125.224.100 plus.google.com
74.125.224.110 plus.google.com
74.125.224.102 plus.google.com
74.125.224.107 plus.google.com
74.125.224.99 plus.google.com
74.125.224.108 plus.google.com
74.125.224.111 plus.google.com
74.125.224.103 plus.google.com
209.85.175.132 images1-focus-opensocial.googleusercontent.com
209.85.175.132 images2-focus-opensocia2.googleusercontent.com
209.85.175.132 s2.googleusercontent.com
209.85.143.132 lh1.googleusercontent.com
209.85.175.132 lh1.googleusercontent.com
209.85.143.132 lh2.googleusercontent.com
209.85.175.132 lh2.googleusercontent.com
209.85.143.132 lh3.googleusercontent.com
209.85.175.132 lh3.googleusercontent.com
209.85.175.132 lh4.googleusercontent.com
209.85.143.132 lh4.googleusercontent.com
209.85.143.132 lh5.googleusercontent.com
209.85.175.132 lh5.googleusercontent.com
209.85.143.132 lh6.googleusercontent.com
209.85.175.132 lh6.googleusercontent.com
203.208.46.29 picadaweb.google.com
203.208.46.29 lh1.ggpht.com
203.208.46.29 lh2.ggpht.com
203.208.46.29 lh3.ggpht.com
203.208.46.29 lh4.ggpht.com
203.208.46.29 lh5.ggpht.com
203.208.46.29 lh6.ggpht.com
203.208.46.29 lh6.googleusercontent.com
203.208.46.29 lh5.googleusercontent.com
203.208.46.29 lh4.googleusercontent.com
203.208.46.29 lh3.googleusercontent.com
203.208.46.29 lh2.googleusercontent.com
203.208.46.29 lh1.googleusercontent.com
203.208.46.29 plus.google.com
203.208.46.29 talkgadget.google.com