理处言语然自 » 2009 » 三月

鼠标屏幕取词原理

“鼠标屏幕取词”技术是在电子字典中得到广泛地应用的,如四通利方和金山词霸等软件,这个技术看似简单,其实在windows系统中实现却是非常复杂的,总的来说有两种实现方式:
第一种:采用截获对部分gdi的api调用来实现,如textout,textouta等。
第二种:对每个设备上下文(dc)做一分copy,并跟踪所有修改上下文(dc)的操作。
第二种方法更强大,但兼容性不好,而第一种方法使用的截获windowsapi的调用,这项技术的强大可能远远超出了您的想象,毫不夸张的说,利用windowsapi拦截技术,你可以改造整个操作系统,事实上很多外挂式windows中文平台就是这么实现的!而这项技术也正是这篇文章重点。

FCKEDITOR中文使用说明

首先,FCKEDITOR的性能是非常好的,用户只需很少的时间就可以载入FCKEDITOR所需文件.对于其他在线编辑器来说,这几乎是个很难解决的难题,因为在开启编辑器时需要装载太多的文件.比如CUTEEDITOR,虽然功能比FCKEDITOR还要强大,可是,它本身也够庞大了,至于FREETEXTBOX等,其易用性与FCKEDITOR相比,尚有差距,可以说,FCKEDITOR是一个别具匠心的在线编辑器,它里面融入了作者高深的面向对象的JAVASCRIPT功力,集易用性与强大的功能与一体.

Google AJAX Language API对象参考

韩国峰 @ yeeyan.com 

简介
Google AJAX Language API对象参考
 

对象参考
全局方法

方法

返回类型

描述

google.language.translate(text, srcLang, destLang, callback)

全局方法,返回对支持的给定文本的目标语言翻译匹配文本。结果支持通过指定的callback函数进行异步调用。 

text – 要翻译的文本。
srcLang – 以语言代码形式表现的源语言。参考Language 枚举。如果改惨啊数是一个空字符串,则系统将尝试自动识别源语言。
destLang – 以语言代码形式表现的目标语言。参考Language 枚举。
callback – 接收结果的回调函数。

google.language.detect(text, callback)

全局方法,返回描述给定语言文本的语言代码。结果支持通过指定的callback函数进行异步调用。 

text – 要翻译的文本
callback -接收结果的回调函数。

结果对象
翻译结果
l         <result>
n         error?
在载入feed时是否出现错误。
u       code
HTTP风格的错误代码。
u       message
便与人阅读的错误描述文本。
n         translation
翻译后的文本。
 
检测结果
l         <result>
n         error?
在载入feed时是否出现错误。
u       code
HTTP风格的错误代码。
u       message
便与人阅读的错误描述文本。
n         language
给定语言的语言代码。参考Language 枚举。
n         isReliable
一个布尔型变量来描述给定文本是否是可靠的。
n         confidence
一个基于0-1.0之间的数值,用来描述对给定文本的可信级别。
 
Language枚举
google language的language枚举提供了对于名称常量到语言代码的映射,用来描述srcLang和destLang参数。以下是用在Google Translate的相同代码:
var google.language.Languages = {
‘ENGLISH’ : ‘en’,
‘CHINESE’ : ‘zh’,
‘CHINESE_SIMPLIFIED’ : ‘zh-CN’,
‘CHINESE_TRADITIONAL’ : ‘zh-TW’,
‘ARABIC’ : [...]

SQL注入攻击-来自微软安全博客的建议

 
韩国峰

简介
SQL注入攻击方式发展愈演愈烈,黑客通过SQL数据库对网站进行非法入侵并修改页面,同时页面上还会被加入恶意软件,持续影响一些网络应用程序。
 

本文翻译自微软博客上刊载的相关文章,英文原文版权归原作者所有,特此声明。 (特别感谢Neil Carpenter对本文写作提供的帮助)

WordPress MU< 2.7交叉网站脚本安全漏洞

发布者 DK 2009年3月19日 交叉网站脚本安全漏洞 胡安拉腊已发布详细问题的一个安全漏洞,WordPress MU版本小于 2.7都受到影响。 根据有关咨询2.7版不受影响。因此,如果您已升级到2.7 ,您完全可以忽略此问题。
漏洞细节 WordPress MU之前2.7版没有主机标识头中正确使用choose_primary_blog功能,因此,被特殊编辑得以以跨站脚本攻击。 网站基于名称运行的虚拟主机的安装不会受到影响,原因是他们没有缺省的虚拟主机。 更多信息 更多有关此漏洞可在这里: http://www.milw0rm.com/exploits/8196 [...]

XAMPP 的 Linux 版

欢迎光临 XAMPP 的 Linux 版 (x86 兼容处理器版)
顺便提一下:该软件以前被称作 LAMPP,但为了避免误解,我们将其重名命为 »XAMPP 的 Linux 版«。所以,如果您在寻找 LAMPP,您就来对地方了。;)
如果你遇到任何有关 XAMPP 的问题,敬请与我们联系。这将帮助我们改进 XAMPP,使其更易于使用。

