情人是什么–莫言

朋友是相互信任,爱人是相互包容,红颜知己是相互欣赏,情人是综合了这一切因素的自然结果,它有可能缘于朋友的信任,再后是红颜知己的欣赏,因为情深所至而情不自禁。它可以被你称为情人了,但还不是真正意义上的情人,真正的情人是距离产生出的美,是若即若离的思念,情人是一个很美的字眼,它清丽,婉约,淡雅,绵远悠长,它是行走在朋友、红颜知己、爱人边缘的一种情,比爱人多了一份浪漫,比朋友多了一份知心,比红颜知己多了一层身体上的信息。

谈谈Canonical标签

  前几天站长社区有站长朋友谈了一下对Canonical标签的看法,认为这是一个与301类似、解决网站内重复页面的好办法。那么我们来谈谈这两者有什么区别,使用Canonical标签时又该注意些什么。

【Canonical标签与301的区别】
1,在几个网页内容完全相同(或高度相似)的时候,如果希望两个网页都可以被用户正常访问到,就使用Canonical标签;如果仅让用户访问其中的一个,直接使用301跳转更方便。
2,使用Canonical 标签的前提是几个网页一定是完全相同(或高度相似)的,而301则没有这个限制。

【使用Canonical 标签时要特别注意的两点】
1,百度虽然支持Canonical标签,但并不保证完全遵守该标签。请站长注意,最好在完全相同的网页中使用Canonical标签——这样可以提升Canonical标签的使用效果。
*之前的帮助文档中的确提到高度相似的网页也可以使用Canonical标签,但在实际过程中我们发现,相似网页使用Canonical标签的成功率较低。
2,还有一点非常非常重要,请各位站长在设置Canonical标签前,仔细检查两个网页是否真的完全相同——一旦百度发现其中一个Canonical标签有问题,会不信任该站点的所有Canonical标签

俯瞰香港维多利亚港,海港两岸的香港岛和九龙半岛高楼林立,中国香港。南非咨询公司最新报告显示,香港已成为全球千万富翁最多的城市,全城有15400人资产超过1000万美元,纽约和伦敦市分别以14300人和9700人位列二三。

俯瞰香港维多利亚港,海港两岸的香港岛和九龙半岛高楼林立,中国香港。南非咨询公司最新报告显示,香港已成为全球千万富翁最多的城市,全城有15400人资产超过1000万美元,纽约和伦敦市分别以14300人和9700人位列二三。

香港维多利亚港

为什么必须保护Robots协议?

Robots协议

一、从Spider程序到Robots协议

即使不是工程狮,关注互联网的人也很少不知道Robots协议。百度和360从2012年起展开的一场屏蔽与反屏蔽战把原本程序猿才知道的Robots协议变成媒体热词。北京一中院8月7日对3B搜索不正当竞争纠纷案(3B案)刚刚作出的一审判决让Robots协议在新闻里又火了一把。Robots协议的法律地位或法律效力问题是3B案一系列法律问题中最大的争点,分析这个问题就必须先了解Robots协议的内容和意义。

Robots协议和搜索引擎的爬虫程序(Spider)其实是一对同胞兄弟。

1994年之前,AltaVista、Infoseek等代表的搜索引擎在互联网可以通过Spider直入网站管理后台,把所有网页信息系数收录。除了涉及隐私外,爬虫程序的反复收录在20年前对网站带宽也是不小的负载。荷兰工程师Martin Koster深感互联网丛林之乱,提出通过设立名为Robots规范的网站访问限制政策(Access Policy)方式在整个互联网统一解决Spider无所不在所带来的威胁。Robots协议在技术实现上并不复杂,网站管理员只要按规则在网站根目录下创建Robots.txt的文本文件就可以禁止搜索爬虫收录指定网页内容。从早期的AltaVista、Infoseek到后来居上的Google 、Yahoo和美国以外的Baidu等各大搜索引擎都群体接受了Robots协议,避免和内容网站为Spider陷入一场危机。

二、Robots规则可以受法律保护

