无法登录MyBlogLog

MyBlogLog是我喜欢的一个SNS社区网站,使用它的用户在访问它的其他用户的网站的时候,用户的头像会显示访问的网站上,很有亲切感。现在它虽然加入了Yahoo的大家庭,但是它们的服务却让我大失所望。事情缘由是这样的,MyBlogLog加入Yahoo后,初次使用的用户要登陆MyBlogLog,需要经过Yahoo的登录页面来进行帐号整合,可当我进行到

Last Step!
You’re merging this MyBlogLog acount…
的时候,点击“OK, Merge me!”的按钮却老是出现着这样的错误:
页面:https://www.mybloglog.com/buzz/yjoinm2/

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘:12:{s:14:”yIdAliasSelect”;s:10:”yIdChoseNN”;s:16:”yIdNicknameInput”;s:7:’ at line 1<!– www4.mbl.sp1.yahoo.com uncompressed/chunked Thu Dec 13 01:59:16 PST 2007 –>
经过多次尝试,错误仍在。我就纳闷,这样显眼的错误也没有人来及时补救。不知道是MyBlogLog变差了,还是Yahoo的服务本来差。希望这个问题可以早日解决,我还不想放弃MyBlogLog。

WP升级测试

这是一个升级测试!
今天有空把WordPress从2.04升级到2.3.1,默认的数据库字符是latin1,升级后出现乱码,因为wp-config.php里面多了
define(‘DB_CHARSET’, ‘utf-8’);
define(‘DB_COLLATE’, ‘’);
这两行,按照网上的办法,把utf-8去掉,问题解决。具体原因尚不清楚,有空再看看。

更新:关于Character Set和Collation (Collation是“整理”的意思,用于不同字符的比较,排序等,如按字母或汉语拼音排序)

  • 一个Character Set都可以对应多个Collation,并且有默认的Collation
  • 以_ci结尾的Collation,是不区分大小写(Case- Insensitive)的
  • 以_cs结尾的Collation,是区分大小写(Case-Sensitive)的
  • 以_bin结尾的 Collation,是二进制(Binary)的。
    关于如何修改Collation

对于新建Column:

ALTER TABLE tbl_name
[DEFAULT CHARACTER SET character_set_name] [COLLATE collation_name]

对于所有新建table
mysqld –default-character-set=gbk –default-collation=gbk_chinese_ci

这是常用的Character Set和Collation
mysql&gt; SHOW CHARACTER SET; +----------+-----------------------------+---------------------+--------+ | Charset | Description | Default collation | Maxlen | +----------+-----------------------------+---------------------+--------+ | big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 | | latin1 | cp1252 West European | latin1_swedish_ci | 1 | | latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 | | ascii | US ASCII | ascii_general_ci | 1 | | ujis | EUC-JP Japanese | ujis_japanese_ci | 3 | | sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 | | gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 | | gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 | +----------+-----------------------------+---------------------+--------+ 你可以使用mysql&gt; SHOW COLLATION LIKE 'latin1%';查看更多的latin1的COLLATION

博客移到Serversea

空间终于换到了Serversea,虽然在国外,感觉速度还可以,支持的模块也比以前多,之前不支持URL rewrite功能,现在终于可以让博客页面地址简单化,利于搜索引擎收录。后台使用的是plesk,和cpanel差不多功能,这两款应该是目前国外使用的比较多的两种虚拟空间控制系统。下面是空间的主要配置:

PHP Version 4.3.9 (不足的是现在都PHP 5.2.5,还没有升级到PHP5,zend framework也没办法测试啦)
(关于PHP Startup: Unable to load dynamic library php_mysql.dll的错误:解决办法复制libmysql.dll到/system32/目录下,重启Apache就可以了)
‘./configure’ ‘–build=i686-redhat-linux-gnu’ ‘–host=i686-redhat-linux-gnu’ ‘–target=i386-redhat-linux-gnu’ ‘–program-prefix=’ ‘–prefix=/usr’ ‘–exec-prefix=/usr’ ‘–bindir=/usr/bin’ ‘–sbindir=/usr/sbin’ ‘–sysconfdir=/etc’ ‘–datadir=/usr/share’ ‘–includedir=/usr/include’ ‘–libdir=/usr/lib’ ‘–libexecdir=/usr/libexec’ ‘–localstatedir=/var’ ‘–sharedstatedir=/usr/com’ ‘–mandir=/usr/share/man’ ‘–infodir=/usr/share/info’ ‘–cache-file=../config.cache’ ‘–with-config-file-path=/etc’ ‘–with-config-file-scan-dir=/etc/php.d’ ‘–enable-force-cgi-redirect’ ‘–disable-debug’ ‘–enable-pic’ ‘–disable-rpath’ ‘–enable-inline-optimization’ ‘–with-bz2’ ‘–with-db4=/usr’ ‘–with-curl’ ‘–with-exec-dir=/usr/bin’ ‘–with-freetype-dir=/usr’ ‘–with-png-dir=/usr’ ‘–with-gd=shared’ ‘–enable-gd-native-ttf’ ‘–without-gdbm’ ‘–with-gettext’ ‘–with-ncurses=shared’ ‘–with-gmp’ ‘–with-iconv’ ‘–with-jpeg-dir=/usr’ ‘–with-openssl’ ‘–with-png’ ‘–with-pspell’ ‘–with-xml’ ‘–with-expat-dir=/usr’ ‘–with-dom=shared,/usr’ ‘–with-dom-xslt=/usr’ ‘–with-dom-exslt=/usr’ ‘–with-xmlrpc=shared’ ‘–with-pcre-regex=/usr’ ‘–with-zlib’ ‘–with-layout=GNU’ ‘–enable-bcmath’ ‘–enable-exif’ ‘–enable-ftp’ ‘–enable-magic-quotes’ ‘–enable-sockets’ ‘–enable-sysvsem’ ‘–enable-sysvshm’ ‘–enable-track-vars’ ‘–enable-trans-sid’ ‘–enable-yp’ ‘–enable-wddx’ ‘–with-pear=/usr/share/pear’ ‘–with-imap=shared’ ‘–with-imap-ssl’ ‘–with-kerberos’ ‘–with-ldap=shared’ ‘–with-mysql=shared,/usr’ ‘–with-pgsql=shared’ ‘–with-snmp=shared,/usr’ ‘–with-snmp=shared’ ‘–enable-ucd-snmp-hack’ ‘–with-unixODBC=shared,/usr’ ‘–enable-memory-limit’ ‘–enable-shmop’ ‘–enable-calendar’ ‘–enable-dbx’ ‘–enable-dio’ ‘–enable-mbstring=shared’ ‘–enable-mbstr-enc-trans’ ‘–enable-mbregex’ ‘–with-mime-magic=/usr/share/file/magic.mime’ ‘–with-apxs2=/usr/sbin/apxs’

disable_functions
shell_exec,exec,virtual,passthru,proc_close,proc_get_status,proc_open,proc_terminate,system

Apache/2.0.52(Red Hat)

Loaded Modules
core prefork http_core mod_so mod_access mod_auth mod_auth_anon mod_auth_dbm mod_auth_digest util_ldap mod_auth_ldap mod_include mod_log_config mod_env mod_mime_magic mod_cern_meta mod_expires mod_deflate mod_headers mod_usertrack mod_setenvif mod_mime mod_dav mod_status mod_autoindex mod_asis mod_info mod_dav_fs mod_vhost_alias mod_negotiation mod_dir mod_imap mod_actions mod_speling mod_userdir mod_alias mod_rewrite mod_proxy proxy_ftp proxy_http proxy_connect mod_cache mod_suexec mod_disk_cache mod_file_cache mod_mem_cache mod_cgi mod_fcgid mod_jk mod_perl sapi_apache2 mod_python mod_ssl

bcmath
BCMath support enabled

bz2
BZip2 Support Enabled
BZip2 Version 1.0.2, 30-Dec-2001

calendar
Calendar support enabled

ctype
ctype functions enabled

curl
CURL support enabled
CURL Information libcurl/7.12.1 OpenSSL/0.9.7a zlib/1.2.1.2 libidn/0.5.6

dba
DBA support enabled
Supported handlers cdb cdb_make db4 inifile flatfile

dbx
dbx support enabled
dbx version 1.0.0
supported databases MySQL ODBC PostgreSQL Microsoft SQL Server FrontBase Oracle 8 (oci8) Sybase-CT

Directive Local Value Master Value
dbx.colnames_case lowercase lowercase

dio
dio support enabled

domxml
DOM/XML enabled
DOM/XML API Version 20020815
libxml Version 20616
HTML Support enabled
XPath Support enabled
XPointer Support enabled
DOM/XSLT enabled
libxslt Version 1.1.11
libxslt compiled against libxml Version 2.6.14
DOM/EXSLT enabled
libexslt Version 1.1.11

exif
EXIF Support enabled
EXIF Version 1.4 $Id: exif.c,v 1.118.2.35 2005/03/05 18:30:47 rasmus Exp $
Supported EXIF Version 0220
Supported filetypes JPEG,TIFF

ftp
FTP support enabled

gd
GD Support enabled
GD Version bundled (2.0.28 compatible)
FreeType Support enabled
FreeType Linkage with freetype
GIF Read Support enabled
GIF Create Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled
XBM Support enabled

gettext
GetText Support enabled

gmp
gmp support enabled

iconv
iconv support enabled
iconv implementation glibc
iconv library version 2.3.4

imap
IMAP c-Client Version 2001
SSL Support enabled
Kerberos Support enabled

ldap
LDAP Support enabled
RCS Version $Id: ldap.c,v 1.130.2.10 2004/06/01 21:05:33 iliaa Exp $
Total Links 0/unlimited
API Version 3001
Vendor Name OpenLDAP
Vendor Version 20213

mbstring
Multibyte Support enabled
Japanese support enabled
Simplified chinese support enabled
Traditional chinese support enabled
Korean support enabled
Russian support enabled
Multibyte (japanese) regex support enabled

mbstring extension makes use of “streamable kanji code filter and converter”, which is distributed under the GNU Lesser General Public License version 2.1.

mime_magic
mime_magic support enabled

mysql
MySQL Support enabled
Active Persistent Links 0
Active Links 0
Client API version 4.1.20

openssl
OpenSSL support enabled
OpenSSL Version OpenSSL 0.9.7a Feb 19 2003

overload
User-Space Object Overloading Support enabled

pcre
PCRE (Perl Compatible Regular Expressions) Support enabled
PCRE Library Version 4.5 01-December-2003

posix
Revision $Revision: 1.51.2.2 $

pspell
PSpell Support enabled

session
Session Support enabled
Registered save handlers files user

shmop
shmop support enabled

sockets
Sockets Support enabled

standard
Regex Library Bundled library enabled
Dynamic Library Support enabled

tokenizer
Tokenizer Support enabled

wddx
WDDX Support enabled
WDDX Session Serializer enabled

xml
XML Support active
XML Namespace Support active
EXPAT Version expat_1.95.7

yp
YP Support enabled

zlib

想去韩国?先准备8万块

今天知道一个朋友准备自助去韩国玩,听讲要了5万块存款证明和3万块保证金,这对我来说很是一惊。再问问去欧洲如何?回答是起码20万。看来要去发达一点的国家逛逛还真是不容易。就算自己高风亮节绝不会赖在国外不回来,有稳定工作,要像老美一样自由方便的游遍全球,我看还有好几十年。再说要有闲钱可以准备十几二十万存在银行或是交保证金,还不如拿去做其他投资。真的到了有这些闲钱做担保,自己估计也快走不动了。出去玩本来是件轻松而令人开心的事,但是要我到处借钱背负巨债,提心掉胆的出去玩,那是一万个不愿意!苦笑之余,只有暂时把自己的目的地订在自己可以接受的范围,想出国去玩,先看看你得准备多少钱!

厌倦了Javascript和HTML的混合写法?试试Behaviour

behaviour.gif
我们都知道PHP程序最好做到前后台的分离,尽量避免PHP加插到HTML中的做法。其实同样的,我们也可以做到Javascript与HTML的分离。 Behaviour就是这样一个基于Ajax的js功能原型。现在我们来看看对比:

比如我们想给一个连接添加JS功能。常规的写法如下:

[code lang=”html”]My action

[/code]
有了Behaviour,我们可以这样写:
[code lang=”html”]
My action [/code]
HTML干净了很多吧!非常感谢Ben Nolan!

Symfony - 基于PHP5的开源框架

最近yahoo bookmarksDel.icio.us的新版开发都是基于一个名为Symfony的PHP5开源框架而开发。symfony致力于加快网站应用程序的开发和维护效率,减少代码的重写,做到方便和有效的控制。主要有如下特征:

  • 简单的模板和帮助系统。
  • 缓存控制机制
  • smart URLs:URL路径优化
  • scaffolding化:Form和数据库view items标准
  • 多种语言化(亦为i18n) 支持
  • 对象模型和MVC模式分离
  • Ajax支持
    相对于其它框架,有如下优势:

  • 优秀的高质量的文档说明,有利于开源系统的推广和学习

  • 明确和广泛的可配置性
  • 框架团队的积极开发和不断进步
  • 使用大量优秀组件,而不是重复建车轮

测试自己是左脑还是右脑型的人

news.com.au提供了一张有趣的GIF动画图片,用于测试自己是左脑还是右脑型的人。(顺时针表示用右脑思考,逆时针是左脑)

right-or-left-brain.gif

我初初一看感觉是在顺时针钟旋转,可是当我从倒影往上看的时候,又变成了逆时针。

这是关于左右脑适合做的事情的解释:

左脑功能
利用逻辑
详细导向
事实细则
文字与语言
目前和过去
数学和科学
可以理解
明知
承认
命令/模式观感
众所周知对象名称
现实基础
形式策略
实用
安全

右脑功能
使用感受
“大图画”为本
想象力规则
符号和图像
当前和未来
哲学与宗教
可以”弄” (即含义)
相信
赞赏
空间知觉
知道目标函数
基于幻想
礼物可能性
浮躁
冒险
有个同事横看竖看,左看右看,始终是顺时针。不知道你看到的是顺时还是逆时针呢?

更新:最近发现某些不良blog引用这幅图,无良浪费本站带宽,所以将原图删除,如需原图可以去原站找

变得沉默了

前两天收到这样一条短信:

XX中心重要通知,在XX大期间,立即关闭主机上的所有坛子,如不执行,一旦发现,本中心将强行关闭主机。
郁闷之余,觉得在互联网上游动的空间越来越小,各种各样的要求和指示,就像密集的铁丝网,牢牢实实地捆住了一个立方体。记得最初写博客的想法是海阔天空,记录下自己的一点一滴,当然包括很多想法。然而每当我想表达的时候,我又一次又一次的觉得很难表达,甚至没有表达。无奈之下博客已经变成了一个技术博客,一个狭隘的无趣的没有活力的空间。我是真的变得沉默了吗?年纪越来越大,日子越来越少,什么时候才能让我畅意的在天空翱翔。

杭州、绍兴游


杭州绍兴


国庆到了,年假五一已经休过,放假7天,说实在的,这个时间不长也不短,远的去不了,近的又没兴趣。
闲着无聊在网上找寻可能的目的地,无意中看到杭州机票530,觉得还不错,索性就确定去那里转转。于是就这样,第二天就我已经坐在西湖东岸边发呆了。发完呆,又绕着西湖转了一圈,从湖滨到天竺,再到灵隐和岳庙,走过白堤、苏堤,来到雷峰塔。感觉还不错,虽然人很多,但是杭州这地方,还真得人多,才能感受到那种历史悠久的繁华和沧桑。

回来还有点时间顺便去绍兴看了看鲁迅和周恩来,因为离萧山机场很近。去了才知道,绍兴的名人还真不少,贺知章,朱自清,钱三强…多到我记不住,后悔没拍下来。失望的是咸亨酒店、百草园的影象和我小时候的印象相距甚远,三味书屋倒是原汁原味,另外乌篷船也值得一坐,觉得不虚此行,只怕来晚一步,看的东西就更少了。

Windows下面php5找不到php_curl.dll的问题

由于要用到Curl,所以设置的时候提示这样的错误:

unable to load dynamic library ‘….php_curl.dll’
我的环境是Apache/2.0.59 (Win32) PHP/5.2.3,按理说php5的安装是很简单的,直接指定extension_dir = “c:/php523/ext/“就可以了,像gd2, mysqli和mysql_dll都没问题,唯独 php_curl.dll总是提示出错。试着修改PATH路径,把DLL复制到/windows/system32/,还是提示找不到php_curl.dll。

最后,终于在php.net上找到这么一句话: Note to Win32 Users: In order to enable this module on a Windows environment, libeay32.dll and ssleay32.dll must be present in your PATH.

在php根目录找到这两个文件,复制 libeay32.dll 和 ssleay32.dll到/windows/system32/,终于搞定,phpinfo出现如下信息:

cURL support enabled
cURL Information libcurl/7.16.0 OpenSSL/0.9.8e zlib/1.2.3

Js Err: 'button[].type' is null or not an object

今天作一个ajax的project遇到一个有趣的问题,由于用惯了PHP,我喜欢在array的最后一项后面加上逗号,而且一直也没出现什么差错。写javascript的时候我还是按照这样的习惯,FireFox也没提示任何的JS运行错误。不料终于在IE上遇到了问题,出现了下面的错误:

试着把逗号去掉,问题解决。看来IE还是很死板的来解析javascript。不过这也可以看作是Javascript在IE和基于Mozilla的浏览器之间的一点区别。回想起来,别看这个问题很小,还真花了我2个小时的时间,有些时候还真让人歇斯底里,觉得好像是老天爷故意在和你作对一样,挠破头皮也没辙。不过也应该是自己的水平还有待提高。^_^!

为Discuz增加关键字过滤的功能

最近一个朋友的discuz论坛上的某些页面由于含有某些敏感词语而被和谐掉了,用户访问这些页面就会自动跳转到含有这样一个提示的页面:“页面含有不当的词语-XXX,请尽快删除。”,估计是空间提供商做了关键字的过滤。朋友可就麻烦了,因为想要登录到论坛后台修改那些含有被和谐内容都不行,只要页面含有那些关键字,任何网页都无法打开。我的解决办法是只有用程序自动替换被和谐的内容。

根据discuz显示内容的特点,它是通过include模板文件来生成网页,所以我们可以在include template前后做手脚,利用ob_start来控制缓存,替换点相关词语后再flush缓存的内容。

曾经想过两个比较复杂的方案,让被和谐的内容进行urlencode编码,然后用javascript来对网页上的urlencode编码进行解码。后来卡壳在javascript的解码问题上,希望以后能够解决这个问题。 另外一种办法是用图片来显示,程序自动将相关内容转成图片来显示。这两种办法应该都是可行的,碍于时间问题就先搁置一下。不知道还有其他什么好办法。

CSS:IE下非链接HOVER的解决办法

IE下CSS样式表只支持A的HOVER效果,这里有一个解决办法让IE和其他浏览器一起痛快地HOVER:
[code lang=”css”]


None A Hover Test
[/code]

感受FLASH CS3

这两天终于有时间感受了一下FLASH9 CS3,感觉FLASH确实有了质的飞跃,记得04年的时候选择做Java Applet,是由于FLASH无法实现音频振幅的实时提取,一些三维效果的效率过低等等。如今已经今非昔比,特别是Papervision 3D在三维实时效果上的运用几乎让人叹为观止。做了一个基于AS3的MP3播放器玩玩,FLASH实在太好玩。

这里有一些AS3常用到的东东:

HTML内嵌变量与SWF的传递

HTML代码: < param name=”FlashVars” value=”url=file.mp3”>

AS3: var url:String=loaderInfo.parameters.url;

禁止SWF放大缩小:

[code lang=”actionscript”]import flash.display.Stage;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;

var swfStage:Stage = this.stage;
swfStage.scaleMode = StageScaleMode.NO_SCALE;
swfStage.align = StageAlign.TOP_LEFT;[/code]

自定义菜单:

[code lang=”actionscript”]
var mycd:ContextMenu=new ContextMenu();
var item:ContextMenuItem=new ContextMenuItem(“zhaiduo’s Menu”);
mycd.hideBuiltInItems();
mycd.customItems.push(item);
item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,openurl);
this.contextMenu=mycd;
[/code]