Linux 防火墻生成器shorewall

来源:Linux社区 作者:Linux编辑
Linux 提供了强大的防火墙iptables ,但是由于iptables语法比较繁琐,所以不利于部署和维护,shorewall是第三方免费的防火墙生成器,相当于对iptables又进行了一次集合和优化。
介绍一下简单的部署:
下载:http://www.shorewall.net/
需要下载两个程序:
shorewall-perl-4.2.2.1.tgz   #shorewall的安装环境
shorewall-common-4.2.2.1.tgz #shorewall的主程序
首先解压缩shorewall-perl-4.2.2.1.tgz
tar -zxvf shorewall-perl-4.2.2.1.tgz
cd shorewall-perl-4.2.2.1
./configure
make
make install
然后解压缩shorewall-common-4.2.2.1.tgz 
tar -zxvf shorewall-common-4.2.2.1.tgz 
cd shorewall-common-4.2.2.1
./configure
make
make install
shorewall 的基本配置文档是/etc/shorewall/shorewall.conf
将STARTUP_ENABLED=yes 设置为yes,启用shorewall
/etc/shorewall 下有很多配置文档,基本的为zones,interfaces,policy,masq等
zones为定义防火墙的区域,我个人认为类似CISCO防火墙的inside ,outside定义
vi /etc/shorewall/zones
# Shorewall version 4 – Zones File
#
# For information about this file, type “man shorewall-zones”
#
# The manpage is also online at
# http://www.shorewall.net/manpages/shorewall-zones.html
#
###############################################################################
#ZONE TYPE OPTIONS [...]

DNS攻击威胁加剧 变色龙木马出新变种

来源:ZDNet 作者:ZDNet
第三个版本
  第三个版本是在本月初刚刚发现的,看起来该木马的开发者是相当的严谨,定期发布新版本。现在,它采用了ndisprot.sys(网络驱动程序接口规范协议驱动程序)作为一个已注册的服务,这样的话就可以在受到控制的计算机上创建一台动态主机分配协议服务器。伪装的动态主机分配协议服务器可以向网络上的其他计算机发送动态主机分配协议Discover数据包,最终将查询请求转移到攻击者控制的DNS服务器所在的网络IP地址上。
  这种攻击模式的关键是伪装的动态主机分配协议服务器响应速度比真正获得授权的动态主机分配协议服务器快。如果动态主机分配协议服务器客户端接受的动态主机分配协议查询响应来自伪装的动态主机分配协议服务器,这就意味着攻击已经成功了。伪装的动态主机分配协议服务器采用了租赁时间很长的内部网络IP地址,并且包含了攻击者控制的DNS服务器的主要和次要网络IP地址。
  第三版中也存在很多缺陷。举例来说,如果感染了DNS变色龙木马的计算机登陆到一个开放的无线网络中会出现什么样的情况?任何新登入者都可能从伪装的动态主机分配协议服务器中获得错误的DNS信息。对于攻击来说,这种改变的效果也更好,因为它不必再费力对默认的管理权限进行猜测以获得控制权了。
  需要注意的事项
  系统管理及网络安全协会互联网风暴中心提醒用户,如果不能彻底阻止从85.255.112.0到0.255的这段网络地址的话,对来自这个网络地址段的流量进行监测是明智的选择。这似乎是攻击者控制的DNS服务器所在的网络地址段。对于个人计算机来说,使用者可以很方便的通过ipconfig命令(Windows操作系统)、ifconfig命令(Linux操作系统)或系统预置(苹果操作系统)来确定主要和次要DNS服务器所使用的网络IP地址。
  至于网络上伪装的动态主机分配协议服务器,可以利用动态主机分配协议查询工具搜索和分析同一个网络里和动态主机分配协议服务器相关的所有信息。
  目前看来,大多数防病毒工具都可以发现所有三种版本的DNS变色龙木马,这是一件好事情。因此,请确保已经将防病毒工具升级到最新的版本。并且,即使在确认系统安全的情况下,对于DNS的重定向也需要慎重对待。
  结 论
  所有版本的DNS变色龙木马都是在公开环境中出现的,但第三个版本更需要受到重视的。如果可能的话,我建议工作计算机的网络接口采用静态网络IP地址的DNS服务器。OpenDNS强烈建议这样做,并且在自己的网站上解释了到底该怎么进行相关的设置。此外,OpenDNS还消除了包括卡明斯基发现的DNS错误在内其他一些潜在问题。
  对于大型网络来说,往往不能选择静态网络IP地址的DNS服务器,这时间,对来自85.255.112.0到0.255的网络地址流量进行监测就变得非常重要了。同时,采用某种形式的恶意动态主机分配协议服务器监测也是同样重要的。

安全顾虑驱使伊朗选择Linux放弃Windows