反对3B案一审判决的理由集中对Robots协议法律效力的否定上。Robots协议并不是法律,也没有被IETF、ITU和W3C等国际标准组织接纳。但国际标准也不是法律,逻辑上成为国际标准不等于自动享有法律保护。法律和规则并不是同一个概念,法律属于规则,而规则远远大于法律。百度是以不正当竞争为案由起诉360,反不正当竞争法本身就是通过列举加兜底的方式,在少数明确规定的违法行为外以原则性规定了根据不正当竞争行为的判断标准。司法者的权限并不局限于寻找包含Robots协议内容的具体法条,而是可以根据实际案情裁量违反Robots协议是否就违反了反不正当竞争法第二条对经营者应当遵循自愿、平等、公平、诚实信用和公认商业道德的强制性规定。认定违法并不需要将Robots协议上升为法律作为前提,违反规则就可能导致违反法律的结果。况且3B案发生背景之一,是被告奇虎360本身就通过签署《互联网搜索引擎服务自律公约》承诺“遵守机器人协议(Robots协议)”和“限制搜索引擎抓取应有行业公认合理的正当理由,不利用机器人协议进行不正当竞争行为”。360在明确承认Robots协议约束力后又规避了协议,既是违法又构成违约。

法律之外的规则受法律承认和保护是普遍现象。

合同不是法律而是当事人自由达成的一致意思表示,但依法成立的合同当然受法律保护。《合同法》第八条即规定:“依法成立的合同,对当事人具有法律约束力。…依法成立的合同,受法律保护。”被互联网广泛采用的Robots协议属于行业惯例,仅《合同法》就在第二十二条、第二十六条、第六十条、第六十一条、第九十二条等九个条款承认交易习惯的效力,如第九十二条就规定:“合同的权利义务终止后,当事人应当遵循诚实信用原则,根据交易习惯履行通知、协助、保密等义务”。《物权法》第八十五条也规定:“法律、法规对处理相邻关系有规定的,依照其规定;法律、法规没有规定的,可以按照当地习惯”。根据法理及以上法条的规定,惯例完全有可能获得法定效力及执行力。3B案判决认可Robots协议的效力是法官依职权对Robots协议合法性进行认知的过程,并不存在法官造法或逾越职权创造新权利。

百度在360推出网络搜索后迅速启用Robots协议,在百度旗下的知道、贴吧、文库、百科等产品屏蔽了360爬虫。百度屏蔽360的产品基本属于用户创造内容(UGC)类型的上传平台。百度对平台内容并不直接享有著作权,360因此质疑百度无权拒绝收录。但UGC平台身份也无碍百度根据《著作权法》第十四条对相关内容享有作为汇编者的权利。在百度主张反不正当竞争保护情况下,举证责任更简化到证明原告合法投入因被告竞争行为受到实际损害及被告竞争行为违反诚实信用或商业道德,而360强行利用百度网站内容已构成搭便车的不正当竞争行为。

三、互联网拒绝丛林法则

360在3B案中以百度滥用Robots协议作为抗辩,但换个角度看真正容易被滥用的倒是Spider程序。互联与分享是网络的基本性格,而信息的多元化也决定了很多情况下网络传播必须受到控制。不受Robots协议限制的Spider程序必然使互联网陷入严重混乱,网站后台隐私无法保护,网页更新的旧信息必须完全删除而不能仅仅屏蔽,音乐、视频等内容的收费盈利模式遭到毁灭打击。互联网经过长期博弈逐步摆脱无序状态,难道只因搜索爬虫失控又将回到比拼技术暴力的暗黑丛林?这种情景绝非法治下的互联网可以接受的。