关于mysql_real_escape_string

今天有空看了看多用户博客lyceumWordPress MU。在WP-db.php有这样一段代码:

[code lang=”php”]function escape($string) {
return addslashes( $string ); // Disable rest for now, causing problems
if( !$this->dbh || version_compare( phpversion(), ‘4.3.0’ ) == ‘-1’ )
return mysql_escape_string( $string );
else
return mysql_real_escape_string( $string, $this->dbh );
} [/code]

很好的说明了addslashes和mysql_real_escape_string的区别,虽然国内很多PHP coder仍在依靠addslashes防止SQL注入(包括我在内),我还是建议大家加强中文防止SQL注入的检查。

addslashes的问题在于黑客可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会被看作是单引号,所以addslashes无法成功拦截。

当然addslashes也不是毫无用处,它是用于单字节字符串的处理,多字节字符还是用mysql_real_escape_string吧。

另外对于php手册中get_magic_quotes_gpc的举例:

[code lang=”php”]if (!get_magic_quotes_gpc()) {
$lastname = addslashes($_POST[‘lastname’]);
} else {
$lastname = $_POST[‘lastname’];
}[/code]

最好对magic_quotes_gpc已经开放的情况下,还是对$_POST[‘lastname’]进行检查一下。

广州直飞印度

前两个星期去南越王博物馆感受了一下印度佛像,今天看到广州直飞印度的票价,让我更加心动了。^_^。好好准备,等待明年出发。