伊朗成为最近选择放弃Windows而采用Linux的国家之一,他们甚至拒绝遵守版权法律,这就意味着该国家是在没有向微软支付一分钱的情况下做出此决定的。据该负责该国政府电脑系统的Mohammad Sephery-Rad称,长期的方针政策和基于安全考虑促使了这次改变。
据伊朗高级信息学部门部长称:“伊朗所有的软件都是拷贝的,这里没有版权法,所以每个人可以自由使用微软的软件,但是现在我们不能再这样子了。”
此举原因和他们使用盗版软件并没有任何联系(盗版的Windows XP CD售价和空白CD一样),而是更加现实的问题,伊朗现在的IT支柱均基于他们的主要敌人美国的软件。另外伊朗还打算加入WTO,所以这也是尊重国际知识产权的第一步。Sephery-Rad称:“我们将会投入更多的资金,此举还有个原因就是微软的软件拥有大量的后门和安全缺陷,所以它不足够安全,我们目前还处于美国的约束之下,所有这些因素使得我们考虑选择其他替代系统,而这个替代系统就是Linux。

Linux提高sshd服务安全问题

在我们使用Linux或Unix组建服务器时,为了方便远程维护和管理,基本上都会开放sshd服务。虽然ssh将联机的封包通过加密的技术来进行资料的传递,能够有效地抵御黑客使用网络侦听来获取口令和秘密信息,但是仍然不乏大量入侵者进行密码尝试或其他手段来攻击ssh服务器以图获得服务器控制权。如何才能使自己的服务器更安全可靠呢?只要我们对ssh服务器的配置略加调整,就可以极大地提高系统的安全性,降低网络入侵的风险。具体操作如下:
1.修改sshd服务器的配置文件/etc/ssh/sshd_config,将部分参数参照如下修改,增强安全性。
Port 5555
系统缺省使用22号端口,将监听端口更改为其他数值(最好是1024以上的高端口,以免和其他常规服务端口冲突),这样可以增加入侵者探测系统是否运行了sshd守护进程的难度。
ListenAddress 192.168.0.1
对于在服务器上安装了多个网卡或配置多个IP地址的情况,设定sshd只在其中一个指定的接口地址监听,这样可以减少sshd的入口,降低入侵的可能性。
PermitRootLogin no
如果允许用户使用root用户登录,那么黑客们可以针对root用户尝试暴力破解密码,给系统安全带来风险。
PermitEmptyPasswords no
允许使用空密码系统就像不设防的堡垒,任何安全措施都是一句空话。
AllowUsers sshuser1 sshuser2
只允许指定的某些用户通过ssh访问服务器,将ssh使用权限限定在最小的范围内。
AllowGroups sshgroup
同上面的AllowUsers类似,限定指定的用户组通过ssh访问服务器,二者对于限定访问服务器有相同的效果。
Protocol 2
禁止使用版本1协议,因为其存在设计缺陷,很容易使密码被黑掉。
禁止所有不需要的(或不安全的)授权认证方式。
X11Forwarding no
关闭X11Forwarding,防止会话被劫持。
MaxStartups 5
sshd服务运行时每一个连接都要使用一大块可观的内存,这也是ssh存在拒绝服务攻击的原因。一台服务器除非存在许多管理员同时管理服务器,否则上面这个连接数设置是够用了。
注意:以上参数设置仅仅是一个示例,用户具体使用时应根据各自的环境做相应的更改。
2.修改sshd服务器的配置文件/etc/ssh/sshd_config的读写权限,对所有非root用户设置只读权限,防止非授权用户修改sshd服务的安全设置。
chmod 644 /etc/ssh/sshd_config
3.设置TCP Wrappers。服务器默认接受所有的请求连接,这是非常危险的。使用TCP Wrappers可以阻止或允许应用服务仅对某些主机开放,给系统在增加一道安全屏障。这部分设置共涉计到两个文件:hosts.allow和hosts.deny。
将那些明确允许的请求添加到/etc/hosts.allow中。如系统仅允许IP地址为192.168.0.15和10.0.0.11的主机使用sshd服务,则添加如下内容:
sshd:192.168.0.15 10.0.0.11
将需要禁止使用的信息添加到/etc/hosts.deny中。如对除了在hosts.allow列表中明确允许使用sshd的用户外,所有其他用户都禁止使用sshd服务,则添加如下内容到hosts.deny文件中:
sshd:All
注意:系统对上述两个文件的判断顺序是先检查hosts.allow文件再查看hosts.deny文件,因此一个用户在hosts.allow允许使用网络资源,而同时在hosts.deny中禁止使用该网络资源,在这种情况下系统优先选择使用hosts.allow配置,允许用户使用该网络资源。
4.尽量关闭一些系统不需要的启动服务。系统默认情况下启动了许多与网络相关的服务,因此相对应的开放了许多端口进行LISTENING(监听)。我们知道,开放的端口越多,系统从外部被入侵的可能也就越大,所以我们要尽量关闭一些不需要的启动服务,从而尽可能的关闭端口,提供系统的安全性。
通过以上步骤基本上将sshd服务设置上可能出现的漏洞堵上了,不需要投资,只要我们稍微花点时间调整一下配置,就可极大提高系统的安全环境