Robots协议自成立以来在全球受到严格遵守,利用Robots协议屏蔽搜索的案例举不胜举。Facebook和Twitter长期屏蔽谷歌,后者除了发牢骚不敢采取任何规避手段;默多克的新闻集团一度全面屏蔽谷歌,谷歌一直忍到……忍到默多克自己忍不住投降;搜索屏蔽360的除了百度各网站还有腾讯的QQ空间,更有意思的是QQ空间屏蔽360爬虫却在2012年后对百度和Google开放,360甚至都没有为此指责腾讯歧视;腾讯尽管向百度开放QQ空间却将腾讯微博的内容屏蔽至今,新浪微博也一度加入屏蔽百度的队列;电商领域可能是互相屏蔽的高地,淘宝从2008年起一直屏蔽百度搜索,京东、苏宁、当当网等也屏蔽了阿里旗下一淘搜索的爬虫。

各国法院承认Robots协议效力的判决同样不胜枚举。美国联邦法院早在2000年就在eBay诉BE(Bedder’s Edge)案 中就通过禁令支持了eBay屏蔽BE爬虫的主张。内华达法院2006年审理的Field v. Google 案 也明确认可Robots协议是有效保护网站权利的通行标准。北京一中院同样于2006年在审理著名的浙江泛亚诉百度著作权侵权案 判决书中认定原告有权利用设置Robots.txt文件拒绝百度收录。上述通过Robots协议屏蔽搜索爬虫的互联网实例和认可Robots协议法律效力的中外法院判决,都证明Robots协议的效力并不是在3B案中才成为争点,也证明Robots协议在产业实践和司法实践中都一直得到认可和尊重。

Imghash:相似图片搜索的php实现

前几天看到阮一峰的博客里写到关于相似图片搜索的原理, 里面介绍了Google相似图片搜索的大致原理,主要是从Neal Krawetz博士的LOOKS LIKE IT翻译而来。文章详细的介绍了相似图片搜索处理的相关步骤,并且给出了一个python的实现,由于我对PHP比较熟,所以写了个PHP的版本。
图片相似搜索的简单原理
根据文章里的描述,其实原理比较简单,大致有如下几个步骤:

1、缩小尺寸。将图片缩小到8×8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。

2、简化色彩。将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。

3、计算平均值。计算所有64个像素的灰度平均值。

4、比较像素的灰度。将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。

5、计算哈希值。将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。得到指纹以后,就可以对比不同的图片,看看64位中有多少位是不一样的。

这种算法的优点是简单快速,不受图片大小缩放的影响,缺点是图片的内容不能变更。实际应用中,往往采用更强大的pHash算法和SIFT算法,它们能够识别图片的变形。只要变形程度不超过25%,它们就能匹配原图。

图片相似搜索的PHP实现
原文中给出了一个python版本的实现,代码只有53行。我写了个对应的PHP版本,由于直接是用类写的,所以代码有100行,具体如下:

class Imghash{
	
	private static $_instance = null;
	
	public $rate = 2;
	
