2010 年 09 月

浏览模式: 标准 | 列表 | 图文
失败父母的八大典型行为

失败父母的八大典型行为

这篇文章是从QQ空间转过来的。因为发现两岁的小孩好象也属于人生中的第一个叛逆期,怎么样带好小孩就是研究的主题了。看到这样的文件,总想着转一下被更多的人看到。

根据心理学家对大批父母的调查,发现8种典型的行为导致失败的父母。

  一、没有原则(Parents fail at setting limits)

  没有原则的父母,最终会被子女控制住。曾有位母亲一旦听到孩子说“我不上学了”,立刻投降,答应孩子的任何要求。这位母亲最终陷入绝望的境地。

  二、过度保护(They're overprotective)

  父母保护的越多,孩子越无能。尼采说过,最大的善往往包含最大的恶。

  三、唠叨、说教、罗嗦、嚷嚷(They nag. Lecture. Repeat. Then yell)

  这样的父母通常是低智商的父母,因为不会说些有用的话,因此,只会重复些无用的话。

  四、赞扬泛滥(They praise too much—And badly)

  对于4岁以上的儿童,“知心姐姐”式的赞扬已经不起作用了。你不能总是用“孩子,你真棒”这样毫无营养价值的话语“忽悠”自己的孩子。

  五、惩罚过重(They punish too harshly)

  记得初中时,我的一个朋友的妈妈太想让她的儿子优秀,曾经让她的儿子跪了一夜作为惩罚,结果,我的这个朋友从此精神失常。

  六、剥夺孩子的感受(They tell their child how to feel)

  父母往往用自己的感受代替孩子的感受,用自己的价值观衡量孩子的行为,结果孩子失去了感受、判断的机会。

  七、成绩与创造力本末倒置(They put grades ahead of creativity)

  绝大多数父母除了关心孩子的成绩,不知道孩子还有比成绩更重要的部分需要关心。

  八、 忽略了乐趣(They forget to have fun)

  乐观的天性是父母送给孩子最有价值的礼物之一。

事实上,确实不知道首发是谁,我只能把我转载的那位地址贴出来了。转载自 秋叶狂舞 转载于2010年09月03日 12:06。
小家伙最近的叛逆明显在于,你说不对他说对,你说不可以,他说可以。你说最后一次吧。他举起手指说两次。这时候说教是没有用的,但纵容也不行。犹豫,不知道你们是怎么样对付的?

PHP开源Apache日志分析工具收集与比较

apache的日志是有专门分析工具的,但是用PHP的就比较少了。或者说我关注的比较少吧,看到这个就记录一下了。可以用于在线分析(但事实上,我想性能应该不会高到哪里,想来perl版的还是效率高很多)
上原文吧:

我们知道已经有很多像Awtstat这样的使用perl、c或者c++开发的强大的日志分析工具,但是同样也有很多使用PHP开发并且开源的日志分析软件,今天我就收集了一些与大家分享。

1、LogAnalyzer

LogAnalyzer是 Adiscon的监控软件产品线中的一部分。可以再Windows以及Unix环境下运行。LogAnalyzer本是是免费的,GPL许可的产品。

LogAnalyzer的原名为phpLogCon,他在2010年的3月29日发布了3.0的稳定版,并且正式改名为LogAnalyzer。

程序运行必须有他们制定的数据支持,在Windows环境下, 可以使用MonitorWare Agent、WinSysLog、EventReport。在Linux环境下可以使用rsyslog。现在Yum的源中包含了rsyslog这款软件,源中的版本是3.22.1,官方的最高版本是4.6.4的稳定版以及6.1.0的开发版。

由于不能使用原生的数据进行分析,我觉得算是他的一个缺点。

2、Jawstats

这是一款基于Awstat的PHP开源程序,提供了非常漂亮的分析统计结果的展示界面,支持中文。他的作者是 Jon Come。

JAWStats可以减轻AWStats的计算压力,同时安装非常简单,只要稍微修改一下配置文件就可以运行。配置项也可以非常简单。

JAWStats的使用界面也非常人性化,因为作者原来是一个UI工程师。在系统中,我们可以非常容易的在不同月份之间切换,还可以在不同站点的日志之间进行切换。也可以通过Web界面来进行分析数据的更新,正好切合我们的需求,只在需要看的时候出报表就好了。

JAWStats支持主题,可以进行主题的设计和切换。

总的来说,看完了JAWStats的介绍,觉得是比较推荐的一款产品。

3、Web Analytics. Open Source

一款GPL协议下的开源软件,界面和数据获取方式都是模仿GA的,对于小型站点的分析应该不错。有对于Wordpress和Mediawiki的统计支持。

4、Log Miner

LogMiner 是一个分析Apache或者IIS日志,或者其他支持 combined 或者 W3C扩展日志格式的服务器。能够提取并展示包括访问量、点击、流量、请求数、访问路径、浏览器和操作系统在内的诸多指标。数据存储采用的是 PostgreSQL,存储比较精简。

Log Miner开发的灵感源自于流行的 Webalizer ,但是有一些主要的不同:

使用关系型数据库作为后端数据存储,实时生成报表。而 Webalizer 则是生成 html 文件。基于DBMS数据库的方式能够随时提供不同形式的数据,但是日志文件的解析速度上不如 Webalizer。
Webalizer只保存最近12个月的数据,之前的数据则无法再查看。
Webalizer的报告结果是硬编码的,而Logminer则是每个报告对应一个PHP类,我们可以灵活的进行定义。
LogMiner提供了比Webalizer更多的报表,比如操作系统和访问路径。

5、Webalizer

Webalizer虽然不是PHP的,但是上面LogMiner总是拿这个作比较,就顺便说一下。用C写成,日志分析能力非常出众,采用HTML的报表展示形式,是一个非常流行的日志分析工具。

6、TraceWatch

一个PHP+Mysql的日志分析工具,界面不太喜欢,好像就是路径分析比较有特点,其他的感觉还有点慢,就没什么了。

其他还有一些不太知名的工具,就没有一一细看:

AudiStat、SlimStat、Piwik

结合看到的这些工具,针对我们单位的实际需求,感觉 Awstat + JAWStats 组合更为好一点。因为日志会收集到单独的日志服务器上,所以性能上的消耗也就不会在意了。接下来看看实际的效果吧。

PS:刚才看AWS的文档,看到一个对比,可能对于特性的了解能够更加的一目了然。

e012fa3ad67bf5edb57379292895bd9c

参考资料:

1、CrunchTools
2、LogAnalyzer
3、Jawstats
4、Awstat
5、Web Analytics . Open Source
6、Log Miner
7、Webalizer
8、TraceWatch

原文来自:http://www.cnblogs.com/cocowool/archive/2010/09/07/1820626.html

收藏了这么多,确实。。。。。。好象很多人用到现在都还是Awstat吧。毕竟这个很多人习惯了

表单提交时submit按钮的值没有被提交

表单提交时submit按钮的值没有被提交

今天在RPC里面,阿刁提出个问题,FORM表单中,submit提交的时候,有时候有值,有时候无值 ,想问清楚是什么原因

状态描述:

1、FORM表单中,submit的name是Submit。即 <input type="submit" name="Submit" value="提交表单" />

2、当点击submit按钮时,FORM被提交,提交后获取的数组中有Submit下标的值

3、回到FORM表单,直接敲回车提交,这时候发现获取的数组中没有Submit下标。

纠结的是:为什么会有两种情况的不同

查找原因,最后基本确认,这是由于form在不同情况下,可以直接使用回车进行提交表单而导致的问题。这里有几篇参考文章:不同浏览器对回车提交表单的处理办法和表单提交按钮input和button的取舍。那么,为什么敲回车和点击submit不一样呢?怎么样才能让他们一样?

尝试将focus移到submit按钮上。敲回车提交。这时候,是带有Submit值的。如果focus不在submit按钮上,则无效。知道了问题的原因,那就有解决方法了。对于submit,不要设name值 。如果确实需要传递值 ,请使用hidden域进行值的提交。以防止数据产生偏差。

新员工(程序员)如何快速切入业务

新员工(程序员)如何快速切入业务

新入职时,对于公司的业务不熟悉,这时候,你在干什么?看所谓的数据字典?熟悉老的程序?一行行的看代码?还是先熟悉一些程序员应该了解的后台操作?
虽然好象都应该这么做,但是在测试机上,你尝试性的做了一步操作,怎么查看他的结果?有多少数据表进行关联?除了看程序,还有没有其他办法 ?
下面就是一淘宝QA的技巧,值得推广。事实上,我是通过看程序了解的(看其中所涉及的SQL,但事实上,如果业务封装的很好,为了看这些所谓的SQL,可能需要查看很多程序文件,当然也可以通过debug模式,将这些受影响的SQL打印出来,这其实是最佳的。)
那么淘宝QA是怎么做的呢?他们不可能修改程序,否则就成了程序员而不是QA了。请看:

淘宝是一家业务驱动型的公司,想必每位小二都曾跟我一样,进来淘宝后,熟悉些基本的测试工具以后,就开始一头扎入茫茫的业务学习中去了。。。

每条线的业务都是错综复杂的,如何在千丝万缕中找到切入点,或许很多人曾经跟我一样迷茫,来吧,新人们可以踩着我的尸体上去了。好吧,为了纪念一下考级时候所用的英语模板,重新拿出来蹂躏一下,以作发泄。。。

当你做一个业务动作的时候,或许你最想知道的是,你的这个动作到底影响了哪几张表?OK,你有2个方法可以去寻找答案:问你的师兄师姐,看他们的沉淀、 tc,or自己去看数据库。这里,向后面的人推荐一下我个人比较笨拙的查数据库的方法,此方法只适用于清晨幽静无人之时:

一般,我会在清晨8点前来到公司,然后开始偷偷摸摸的干起来。

Firstly,把你所在线的表名都给导出来(找到数据库,在Tables下会显示这个库中的所有表,系统的表可以不用复制出来),如果是分表的话,看是 否是根据日期,user_id或是什么别的来分的,只要根据你操作的日期或者你的user_id等等来选择一张就行了;然后制作.sql的文件,内容如 下:

set heading off
set feedback off
spool d:\sb.sql(你的sql路径)
select count(*), ‘表名(刚才复制出来的)’ from 表名(刚才复制出来的) ;

(有多少表就写多少表,这个sql其实就是统计这个表现在有多少条记录)

spool off
set heading on
set feedback on

制作完成后,打开command window,输入刚才制作的.sql文件的路径:4e095bb37b09ffa83ecdadcf69d40cde

我是保存在d盘下的

点击回车,就开始运行了,将你现在表中的记录数都打出来,

Started spooling to d:\sb.sql
14 xx_xxx_xxx ;
1 xx_xxx_xxx;
108 xx_xxx_xxx ;
Stopped spooling to d:\bss.sql

可以做一下ctrl+c,然后在ctrl+v,将这个东东保存在一个1.txt的文件中。

Secondly,开始你的业务操作,动作完成以后,再次输入.sql文件的路径,点回车,将新的记录数保存在另一个2.txt文件中。

Last but not least,你还需要一个工具来比较这2个文件,我用的是Beyond Compare,效果如下:ff016b1efd8c422a9ba9571b14ee6e87

点击确定caae792816eb7c3d1e7e85a75b351027

你按照上面变红的数据表,对应数据字典去逐个看一下数据库中这些发生变化的表,你就明白你的这个操作为什么带来了这几张表的变化了。

欧拉。。。。。

原文来自:http://qa.taobao.com/?p=8804

jquery笔记:让input从disabled变成enabled

jquery笔记:让input从disabled变成enabled

在页面处理的时候,有时候我们会使用这样的小技巧,在没有点击XX按钮时,YY按钮是disabled的,当选中了XX时,YY也变成了enabled的状态。

在使用普通的JS的时候,我们很可能就直接document.getElementById('YY').disabled = false;就解决了。但是在jQuery里却不是每个浏览器都支持这样的作法,即:$('#yy').attr('disabled',false);也试了一下$('#yy').attr('disabled','');,不知道是我的人品问题还是确实 有问题,反正都没有成功,于是我又尝试$('#yy').attr('enabled','enabled'),也没有成功。 最后一发狠,来了一句:$('#yy').removeAttr('disabled'),得成了。

果然还是怕狠人的。在这里做个记录而已。虽然大多数情况下不一定用得到。

simplexml xpath

simplexml xpath

SimpleXmlElement 在我们用的时候好象很多都是直接使用simplexml_load_string或者load_file。但事实上,SimpleXmlElement功能很强大,只是我们很多时候都忽略了?大多数人还在使用xml_create等函数?

SimpleXmlElement中最让人用的舒服的恐怕就是这个xpath了。例如这个官方的例子:

<?php
$string = <<<XML
<a>
<b>
<c>text</c>
<c>stuff</c>
</b>
<d>
<c>code</c>
</d>
</a>
XML;

$xml = new SimpleXMLElement($string);

/* Search for <a><b><c> */
$result = $xml->xpath('/a/b/c');

while(list( , $node) = each($result)) {
echo '/a/b/c: ',$node,"\n";
}

/* Relative paths also work... */
$result = $xml->xpath('b/c');

while(list( , $node) = each($result)) {
echo 'b/c: ',$node,"\n";
}
?>
这个例子输出是:
/a/b/c: text
/a/b/c: stuff
b/c: text
b/c: stuff

看看,是不是很方便?对于某个XML很大的情况就比较值得这样使用了。

支持智能手机的JS框架

支持智能手机的JS框架

智能手机现在是越来越被大众接受,即使是诺基亚那可怜的S40,也能将就着算是智能机吧。关键这些智能机里都有一些浏览器了。比如opera mini,opera mobile之类的,再象android那样的话就是Webkit,IOS也算是Webkit核心了(ff也要登录android之类的),opera也在各个平台都有着自己的版本。因此,我们可以假设,只要是智能手机,都能支持一些简单的JS了。但是我怎么知道哪些浏览器支持的JS在其他浏览器上不支持呢?如果只用最简化的功能,那意义就不大了。因此,支持智能手机的JS框架就比较让人心动了。

一、jQuery Mobile

jQueryMobile不像前面SproutCore 或者Sencha Touch,它没有提供一个完整的应用架构。但它是一个新的开始,其也以向移动网站应用提供更多本地化的控制为宗旨。jQuery Mobile项目宣布其要成为“完整的,统一的,移动UI架构”。 jQuery Mobile核心项目也将继续为移动提供优化,但jQuery Mobile更专注于为主流智能手机浏览器提供一种真正的顶级的JS体验和界面。

官方网址:http://jquerymobile.com/

支持列表:http://jquerymobile.com/gbs/

二、Sencha Touch

Sencha前身是Ext JS ,全名是Sencha Touch HTML5 mobile framework.它提供一种可跨平台的架构,目前支持IOS,Android将在不久后得到支持。这种在线摸触摸技术结合了一个UI库的独立解决方 案,触摸项目管理、地理技术支持、离线缓存技术以及特殊的CSS和CSS3功能。

官方网址:http://www.sencha.com/products/touch/

演示地址:http://www.sencha.com/products/touch/demos.php

三、YUI 3.2

雅虎将发布最新的JS实用程序的YUI库。YUI最新版对触摸和移动设备提供更多更好的支持

官方网址:http://yuilibrary.com/

四、iUI

iUI是一个iPhone用户界面架构,其设计目标是像移动网站应用提供更接近iPhone的体验。它的工作原理是结合WEBKIT为基础的设备以及包括一个JS库和CSS及图形。其最早追溯至2007年,但多年以来缓慢地升级以提供更多其他设备,甚至是iPad。

官方网址:http://code.google.com/p/iui/

五、SproutCore

SproutCore是一个HTML5的架构,目标帮助开发者建立桌面口径的web应用,并且支持任何浏览器下无需补丁的运行。其项目带头大哥已经辞去了其原本苹果的职位,专心致志地来完成此项目。

官方网址:http://www.sproutcore.com/

演示地址:http://demo.sproutcore.com/

六、XUI

在开发Phonegap时,XUI团队对应用于移动设备的现存JS库及表现很失望。XUI创建的初衷是跨多个移动浏览器工作,其包括WEBKIT,Fennec,Opera。其目标是为低成本条件下解决传统JS库不适合移动浏览器,提供更多跨兼容的方案。

官方网址:http://xuijs.com/

英文原版:http://mashable.com/2010/08/18/mobile-web-app-frameworks/

内容来自:http://www.biaodianfu.com/make-your-mobile-websites-act-like-apps.html

JavaScript—计算图片加载的张数

看到cssrain.cn上这篇博客介绍的不错。挺有意思,虽然这个功能在很久以前就有人实现过。。。但现在看来又有不同的感觉
或许大家都记得,在几年前,网页特效中就有一个效果是网页正在下载数据,请稍等。然后是一个进度条,等完毕后,网页就打开了。其实说的就是Cssrain上的效果。不过几年前没有想过要兼容如今这么多的浏览器。所以,还是可以再了解一下(相册网站之类的可能会需要)
----START--

先定义一个图片的数组,然后通过image的onload事件来计算,注意,onload在ie和火狐有所不同。

最后需要一个进度条与之结合即可。

这个脚本在做游戏的地方用得比较多。

http://cssrain.cn/demo/plantsvs/loadImg.html
源码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
*{
margin:0;
padding:0;
}
body{font-size:12px;}
/*不带文字*/
.progress{
border:0;
width: 152px;
height: 18px;
background:url(http://www.cssrain.cn/demo/makeProgress/img/progress.gif) no-repeat -100px 50%;
}
/*带文字显示*/
.progressbar_3{
width:152px;
position:relative;
height:18px;
text-align:center;
position:relative;
color:#222;
}
.progressbar_3 .text{
width:152px;
position:absolute;
left:0;
top:0;
height:18px;
line-height:18px;
z-index:100;
}
.progressbar_3 .progress{
width:152px;
position:absolute;
left:0;
top:0;
height:18px;
z-index:10;
}
</style>
<script language="javascript">
var PicAr=[['http://www.cssrain.cn/images/bg.jpg','背景'],
['http://www.cssrain.cn/images/c1.png','卡片'],
['http://www.cssrain.cn/images/c2.png','卡片'],
['http://www.cssrain.cn/images/c3.png','卡片'],
['http://www.cssrain.cn/images/c4.png','卡片'],
['http://www.cssrain.cn/images/c5.png','卡片'],
['http://www.cssrain.cn/images/c6.png','卡片'],
['http://www.cssrain.cn/images/c7.png','卡片'],
['http://www.cssrain.cn/images/c8.png','卡片'],
['http://www.cssrain.cn/images/sephira_software.png','卡片栏'],
['http://www.cssrain.cn/images/tragic_phantom.png','剪草机'],
['http://www.cssrain.cn/images/yahoo.gif','游戏LOGO界面'],
['http://www.cssrain.cn/images/Control/Pic2.jpg','简介背景'],
['http://www.cssrain.cn/demo/24_pages/image1.gif','image1'],
['http://www.cssrain.cn/demo/24_pages/image2.gif','image2'],
['http://www.cssrain.cn/demo/24_pages/meneame.jpg','简介背景'],
['http://www.cssrain.cn/demo/24_pages/25css.jpg','简介背景']
];


var LoadAccessNum=0; //载入成功的图片数量

function $(id){
return(document.getElementById(id));
}

/*--------以下是载入图片进度条--------*/
var Browser=new Object();
Browser.userAgent=window.navigator.userAgent.toLowerCase();
Browser.ie=/msie/.test(Browser.userAgent);
Browser.Moz=/gecko/.test(Browser.userAgent);

function LevelLoadProgress(){
var PicNum=PicAr.length;
$('text').innerHTML='正在准备载入游戏素材...';
$("progress").style.backgroundPosition= "-150px 50%";
for(n=0;n<=PicNum-1;n++){
Imagess(n,PicAr[n][0],"img"+n,checkimg);
}
}

function Imagess(n,url,imgid,callback){
var val=url;
var img=new Image();
if(Browser.ie){
img.onreadystatechange =function(){
if(img.readyState=="complete"||img.readyState=="loaded"){
callback(img,imgid,n);
}
}
}else if(Browser.Moz){
img.onload=function(){
if(img.complete==true){
callback(img,imgid,n);
}
}
}
//如果因为网络或图片的原因发生异常,则显示该图片
img.onerror=function(){img.src=val;img.onreadystatechange=null;}
img.src=val;
}

//检测图片加载
function checkimg(obj,imgid,n){
LoadAccessNum+=1;
var PicNum=PicAr.length,ReduceX=150/PicNum,imgFlagHeadLeft=139-LoadAccessNum*ReduceX;
$('text').innerHTML='载入:'+PicAr[n][1]+'('+LoadAccessNum+'/'+PicNum+')';
var a = parseInt(LoadAccessNum*ReduceX) ;
$("progress").style.backgroundPosition= (a-150)+"px 50%";
window.status=LoadAccessNum;
if(LoadAccessNum==PicNum){
$('dFlagMeter').style.display='none';
LoadAccess();
return false
}
}
/*--------以上是载入图片进度条--------*/

//调用载入图片进度条LevelLoadProgress(),载入成功后执行LoadAccess();
function LoadAccess(){
$('dFlagMeter2').style.display='block';
}

</script>
</head>
<body onload="document.execCommand('BackgroundImageCache',false,true);LoadAccess();">

<div style="position: absolute; z-index: 255; left: 260px; top: 150px;" id="dFlagMeter">
<table width="500" height="40" cellspacing="0" cellpadding="0" bordercolor="#000000" border="0">
<tbody><tr>

<td width="343" valign="top">
<div class="progressbar_3">
<div id="text" class="text">正在准备载入游戏素材...</div>
<img id="progress" class="progress" width="152" height="18" title="100%" alt="100%" src="http://www.cssrain.cn/demo/makeProgress/img/bg.gif" style="background-position: -150px 50%;"/>
</div>
</td>
</tr>
</tbody>
</table>
</div>

<div style="display:none;position: absolute; z-index: 254; left: 260px; top: 150px;" id="dFlagMeter2">载入成功!</div>


<script type="text/javascript">
LevelLoadProgress();
</script>
</body>
</html>
遭遇ISP劫持?

遭遇ISP劫持?

不得不承认,2345是个垃圾站。如果没有今天这个情况的出现,或许我还愿意承认这个站点,但现在,我非常愤恨。
登录自己的博客花了很久,主要原因就是发现在连接时候,居然多了个forward和proxy,因为不明白原因,所以google了一下,找到了这篇文章 :又被ISP劫持了,原来和我有同样问题的人在。
因为我没有仔细研究,也没精力来研究。我连登录都花了将近半小时。。。。所以就COPY上面说的那个链接的内容了。
----------start---------------

最近上网时遇到过几次访问域名跳转到http://221.231.148.195/forward.html?url=XXXXXXXX然后就没反应的情况,多次发生后不由得让人怀疑。今天查理一下221.231.148.195这 个IP地址是南京电信的。我访问的是一个英文博客,不知道是哪国的但肯定不是中国的。一开始以为DNS被劫持了,所以手动查询DNS,用 WireShark查看没有伪造的数据包。通过国外的线路查询得到的结果是一样的,检查返回的IP确实是对方网站的。Ping对方的IP不通,通过国外线 路可以Ping通,看来劫持是在网络层。

使用WireShark记录HTTP会话的内容,发现第一次访问时返回内容如下。

HTTP/1.1 302 Object moved
Location: http://221.231.148.195/proxy.html?e=xxxxxxxxxxxxxxxxxxxxxxxxxx
Content-Length: 20
Content-Type: text/html
Connection: close
Expires: 0
Cache-control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

<body> ... </body>

浏览器自动请求跳转地址再次返回另一个跳转。

HTTP/1.1 302 Moved Temporarily
Server: nginx/0.7.65
Date: Thu, 12 Aug 2010 00:58:42 GMT
Content-Type: text/html
Content-Length: 161
Connection: close
Location: http://221.231.148.195/forward.html?url=原来请求的URL

<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>nginx/0.7.65</center>
</body>
</html>

但是在我的浏览器里这一次跳转没能再返回任何东西,如果能的话会是以下内容

<html>
<head>
<script type="text/javascript" src="/js/jquery.min.js"></script>
<script type="text/javascript" src="/js/jquery.cookie.js"></script>
<script type="text/javascript" src="/js/jquery.query.js"></script>
<script type="text/javascript">
$(function(){
var value=$.cookie('_GB_ADV_STATE');
if(value==undefined){
$.cookie('_GB_ADV_STATE',"1",{expires:1});
window.location.href="/index.htm?3007";
}
else{
window.location.href=$.query_reg("url");
}
});
</script>
</head>
<body>
</body>
</html>

可以看到如果没有_GB_ADV_STATE这个Cookie的设置Cookie并且会跳转到2345网址导航,如果有这个Cookie的就再跳转到原来要访问的地址。Cookie的有效期设置是一天。 另外在我的Cookie里发现了cnzz_eid的东西,2345网址导航里也嵌入了访问统计的脚本,怀疑2345网址导航在利用这种劫持手段骗取独立访问数。

让我们大家一起谴责这种行为

  • 对方的服务器默认TTL用的是64,而劫持服务器返回的包到达我这里是2xx所以肯定不是原服务器的。TCP的建立时返回的SYN ACK包的TTL是5x,但是HTTP响应的第一个包是2xx。
  • 从代码判断,劫持设备只劫持短期内的第一次访问。不然会死循环。
  • 为什么这两天出问题了,一直死循环跳不到要去的页面了,难道劫持设备出错了?数据包显示在第二次访问时还是被劫持了。所以死循环了。

---OVER--
我没有找到上面的COOKIE,或许消失了(最后稍微正常了,果然发现了这个cookie)。或许有其他情况,反正我是在发现打开网站要很长时间后,我用firebug的net功能查看的,发现多了一个foward.html和proxy.html的记录。才想到用google搜索类似问题的。唉。什么时候有个清静的网络 ?你要做站你就做,你愿意花钱也没啥事,你不能拿普通站长的站来开心吧。我不能代表大多数人,我只能代表我自己谴责一下类似事件的发生。TMD,给我滚

Editplus 自动检查语法

Editplus 自动检查语法

用惯了IDE写PHP,再次回到Editplus的时候总有点不太习惯,比如没有函数提示了(当然也可以自己打造)。不过。。语法检查总还是需要的,总不能自己程序传到服务器上后运行了才知道语法有问题吧?于是利用Editplus的小功能aftersave。改造了一下。

进入editplus的选项设置,点击左侧的User tools菜单,在右侧的Group and Tools下拉框中选择 AutoSave:after save。

1eb4da3ab0048828ba2a29d3c4545c6a

在右侧的 add tool里选择 program。然后输入:标题,程序所在位置,以及参数。。

php语法检测是php.exe -l filename,这个可以通过命令行下运行 php -? 了解。然后要catch output,以及针对current file。。

OK,这样就over了。

看看效果?

95ce8150adb63552a893ffe8e83d2ddb