美女黑客曝英特尔CPU漏洞或引发全球用户恐慌

来源:搜狐IT 

波兰知名美女黑客Joanna Rutkowska
3月23日消息,据国外媒体报道,波兰知名美女黑客Joanna Rutkowska成为安全业内焦点人物,她在博客上发表一篇论文,曝光了一个英特尔CPU的缓存漏洞。而另一位安全研究人员Loic Duflot将在加拿大温哥华举行的CanSecWest安全大会上介绍该漏洞和攻击代码。

如果这一漏洞被证实存在,黑客就可利用该漏洞获得对电脑近乎至高无上的控制权,并且不受任何操作系统控制、关闭或禁用。毋容置疑,此时杀毒软件将毫无用武之地。黑客的攻击范围,可能覆盖Vista、XP、Windows Server、Linux或BSD等任何一个装有英特尔CPU的操作系统,这无疑会给所有安装英特尔计CPU的用户带来极大恐慌。据悉,目前全球计算机系统中,英特尔CPU的市场份额占到85%以上。
庆幸的是,Joanna Rutkowska是一个被归为“灰帽黑客组织”的漏洞挖掘和研究人员,这类天才们往往以安全研究人员自居,他们常常把发现的漏洞曝光,或交给微软官方,从而推动软件厂商积极修补漏洞。
然而,如果这些高危漏洞被另一些属于“黑帽组织”的漏洞挖掘者发现的话,后果将会很糟糕。这类人一般会为了金钱而把挖掘到的漏洞卖到黑市,结果极有可能是漏洞落到商业黑客手中,从而引发网络疫情。

Linux下防止未授权IP使用ssh服务

方法一
iptables -A INPUT -p tcp -s 192.168.0.0/24 –destination-port 22 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.1.0/24 –destination-port 22 -j ACCEPT
iptables -A INPUT -p tcp -s ! 127.0.0.1 –destination-port 22 -j DROP
方法二
[root@nihao ~]# more /etc/hosts.deny
#
# hosts.deny This file describes the names of the hosts which are
# [...]

Linux操作系统安全性问题

在操作系统中,如果用漏洞百出形容Windows,那么关于Linux我们最常听到的形容词恐怕就是“无懈可击”了。当人们越来越热衷于寻找微软的操作系统和软件的漏洞,使得Windows成为越来越多号称黑客的人攻击目标的时候,却往往忽略了世界上使用人数第二多的Linux操作系统。
其实1996年就出现了Linux平台下的第一个病毒Staog。据说这个病毒是由澳大利亚一个叫做VLAD的黑客组织用汇编语言写出的(这个组织在病毒光荣簿上留下了相当辉煌的印记,Windows 95下的第一个病毒程序Boza就是该组织的作品)。它只感染二进制文件,试图通过三种途径得到root权限,但是它仍然只能算是一个病毒的演示样本,它存在的意义只是向那些Linux爱好者们证明:Linux并不是无坚不摧的,它同样也存在着被病毒侵袭的危险,只是由于Linux操作系统设计上的完善使得这种危险系数比较低。
第二个出现在Linux操作系统上的病毒是Bliss病毒,它是一个实验品,只是在实验中不小心被释放的病毒,而且其本身就具有免疫能力,并不对系统具有太大的危险。
直到Ramen的出现,人们才对Linux操作系统无懈可击的安全性重新产生了怀疑。Ramen病毒可以自动传播,无需人工干预,和1988年大行其道的Morris蠕虫非常相似。它只感染Red Hat 6.2和7.0版使用匿名FTP服务的服务器,通过两个普通的漏洞RPC.statd和wu-FTP感染系统。和更多流行在Windows上的蠕虫病毒一样,它发作的迹象并不是感染文件,而是在扫描时消耗网络带宽,让正常的资源请求无法到达服务。
实际上,利用安全漏洞攻击电脑的Ramen病毒也有助于Linux网管及时修复漏洞,因为它在攻击的时候也暴露了漏洞的存在。
另外还有一种使用shell脚本语言编写的病毒,我们可以在网络上找到关于这种病毒的过多篇分析文章,不过大部分是在渲染它的严重性。Linux系统文件中有很多以.sh结尾的脚本文件,一个非常简单的shell病毒就可以感染到系统中所有的脚本文件。
最重要的是,它非常容易编写,一个数十行的shell病毒对于那些急于在网络上成名而又不学术不精的“黑客”来说是很简单的事情。也就是说,容易被心存不轨的人利用才是shell病毒最厉害的地方。
Linux病毒史上的佼佼者
很多文章中都提到,除去Linux先天的设计足够强壮,早期使用Linux操作系统的多为专业人士,在安全意识经验的传承上做的也非常出色,这让Linux有了良好的人文条件来保护自己。笔者认为,年轻,也是Linux免遭那些不负责任的黑客攻击的一个重要原因。不过随着Linux使用者开始变得“鱼龙混杂”以及业界不断给予它过高的评价,新的安全威胁也随之而来。
这个让Linux的安全性开始被更多的人关注的病毒叫做Linux.Lion,也就是我们在国内的Linux论坛上经常见到的“狮子”蠕虫病毒。如果说Linux下的第一个蠕虫病毒Ramen在还不足以在病毒史上绽放光芒,那么现在Lion病毒替它实现了这个“愿望”。
Lion病毒Ramen病毒一样不会感染Windows操作系统,但是它有一个特别危险的功能是可以把被感染的计算机的口令和配置文件用EMAIL发送给China.com的一个信箱。而它比Ramen病毒更难对付的地方正在于,黑客有了口令和配置文件,在对系统进行攻击的时候就无须使用安全漏洞,这使攻击更难防范。
跟在的Windows平台肆虐的各种病毒相比,上述的几种病毒实在不能算是罪大恶极,它们所做的一切都只是在试图挑战Linux的安全神话,只是在向那些深信Linux绝对安全的用户发出警告:Linux并非安全无虞。
当然,存在于Linux操作系统的病毒远不止这些,Unux.Svat、BoxPoison等病毒同样给Linux用户带来过不同程度的伤害,而且随着Linux用户的大量增加,越来越多的Linux系统连接到了互联网上,这大大增加了该系统被侵害的可能。可以预见,会有更多的病毒出现在Linux上。保护Linux,还请尽早开始。