	public static function getInstance(){
		if (self::$_instance === null){
			self::$_instance = new self();
		}
		return self::$_instance;
	}
	public function run($file){
		if (!function_exists('imagecreatetruecolor')){
			throw new Exception('must load gd lib', 1);
		}
		$isString = false;
		if (is_string($file)){
			$file = array($file);
			$isString = true;
		}
		$result = array();
		foreach ($file as $f){
			$result[] = $this->hash($f);
		}
		return $isString ? $result[0] : $result;
	}
	public function checkIsSimilarImg($imgHash, $otherImgHash){
		if (file_exists($imgHash) && file_exists($otherImgHash)){
			$imgHash = $this->run($imgHash);
			$otherImgHash = $this->run($otherImgHash);
		}
		if (strlen($imgHash) !== strlen($otherImgHash)) return false;
		$count = 0;
		$len = strlen($imgHash);
		for($i=0;$i<$len;$i++){
			if ($imgHash{$i} !== $otherImgHash{$i}){
				$count++;
			}
		}
		return $count <= (5 * $rate * $rate) ? true : false;
	}
	public function hash($file){
		if (!file_exists($file)){
			return false;
		}
		$height = 8 * $this->rate;
		$width = 8 * $this->rate;
		$img = imagecreatetruecolor($width, $height);
		list($w, $h) = getimagesize($file);
		$source = $this->createImg($file);
		imagecopyresampled($img, $source, 0, 0, 0, 0, $width, $height, $w, $h);
		$value = $this->getHashValue($img);
		imagedestroy($img);
		return $value;
	}
	public function getHashValue($img){
		$width = imagesx($img);
		$height = imagesy($img);
		$total = 0;
		$array = array();
		for ($y=0;$y<$height;$y++){
			for ($x=0;$x<$width;$x++){
				$gray = ( imagecolorat($img, $x, $y) >> 8 ) & 0xFF;
				if (!is_array($array[$y])){
					$array[$y] = array();
				}
				$array[$y][$x] = $gray;
				$total += $gray;
			}
		}
		$average = intval($total / (64 * $this->rate * $this->rate));
		$result = '';
		for ($y=0;$y<$height;$y++){
			for ($x=0;$x<$width;$x++){
				if ($array[$y][$x] >= $average){
					$result .= '1';
				}else{
					$result .= '0';
				}
			}
		}
		return $result;
	}
	public function createImg($file){
		$ext = $this->getFileExt($file);
		if ($ext === 'jpeg') $ext = 'jpg';
		$img = null;
		switch ($ext){
			case 'png' : $img = imagecreatefrompng($file);break;
			case 'jpg' : $img = imagecreatefromjpeg($file);break;
			case 'gif' : $img = imagecreatefromgif($file);
		}
		return $img;
	}
	public function getFileExt($file){
		$infos = explode('.', $file);
		$ext = strtolower($infos[count($infos) - 1]);
		return $ext;
	}
}
require_once “Imghash.class.php”;
$instance = ImgHash::getInstance();
$result = $instance->checkIsSimilarImg(‘chenyin/IMG_3214.png’, ‘chenyin/IMG_3212.JPG’);

如果$result值为true, 则表明2个图片相似,否则不相似。

在实际的相似图片搜索中,算图片的指纹并不是难点,难点而是在怎么从海量的图片指纹里找出与之相似的指纹。

你了解感知计算吗?其实它已经侵入你的生活

随着智能设备的普及,我们的日常生活的数字化程度正在不断提高,期间会有许许多多的数据被生成。而可穿戴和物联网设备的大潮也即将来袭,而这预计会把数据采集和分析抬到更为重要的层面。除了定制广告和维系客户之外,数据的利用显然还有很大的潜力。智能手机是否能够作为我们的私人助手,来通过基于云端的大脑和智能分析让我们的生活变得更加轻松呢?

冰山一角

对于这个理念的应用,我们首先想到的是旅行应用TripIt。你可以把所有有关航班和酒店预定的电子邮件与之进行分享,而应用则会生成一份事无巨细的旅行日历。虽然你依然需要将邮件手动发送到该服务,且TripIt仅支持旅行方面的内容,但这的确是个聪明的点子,并有能力做大。

而Android领域里目前最为显然的例子自然就是Google Now了。它可以在我们下达指令时处理一些基本任务,但其真正的吸引力在于预测用户需要的能力。在旅行之前,Google Now可以帮助用户制定出计划,并通过兴趣分析来传递出用户可能会感兴趣的信息。

Google Now的真实体验在很大程度上取决于你愿意向它分享多少信息、使用谷歌服务频率、以及你的活跃程度。Google Now并非是一项傻瓜服务,且它所具备的潜力还有很大一部分尚未被挖掘。但谷歌是世界少数几家有能力和需要来传递出这种产品的公司。

改善健康

健康和健身监控是科技界的一大增长领域。健身追踪器是可穿戴市场里的先头部队,在和云端分析及应用的配合使用下,你几乎可以获得私人教练的体验。随着物联网的发展,这个健康应用可以拓展到自动生成购物清单,或是监控存放在冰箱中的物品。你的健身服务可以决定你应该吃什么,检查你冰箱中的食物,并在线订购新鲜的食材。

