<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[空城's Blog]]></title> 
<link>http://blog.520.at/index.php</link> 
<description><![CDATA[什么是爱情?]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[空城's Blog]]></copyright>
<item>
<link>http://blog.520.at/post/566/</link>
<title><![CDATA[百度site:.at 我的域名排第一]]></title> 
<author>空城 &lt;nanown@qq.com&gt;</author>
<category><![CDATA[技术]]></category>
<pubDate>Sat, 28 Aug 2010 18:32:20 +0000</pubDate> 
<guid>http://blog.520.at/post/566/</guid> 
<description>
<![CDATA[ 
	在百度site:.at时，www.520.at这个域名排第一，比google.at还排前，我想，在中国地区使用.at后缀的域名，可能我的站流量是最高的吧？<br/><br/><a href="http://blog.520.at/attachment.php?fid=14" target="_blank"><img src="http://blog.520.at/attachment.php?fid=14" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0" width="600" height="500"/></a><br/>
]]>
</description>
</item><item>
<link>http://blog.520.at/post/565/</link>
<title><![CDATA[有点像URL创建方式的代码]]></title> 
<author>空城 &lt;nanown@qq.com&gt;</author>
<category><![CDATA[delphi]]></category>
<pubDate>Mon, 23 Aug 2010 08:32:15 +0000</pubDate> 
<guid>http://blog.520.at/post/565/</guid> 
<description>
<![CDATA[ 
	写一段无聊的代码<br/><br/><div class="code"><br/>unit Unit1;<br/><br/>interface<br/><br/>uses<br/>&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br/>&nbsp;&nbsp;Dialogs, shellapi, ExtCtrls;<br/><br/>type<br/>&nbsp;&nbsp;TForm1 = class(TForm)<br/>&nbsp;&nbsp;&nbsp;&nbsp;procedure FormCreate(Sender: TObject);<br/>&nbsp;&nbsp;&nbsp;&nbsp;procedure FormActivate(Sender: TObject);<br/>&nbsp;&nbsp;&nbsp;&nbsp;procedure Timer1Timer(Sender: TObject);<br/>&nbsp;&nbsp;private<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123; Private declarations &#125;<br/>&nbsp;&nbsp;public<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123; Public declarations &#125;<br/>&nbsp;&nbsp;end;<br/><br/>var<br/>&nbsp;&nbsp;Form1: TForm1;<br/><br/>implementation<br/><br/>&#123;$R *.dfm&#125;<br/><br/><br/><br/>procedure TForm1.FormCreate(Sender: TObject);<br/>begin<br/> Application.ShowMainForm:=false;&nbsp;&nbsp;//隐藏窗体<br/> shellexecute(handle,&#039;open&#039;,&#039;www.520.at&#039;,nil,nil,sw_shownormal);<br/>end;<br/><br/>procedure TForm1.FormActivate(Sender: TObject);<br/>begin<br/> close;<br/>end;<br/><br/>procedure TForm1.Timer1Timer(Sender: TObject);<br/>begin<br/><br/>end;<br/><br/>end.<br/><br/></div>
]]>
</description>
</item><item>
<link>http://blog.520.at/post/564/</link>
<title><![CDATA[mysql将时间戳转成常用可读时间格式 ]]></title> 
<author>空城 &lt;nanown@qq.com&gt;</author>
<category><![CDATA[mysql]]></category>
<pubDate>Mon, 16 Aug 2010 21:43:33 +0000</pubDate> 
<guid>http://blog.520.at/post/564/</guid> 
<description>
<![CDATA[ 
	mysql中一个表的一个时间列是int类型，现在想修改这个字段的值，打算可读日期时间格式转成int，然后修改那个值。 <br/><br/>这个转换函数就是UNIX_TIMESTAMP，将可读的时间转换成int类型，具体用法： <br/><br/>update xxx_table set xxx_time=UNIX_TIMESTAMP('2006-11-13 13:24:22') where ...... <br/><br/>同时介绍一个另一个转换函数：FROM_UNIXTIME，将将时间戳转成常用时间格式 <br/><br/><br/><br/>select FROM_UNIXTIME(xxx_time) from xxx_table <br/><br/><br/><br/>mysql将时间戳转成常用时间格式 <br/>在mysql中，一个时间字段的存储类型是int（11），怎么转化成字符类型，比方存储为13270655222，需要转化为yyyy -mm-dd的形式 <br/><br/>使用 FROM_UNIXTIME函数，具体如下： <br/><br/>FROM_UNIXTIME(unix_timestamp,format) <br/>返回表示 Unix 时间标记的一个字符串，根据format字符串格式化。format可以包含与DATE_FORMAT()函数列出的条目同样的修饰符。 <br/>根据format字符串格式化date值。下列修饰符可以被用在format字符串中： %M 月名字(January……December) <br/>%W 星期名字(Sunday……Saturday) <br/>%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。） <br/>%Y 年, 数字, 4 位 <br/>%y 年, 数字, 2 位 <br/>%a 缩写的星期名字(Sun……Sat) <br/>%d 月份中的天数, 数字(00……31) <br/>%e 月份中的天数, 数字(0……31) <br/>%m 月, 数字(01……12) <br/>%c 月, 数字(1……12) <br/>%b 缩写的月份名字(Jan……Dec) <br/>%j 一年中的天数(001……366) <br/>%H 小时(00……23) <br/>%k 小时(0……23) <br/>%h 小时(01……12) <br/>%I 小时(01……12) <br/>%l 小时(1……12) <br/>%i 分钟, 数字(00……59) <br/>%r 时间,12 小时(hh:mm:ss [AP]M) <br/>%T 时间,24 小时(hh:mm:ss) <br/>%S 秒(00……59) <br/>%s 秒(00……59) <br/>%p AM或PM <br/>%w 一个星期中的天数(0=Sunday ……6=Saturday ） <br/>%U 星期(0……52), 这里星期天是星期的第一天 <br/>%u 星期(0……52), 这里星期一是星期的第一天 <br/>%% 一个文字“%”。 <br/><br/>所有的其他字符不做解释被复制到结果中。 <br/><br/><br/>如： <br/><br/>SELECT FROM_UNIXTIME(1234567890, '%Y-%m-%d %H:%i:%S') <br/>可以自己指定格式。 <br/>
]]>
</description>
</item><item>
<link>http://blog.520.at/post/563/</link>
<title><![CDATA[这个博客已经四年了]]></title> 
<author>空城 &lt;nanown@qq.com&gt;</author>
<category><![CDATA[心情随笔]]></category>
<pubDate>Mon, 09 Aug 2010 16:00:22 +0000</pubDate> 
<guid>http://blog.520.at/post/563/</guid> 
<description>
<![CDATA[ 
	2007年9月2日开博，记的那一年刚好满20周岁，如今已经过了差不多四年，今天花了差不多一天时间重新整理博客，又一次更换域名为blog.520.at，记得最初开博时用的nanown.cn，后来用hack92.com，再后来用kc.4181.cn，再之后用kc.qqqwe.com，再再之后来用kc.520.at，直到现在的blog.520.at,整整6次了，我希望以后不会更换。<br/><br/>今天看了很多以前的日志，发现很久很久没真认写过日志了，不知是因为太忙，还是已经变的越来越懒，还是对写博客这类东西已经没什么已经失去了兴趣。今天清理了很多博客友情连接，以前的很多博友的博客都关了，他们或许是因为太忙，或许是已经失去新鲜感，对写博客已经没什么动力和兴趣。而我也不知道自己的博客还能开几个四年？如今的趋势和潮流是微博，微博更具有互动性。<br/><br/>回忆经历的这四年，很明显感觉到自己成长了非常多，变的比以前成熟了，但很多事也看的越来越淡。<br/><br/>再看看现在的自己，却发现什么也没变，四年前的梦想，如今还差的那么遥远。而现在却发现自己的激情已经没四年前那么强烈，感觉如今自己混的还不如四年前，家庭的负担也越来越需要我去承担，想到爸妈，心情变的越来越沉重。怎么总是感觉自己永远都是那么迷茫。仰天问自己的未来在到底那里？<br/><br/>四年时间一晃而过，我人生已经不再允许再过一个四年，自己还是一无所有，我只能痛恨自己不够努力，算了，一切还的继续着。继续努力吧！<br/><br/><br/>2010年8月10记
]]>
</description>
</item><item>
<link>http://blog.520.at/post/562/</link>
<title><![CDATA[Nginx下phpcms,wordpress,phpwind,ecshop,shopex伪静态设置]]></title> 
<author>空城 &lt;nanown@qq.com&gt;</author>
<category><![CDATA[nginx]]></category>
<pubDate>Wed, 21 Jul 2010 02:08:44 +0000</pubDate> 
<guid>http://blog.520.at/post/562/</guid> 
<description>
<![CDATA[ 
	Nginx (”engine x”) 是一个高性能的 HTTP 和 反向代理 服务器，也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的，它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。尽管还是测试版，但是，Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。<br/>　　因为 Nginx 的文档大部分是俄文的，Nginx 的中文维基的目的是帮助使用中文世界的用户安装、配置和交换有关 Nginx 的使用经验。大部分文档源自Aleksandar Lazic 的工作。有关本维基本身的问题请直接询问Cliff Wells 。<br/>　　Nginx 可以在大多数 Unix like OS 上编译运行，并有 Windows 移植版。目前 Nginx 的开发版为 0.7.x，稳定版为 0.6.x，历史稳定版为 0.5.x，建议使用 0.6 系列作为生产版本。 Nginx 的源代码使用 2-clause BSD-like license。<br/>　　Nginx 的中文维基：http://wiki.codemongers.com/NginxChs<br/>　　Nginx 的中文站： http://www.nginx.cn<br/><br/>nginx下的伪静态规则：<br/><br/>PHPCMS：<br/><br/>location / &#123;<br/>###以下为PHPCMS 伪静态化rewrite规则<br/>rewrite ^(.*)show-([0-9]+)-([0-9]+)&#92;.html$ $1/show.php?itemid=$2&page=$3;<br/>rewrite ^(.*)list-([0-9]+)-([0-9]+)&#92;.html$ $1/list.php?catid=$2&page=$3;<br/>rewrite ^(.*)show-([0-9]+)&#92;.html$ $1/show.php?specialid=$2;<br/>&#125;<br/><br/>PHPWIND：<br/>location / &#123;<br/>####以下为PHPWind 伪静态化rewrite规则<br/>rewrite ^(.*)-htm-(.*)$ $1.php?$2 last;<br/>rewrite ^(.*)/simple/([a-z0-9&#92;_]+&#92;.html)$ $1/simple/index.php?$2 last;<br/>&#125;<br/><br/>WordPress的nginx伪静态规则：<br/><br/>location / &#123;<br/>index index.html index.php;<br/>if (-f $request_filename/index.html)&#123;<br/>rewrite (.*) $1/index.html break;<br/>&#125;<br/>if (-f $request_filename/index.php)&#123;<br/>rewrite (.*) $1/index.php;<br/>&#125;<br/>if (!-f $request_filename)&#123;<br/>rewrite (.*) /index.php;<br/>&#125;<br/>&#125;<br/><br/>ECSHOP的nginx伪静态规则就比较复杂庞大了：<br/><br/>if (!-e $request_filename)<br/>&#123;<br/>rewrite “^/index&#92;.html” /index.php last;<br/>rewrite “^/category$” /index.php last;<br/>rewrite “^/feed-c([0-9]+)&#92;.xml$” /feed.php?cat=$1 last;<br/>rewrite “^/feed-b([0-9]+)&#92;.xml$” /feed.php?brand=$1 last;<br/>rewrite “^/feed&#92;.xml$” /feed.php last;<br/>rewrite “^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)&#92;.html$” /category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5&page=$6&sort=$7&order=$8 last;<br/>rewrite “^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)(.*)&#92;.html$” /category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5 last;<br/>rewrite “^/category-([0-9]+)-b([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)&#92;.html$” /category.php?id=$1&brand=$2&page=$3&sort=$4&order=$5 last;<br/>rewrite “^/category-([0-9]+)-b([0-9]+)-([0-9]+)(.*)&#92;.html$” /category.php?id=$1&brand=$2&page=$3 last;<br/>rewrite “^/category-([0-9]+)-b([0-9]+)(.*)&#92;.html$” /category.php?id=$1&brand=$2 last;<br/>rewrite “^/category-([0-9]+)(.*)&#92;.html$” /category.php?id=$1 last;<br/>rewrite “^/goods-([0-9]+)(.*)&#92;.html” /goods.php?id=$1 last;<br/>rewrite “^/article_cat-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)&#92;.html$” /article_cat.php?id=$1&page=$2&sort=$3&order=$4 last;<br/>rewrite “^/article_cat-([0-9]+)-([0-9]+)(.*)&#92;.html$” /article_cat.php?id=$1&page=$2 last;<br/>rewrite “^/article_cat-([0-9]+)(.*)&#92;.html$” /article_cat.php?id=$1 last;<br/>rewrite “^/article-([0-9]+)(.*)&#92;.html$” /article.php?id=$1 last;<br/>rewrite “^/brand-([0-9]+)-c([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)&#92;.html” /brand.php?id=$1&cat=$2&page=$3&sort=$4&order=$5 last;<br/>rewrite “^/brand-([0-9]+)-c([0-9]+)-([0-9]+)(.*)&#92;.html” /brand.php?id=$1&cat=$2&page=$3 last;<br/>rewrite “^/brand-([0-9]+)-c([0-9]+)(.*)&#92;.html” /brand.php?id=$1&cat=$2 last;<br/>rewrite “^/brand-([0-9]+)(.*)&#92;.html” /brand.php?id=$1 last;<br/>rewrite “^/tag-(.*)&#92;.html” /search.php?keywords=$1 last;<br/>rewrite “^/snatch-([0-9]+)&#92;.html$” /snatch.php?id=$1 last;<br/>rewrite “^/group_buy-([0-9]+)&#92;.html$” /group_buy.php?act=view&id=$1 last;<br/>rewrite “^/auction-([0-9]+)&#92;.html$” /auction.php?act=view&id=$1 last;<br/>rewrite “^/exchange-id([0-9]+)(.*)&#92;.html$” /exchange.php?id=$1&act=view last;<br/>rewrite “^/exchange-([0-9]+)-min([0-9]+)-max([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)&#92;.html$” /exchange.php?cat_id=$1&integral_min=$2&integral_max=$3&page=$4&sort=$5&order=$6 last;<br/>rewrite ^/exchange-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)&#92;.html$” /exchange.php?cat_id=$1&page=$2&sort=$3&order=$4 last;<br/>rewrite “^/exchange-([0-9]+)-([0-9]+)(.*)&#92;.html$” /exchange.php?cat_id=$1&page=$2 last;<br/>rewrite “^/exchange-([0-9]+)(.*)&#92;.html$” /exchange.php?cat_id=$1 last;<br/>&#125;<br/><br/>商城程序shopex的nginx伪静态规则：<br/><br/>location / &#123;<br/>if (!-e $request_filename) &#123;<br/>rewrite ^/(.+&#92;.(html&#124;xml&#124;json&#124;htm&#124;php&#124;jsp&#124;asp&#124;shtml))$ /index.php?$1 last;<br/>&#125;<br/>&#125;<br/><br/>
]]>
</description>
</item><item>
<link>http://blog.520.at/post/561/</link>
<title><![CDATA[MYSQL重复记录查询]]></title> 
<author>空城 &lt;nanown@qq.com&gt;</author>
<category><![CDATA[mysql]]></category>
<pubDate>Wed, 07 Jul 2010 17:28:55 +0000</pubDate> 
<guid>http://blog.520.at/post/561/</guid> 
<description>
<![CDATA[ 
	1、查找表中多余的重复记录，重复记录是根据单个字段（peopleId）来判断<br/>select * from people<br/>where peopleId in (select&nbsp;&nbsp; peopleId&nbsp;&nbsp;from&nbsp;&nbsp; people&nbsp;&nbsp;group&nbsp;&nbsp;by&nbsp;&nbsp; peopleId&nbsp;&nbsp;having&nbsp;&nbsp;count(peopleId) > 1)<br/><br/>2、删除表中多余的重复记录，重复记录是根据单个 字段（peopleId）来判断，只留有rowid最小的记录<br/>delete from people<br/>where peopleId&nbsp;&nbsp;in (select&nbsp;&nbsp; peopleId&nbsp;&nbsp;from people&nbsp;&nbsp;group&nbsp;&nbsp;by&nbsp;&nbsp; peopleId&nbsp;&nbsp; having&nbsp;&nbsp;count(peopleId) > 1)<br/>and rowid not in (select min(rowid) from&nbsp;&nbsp; people&nbsp;&nbsp;group by peopleId&nbsp;&nbsp;having count(peopleId )>1)<br/><br/>3、 查找表中多余的重复记录（多个字段）<br/>select * from vitae a<br/>where (a.peopleId,a.seq) in&nbsp;&nbsp; (select peopleId,seq from vitae group by peopleId,seq&nbsp;&nbsp;having count(*) > 1)<br/><br/>4、删除表中多余的重复记录（多个字段），只留有rowid最小的记录<br/>delete from vitae a<br/>where (a.peopleId,a.seq) in&nbsp;&nbsp; (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)<br/>and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)<br/><br/>5、查找表中多余的重复记录（多个字段），不包含rowid最小的记录<br/>select * from vitae a<br/>where (a.peopleId,a.seq) in&nbsp;&nbsp; (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)<br/>and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)<br/>(二)<br/>比方说<br/>在A表中存在一个字段“name”，<br/>而且不同记录之间的“name”值有可能 会相同，<br/>现在就是需要查询出在该表中的各记录之间，“name”值存在重复的项；<br/>Select Name,Count(*) From A Group By Name Having Count(*) > 1<br/>如果还查性别也相同大则如下:<br/>Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1<br/>(三)<br/>方 法一<br/>declare @max integer,@id integer<br/>declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >； 1<br/>open cur_rows<br/>fetch cur_rows into @id,@max<br/>while @@fetch_status=0<br/>begin<br/>select @max = @max -1<br/>set rowcount @max<br/>delete from 表名 where 主字段 = @id<br/>fetch cur_rows into @id,@max<br/>end<br/>close cur_rows<br/>set rowcount 0<br/><br/>方法二<br/><br/>有两个意义上的重复记录，一是完全重复的记录，也即所有字段均重复的记录，二是部分关键字段重复的记录，比如Name字段重 复，而其他字段不一定重复或都重复可以忽略。<br/><br/>1、对于第一种重复，比较容易解决，使用<br/>select distinct * from tableName<br/><br/>就可以得到无重复记录的结果集。<br/><br/>如果该表需要删除重复的记录（重复记录保留1 条），可以按以下方法删除<br/>select distinct * into #Tmp from tableName<br/>drop table tableName<br/>select * into tableName from #Tmp<br/>drop table #Tmp<br/><br/>发生这种重复的原因是表设计不周产生的，增加唯一索引列即可解决。<br/><br/>2、这类重复问题通常要求保留重复记录中的第一条记录，操作方法 如下<br/><br/>假设有重复的字段为Name,Address，要求得到这两个字段唯一的结果集<br/>select identity(int,1,1) as autoID, * into #Tmp from tableName<br/>select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID<br/>select * from #Tmp where autoID in(select autoID from #tmp2)<br/><br/>最后一个 select即得到了Name，Address不重复的结果集（但多了一个autoID字段，实际写时可以写在select子句中省去此列）<br/><br/>(四) 查询重复<br/>select * from tablename where id in (<br/>select id from tablename<br/>group by id<br/>having count(id) > 1<br/><br/>) <br/>
]]>
</description>
</item><item>
<link>http://blog.520.at/file_get_contents/</link>
<title><![CDATA[file_get_contents函数发送User_agent的方法]]></title> 
<author>空城 &lt;nanown@qq.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Sun, 16 May 2010 10:20:36 +0000</pubDate> 
<guid>http://blog.520.at/file_get_contents/</guid> 
<description>
<![CDATA[ 
	在用file_get_contents函数采集网站时，有时会遇到明明用浏览器可以看，但就是采不到内容的问题。这很有可能是服务器上做了设置，根据 User_agent判断是否为正常的浏览器请求，默认PHP的file_get_contents函数是不发送ua的，如果要采集这样的网站，我们就要 让PHP模拟浏览器发送UA，这样对方的服务器就会以为我们是用浏览器是浏览，而返回正常的内容。<br/>发送UA方法很简单，在使用file_get_contents函数前加上这一句:<br/><br/><div class="code"><br/>ini_set(&#039;user_agent&#039;,&#039;Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; GreenBrowser)&#039;);<br/>$url=&#039;http://www.baidu.com&#039;;<br/>echo $flg=@file_get_contents($url);<br/></div><br/>其中Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; GreenBrowser)是 IE7 WindowsXP GreenBrowser环境下的UA，可根据需要自行修改成其他的，甚至可以伪装蜘蛛。<br/><div class="code"><br/>Baiduspider+(+http://www.baidu.com/search/spider.htm)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 百度蜘蛛User_agent<br/>Sosospider+(+http://help.soso.com/webspider.htm)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SOSO蜘蛛User_agent<br/>Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GOOGLE蜘蛛User_agent<br/>Mozilla/5.0+(compatible;+Yahoo!+Slurp;+http://help.yahoo.com/help/us/ysearch/slurp)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Yahoo蜘蛛User_agent<br/>Mozilla/5.0 (compatible; YoudaoBot/1.0; http://www.youdao.com/help/webmaster/spider/; )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有道蜘蛛User_agent<br/></div><br/>
]]>
</description>
</item><item>
<link>http://blog.520.at/post/559/</link>
<title><![CDATA[Linux修改时间和日期的方法]]></title> 
<author>空城 &lt;nanown@qq.com&gt;</author>
<category><![CDATA[linux]]></category>
<pubDate>Fri, 14 May 2010 06:22:34 +0000</pubDate> 
<guid>http://blog.520.at/post/559/</guid> 
<description>
<![CDATA[ 
	Linux下的时间分为两种，系统时间与硬件时间。我们一般看到的时间就是系统时间，比如现在是11:45 AM。硬件时间指的是主板上CMOS中的时间，这两个时间并不是总是同步的，一般情况下大约11分钟同步一次。<br/><br/>　　Linux系统启动时，从CMOS中读取当前时间，作为系统时间，从此以后系统时间独立tick，此时如果你用date命令修改了系统时间，硬件时间是不受影响的，就是说如果此时关机，下次的系统时间还是不对。要想将系统时间保存到硬件时间，可以是用hwclock 或者clock命令，hwclock就是hardware clock的意思。<br/><br/>　　一个完整的修改linux系统时间的过程如下所示：<br/><br/>　　注意先改日期，再改时间<br/><br/>　　# date -s 20091218 将当前日期改为2009-12-18<br/><br/>　　# date -s 12:21:00 将当前系统时间改为12:21:00<br/><br/>　　# clock -w 将当前系统时间保存到硬件时间<br/>
]]>
</description>
</item><item>
<link>http://blog.520.at/post/558/</link>
<title><![CDATA[php连接纯真数据库查询ip地址归属地（从discuz 7.2提取）]]></title> 
<author>空城 &lt;nanown@qq.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Wed, 21 Apr 2010 18:14:23 +0000</pubDate> 
<guid>http://blog.520.at/post/558/</guid> 
<description>
<![CDATA[ 
	discuz7.2默认为一个精简IP库，如果要使用纯真数据库，得先把ipdata/tinyipdata.dat，删除或改名。然后上传纯真数据库到ipdata/wry.dat。他使用了三个函数来完成IP库查询。我现在主要要连接纯真数据库查询ip的功能。所以就把他的判断函数合并了一下，改成了一个函数。<br/><br/><div class="code">&lt;?php<br/><br/>$ip=$_SERVER&#91;&#039;REMOTE_ADDR&#039;&#93;;<br/>//测试1<br/>echo convertip($ip).&#039;&lt;br /&gt;&#039;;<br/>//测试2<br/>echo convertip(&#039;123.114.33.77&#039;);<br/><br/>function convertip($ip) &#123;<br/>&nbsp;&nbsp;if(!preg_match(&quot;/^&#92;d&#123;1,3&#125;&#92;.&#92;d&#123;1,3&#125;&#92;.&#92;d&#123;1,3&#125;&#92;.&#92;d&#123;1,3&#125;$/&quot;, $ip)) return &#039;Invalid IP Address&#039;;<br/><br/>&nbsp;&nbsp;$iparray = explode(&#039;.&#039;, $ip);<br/><br/>&nbsp;&nbsp;if($iparray&#91;0&#93; == 10 &#124;&#124; $iparray&#91;0&#93; == 127 &#124;&#124; ($iparray&#91;0&#93; == 192 &amp;&amp; $iparray&#91;1&#93; == 168) &#124;&#124; ($iparray&#91;0&#93; == 172 &amp;&amp; ($iparray&#91;1&#93; &gt;= 16 &amp;&amp; $iparray&#91;1&#93; &lt;= 31))) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return &#039;LAN&#039;;<br/>&nbsp;&nbsp;&#125; elseif($iparray&#91;0&#93; &gt; 255 &#124;&#124; $iparray&#91;1&#93; &gt; 255 &#124;&#124; $iparray&#91;2&#93; &gt; 255 &#124;&#124; $iparray&#91;3&#93; &gt; 255) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return &#039;Invalid IP Address&#039;;<br/>&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;if(!$fd = @fopen(&#039;QQWry.Dat&#039;, &#039;rb&#039;)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return &#039;Invalid IP data file&#039;;<br/>&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;$ip = explode(&#039;.&#039;, $ip);<br/>&nbsp;&nbsp;$ipNum = $ip&#91;0&#93; * 16777216 + $ip&#91;1&#93; * 65536 + $ip&#91;2&#93; * 256 + $ip&#91;3&#93;;<br/><br/>&nbsp;&nbsp;if(!($DataBegin = fread($fd, 4)) &#124;&#124; !($DataEnd = fread($fd, 4)) ) return;<br/>&nbsp;&nbsp;@$ipbegin = implode(&#039;&#039;, unpack(&#039;L&#039;, $DataBegin));<br/>&nbsp;&nbsp;if($ipbegin &lt; 0) $ipbegin += pow(2, 32);<br/>&nbsp;&nbsp;@$ipend = implode(&#039;&#039;, unpack(&#039;L&#039;, $DataEnd));<br/>&nbsp;&nbsp;if($ipend &lt; 0) $ipend += pow(2, 32);<br/>&nbsp;&nbsp;$ipAllNum = ($ipend - $ipbegin) / 7 + 1;<br/><br/>&nbsp;&nbsp;$BeginNum = $ip2num = $ip1num = 0;<br/>&nbsp;&nbsp;$ipAddr1 = $ipAddr2 = &#039;&#039;;<br/>&nbsp;&nbsp;$EndNum = $ipAllNum;<br/><br/>&nbsp;&nbsp;while($ip1num &gt; $ipNum &#124;&#124; $ip2num &lt; $ipNum) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$Middle= intval(($EndNum + $BeginNum) / 2);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;fseek($fd, $ipbegin + 7 * $Middle);<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipData1 = fread($fd, 4);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(strlen($ipData1) &lt; 4) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose($fd);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#039;System Error&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ip1num = implode(&#039;&#039;, unpack(&#039;L&#039;, $ipData1));<br/>&nbsp;&nbsp;&nbsp;&nbsp;if($ip1num &lt; 0) $ip1num += pow(2, 32);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;if($ip1num &gt; $ipNum) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$EndNum = $Middle;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$DataSeek = fread($fd, 3);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(strlen($DataSeek) &lt; 3) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose($fd);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#039;System Error&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$DataSeek = implode(&#039;&#039;, unpack(&#039;L&#039;, $DataSeek.chr(0)));<br/>&nbsp;&nbsp;&nbsp;&nbsp;fseek($fd, $DataSeek);<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipData2 = fread($fd, 4);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(strlen($ipData2) &lt; 4) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose($fd);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#039;System Error&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ip2num = implode(&#039;&#039;, unpack(&#039;L&#039;, $ipData2));<br/>&nbsp;&nbsp;&nbsp;&nbsp;if($ip2num &lt; 0) $ip2num += pow(2, 32);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;if($ip2num &lt; $ipNum) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($Middle == $BeginNum) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose($fd);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#039;Unknown&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$BeginNum = $Middle;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;$ipFlag = fread($fd, 1);<br/>&nbsp;&nbsp;if($ipFlag == chr(1)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipSeek = fread($fd, 3);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(strlen($ipSeek) &lt; 3) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose($fd);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#039;System Error&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipSeek = implode(&#039;&#039;, unpack(&#039;L&#039;, $ipSeek.chr(0)));<br/>&nbsp;&nbsp;&nbsp;&nbsp;fseek($fd, $ipSeek);<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipFlag = fread($fd, 1);<br/>&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;if($ipFlag == chr(2)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$AddrSeek = fread($fd, 3);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(strlen($AddrSeek) &lt; 3) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose($fd);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#039;System Error&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipFlag = fread($fd, 1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if($ipFlag == chr(2)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$AddrSeek2 = fread($fd, 3);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(strlen($AddrSeek2) &lt; 3) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose($fd);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#039;System Error&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$AddrSeek2 = implode(&#039;&#039;, unpack(&#039;L&#039;, $AddrSeek2.chr(0)));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fseek($fd, $AddrSeek2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fseek($fd, -1, SEEK_CUR);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;while(($char = fread($fd, 1)) != chr(0))<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipAddr2 .= $char;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$AddrSeek = implode(&#039;&#039;, unpack(&#039;L&#039;, $AddrSeek.chr(0)));<br/>&nbsp;&nbsp;&nbsp;&nbsp;fseek($fd, $AddrSeek);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;while(($char = fread($fd, 1)) != chr(0))<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipAddr1 .= $char;<br/>&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;fseek($fd, -1, SEEK_CUR);<br/>&nbsp;&nbsp;&nbsp;&nbsp;while(($char = fread($fd, 1)) != chr(0))<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipAddr1 .= $char;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipFlag = fread($fd, 1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if($ipFlag == chr(2)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$AddrSeek2 = fread($fd, 3);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(strlen($AddrSeek2) &lt; 3) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose($fd);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#039;System Error&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$AddrSeek2 = implode(&#039;&#039;, unpack(&#039;L&#039;, $AddrSeek2.chr(0)));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fseek($fd, $AddrSeek2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fseek($fd, -1, SEEK_CUR);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;while(($char = fread($fd, 1)) != chr(0))<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipAddr2 .= $char;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;fclose($fd);<br/><br/>&nbsp;&nbsp;if(preg_match(&#039;/http/i&#039;, $ipAddr2)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipAddr2 = &#039;&#039;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;$ipaddr = &quot;$ipAddr1 $ipAddr2&quot;;<br/>&nbsp;&nbsp;$ipaddr = preg_replace(&#039;/CZ88&#92;.NET/is&#039;, &#039;&#039;, $ipaddr);<br/>&nbsp;&nbsp;$ipaddr = preg_replace(&#039;/^&#92;s*/is&#039;, &#039;&#039;, $ipaddr);<br/>&nbsp;&nbsp;$ipaddr = preg_replace(&#039;/&#92;s*$/is&#039;, &#039;&#039;, $ipaddr);<br/>&nbsp;&nbsp;if(preg_match(&#039;/http/i&#039;, $ipaddr) &#124;&#124; $ipaddr == &#039;&#039;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipaddr = &#039;Unknown&#039;;<br/>&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;return $ipaddr;<br/>&#125;<br/><br/><br/>?&gt;</div><br/>Tags - <a href="http://blog.520.at/tags/php/" rel="tag">php</a> , <a href="http://blog.520.at/tags/%25E7%25BA%25AF%25E7%259C%259F/" rel="tag">纯真</a> , <a href="http://blog.520.at/tags/%25E6%2595%25B0%25E6%258D%25AE%25E5%25BA%2593/" rel="tag">数据库</a> , <a href="http://blog.520.at/tags/ip/" rel="tag">ip</a>
]]>
</description>
</item><item>
<link>http://blog.520.at/post/557/</link>
<title><![CDATA[PHP下编码转换函数mb_convert_encoding与iconv的使用]]></title> 
<author>空城 &lt;nanown@qq.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Fri, 02 Apr 2010 16:37:15 +0000</pubDate> 
<guid>http://blog.520.at/post/557/</guid> 
<description>
<![CDATA[ 
	一般情况下用 iconv，只有当遇到无法确定原编码是何种编码，或者iconv转化后无法正常显示时才用mb_convert_encoding 函数. <br/><br/>注意：<br/>mb_convert_encoding把在utf8可编码的字符而在gbk中不可编码的字符都转成了&#92;0x00&#92;0x80<br/><br/>在 php.ini里将; extension=php_mbstring.dll 前面的 ; 去掉 <br/>mb_convert_encoding 可以指定多种输入编码，它会根据内容自动识别,但是执行效率比iconv差太多； 
]]>
</description>
</item>
</channel>
</rss>