Mysql拆分字符串查询

一个项目有数据格式如下
例如 1,2,3 把1、2、3的名称查询出来拼接一个字符串返回来,用的数据库是mysql, mysql的 function代码如下
view plaincopy to clipboardprint?
DELIMITER $$
DROP FUNCTION IF EXISTS `tms1`.`GetClassName` $$
CREATE FUNCTION `GetClassName`(f_string VARCHAR(15000)) RETURNS varchar(15000)
BEGIN
/* 判断字符串包含,的第一个位置*/
DECLARE THE_CNT INT(15) DEFAULT 1;
/* 班级编号*/
declare classId varchar(20) default ”;
/* 返回的班级名称*/
DECLARE result varchar(15000) DEFAULT null;
/* 班级名称*/
DECLARE className varchar(50) DEFAULT ”;
/* 字符串包含,的第一个位置*/
set THE_CNT = LOCATE(‘,’,f_string);
/* 判断字符串包含,的第一个位置是否存在*/
while (THE_CNT >= [...]

删除MYSQl BIN-LOG 日志

想要恢愎数据库以前的资料,执行:show binlog events;屏幕就开始显示很多内容,心里烦(那有这么多没有用的LOG),还是删除一些去吧!
1.查找当
mysql> show binary logs;
+—————-+———–+
| Log_name | File_size |
+—————-+———–+
| mysql-bin.000001 | 150462942 |
| mysql-bin.000002 | 125 |
| mysql-bin.000003 | 106 |
+—————-+———–+
2.删除bin-log(删除mysql-bin.000003之前的而没有包含mysql-bin.000003)
mysql> purge binary logs to ‘mysql-bin.000003′;
Query OK, 0 rows affected (0.16 sec)
3. 查询结果(现在只有一条记录了.)
mysql> show binlog events\G
*************************** 1. row *************************** [...]

mysql bin日志文件清除sh

#!/bin/sh
## 2007-11-6
DELLOG=”/usr/local/logs/del-sqlbin.log.`date +%d`”
DELTMP=”/usr/local/logs/del-sqlbin.tmp”
MAIL_ADDR=”xxx@xxx.xx”
exec &>$DELLOG
DT=`date +’%Y-%m-%d %T’`
SINGLE=0
sleep 30
hostname
echo `date +’%Y-%m-%d %T’`
echo “EXEC>>”
echo “PURGE MASTER LOGS BEFORE ‘$DT’;”
echo “PURGE MASTER LOGS BEFORE ‘$DT’;” >$DELTMP
mysql -uroot -pxxx <$DELTMP
if [ $? = 0 ];then
echo “Purge master logs sucess!”
else
echo “Purge master logs failure!”
SINGLE=1
fi
echo “——————————–”
echo
if [ $SINGLE = 1 ];then
mail -s “Purge_master_logs_err” $MAIL_ADDR <$DELLOG
fi
 
装mysql5,运行一段时间后,在/var/db/mysql目录下出现一堆类似mysql-bin.000***,从mysql-bin.000001开始一直排列下来,而且有的占用了大量硬盘空间,高达上百兆。请问这些是什么文件,有何作用?可以清除吗?
MySQL的事务日志。删除复制服务器已经拿走的binlog是安全的,一般来说网络状况好的时候,保留最新的那一个足以。(缺点是将无法使数据库恢复先前的状态)
另外:在my.conf里把log-bin注释掉就可以了,我查了,logbin主要是用来做回滚和增量备份的。

关于MySQL字符集架构的思考

陈泽|SurfChen
最近几个月,我每次用MySQL,几乎都会想:MySQL现在如此层次分明的字符集架构作用真的很大吗?
MySQL的字符集处理是这样的:
1)发送请求
客户端(character_set_client)=》数据库连接(character_set_connection)=》存储(table,column)
2)返回请求
存储(table,column)=》数据库连接(character_set_connection )=》客户端(character_set_results)
在每一个非初始节点,都会做一次从上一个结点到当前节点的字符集转换操作。举个例子,有如下环境:
* character_set_connection utf-8
* character_set_results gbk
* character_set_client gb2312
* 有表A,字段字符集全部为BIG5
发送请求的时候,首先数据从gbk转换为utf-8,再转换为BIG5,然后再存储。
返回请求的时候,首先数据从BIG5转换为utf-8,再转换为gb2312,然后再发送给客户端。
这样的架构到底有什么用呢?
1)允许不同的客户端具有不同的字符集。典型的例子就是,我有一个utf-8的站点,这个站点就是一个charset client为utf-8的客户端。与此同时,我有可能需要在一个gbk的终端上读写数据库,这又是一个客户端,不过它的字符集是gbk。
2)通过数据库操作文件系统的时候,需要把文件路径转为文件系统的字符集。例如我的客户端是gbk,而服务器文件系统是utf-8。操作”/A片 /Rina.rmvb”,发送过去的数据里,“片”的数据和服务器是不一样的。这时候就需要有个办法可以把转换GBK的“片”到utf-8。在这里 MySQL引入了一个叫character_filesystem的东西来完成这个事情。
除此之外,我暂时想不到其他的作用了。但是仔细想想,我们真的需要这样的处理吗?很多网站,无非就是希望自己的数据能怎么进去就怎么出来。这里又有两种情况了。
1)希望可以根据数据进行排序或者做like操作。首先说排序,对于包含中文的字段来说,根据字符集排序的概念如同鸡肋。简体中文排序,一般都是希望按拼音来排序。我没有去真正了解过MySQL里的校验,但是从我接触过的程序来看,需要做此类排序,都是专门建一个存放拼音的字段来排序。而拼音又存在多音字的情况。如果是UTF-8,还存在某个区间的中文同时被中日韩三国共用的情况。实现起来不是这么容易,所以MySQL无论的GBK还是UTF-8的校验集应该都没有实现拼音。我敢说,现在国内使用MySQL的大多数网站,所用到的校验集,只是一个byte排序而已。而byte排序,根本不需要使用什么字符集。所以说对于中文站点,MySQL字符校验在排序上没任何意义。
但是在like操作上,倒是有了一点点意义。例如我like ‘%a%’,就有可能匹配到某个中文某个部分含有a。当然这种情况在utf-8下不会遇到,因为utf-8的存储格式导致a只可能是a,不可能是一个多字节字符的一部分。但是在其他字符集可能就会有这个问题了。说到最后,like又变得和order一样使得校验没意义了。晕倒。
2)如果完全不需要对数据进行排序,like或者全文检索,那么请停止使用char,varchar,text之类的吧。 binary,varbinary,BLOB才是正确的选择。binary之类的在存储,取出的时候都不会进行字符集转换,而在排序时候,只根据二进制内容排序,所以在效率上高出char,varchar,text很多。
这种情况更不需要字符集了。但是按照目前MySQL的架构,在client和connection之间的字符集操作,是忽略字段类型的,在这两个节点之间,依然会进行字符集转换。
说了这么多,我都不知道说什么了。本来是想说MySQL的字符集看似强大实则无用。但是写下来,发现勉强还有一点作用。另外前段时间想总结一下MySQL的字符集,不过没写完。
另外提一下PHP里的设置字符集。大家请不要再使用mysql_query(”set names utf8″)这样的语句了。mysql_set_charset()才是最完整的字符集设置方式。后者比前者多一个设置,就是把struct MySQL的charset成员也设置了。这个成员变量在escape的时候起着很重要的作用,特别是对于GBK这种运行把“”作为字符一部分的编码格式。如果你只使用mysql_query(”set names XXX”),那么在某些字符集,会有重大的安全漏洞,导致mysql_real_escape_string变得和addslashes一样不安全。
在计算机技术里,字符集是我很喜欢研究的一个东西。我接触的东西,我都希望把字符集处理方式弄清楚。这是因为我在3年前,对字符集完全不理解。对于完全不理解的东西,我总是很渴望去完全理解它。
BTW:随着各种多字节字符集的广泛应用,而在软件开发里人数比例非常高的操英文的程序员对多字节字符并不是很了解,这是最近几年很多漏洞都是多字节引起的一个原因。我们中日韩的程序员在这方面有优势了!
来源:http://www.surfchen.org/wiki/MySQL%E7%9A%84%E5%AD%97%E7%AC%A6%E9%9B%86

