网站的手机浏览界面友好度评估

热度:

无法天天时时刻刻守在电脑旁(重量级网络接入方案),笔记本+移动上网卡也不是完美解决方案(虽然可移动,但仍属重量级),随时随地能把互联网放在手中的方式就是手机上网了(轻量级,方便实用)。
摩托罗拉A1600+50M流量GPRS套餐+可爱的Opera mini构成了me的日常移动上网最佳解决方案。其实,me的手机阅读体验有相当长时间了,最早是2003年看jar版的小说起,但从2005年用GPRS上网后就以移动冲浪为主了。这三四年的手机上网经历中,me明显感觉到了移动(mobile)的强劲发展:更多实用应用推出并逐渐成熟,各大网站也纷纷在移动界面上投入了更多的精力。下面聊聊经常逛的一些网站的手机浏览体验。
Google最佳,9分。它的各个网站在Opera mini下都不变形(这是是否友好的主要评价标准,不是me独断,而是这个标准的背后是对W3C网页规范的支持拥抱度),在按钮链结设计上也充分考虑了手机小屏幕的限制,很人性化,操作方便。另外,猛捧Google的另外一个重要原因是它现在几乎是移动互联网的旗手,开发投入推广都下了很大力度,促进了网络移动的快速发展。
其应用中me用的最多的是Google Reader,拿来看博文最合适,很方便,唯一不足的是如果文章较长或当前页面浏览时间太长,share文章时服务器会出错提示失败。另外还有其看家本领搜索也做的好,不过因为落地中国必须和中国移动合做,被相应的阉割了,me不喜用。其它应用还有iGoogle、notebook、Google maps(不错)等。
Twitter不错,7分。有专门的移动版,界面进行了相应简化和优化,直观有效,me平常就用它更新消息,不用再劳累装jar类的第三方程序。
Wordpress,不错,6分。因为经营blog的缘故,me对其后台前台对移动浏览的支持体验甚多,总体感觉良好。在后台方面,无论是2.3还是最新的2.7,页面都没有变形,进行各种管理操作(如审核评论、启用插件等)都可以正常进行,但也仅仅是能进行而已,没有专门进行界面优化。在前台方面,me的blog页面显示正常,没有变形。但Huogo的部落格页面就无法正常显示(超宽),可能原因是主题模板问题吧。
其它网站略评如下:
facebook,5分;
cnbeta,5分;
译言,4分。
整体感觉移动冲浪的体验会越来越好,因为信息化、无时无刻、随时随地的交流是大家的需要,这是趋势,大势所趋。

黑客黑啊

热度:

今年五月份在后台发现不少不良访问记录,好不容易清净了一段时间。今天发现居然又来了。IP是121.69.29.10,要求的链接都是以asp或php结尾的,还有rar,这些玩意儿一看就是试图黑了me的blog。从昨晚到今天上午总共有高达6000多次访问,唉,真是锲而不舍啊。修改了.htaccess文件,添加如下规则:

Order Deny,Allow
Deny from 121.69.29.10
Deny from 65.55.109
Deny from 65.55.110
Deny from 65.55.165
Deny from 65.55.232
Deny from 65.55.107

终于清静了。

附恶意访问请求清单:

"/upload/servusu.asp"
"/image/servusu.asp"
"/inc/shell.asp"
"/inc/shell.asp"
"/ad/servusu.asp"
"/bbs/xiao.asp"
"/admin/servusu.asp"
"/bbs/servusu.asp"
"/manage/servusu.asp"
"/bbs/servusu.asp"
"/manage/servusu.asp"
"/admin/servusu.asp"
"/bbs/servusu.asp"
"/manage/servusu.asp"
"/ad/servusu.asp"
"/ad/servusu.asp"
"/admin/servusu.asp"
"/image/digshell1.asp"
"/inc/www.zip"
"/config/www.zip"
"/phpmyadmin/www.zip"
"/uploadfiles/myup.asp"
"/uploadfiles/myup.asp"
"/uploadfiles/digshell1.asp"
"/uploadfiles/myup.asp"
"/upload/myup.asp"
"/upload/myup.asp"
"/uploadfiles/digshell1.asp"
"/ad/digshell1.asp"
"/upload/myup.asp"
"/inc/digshells.asp"
"/uploadimage/网站.rar"
"/user/网站.rar"
"/api/网站.rar"
"/inc/网站.rar"

————————————(更新:2008年11月17日)————
又来了一个,唉。高手们歇歇吧,me这里又没有什么。谢谢啦。
IP是203.86.0.214,查询来自广东省深圳市 润迅通信,访问的地址形如/discuz/forumdata/cache/eval.php

PHP、MYSQL编程笔记

热度:

开发StatPressCN过程中恶补PHP和MYSQL知识,水平不行,只好边干边学,呵呵。对一些基础不高深的东东简单梳理下,免得忘了下次重来。

一、MYSQL

  1. 用MYSQL语句直接修改数据。update `db_name` set `urlrequested` = replace(`urlrequested`,'\'','') where `urlrequested` like "%\'",把以'结尾的链接请求末尾的'去掉。replace可以保证key的连续性,如果先删除后添加就没有这个好处了。
  2. 插入记录。INSERT INTO users(name, age) VALUES('姚明', 25), ('比尔.盖茨', 50), ('火星人', 600);如果values中为空,则添加默认值为基础的记录。
  3. 更新记录。需要配合where条件判断。UPDATE users SET age = 30 WHERE id = 12;以上语句都很危险,如果where没有设置的话会更新所有的数据记录,所以在进行类似操作的时候一定要先备份,再审慎
  4. 删除数据有两个命令delete和TRUNCATE。DELETE FROM users WHERE name = 'Mike' ORDER BY id DESC LIMIT 6;如果有自动增加的字段,用没有where的delete和truncate都会让这个字段从0开始,如果不想这样,可以用带where 1的语句,不过那样的执行效率很多,因为需要遍历整个数据库的所有记录;删除数据时如果使用形如like '$tmpstr%'的语句,一定要判断下$tmpstr是否为空,否则很危险,可能删除掉所有数据,后果严重的很。
  5. 正则表达式在where语句中也可使用,好爽,这下me对正则表达式的学习可以用了。官方文档参见这里。