广州至印度,新航最新特价

广州始发至

阿姆利则/加尔各答/班加罗尔/特里瓦得琅/新德里/科钦/孟买/马德拉斯
双程30天3250

使用条件

  1. 销售日期:06年10月4日-11月10日
  2. 旅行日期:06年10月4日-11月30日
  3. 回程只允许回广州
  4. 不设儿童优惠票价
  5. 全程需要确定旅行日期
  6. 因无当天航班接驳的行程,去成允许在新加坡停留,否则去程不允许在新加坡停留,回程无限制
  7. 不可退票
  8. 以上机票以电子客票方式出票
  9. 以上票价以人民币结算,不包含任何税项,具体以电话查询为准
    广州新白云国际机场已经拥有了49条国际航线,从广州出发可到达国外50多个城市。直飞东南亚、中东、大洋洲和非洲的距离最短。热门目的地如普吉、迪拜、仰光、万象、加德满都等地,热门航线如:广州-迪拜-广州、广州-罗安达-广州、广州-仙台-广州、广州-札幌-广州、广州-加得满都-广州、广州-德里-广州、广州-吴哥窟(暹粒)-广州、广州-普吉-广州、广州-仰光-广州、广州-万象-广州。

一道微软面试题

CU上面有这样一道微软面试题:

圆圈上顺时针排列着1,2,3,….2000 这2000个数. 从1开始,顺时针隔一个拿走一个(1最先被拿走,下一个是3被拿走). 问最后剩下是哪一个数字.
据说这是约瑟夫问题(Josephus’ Problem),约瑟夫问题又是循环链表应用的典型例子。在苏格兰数学家Peter Guthrie Tait给出这个问题的通解后,又被称为Tait’s Problem。
这是解决办法:
(2000循环左移1)-1=1952 2000:
11111010000 2000循环左移1:
11110100001 2000循环左移1-1:
11110100000=1952
我用PHP试了一下,但是没有上面的简介,汗!