curl详解

curl是一个利用URL语法在命令行方式下工作的文件传输工具。本文介绍了它的简单用法。

优化PHP代码的40条建议

 
英文版权归Reinhold Weber所有,中译文作者yangyang(aka davidkoree)。双语版可用于非商业传播,但须注明英文版作者、版权信息,以及中译文作者。翻译水平有限,请广大PHPer指正。
1.如果一个方法可静态化,就对它做静态声明。速率可提升至4倍。
2.echo 比 print 快。
3.使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接。
4.在执行for循环之前确定最大循环数,不要每循环一次都计算最大值。
5.注销那些不用的变量尤其是大数组,以便释放内存。
6.尽量避免使用__get,__set,__autoload。
7.require_once()代价昂贵。
8.在包含文件时使用完整路径,解析操作系统路径所需的时间会更少。
9.如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。
10.函数代替正则表达式完成相同功能。
11.str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。
12.如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。
13.使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。
14.用@屏蔽错误消息的做法非常低效。
15.打开apache的mod_deflate模块。
16.数据库连接当使用完毕时应关掉。
17.$row[‘id’]的效率是$row[id]的7倍。
18.错误消息代价昂贵。
19.尽量不要在for循环中使用函数,比如for ($x=0; $x < count($array); $x)每循环一次都会调用count()函数。
20.在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。
21.递增一个全局变量要比递增一个局部变量慢2倍。
22.递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。
23.递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。
24.仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。
25.方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。
26.派生类中的方法运行起来要快于在基类中定义的同样的方法。
27.调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。
28.用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会。当然,只有当你不需要在字符串中包含变量时才可以这么做。
29.输出多个字符串时,用逗号代替句点来分隔字符串,速度更快。注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。
30.Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。
31.除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。
32.尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。
33.当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回在 zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步 骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。
(举例如下) if (strlen($foo) < 5) { echo “Foo is too short”$$ } (与下面的技巧做比较) if (!isset($foo{5})) { echo “Foo is too short”$$ }
调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。
34.当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java代码并 指望它们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个 临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意,因为并不是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。
35.并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。
36.并非要用类实现所有的数据结构,数组也很有用。
37.不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?
38.当你需要时,你总能把代码分解成方法。
39.尽量采用大量的PHP内置函数。
40.如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。
41.评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。
42.mod_zip可作为Apache模块,用来即时压缩你的数据,并可让数据传输量降低80%。
 