还有许多应用可以提供医学建议鼓励你为了下一次与医生的会面来进行数据收集,并提供服药提醒。我们戴在身上的传感器越多,有关你身体状况的混合数据也会相应增加,而这类数据的自动收集要比询问医生更加可靠。而健康数据的分析可以让医疗专家了解你的身体是不是出了问题,并触发和他们的预约。在你去看病之前,你的医生可能已经知道你的身体状况。

整理生活

我们的生活已经受到了来自各种提醒的轰炸。技术公司会持续记录你的生活细节,并对你发出相应的提醒。如果你曾经使用过汽车保险的对比服务,那你每年在续订的时候将会收到新的建议,而这也是根据你的情况所量身定制的。

但是,目前的这些提醒也只是提醒而已,接下来的操作还需要你亲力亲为,你无法让它来替你进行预定或续订。提醒服务也应该是自适应的。就拿旅行计划为例,你想要标记出日历中的冲突,如果航班被取消,更改酒店预定也是必不可少的操作。而提醒服务应该要具备根据个人信息提供智能建议的能力,让你在面对这些情况时可以获得最佳的备选方案。

在这方面,相关的技术公司有很大的机会来提升用户体验:让我们可以轻松付账单,提醒用户选择特别的优惠来省钱。如果办到这一点,那么相关的服务就会得到更高的维系率和满意度。

你可以多大程度地信任一款应用?

如果感知计算真正发展壮大,这将会成为一个关键问题。让真正的私人助手为你做决定或许让你很安心,但你是否又愿意让一款服务或应用来替你花钱呢?在航班取消之后,相关的服务或许可以为你订到便宜的机票,但在此之前你还是需要亲自进行查看吧?

如果我们不愿意提供出所有的数据,这一切便无从谈起。那些进行信息收集的公司有能力对我们的生活产生负面影响,即便他们面对的是匿名的大数据。我们所存储的数据是否安全?如果这些公司打算分享它们,谁又会去购买?如果保险公司掌握了这种信息,又将发生什么?政府会如何使用它们?是否会有不法分子进行窃取?

如果利用感知计算,这些独立的服务和应用将拥有许多细微的方式来提供更优秀的体验,但我们认为,感知计算的真正潜力只能通过开放数据分析来实现。这也就意味着相关的技术公司会在幕后分享你的数据,对此,并不是每一位用户都会同意。

Robots协议,一个闲人免进的牌子

Robots协议提供了一种保护互联网内容和隐私的手段,借助该协议,实现了网站与搜索引擎之间的一种平衡,维护了正常的网络秩序

  Robots协议是有关网络爬虫的一个协议,用于规范网络爬虫的行为,网站通过Robots协议告知爬虫哪些页面可以抓取,哪些页面不可以抓取。

  Robots协议形成于1993年、1994年前后。当时,随着互联网的发展,网络上的内容越来越丰富,同时,一些早期的搜索引擎包括一些信息收集网站的发展,出现了不少网络爬虫,自动收集网络上的内容。在这种情况下,网站的所有者希望可以通过某种手段使自己网站上的全部或者部分内容不被抓取,以保护自己的权利或者隐私,而搜索引擎也希望可以合理地获取网络上的内容。为此,网站所有者和搜索引擎人员一起,通过邮件组开始讨论,共同起草了Robots协议。

  Robots协议并不复杂,它主要是提供一些指令,通过这些指令表明自己网站的哪些内容可以被爬虫爬,或者哪些内容不能被爬,也可以指令允许哪些爬虫爬,不允许哪些爬虫爬,这也就是所谓的黑名单、白名单这样的方式。无论是黑名单还是白名单,都是保护网站内容的一种手段,可以单独使用白名单,也可以单独使用黑名单,或者两个一起用。就我所知,目前使用白名单相对比较多,因为这样对网站所有者比较方便,网站所有者可能不知道一共有多少爬虫,但是一些大的搜索引擎,比如百度、谷歌、搜狗,允许他们来爬,于是就设置出白名单,可能后期还有其他的搜索引擎需要爬取内容,他们可以通过与网站所有者协商的方式加入到白名单中,这可能就是白名单比较多的原因。

  Robots协议经世界互联网技术邮件组发布以后,几乎得到了所有搜索引擎的认可。Robots协议虽然不是一个国际标准,但事实上已经成为了业内一种普遍遵守的规范。目前国际上大的搜索引擎均遵守该协议,比如国际上的雅虎、谷歌等,国内的百度、搜狗等。

  网站的Robots协议内容以文本文件Robots.txt的方式放置在网站的根目录下,当一个爬虫访问某个网站时,首先到网站的根目录检查是否存在Robots.txt,如果存在,则按照其允许的内容进行抓取;如果不存在,则默认该网站全部内容可以抓取。另外,Robots协议从保护内容的角度说,它仅是一个声明并不是一种技术手段,也不是一种防止爬虫爬取内容的技术,而是一种所谓的防君子不防小人的手段,它从技术上无法阻挡某个爬虫抓取网站内容,只是一种声明,告诉爬虫可以抓取的内容。这就如同一个店家在门口挂了一个“闲人免进”的牌子,但是门是开着的,遵守的人看到“闲人免进”可能就不进入,但这无法阻止不遵守的人进入。

  Robots协议在1993年、1994年前后被提出以后,业内都在遵守这一协议,说明它具有一定的合理性,就如同在车马路上行驶,大家都靠右行驶,如果有人看到左边有空就走左边势必会造成一种混乱。既然目前大家都遵守这样一个规则,那么这个秩序就形成了,如果容忍破坏者,那么这个秩序也就被破坏掉了。总之,Robots协议提供了一种保护互联网内容和隐私的手段,借助该协议,实现了网站与搜索引擎之间的一种平衡,维护了正常的网络秩序。