[code lang=”php”]

$arr=array();
for($i=1;$i<=2000;$i++){
$arr[]=$i;
}
echo “

“;
$tmp_arr=array();
$is_f=0;
$tmp_arr=$arr;
while(count($tmp_arr)>1){
for($i=0,$mx=count($arr);$i<$mx;$i++){
$item=$arr[$i];
if($item!=””){
if($is_f==1){
$is_f=0;
}else{
$arr[$i]=””;
$is_f=1;
}
}
}
$tmp_arr=array_filter($arr, “myempty”);
}
print_r($tmp_arr);

function myempty($var){
return ($var!= “”);
}

[/code]

接触RSA算法

前两天刚看了RSA生成公匙和私匙的文章,没想到今天就有机会亲自去试试。

主要原理就是:利用RSA算法生成公钥和私钥两个字符串,分别保存在两个文件中,公钥是公开的,供其他人加密数据使用,而私钥是属于私人保管的用于解密数据

RSA - 非对称加密演算法主要功能包括:

创建密钥
按指定密钥长度初始化密钥(32位-2048位)
计算e,d,n值,生成密钥对(公钥和私钥)
n为两素数(q,p)之积: n=pq
取任一数e,要求满足e<(p-1)
(q-1)并且e与(p-1)(q-1)互素(就是最大公因数为1)
从而计算d
e%t==1
n d两个数就构成公钥;
n e两个数就构成私钥