来源:http://www.php5x.com/

PHP多进程并发控制的测试用例

[文章作者:张宴 本文版本:v1.0 最后修改:2007.11.16 转载请注明出处:http://blog.s135.com] 最近遇到一个问题,Linux下的PHP命令行程序作为守护进程,需要从队列文件中读一行数据,通过TCP协议发送给外地的接收服务器,再读下一行数据,再发送。当本地与外地的网络状况不好时,有时候发送一条数据所耗费的时间就较长,累积起来容易造成队列堵塞和延迟。 于是,我准备用该PHP命令行程序生成多个子进程,将串行处理变成并行处理。最简单的方法就是在PHP中用exec()或popen()函数将一个shell命令行推到后台去执行,例如:
<?php exec("/bin/sh /opt/zhangyan.sh &"); ?>
最后的&表示将shell脚本推到后台去执行。 但是这样会有一个问题,如果推到后台的进程太多,可能会导致服务器系统资源耗尽而崩溃,所以必须控制进程数量。
我写了一个PHP程序(/opt/zhangyan.php)、一个shell程序(/opt/zhangyan.sh)作为测试用例。 程序的逻辑: 1、设置/opt/zhangyan.php最多允许生成500个子进程; 2、当/opt/zhangyan.php读取到一条数据后,将允许生成的子进程数减1(空闲进程数$p_number=500-1=499),然后将数据交给/opt/zhangyan.sh去后台处理,不等待/opt/zhangyan.sh处理结束,继续读取下一条数据; 3、当允许生成的子进程数减至0时(空闲进程数$p_number=0),/opt/zhangyan.php会等待1秒钟,然后检查后台还有多少个/opt/zhangyan.sh子进程尚未处理结束; 4、如果1秒钟之后/opt/zhangyan.php发现后台的/opt/zhangyan.sh子进程数还是500(空闲进程数$p_number=0),会继续等待1秒钟,如此反复; 5、如果/opt/zhangyan.php发现后台尚未处理结束的/opt/zhangyan.sh子进程数减少到300个了(空闲进程数$p_number=500-300=200),那么/opt/zhangyan.php会再往后台推送200个/opt/zhangyan.sh子进程;
/opt/zhangyan.php代码如下:
view plaincopy to clipboardprint?

<?php  
function run($input)  
{  
global $p_number;   [...]

PHP5 cookie与session

 
1、HTTP协议本身是无状态的。    我们上网都要靠HTTP协议传递信息。比如我们在浏览器里键入:www.bokee.com这个网址并回车,你会发现网址会变成:http://www.bokee.com,其原因就是浏览的网页是基于http协议的。http协议无法记录用户经常上哪些网站,有什么爱好,也无法记录用户的ID帐号和密码。这就是所谓的HTTP协议无状态。HTTP协议本身是无状态的,这与HTTP协议本来的目的是相符的,客户端只需要简单的向服务器请求下载某些文件,无论是客户端还是服务器都没有必要纪录彼此过去的行为,每一次请求之间都是独立的,好比一个顾客和一个自动售货机或者一个普通的(非会员制)大卖场之间的关系一样,你认得它们,它们则肯定认不得你。
2、怎样理解cookie和session?    由于cookie和session关系密切,这里我们一并介绍。    打个比方:在河南时,我常到一家熟食店买馋嘴鸭,该店老板为了促进销售,特发布“每购满10只即可免费赠送一只”的优惠措施。除了家里有什么红白喜事要飨客之外,应该不会有人一次性购买10只烤鸭吧?所以老板得想个法子来记录顾客的消费数量,这里总共有三种方案:

PHP4 开发的代码迁移到 PHP5

使用 PHP V5 的新语言特性,可以明显地提高代码的可维护性和可靠性。通过阅读本文,您将了解如何利用这些新特性将用 PHP V4 开发的代码迁移到 PHP V5.

Tell Me Why 天使的声音 [歌词、下载]

Declan Galbraith是英国最畅销的童声歌手之一。他的歌声清彻迷人,高音清亮,极富感染力……
“如果天使会唱歌,那个天使一定是——迪克兰 盖勒布雷斯(Declan Galbraith。” 在没有听到这个年仅12岁的英国小男孩的音乐之前,您可能会不以为然,但当他那美得残酷的高音震撼着你的heart时,你会明白, 他的声音是用心去听得,而不仅仅是你的耳朵。 In my dream,children sing A song of love for every boy and girl The sky is blue and fields are green: And laughter is the language of the [...]

光明正大和卸磨杀驴的近义词

[题名]:光明正大 [近义词]:大公至正; 大公无私; 堂堂正正; 铁面无私; 公而忘私; 杀身成仁; 舍己为人; 舍身求法; 舍生取义; 为国捐躯; 名正言顺; 正人君子; 光明磊落; 襟怀坦荡 [反义词]:鬼鬼祟祟; 阴谋诡计; 明目张胆; 明火执仗; 堂堂皇皇; 暧昧不明 [题名]:卸磨杀驴 [近义词]:不知恩义; 过河抽板; 见利忘义; 知恩不报; 忘恩负义; 兔死狗烹; 得鱼忘筌;过河拆桥; 人走茶凉; 鸟尽弓藏;过 河拆桥

陈冠希老爸欠债逾千万港币申请破产

来源:北京晨报
“艳照门”案主角陈冠希刚刚经历子弹信件恐吓事件,近日,陈冠希姐姐陈见飞又透露,父亲陈泽民即将破产,过几天就会正式公布详情。
23日,陈见飞出席某活动时面容憔悴,她透露父亲陈泽民即将破产,而这个决定是全家人商量后做出的,认为是最好的解决方法,过几天会正式公布详情。弟弟陈冠希刚刚经历恐吓事件,父亲又将遭遇破产,陈见飞说,家事是一波未平一波又起。陈泽民旗下有多间演艺及唱片公司,近年来陈泽民的财政频出状况,去年,陈泽民的公司被指欠债逾千万港元,被银行起诉法院追讨连本带利千万港元。陈泽民接受访问时承认面临破产边缘,他语带无奈地说:“金融海啸之下,银行收紧信贷,导致资金周转出现好大困难。作为一个负责任的父亲,我有和家里人讲过,如果和银行谈不妥,我会决定申请破产。”陈泽民说,还没有和陈冠希谈及此事,并表示,“做生意是我个人的事,他没有责任要帮我。”
除了担心父亲面临破产,陈见飞亦担心弟弟被子弹恐吓,她说:“自从有传媒收到子弹恐吓信之后,我就一直没好好睡觉,很担心,我没有和冠希讲,因为我不想他担心。”提到陈冠希正计划出席新片首映,有指他届时出席公开场合拒绝穿上避弹衣?陈见飞苦笑说:“他就是这样的人,不想别人觉得他软弱。其实他已经道歉,可能有人觉得不够,但他和那些女生一样,一年都不开心。”
据了解,陈泽民是英皇娱乐老板杨受成及影星成龙的好友,跟圈中人相熟,故成功拉拢爱儿陈冠希加入娱乐圈。
(北京晨报)



赞助商

文章索引模板

好友推荐链接

强力推荐链接

分类目录

   

统计信息

Translator

Chinese (Simplified) flagItalian flagKorean flagChinese (Traditional) flagPortuguese flagEnglish flagGerman flagFrench flagSpanish flagJapanese flagArabic flagRussian flagGreek flagDutch flagBulgarian flagCzech flag
Croatian flagDanish flagFinnish flagPolish flagSwedish flagNorwegian flag          

标签

专利战 世界 中国 为什么 介绍 使用 公司 分析 利用 功能 原谅我红尘颠倒 发现 天涯 如何 实现 工具 应该 慕容雪村 技术 插件 搜索引擎 支持 数据库 文件 方式 时间 服务器 用户 简单 管理 系统 网站 美国 谁的心不曾柔软 进行 部分 问题 AJAX Google LAN Linux MySQL PHP plugin WordPress

热门浏览