标签归档:屏蔽

汗……QQ2009假死崩溃了,只因聊天记录太多

唔,那是几天前的事儿了,因为自己高三备考中,忙,没来得及写上,今天补上,给同样遇到此问题的朋友一个解决方案。下文的“今天”一律指15号那天。

    今天星期天,电脑开着就准备登上QQ,嗯,登上后一切正常。可是……今天怎么突然这么安静了?我的QQ上有N个群,每次登陆都应该跳出N条未读消息的,今天好奇怪。过了一个小时,双击系统托盘的QQ图标,晕,无反应,用任务管理器查看QQ进程,晕死,CPU占用一直很高。本来以为这是什么以外问题,重新登陆下就完事儿了,可是,登了N次,情况依旧,每次登陆后大约1分钟,QQ就开始高CPU占用失去响应。
继续阅读

Mozilla浏览器中Javascript脚本的特殊方法

标题:Mozilla浏览器中特殊的Javascript方法——__noSuchMethod__()
翻译:枫行天下
http://www.msphome.cn/
原作者:Nicholas C. Zakas
原标题:Mozilla JavaScript extension: __noSuchMethod__
发表时间:2009年2月17日
原文地址:
http://www.nczonline.net/blog/2009/02/17/mozilla-javascript-extension-nosuchmethod/


Mozilla的Javascript引擎经常与其他公司的产品有那么一点不同。SpiderMonkey和它的Java接口Rhino,都预留了一些对象的内建方法。在绝大多数的Javascript引擎中,调用一个方法出错都不会返回一个简单的结果;在Mozilla的引擎中,这只是一个默认行为,你可以在这个对象内定义一个__noSuchMethod__()方法忽略这个行为。这个方法(__noSuchMethod__())将会在调用一个不存在的方法出错时被自动调用。

当__noSuchMethod__()被调用时,将会收到两个参数,一个是调用的方法名,另一个是参数列表组成的数组。需要注意的是,这个数组是一个实例数组【instance of Array (not an arguments object) 】,在没有参数的时候也存在这个数组,以下是一个简单的例子:

javascript 代码
  1. //Works in Mozilla JavaScript engines only!
  2. var person = {
  3. name: "Nicholas",
  4. __noSuchMethod__: function(name, args){
  5. alert("Method called ‘" + name +
  6. "’ executed with arguments [" + args + "]");
  7. }
  8. }
  9. //"Method called ‘sayName’ executed with arguments []"
  10. person.sayName();
  11. //"Method called ‘phone’ executed with arguments [Mike]"
  12. person.phone("Mike");

这段代码定义了一个 person 变量,包含一个__noSuchMethod__() 方法。当对象的方法sayName() 和 phone()被调用的时候,__noSuchMethod__()就会被自动执行,以阻止错误的产生,并且继续运行代码。在这个例子中,我们只是显示了方法名和参数列表。

当然,一段正常的程序在运行时一般不会出现调用不存在的方法;这时你有点迷惑了,这并没有什么意义。但是,在一些动态执行的内容中这一点就显得十分必要了。建立一个对象,帮助输出验证的xhtml:

javascript 代码
  1. function HTMLWriter(){
  2. this._work = [];
  3. }
  4. HTMLWriter.prototype = {
  5. escape: function (text){
  6. return text.replace(/[><"&]/g, function(c){
  7. switch(c){
  8. case ">": return ">";
  9. case "<": return "<";
  10. case "\"": return """;
  11. case "&": return "&";
  12. }
  13. });
  14. },
  15. startTag: function(tagName, attributes){
  16. this._work.push("<" + tagName);
  17. if (attributes){
  18. var name, value;
  19. for (name in attributes){
  20. if (attributes.hasOwnProperty(name)){
  21. value = this.escape(attributes[name]);
  22. this._work.push(" " + name + "=\"" + value + "\"");
  23. }
  24. }
  25. }
  26. this._work.push(">");
  27. },
  28. text: function(text){
  29. this._work.push(this.escape(text));
  30. },
  31. endTag: function(tagName){
  32. this._work.push("");
  33. },
  34. toString: function(){
  35. return this._work.join("");
  36. }
  37. };
  38. var writer = new HTMLWriter();
  39. writer.startTag("html");
  40. writer.startTag("head");
  41. writer.startTag("title");
  42. writer.text("Example & Test");
  43. writer.endTag("title");
  44. writer.endTag("head");
  45. writer.startTag("body", { style: "background-color: red" });
  46. writer.text("Hello world!");
  47. writer.endTag("body");
  48. writer.endTag("html");
  49. alert(writer);

这段代码使用了 startTag(), endTag()和 text()三个方法来完成工作。用法有点啰嗦。想象一下如果使用startTag() 和 endTag()两个方法来枚举xhtml标签,你的代码可能是这样:

javascript 代码
  1. var writer = new HTMLWriter();
  2. var result = writer.html()
  3. .head().title().text("Example & Test").xtitle().xhead()
  4. .body().text("Hell world!").xbody()
  5. .xhtml().toString();

既然所有的行为多多少少有点相似,那么费力气在这个对象里面建立这么多相同的方法,实在是增加了冗码。现在,我们可以看出__noSuchMethod__()方法的威力了。看下面如此简单的代码来完成同样的工作:

javascript 代码
  1. function HTMLWriter(){
  2. this._work = [];
  3. }
  4. HTMLWriter.prototype = {
  5. escape: function (text){
  6. return text.replace(/[><"&]/g, function(c){
  7. switch(c){
  8. case ">": return ">";
  9. case "<": return "<";
  10. case "\"": return """;
  11. case "&": return "&";
  12. }
  13. });
  14. },
  15. text: function(text){
  16. this._work.push(this.escape(text));
  17. return this;
  18. },
  19. toString: function(){
  20. return this._work.join("");
  21. },
  22. __noSuchMethod__: function(name, args){
  23. var tags = [
  24. "a", "abbr", "acronym", "address", "applet", "area",
  25. "b", "base", "basefont", "bdo", "big", "blockquote",
  26. "body", "br", "button",
  27. "caption", "center", "cite", "code", "col", "colgroup",
  28. "dd", "del", "dir", "div", "dfn", "dl", "dt",
  29. "em",
  30. "fieldset", "font", "form", "frame", "frameset",
  31. "h1", "h2", "h3", "h4", "h5", "h6", "head", "hr", "html",
  32. "i", "iframe", "img", "input", "ins", "isindex",
  33. "kbd",
  34. "label", "legend", "li", "link",
  35. "map", "menu", "meta",
  36. "noframes", "noscript",
  37. "object", "ol", "optgroup", "option",
  38. "p", "param", "pre",
  39. "q",
  40. "s", "samp", "script", "select", "small", "span", "strike",
  41. "strong", "style", "sub", "sup",
  42. "table", "tbody", "td", "textarea", "tfoot", "th", "thead",
  43. "title", "tr", "tt",
  44. "u", "ul",
  45. "var"
  46. ];
  47. var closeTag = (name.charAt(0) == "x"),
  48. tagName = closeTag ? name.substring(1) : name;
  49. if (tags.indexOf(tagName) > -1){
  50. if (!closeTag){
  51. this._work.push("<" + tagName);
  52. if (args.length){
  53. var attributes = args[0],
  54. name, value;
  55. for (name in attributes){
  56. if (attributes.hasOwnProperty(name)){
  57. value = this.escape(attributes[name]);
  58. this._work.push(" " + name + "=\"" +
  59. value + "\"");
  60. }
  61. }
  62. }
  63. this._work.push(">");
  64. } else {
  65. this._work.push("");
  66. }
  67. return this;
  68. } else {
  69. throw new Error("Method ‘" + name + "’ is undefined.");
  70. }
  71. }
  72. };

这里绝大多数工作是在__noSuchMethod__()里面完成的。这里面包含了所有规范xhtml标签的数组,用来查找相应的方法,既然关闭标签需要在方法前加上一个“x”,检查的工作在最开始进行。如果这样,closeTag开始运行然后“x”在进程开始前从标签名里面去除。接着,Mozilla 存在的indexOf()函数被用来从已知标签列表中执行匹配。如果标签名不存在,错误就会被抛出;另一方面,正常的进程将会被执行。这样,只需变换支持的标签,相应的“方法”就会被创建或者删除。

显然,这不是用在通用版【regular basis】上的,不支持跨浏览器。但这为在一些基于Mozilla脚本解析引擎的浏览器(例如Firefox或者其他)上开发提供了新的思路。 __noSuchMethod__()方法在动态Javascript界面开发中,是一个相当有用的方法。

PS:第一次翻译外文资料,练习练习英语。翻译的难免有错误,还请大家批评指出。

PHP检查(屏蔽)IP、IP段函数

利用本函数可以检查一组IP或IP段是否在禁止列表中

php 代码
  1. /*
  2. *PHP IP检查函数
  3. *Created By 枫行天下
  4. *E-mail: starlight36@163.com
  5. *HomePage: http://www.msphome.cn/
  6. *Last Update: 2009-01-31
  7. *思路来源于ASP中的一个IP检查函数,原作者已不可考证
  8. *
  9. *$userip,要检查的IP,$badiplist,要禁止的IP列表,每个IP用换行符分隔
  10. *若IP在列表中,返回true,否则返回false
  11. *IP列表示例
  12. * 127.0.0.0 #禁止此IP
  13. * 192.168.1.* #禁止此IP段
  14. * 10.10.*.10
  15. * 0.*.0.*
  16. */
  17. echo chkip($ip, "127.0.0.1");

继续阅读