获取保存公钥
获取保存私钥

用公钥加密数据
导入需要加密的数据
导入公钥
利用公钥中e和n。对于m计算密文的公式是m的e次方再与n求模。
获取数据的大整数
加密数据
保存加密后数据

用私钥对加密数据解密
读取加密数据
导入私钥
取得私钥的参数d,n
解密数据
RSA的缺点在于计算速度慢,另外如果大数n越容易被分解,就越容易被破解,推荐密钥长度最少1024位。

关于用PHP来实现RSA,我主要参考了PEAR上的Crypt_RSA模块,另外遇到的问题在于大整数十进制和十六进制的转换,php.net 也有不少解决方案。

[code lang=”php”]
function mydec2hex($number){
$hexvalues = array(‘0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’A’,’B’,’C’,’D’,’E’,’F’);
$hexval = ‘’;
while($number != ‘0’){
$hexval = $hexvalues[bcmod($number,’16’)].$hexval;
$number = bcdiv($number,’16’,0);
}
return $hexval;
}
[/code]

总的来说,感觉对RSA有了初步的认识,希望能够做些更深入的学习。

补充:关于同余(congruence)的概念

n 是某个正整数,m1m2 是整数,如果 n 可以整除 m1 - m2 , 那么:m1m2, 在模 n 之下同余 (mi is congruent to m2 modulo n), 记为:tongyu.gif