MSG2200-2GE-AC 路由器虚拟服务器内网不能访问

瑞斯康达 MSG2200-2GE-AC 路由器设置虚拟服务器转发时,在外网访问WAN口IP可以正常访问,但在本路由下的终端访问时,转发都不生效。
解决方法如下:

telnet到设备命令行界面中,输入以下命令,需要严格按照命令顺序配置

ena
con ter
address wan01 /创建地址服务名称为wan01
host-address 175.42.92.x /服务地址的ip为内网要访问的公网IP
exit
service fwq1 /创建fwq1
tcp dest 80 source 1 65535
exit
ip nat pool web 192.168.1.8 192.168.1.8 /创建私网服务器地址池
ip nat destination vlan1 any wan01 fwq1 web /创建nat,VLAN1下的any地址访问目的wan01(即175.42.92.x)的这个fwq1服务都去访问私网地址池web
ip nat source vlan1 any any fwq1 interface /创建nat,VLAN1下的any地址访问any目的fwq1的服务都到转到接口模式下
host-address 175.42.92.x 可以改为如下,指定一个网段
net-address xxx.xxx.xxx.xxx/yy IP地址/掩码 此为一个地址段

Apache2.2整合PHP5.3以上的版本时提示错误Cannot load php5apache2_2.dll into server解决方法

Apache2.2整合PHP5.3以上的版本时提示错误“Cannot load php5apache2_2.dll into server ”

故障现象:
  在命令符方式下启动Apache时提示错误信息“httpd: Syntax error on line 129 of D:/serviceRoot/Apache2.2/conf/httpd.conf: Cannot load D:/serviceRoot/PHP5.4.3/php5apache2_2.dll into server”,导致Apache无法启动。
  Apache的配置文件D:/Apache/conf/httpd.conf 第129行内容为:
  LoadModule php5_module D:/serviceRoot/PHP5.4.3/php5apache2_2.dll
  注意:其中D:/serviceRoot/PHP5.4.3/php5apache2_2.dll是我安装php的相应路径。Apache为2.2.22版本,php为5.4.3版本。

出现错误的原因:
  在网上查到一位朋友遇到类似情况,并提示根据PHP的安装文件名称“php-5.3.6-Win32-VC9-x86.zip”得知该版本的PHP安装文件是由VC编译完成的,因此如需要运行或调用该PHP压缩包中的相关文件,则需要首先安装VC的运行时环境。如果你的机器没有安装有VC运行时环境,则Apache调用该PHP压缩包中的相关文件时会提示如上错误信息。