二、PHP

  1. 分开字符串。$p = explode("=",$url);
  2. 打印出数组中的所有元素。print_r($p);
  3. 计算数组中的元素个数。count($p);
  4. 数组运算,类似于java中集合的概念,很方便。生成一个空数组:$bloglist = Array();向数组中增加一个或几个元素(从末尾):array_push($bloglist,$matches[1]);添加到数组头部之前则是array_unshift($bloglist,$matches[1]) ;从数组尾部删除一个元素用array_pop(),从头部删除一个元素则用array_shift();让数组中元素唯一(即无重复元素,类似于结合set的概念):$bloglist = array_unique($bloglist);迭代输出每个元素可以在foreach中使用as:foreach($bloglist as $blog);判断某元素是否在数组中:in_array($lookingFor, $bloglist),返回布尔值真假;数组中每个元素都有个默认的key,可以这样输出看看:while (list($key,$value) = each($bloglist)) {echo "$key : $value<br>";};还可以合并多个数组$bloglistall = array_merge($bloglist1, $bloglist2);得到两个数组的交集可用array_intersection($bloglist1, $bloglist2);差集可用array_diff($bloglist1, $bloglist2);如需要合集则先array_merge(),然后再用一次array_unique();对数组进行排序则用sort($bloglistall),默认是英文字母顺序;数组的key必须是唯一的,并且key可以设定为字符串,默认是整数。关于数组,更详细的阐释是Array的官方说明(e文版)。
  5. 奇妙的类型自动转换。print("8&heart5"+20);输出结果为28。
  6. 字符串函数:strlen,得到字符串长度;substr($v,start_pos,length),截取指定长度的字符串,不指定长度则自动取到末尾;strripos($v,"postname"),是否包含指定子字符串,返回所处位置或;sscanf,扫描规律字符串得到相应变量;printf,格式化输出字符串;str_replace,替换子字符串;strstr,找到特定子字符串出现的位置;rtrim会删除末尾的空格和换行等字符,包括空格、\t、\n、\r、\0、\x0b;explode会自动处理行尾的空字符。
  7. 正则表达式。ereg('^/[0-9]{4}/[0-9]{2}/{0,1}$',$out_url);匹配/2008/10
  8. 时间函数。println(strtotime("now"));输出1224902867,然后用date函数格式化println(date("c",$d1));输出2008-10-24T18:03:42+08:00,println(date("r",$d1));输出Fri, 24 Oct 2008 18:03:42 +0800,如果用gmdate则输出格林威治标准时,println(gmdate("r",$d1));输出Fri, 24 Oct 2008 10:03:42 +0000;其中时区信息是通过date_default_timezone_set('prc');设定的,prc指中国大陆,也可以是其他,有效值列表见这里;另外strtotime还可以对时间做修正,比如strtotime("3 October 2005")和strtotime("1 days",strtotime("2 October 2005"))输出的结果都是一样的,可以用的修正符号有“+1 week 3 days 7 hours 5 seconds”,可以用+-号。
  9. file打开某个文件并把每行读入数组;fopen打开一个文件返回句柄,可以设定打开方式为读或者写,打开后内容置空;fwrite则写入内容,成功则返回true,否则是false;操作完毕后需要fclose关闭句柄。

三、WordPress

  1. get_option直接得到选项值,不用每次用mysql语句查询。
  2. get_permalink($id)得到帖子的固定链接地址,注意是包含域名的绝对路径,如果需要相对路径,则需要str_replace(get_bloginfo("url"),"",get_permalink($id));
  3. update_option如果该项不存在会自动建立。技巧:如果不能确定某个选项是否存在,则可以先update后再delete。
  4. 数组可以一次性存入option中,存储形如a:2:{s:5:"title";s:8:"my titile";s:4:"body";s:12:"Home is warm";},a指的数组,2是元素个数,title是key名称,5是字符串长度,my titile是title的值,后面body同。
  5. 要调用插件或主题中的函数必须进入wp的主题运作机制,直接调用是无效的,出于安全考虑,同时也是因为无法得到相关环境设定和变量。官方提供的方式是模板,比如您可以自己定义一个page的新模板,然后创建page是选择新模板就可以了。模板标头有特殊要求,见这里
  6. php代码执行其实是以用户权限进行的,因为可以获取文件的在服务器上的本地地址并进行读写操作。

四、HTML

  1. 因为php可以控制输出逻辑,因此可以尽量使用html代码而不是通过php的echo或print输出,这样页面逻辑更清晰,也容易调试。
  2. 表格需要设定宽度后,表格单元中的左对齐右对齐才能起作用。
  3. input type=checkbox name='statpress_showhotdepth' value='checked' xxx

五、CSS

  1. 样式表嵌入标签的方法。<table class='mytable'>……</table>,这种情况下mytable应该在外链的css或者当前页面自定义的css中已经定义过;或者直接写style:<table style="outline:dotted 1px green;">……</table>
  2. 在形如#sidebar h2{……}中,仅对那些class是sidebar中出现的h2才起作用。