Red Hat Enterprise Linux (RHEL)5相关版本介绍

rhel5/ Red Hat Enterprise Linux (RHEL) 5
Red Hat于2007年3月14日正式发布了RHEL5.
1. 完整集成新的服务器和存储虚拟技术, 能很好与红帽集群技术工作.

Red Hat实现了让你可以在本地服务器上、你的存储区区域网络SAN、跨群集上管理大量存储数据的需求。RHEL 5还支持iSCSI磁盘阵列,以及具有“以太网远程直接内存存取(RDMA)”功能的InfiniBand。对于那些喜欢在一个文件系统进行大数据量存储的用户,RHEL 5的Ext3文件系统现在将支持16T的文件系统——这已经不小了。

2. 容错性方面, 提供了红帽集群套件, 红帽Global File System(Global文件系统)和集群逻辑卷管理器. 这项技术能使任何系统上匿名用户能安全访问和共享应用数据.
3. 内核从2.6.9升级到2.6.18. 加强了系统的内核: 比如程序移植, 网络和输入/输出子系统, 另外也加强了系统的性能和扩展性. 另外还包括加强的安全性, 比如包含全局安全配置(Comprehensive Security Profiles)和增强的编译器和运行缓冲管理技术.
4. 虚拟技术支持x86和x86-64平台. 提供了基于Itanium 2的预览Xen技术, 它的虚拟管理器能方便管理安装任务和管理Xen虚拟主机.

Red Hat在RHEL 5里增加了虚拟化管理功能,这样就使任何用户都可以在Linux平台上安装虚拟机(Vrtual Machine,VM)——最起码他们可以尝试去安装。为了成功安装一个虚拟机。使用RHEL 5,任何相当有经验的系统管理员都能够毫不费劲地创建一个虚拟机。而且一旦安装成功,还可以很方便地对虚拟机进行管理。

基于Linux内核(Kernel-based)的虚拟机(Virtual Machine)——即KVM——是最新的Linux内核(2.6.20)中的最热点功能。另外,一些开源项目中也加入了对虚拟化技术的研究和研发,比如 OpenVZ、SWSoft、Parallels项目.

5. 测试版发行仅有两个不同版本: RHEL 5 Server 和RHEL 5 Client (aka Desktop). 客户版本只能运行在x86和x86-64平台上.
6. 红帽将在RHEL 5桌面投入更多的时间.

rhel5 Client
Client版,也就是桌面版(Desktop),Desktop版包含的办公软件比较多.

rhel5 x86 64
for 64位操作系统

CentOS4.5
是 RHEL4 U5(Red Hat Enterprise Linux)源代码再编译的产物,而且在 RHEL 的基础上修正了不少已知的 Bug ,相对于其他 Linux 发行版,其稳定性值得信赖。

CentOS 5.0
CentOS5是用RedHat Enterprise 5源码重新编译的版本,CentOS5的核心就是 RHEL5。CentOS是Red Hat Enterprise Linux的100%兼容的重新组建,并完全符合Red Hat的再发行要求. CentOS面向那些需要企业级操作系统稳定性的人们,而且并不涉及认证和支持方面的开销.

CentOS5新添加的功能简介:

1、Xen虚拟功能(亮点)

该功能允许一台计算机在“不同独立部分”(虚拟计算机)运行多款操作系统,同是还允许四台虚拟计算机运行RHEL&nbsp5&nbspServer。
不过,它还增加了一个名为RHEL&nbspAdvanced&nbspPlatform功能,去支持无限多的虚拟机运行,另外,还加入了Global&nbspFile&nbspSystem。

2、支持四核处理器

基于AIGLX和Compiz软件,&nbspRHEL&nbsp5具有奇妙的3D图像界面,桌面用户具有更好的系统挂起与恢复的能力。

3、提高文件系统管理数据容量

最高可以管理16TB字节,而RHEL&nbsp4仅为8TB。

4、新增Stateless&nbspLinux技术

RHEL5**下载地址**:http://books.lxgcn.com/linuxiso/

CSS样式的优先权问题

今天编辑CSS样式表遇到一个CSS重复定义的问题,要在不修改页面内容的情况下,指定层选用特定的一个Class,而这个class在样式表中有多处重复定义。后来去蓝色问了问,才知道是CSS的优先权问题。下面是一些关于CSS优先权的解释和说明。

CSS优先权问题其实就是一个冲突解决的问题,当同一个元素(或内容)被CSS选择符选中时,就要按照优先权取舍不同的CSS规则,这其中涉及到的问题其实很多。