解决方法:
  在网上搜索“VC2008可再发行组件”或者是“VC2008运行库”,下载安装后即可解决此故障。

PHP 5.5 新增 Generators 特性 yield 标签

简单地讲,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,php 解释器会将其视为一个 generator,调用 fab(5) 不会执行 fab 函数,而是返回一个 iterable 对象!在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield b 时,fab 函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。

function xrange($start, $limit, $step = 1) {
for ($i = $start; $i <= $limit; $i += $step) { yield $i; } } echo 'Single digit odd numbers: '; /* 注意保存在内存中的数组绝不会被创建或返回 */ foreach (xrange(1, 9, 2) as $number) { echo "$number "; }

mysql中的 skip-name-resolve 问题

   今天早上开发那边发现mysql连接很慢,登陆到服务器上查看服务器日志都是正常的,无可疑记录,刚刚还好好的,怎么突然出现这个问题,于是登陆到mysql服务器上,查看下进程,发现有很多这样的连接:
218 | unauthenticated user | 192.168.10.6:44500 | NULL  | Connect | NULL | login | NULL
219 | unauthenticated user | 192.168.10.6:44501 | NULL  | Connect | NULL | login | NULL  
……..

原因是由于mysql对连接的客户端进行DNS反向解析。
有2种解决办法:
1,把client的ip写在mysql服务器的/etc/hosts文件里,随便给个名字就可以了。

2,在 my.cnf 中加入 –skip-name-resolve 。

对于第一种方法比较笨,也不实用,那么 skip-name-resolve 选项可以禁用dns解析,但是,这样不能在mysql的授权表中使用主机名了,只能使用IP。
我理解mysql是这样来处理客户端解析过程的,
1,当mysql的client连过来的时候,服务器会主动去查client的域名。
2,首先查找 /etc/hosts 文件,搜索域名和IP的对应关系。
3,如果hosts文件没有,则查找DNS设置,如果没有设置DNS服务器,会立刻返回失败,就相当于mysql设置了skip-name-resolve参数,如果设置了DNS服务器,就进行反向解析,直到timeout。
有一点不明白,为什么连接mysql服务器内网的ip地址也要进行DNS反向解析,而这时候DNS解析返回给mysql的是什么呢?
望高手解答。

CentOS里Apache强制UTF-8乱码的解决

之前的网页都是gb2312编码格式的,每个页面都带有HTML的meta标签说明本页使用的是gb2312编码(DW自带的那段代码)。结果用Firefox、IE、Opera三个浏览器访问都是乱码。这简直太奇怪了!明明我浏览器里编码是选择的“自动选择”的,按道理来说浏览器应该读取HTML页面的meta标签,按照GB2312编码显示网页,可是这些浏览器都无一例外的自动选择了UTF-8!查看网页源代码,HTML的meta头还是标记的charset=gb2312,并没有变成utf-8。奇怪了,难道是CentOS的Apache强制将网页编码改成了UTF-8?

抱着这样一种心态,跑到搜索引擎上一查询,嘿,还真有这样的情况。部分VPS提供的CentOS默认是开启了强制将页面编码转换成UTF-8的功能的。一旦开启了此功能,不管HTML中原来的meta标签中的charset,浏览器将会一律以UTF-8形式渲染,于是导致了乱码的产生。

知道原因就好办了,这是Apache的一个参数“AddDefaultCharset”导致的。我们来更改下Apache的配置文件,让这个参数变为OFF即可。

输入:

#vim /etc/httpd/conf/httpd.conf
找到原来的

AddDefaultCharset UTF-8
将它改为

AddDefaultCharset OFF
输入wq保存并退出vim后,使用重载命令或者重启Apache即可生效,这里我选择了重启Apache:

#/etc/init.d/httpd restart
再到浏览器中浏览网页,一切正常,问题解决!