首先就是CSS规则的specificity(特殊性),CSS2.1有一套关于specificity的计算方式,用一个四位的数字串(CSS2是三位)来表示,最终specificity越高的规则越特殊,在优先级判定时也就越有优势。关于specificity的具体计算在各种情况下的数字加成有如下一般规则:

  • 每个ID选择符(#someid),加 0,1,0,0。
  • 每个class选择符(.someclass)、每个属性选择符(形如[attr=””]等)、每个伪类(形如:hover等)加0,0,1,0
  • 每个元素或伪元素(:firstchild)等,加0,0,0,1
  • 其他选择符包括全局选择符*,加0,0,0,0。相当于没加,不过这也是一种specificity,后面会解释。

按这些规则将数字串逐位相加,就得到最终计算得的specificity,然后在比较取舍时按照从左到右的顺序逐位比较。

举一些例子吧:

[code lang=”css”]

h1 {color: red;}

/ 只有一个普通元素加成,结果是 0,0,0,1 /

body h1 {color: green;}

/ 两个普通元素加成,结果是 0,0,0,2 /

——后者胜出

h2.grape {color: purple;}

/ 一个普通元素、一个class选择符加成,结果是 0,0,1,1/

h2 {color: silver;}

/一个普通元素,结果是 0,0,0,1 /

——前者胜出

html > body table tr[id=”totals”] td ul > li {color: maroon;}

/ 7个普通元素、一个属性选择符、两个其他选择符,结果是0,0,1,7 /

li#answer {color: navy;}

/ 一个ID选择符,一个普通选择符,结果是0,1,0,1 /

[/code]

——后者胜出

除了specificity还有一些其他规则

  • 文内的样式优先级为1,0,0,0,所以始终高于外部定义。这里文内样式指形如

< div > blah < / div >的样式,而外部定义指经由

< link >或< style >标签定义的规则。

  • 有!important声明的规则高于一切。
  • 如果!important声明冲突,则比较优先权。
  • 如果优先权一样,则按照在源码中出现的顺序决定,后来者居上。
  • 由继承而得到的样式没有specificity的计算,它低于一切其他规则(比如全局选择符*定义的规则)。
  • 关于经由@import载入的外部样式,由于@import必须出现在所有其他规则定义之前(如不是,则浏览器应该忽略之),所以按照后来居上原则,一般优先权冲突时是占下风的。

这里需要提一下IE,IE是可以识别位置错误的@import的,但无论@import在什么地方,它都认为是位于所有其他规则定义之前的,这可能会引发一些误会。

PHP Classes七月份PHP创新奖揭晓

太长时间处于自我满足的PHP状态,今天收到PHP Classes的邮件,看看这些很有创意的PHP作品,的确让人耳目一新。

  1. ArZipStr
    利用字符串中字母出现的次数来压缩字符串,压缩率达到70%。
  2. phpTube
    基于PEAR用于上传和下载YouTube上的视频文件。
  3. FuseBox Manager
    名为Fusebox的框架系统,不用自己写程序,轻松生成PHP的WEB应用程序。
  4. Audio Streamer
    将MP3, WAV, OGG, FLAC, MPC, APE, WV, OFR, LA, PAC, SHN, AAC, AC3, AIF, 3GP, MOV, RAW and WMA文件转成MP3 或 WAV 格式
  5. Site Guide
    PHP的网站导航系统
  6. Animated CAPTCHA
    现在很多系统登陆都有一个图片验证机能,这是一个基于动态图片的数学表达式验证系统
  7. Math Guard
    名为CAPTCHA的验证系统,基于数学表达式
    06820070802205656.jpg
  8. LDAP Address Book
    LDAP地址薄,用于存储LDAP服务器中的用户信息
  9. OTP_TS
    同一个函数用于加密和解密数据
  10. Calculadora Escons
    用于选举席位号码的计算
    另外比较有趣的是一个来自香港同胞的PHP作品:多线程模拟,它可以让一个脚本同时执行不同的任务,例如:上传大文件的时候,检测文件传入的大小。更多有趣的class: True Color Picker, Remote MySQL Query, StringGrid, ArIdentifier, gStats, Large Database Backup, Feed Finder Class, OPML Parser Class.

PERL系统迁移中遇的问题

最近把一个基于PERL的系统迁移到另一台服务器,本来运作好好的系统,移过去却问题百出。总结下来,有如下问题需要特别注意:

  1. 对字符串的处理
    处理之前一定要先确定字符串对象是否存在。注意对变量的判断。
  2. DBI查询数据库语句结尾时分号的问题
    在用PHP习惯了给每一个SQL加上一个分号,旧服务器中没出现任何问题,可是新的服务器却提示无法辨认;前后的SQL语句,而无法执行的错误。最好在excute的同时加上die的选择,这样会避免出现恐怖的错误 - 曾经有这样的错误,excute出错,但是$sth->rows依然获取行数,不过不是一行,而是几百万行。
  3. 尽量使用公共变量保存系统路径。
  4. 还原数据库的时候注意Mysql语句在不同版本间的区别。
  5. use strict和eval对调试很有帮助。

PHP上传GIF文件的安全溢出问题

今天看到PHP Classes博客上提到的PHP上传GIF文件的安全溢出漏洞,觉得这是一个很严重的问题。就算我们验证了GIF文件的类型和通过getimagesize()验证了GIF文件大小,PHP代码仍有可能被嵌入GIF文件中,就像〈?php readfile(‘/etc/passwd’); ?〉,很有可能被黑客利用。

这是他们提供的解决办法:

1. 利用.htaccess或httpd.conf限制上传文件所在目录执行PHP的权限。

< FilesMatch “.php$” >
deny from all
< /FilesMatch>

2. 避免直接调用上传的GIF文件。如:src=”image.php?uploaded.gif” mce_src=”image.php?uploaded.gif”。

3. 利用GD模块复制上传的GIF文件。

我的办法是可以设置 Apache,限定refer来自本站的才能调用GIF,就是常规的网站防盗链的办法[ Allow from env=local_ref ]。
总的感觉解决办法让上传GIF文件变得有些碍手碍脚。不知道还有什么其他解决办法。

DC的“FRAME NO. FULL”错误

最近数码相机出了问题,拍不了照片,出现了“FRAME NO. FULL”的错误,很多人并没有留意,看着像错误的提示实际上并不是内存卡出了什么问题,而是照片的编码号已经超过设置的最大值,只要进入设置菜单重新设置,RENEW FRAME NUMBER就可以了。奇怪的是为什么生产厂家不能做得更加人性化一些呢?只是简单的提示错误,对于用户的体验来说比较生硬,完全可以提供更多说明或者是可选择的操作。就像我们平时CODING一样,用户界面的考量越加重视用户的体验和人性化。就像GMAIL后面的男人Paul Buchheit提到的All actions should have ‘undo’,虽然做起来并不容易,但这绝对是用户界面发展的将来趋势。

困扰了两个星期的奇怪符号

两个星期前一段程序页面的最右上角上出现了一个奇怪的字符,我抓破头皮也没找到清楚它的办法,很是郁闷。几乎到了绝望的地步。


mwsnap080.jpg

今天终于找到这只臭虫。原来是PHP代码中//注释了一段XML头惹得祸。之前这段XML代码暂时不用了,本来想注释下来留作备用,也考虑到了〈?的问题,在〈和?之间加了空格。可怎么也想不到那个讨厌的符号正是由这个注释行造成。如今回想起来,确实在注释包含有〈和?的代码的时候应该分外小心。那种无能为力的痛苦实在太难受。

关于Mysql Error “#1210 - Wrong arguments to”

今天有个朋友把discuz从4.0升级到5.5,不料还没装好,运行正常的旧论坛竟然出现了下面的错误:

_SQL: UPDATE tbstats SET count=count+1 WHERE (type=’total’ AND variable=’hits’) …
Error: Wrong arguments to =
Errno.: 1210

初以为是安装新的table覆盖了旧的,吓出一身冷汗。通过分析counter.inc.php,发现注释掉那一行SQL后,论坛可以看见了,但是是乱码。进数据库看看,发现旧论坛的table是lantin1的编码,而新论坛是gbk,难道安装新论坛修改了数据库默认的字符设置?现在还不敢肯定。

Mysql.com也对 #1210 - Wrong arguments to 错误作出了解释,看来的确是编码的问题。

_1. Specify that the string is in latin1 too:
SELECT * FROM test WHERE name=_latin1’bla’;
_

2. Convert the string from utf8 to latin1:
SELECT * FROM test WHERE name=CONVERT(‘bla’ USING latin1);
目前还不清楚旧论坛该怎么处理。再看看有什么解决办法。
问题已解决:很简单:

ALTER DATABASE yourdatabase DEFAULT CHARACTER SET latin1;

另外: discuz安装程序没有考虑到向下的兼容,这是不足。 造成在4.0的mysql中安装时出现很多问题。之所以数据库默认字符被修改,就是因为下面在install.php中的这一句:

CREATE DATABASE IF NOT EXISTS $dbname DEFAULT CHARACTER SET $dbcharset

哪怕数据库已存在, DEFAULT CHARACTER SET 仍然有效执行。

Google Translate推出双语词典服务

mwsnap074.jpg
今天打开Translate的页面,发现上面多了一个Directory的选项,原来是多了一个双语字典的服务,真是太爽了,可以抛弃烦人的金山词霸啦,我用的是03版的,词汇量太少,还经常造成死机。而且特别是对于学习其它语种很有帮助,希望Google再接再厉,扩大语种范围,让我们更加方便。很佩服Google的创新精神,他们每推出一项新的免费服务,都让人又一次惊喜。让那些讨厌的翻译软件见鬼去吧!

中国广东-五大恶意网站聚集地之一

和Google合作的互联网反恶意代码/软件网站StopBadware.org,通过对网友举报的49296个网站的分析,统计出了五个最大的恶意网站源头
• iPowerWeb, Inc., (10,834)
• Layered Technologies, (2,513)*
• ThePlanet.com Internet Services, Inc, (2,056)
• Internap Network Services, (1,437)
CHINANET Guangdong province network, (786)

其中IP位于中国广东省的恶意网站排名第五位,真是不看不知道。另外我对iPowerWeb的印象挺好的,号称全球最大的网站空间提供商,想不到它上面居然HOST有这么多的恶意网站。

这些网站包括自身利用恶意代码和浏览器漏洞来袭击网站的访客,也包括被黑客攻击后用来作为“攻击肉鸡”的网站。我去Google Group看过,似乎StopBadware检测的太过严格,有站长抱怨类似这样“《iframe width=0 height=0 border=0》《/iframe》”的inframe代码也会被认为是恶意代码。