<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[寒窗轩-谢燕伟的博客]]></title> 
<description><![CDATA[关注互联网事，学习网络编程，秀计算机系统，书写心情故事。]]></description>
<link>http://huikon.cn/</link>
<language>zh-cn</language>
<generator>www.emlog.net</generator>

<item>
	<title>如何用正则表达式匹配指定字符开始和指定字符结束</title>
	<link>http://huikon.cn/?post=224</link>
	<description><![CDATA[<p>今天用dedecms写采集规则的时候发现一不小心，把大量无用的字符也采集下来了，重写规则重新集采是不太可能的了，那么多的数据，好再dedecms功能很强大，即使采集下来后也可用替换功能将无用字符给替换掉，于是有了今天的问题。正则匹配指定字符开始和指定字符结束，如以a开始结束的正则表达式为：<span style="color: #f00">a.*?b</span>
，即以a开始b结束的字符可能被匹配。顺便将dedecms批量改动太的sql语句记下来，伪静太或动态页面的时候很有用。<br />进入后台&rarr;系统&rarr;SQL命令行工具&rarr;运行SQL命令行： 单行命令执行查询命令：<br />1.将所有文档设置为&ldquo;仅动态&rdquo;：update dede_archives set ismake=-1<br />2.将所有文档设置为&ldquo;仅静态&rdquo;：update dede_archives set ismake=1<br />3.将所有栏目设置为&ldquo;使用动态页&rdquo;： update dede_arctype set isdefault=-1<br />4.将所有栏目设置为&ldquo;使用静态页&rdquo;： update dede_arctype set isdefault=1</p><div id="related_log" style="font-size:12px"><p><b>您可能还喜欢（Maybe You Would Like）：</b></p><p><a href="http://huikon.cn/?post=97">php SQL BETWEEN AND 查询日期范围。</a></p><p><a href="http://huikon.cn/?post=138">简单而全面的sql查询教程(一)</a></p><p><a href="http://huikon.cn/?post=196">dedecms挂马清理记</a></p></div>]]></description>
	<pubDate>Fri, 27 Aug 2010 02:58:42 +0000</pubDate>
	<author>寒川</author>
	<guid>http://huikon.cn/?post=224</guid>

</item>
<item>
	<title>PHP版OAuth认证协议中的HMACSHA1加密算法（签名方法）</title>
	<link>http://huikon.cn/?post=220</link>
	<description><![CDATA[<p>鼓捣微博API的时候接触到OAuth认证协议，其中的HMACSHA1加密算法（签名方法）百度上找的，分享出来，也许以后有用。呵呵。。。。</p>
<p>&lt;?php</p>
<p>function hmacsha1($key,$data) {<br />&nbsp;&nbsp;&nbsp; $blocksize=64;<br />&nbsp;&nbsp;&nbsp; $hashfunc=&#39;sha1&#39;;<br />&nbsp;&nbsp;&nbsp; if (strlen($key)&gt;$blocksize)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $key=pack(&#39;H*&#39;, $hashfunc($key));<br />&nbsp;&nbsp;&nbsp; $key=str_pad($key,$blocksize,chr(0x00));<br />&nbsp;&nbsp;&nbsp; $ipad=str_repeat(chr(0x36),$blocksize);<br />&nbsp;&nbsp;&nbsp; $opad=str_repeat(chr(0x5c),$blocksize);<br />&nbsp;&nbsp;&nbsp; $hmac = pack(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;H*&#39;,$hashfunc(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ($key^$opad).pack(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;H*&#39;,$hashfunc(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ($key^$ipad).$data<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<br />&nbsp;&nbsp;&nbsp; return $hmac;<br />}</p>
<p>?&gt;</p><div id="related_log" style="font-size:12px"><p><b>您可能还喜欢（Maybe You Would Like）：</b></p><p><a href="http://huikon.cn/?post=217">php curl写个新浪发sina微博的API接口</a></p><p><a href="http://huikon.cn/?post=219">OAuth认证协议原理分析及使用方法（转）</a></p></div>]]></description>
	<pubDate>Tue, 03 Aug 2010 13:33:20 +0000</pubDate>
	<author>寒川</author>
	<guid>http://huikon.cn/?post=220</guid>

</item>
<item>
	<title>OAuth认证协议原理分析及使用方法（转）</title>
	<link>http://huikon.cn/?post=219</link>
	<description><![CDATA[<p>随着微博的盛行，各大网站都推出了自己的微博，而且大多微博都开放自己的API，怎样才能更安全地使用这些微博API是个问题。昨晚看了新浪、搜狐、嘀咕的API，发现都提供BASIC、OAUTH两种认证方式，BASIC倒是很好用，不过貌似安全性能比OAUTH认证方式差了好多。现在有空，转点OAUTH认证的放在博客中，慢慢研究。下面内容为转载：</p>
<hr /><h3>OAuth是什么？</h3>
<p>OAuth是一个开放的认证协议，让你可以在Web或桌面程序中使用简单而标准的，安全的API认证。</p>
<h3>OAuth有什么用？为什么要使用OAuth？</h3>
<p>网络开放是一个不变的趋势，那么不可避免的会有各种网络服务间分享内容的需要。</p>
<p>举个我们身边国内的例子吧：比如人人网想要调用QQ邮箱的联系人列表，现在的方法是你需要在人人网输入你的QQ号，QQ密码才能调用，虽然网站上可能都自谓&ldquo;不保留QQ用户名密码&rdquo;，但是大家信吗？</p>
<p>OAuth就是为了解决这个问题而诞生的，用户访问第三方资源，不再需要网站提交你的用户名，密码。这样好处自己是安全，而且不会泄露你的隐私给不信任的一方。</p>
<h3>OAuth原理</h3>
<p>OAuth中有三方：一，用户；二，Consumer（不知杂翻译，类似上面的 twitterfeed 角色）；三，服务提供商。</p>
<h4>一，Consumer 向 服务提供商 申请接入权限</h4>
<p>可得到：Consumer Key，Consumer Secret。twitter申请oauth的话，在 setting - connection - developer 里面申请。 同时给出三个访问网址：</p>
<ol><li>request_token_url = &#39;http://twitter.com/oauth/request_token&#39;</li>
<li>access_token_url = &#39;http://twitter.com/oauth/access_token&#39;</li>
<li>authorize_url = &#39;http://twitter.com/oauth/authorize&#39;</li>
</ol>
<h4>二，当Consumer接到用户请求想要访问第三方资源（如twitter）的时候</h4>
<p>Consumer需要先取得 请求另牌（Request Token）。网址为上面的 request_token_url，参数为：</p>
<ol><li>oauth_consumer_key：Consumer Key</li>
<li>oauth_signature_method：签名加密方法</li>
<li>oauth_signature：加密的签名 （这个下面细说）</li>
<li>oauth_timestamp：UNIX时间戳</li>
<li>oauth_nonce：一个随机的混淆字符串，随机生成一个。</li>
<li>oauth_version：OAuth版本，可选，如果设置的话，一定设置为 1.0</li>
<li>oauth_callback：返回网址链接。</li>
<li>及其它服务提供商定义的参数</li>
</ol>
<p>这样 Consumer就取得了 请求另牌（包括另牌名 oauth_token，另牌密钥 oauth_token_secret。</p>
<h4>三，浏览器自动转向服务提供商的网站：</h4>
<p>网址为&nbsp;authorize_url?oauth_token=请求另牌名</p>
<h4>四，用户同意 Consumer访问 服务提供商资源</h4>
<p>那么会自动转回上面的 oauth_callback 里定义的网址。同时加上 oauth_token （就是请求另牌），及&nbsp;oauth_verifier（验证码）。&nbsp;</p>
<h4>五，现在总可以开始请求资源了吧？</h4>
<p>NO。现在还需要再向 服务提供商 请求 访问另牌（Access Token）。网址为上面的&nbsp;access_token_url，参数为：</p>
<ol><li>oauth_consumer_key：Consumer Key</li>
<li>oauth_token：上面取得的 请求另牌的名</li>
<li>oauth_signature_method：签名加密方法</li>
<li>oauth_signature：加密的签名 （这个下面细说）</li>
<li>oauth_timestamp：UNIX时间戳</li>
<li>oauth_nonce：一个随机的混淆字符串，随机生成一个。</li>
<li>oauth_version：OAuth版本，可选，如果设置的话，一定设置为 1.0</li>
<li>oauth_verifier：上面返回的验证码。</li>
<li>请求 访问另牌的时候，不能加其它参数。</li>
</ol>
<p>这样就可以取得 访问另牌（包括Access Token 及 Access Token Secret）。这个就是需要保存在 Consumer上面的信息（没有你的真实用户名，密码，安全吧！）</p>
<h4>六，取得 访问令牌 后，</h4>
<p>Consumer就可以作为用户的身份访问 服务提供商上被保护的资源了。提交的参数如下：</p>
<ol><li>oauth_consumer_key：Consumer Key</li>
<li>oauth_token：访问另牌</li>
<li>oauth_signature_method：签名加密方法</li>
<li>oauth_signature：加密的签名 （这个下面细说）</li>
<li>oauth_timestamp：UNIX时间戳</li>
<li>oauth_nonce：一个随机的混淆字符串，随机生成一个。</li>
<li>oauth_version：OAuth版本，可选，如果设置的话，一定设置为 1.0</li>
<li>及其它服务提供商定义的参数</li>
</ol>
<h3>OAuth安全机制是如何实现的？</h3>
<p>OAuth 使用的签名加密方法有 HMAC-SHA1,RSA-SHA1 （可以自定义）。拿 HMAC-SHA1 来说吧，HMAC-SHA1这种加密码方法，可以使用 私钥 来加密 要在网络上传输的数据，而这个私钥只有 Consumer及服务提供商知道，试图攻击的人即使得到传输在网络上的字符串，没有 私钥 也是白搭。</p>
<p>私钥是：consumer secret&amp;token secret &nbsp;（哈两个密码加一起）</p>
<p>要加密的字符串是：除&nbsp;oauth_signature 外的其它要传输的数据。按参数名字符排列，如果一样，则按 内容排。如：domain=kejibo.com&amp;oauth_consumer_key=XYZ&amp;word=welcome......................</p>
<p>前面提的加密里面都是固定的字符串，那么攻击者岂不是直接可以偷取使用吗？</p>
<p>不，oauth_timestamp，oauth_nonce。这两个是变化的。而且服务器会验证一个 nonce（混淆码）是否已经被使用。</p>
<p>那么这样攻击者就无法自已生成 签名，或者偷你的签名来使用了。</p>
<hr /><p>转载源：<a href="http://kejibo.com/oauth/" rel="nofllow">http://kejibo.com/oauth/</a>
</p><div id="related_log" style="font-size:12px"><p><b>您可能还喜欢（Maybe You Would Like）：</b></p><p><a href="http://huikon.cn/?post=218">php curl利用嘀咕、搜狐微博API发布微博</a></p><p><a href="http://huikon.cn/?post=217">php curl写个新浪发sina微博的API接口</a></p><p><a href="http://huikon.cn/?post=220">PHP版OAuth认证协议中的HMACSHA1加密算法（签名方法）</a></p></div>]]></description>
	<pubDate>Tue, 03 Aug 2010 11:34:34 +0000</pubDate>
	<author>寒川</author>
	<guid>http://huikon.cn/?post=219</guid>

</item>
<item>
	<title>php curl利用嘀咕、搜狐微博API发布微博</title>
	<link>http://huikon.cn/?post=218</link>
	<description><![CDATA[<p>嘀咕、搜狐微博API使用昨晚简单地研究了一下，下面是用php curl利用嘀咕、搜狐微博API发布微博，具体如下：</p>
<p>&lt;?php</p>
<p>$username = &#39;xieyanwei51&#39;;<br />$password = &#39;123456;<br />$content=&#39;别怕，这是PHP利用API发送的微博！&#39;;</p>
<p>//以下是SOHU微博API的使用。&nbsp;<br />$url = &#39;http://api.t.sohu.com/statuses/update.xml&#39;;<br />$curl = curl_init();<br />curl_setopt($curl, CURLOPT_URL, $url);<br />curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);<br />curl_setopt($curl, CURLOPT_USERPWD, &quot;$username:$password&quot;);<br />curl_setopt($curl, CURLOPT_POSTFIELDS,&#39;status=&#39;.urlencode($content)) ;<br />curl_setopt($curl, CURLOPT_HEADER, 0);//1显示头，0不显示头。<br />curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//禁止返回status的状态。<br />curl_exec($curl);<br />curl_close($curl);</p>
<p>//以下是嘀咕API的使用。<br />$url = &#39;http://api.minicloud.com.cn/statuses/update.format&#39;;<br />$curl = curl_init();<br />curl_setopt($curl, CURLOPT_URL, $url);<br />curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);<br />curl_setopt($curl, CURLOPT_USERPWD, &quot;$username:$password&quot;);<br />curl_setopt($curl, CURLOPT_POSTFIELDS,&#39;content=&#39;.urlencode(&#39;sorry for emlog&#39;)) ;<br />curl_setopt($curl, CURLOPT_HEADER, 0);//1显示头，0不显示头。<br />curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//禁止返回status的状态。<br />curl_exec($curl);<br />curl_close($curl);</p>
<p>?&gt;</p><div id="related_log" style="font-size:12px"><p><b>您可能还喜欢（Maybe You Would Like）：</b></p><p><a href="http://huikon.cn/?post=219">OAuth认证协议原理分析及使用方法（转）</a></p><p><a href="http://huikon.cn/?post=2">php遍历文件夹读取文件夹中图片并分页显示图片</a></p><p><a href="http://huikon.cn/?post=196">dedecms挂马清理记</a></p><p><a href="http://huikon.cn/?post=179">Google Font API打造美轮美奂的网页字体</a></p><p><a href="http://huikon.cn/?post=143">利用飞信api免费发送天气预报</a></p></div>]]></description>
	<pubDate>Tue, 03 Aug 2010 00:57:58 +0000</pubDate>
	<author>寒川</author>
	<guid>http://huikon.cn/?post=218</guid>

</item>
<item>
	<title>php curl写个新浪发sina微博的API接口</title>
	<link>http://huikon.cn/?post=217</link>
	<description><![CDATA[<p>一直没得到新浪微博API Key，自己用php curl写个新浪发sina微博的API接口，发出来分享，和《<a href="http://huikon.cn/post-209.html">封装一个php发QQ微博的类</a>
》是一个原理，几乎一模一样了。废话不多说，直接上菜：<br />&lt;?php</p>
<p>/*</p>
<p>*How to use?</p>
<p>*publish(&quot;username&quot;,&quot;password&quot;,&quot;have a test.&quot;);</p>
<p>*Copy Right 寒川</p>
<p>*URL：http://huikon.cn</p>
<p>*/<br /><br />function publish($username, $password, $content=&#39;&#39;){//发布<br />&nbsp;&nbsp;&nbsp; $referURL = &#39;http://t.sina.com.cn&#39;;<br />&nbsp;&nbsp;&nbsp; $url = &#39;http://t.sina.com.cn/mblog/publish.php&#39;;<br />&nbsp;&nbsp;&nbsp; $fields = array(<br />&nbsp;&nbsp;&nbsp; &#39;content&#39;=&gt;urlencode($content) ,<br />&nbsp;&nbsp;&nbsp; );<br />&nbsp;&nbsp;&nbsp; $fields_string = &#39;&#39;;<br />&nbsp;&nbsp;&nbsp; foreach($fields as $key=&gt;$value) { $fields_string .= $key.&#39;=&#39;.$value.&#39;&amp;amp;&#39; ; }<br />&nbsp;&nbsp;&nbsp; rtrim($fields_string ,&#39;&amp;amp;&#39;) ;<br />&nbsp;&nbsp;&nbsp; $fields_string = substr($fields_string, 0,-5);<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; $cookie_jar = login($username, $password);<br /><br />&nbsp;&nbsp;&nbsp; $curl = curl_init($url) ;<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_POST,count($fields)) ;<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_POSTFIELDS,$fields_string) ;<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar);<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_jar);<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar);<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_REFERER, $referURL);<br />&nbsp;&nbsp;&nbsp; curl_exec($curl);<br />&nbsp;&nbsp;&nbsp; curl_close($curl);<br />&nbsp;&nbsp;&nbsp; unlink($cookie_jar);<br />}<br /><br />function login($username, $password){//登录<br />&nbsp;&nbsp;&nbsp; $loginURL = &#39;https://login.sina.com.cn/sso/login.php?username=&#39;.$username.&#39;&amp;password=&#39;.$password.&#39;&amp;returntype=TEXT&#39;;<br />&nbsp;&nbsp;&nbsp; $curl = curl_init($loginURL);<br />&nbsp;&nbsp;&nbsp; $cookie_jar = tempnam(&#39;.&#39;, &#39;cookie&#39;);<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar);<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_HEADER, 0);<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_TIMEOUT, 10);<br />&nbsp;&nbsp;&nbsp; curl_exec($curl);<br />&nbsp;&nbsp;&nbsp; curl_close($curl);<br />&nbsp;&nbsp;&nbsp; return $cookie_jar;<br />}</p>
<p>?&gt;</p><div id="related_log" style="font-size:12px"><p><b>您可能还喜欢（Maybe You Would Like）：</b></p><p><a href="http://huikon.cn/?post=2">php遍历文件夹读取文件夹中图片并分页显示图片</a></p><p><a href="http://huikon.cn/?post=184">php读取txt文本文档数据库转入mysql数据库</a></p><p><a href="http://huikon.cn/?post=74">php中定义变量</a></p><p><a href="http://huikon.cn/?post=47">php防止快速刷新的方法</a></p><p><a href="http://huikon.cn/?post=220">PHP版OAuth认证协议中的HMACSHA1加密算法（签名方法）</a></p></div>]]></description>
	<pubDate>Sat, 31 Jul 2010 14:24:31 +0000</pubDate>
	<author>寒川</author>
	<guid>http://huikon.cn/?post=217</guid>

</item>
<item>
	<title>Qzone日志插件发布了</title>
	<link>http://huikon.cn/?post=216</link>
	<description><![CDATA[<p>昨天一朋友生日，晚出来了一点发布此插件。现在试试效果如何。。。。同时愿鹏生日快乐！</p>
<p><img alt="" height="300" src="http://www.james-chow.com/images/blog/2008/may/16/cake.jpg" width="400" /></p><div id="related_log" style="font-size:12px"><p><b>您可能还喜欢（Maybe You Would Like）：</b></p><p><a href="http://huikon.cn/?post=198">发布个EMlog安装插件的插件</a></p><p><a href="http://huikon.cn/?post=25">腾讯空间Qzone，你别乱屏蔽好不？</a></p><p><a href="http://huikon.cn/?post=205">不合格的emlog插件开发者</a></p><p><a href="http://huikon.cn/?post=215">这只是一个测试日志</a></p></div>]]></description>
	<pubDate>Fri, 30 Jul 2010 03:08:26 +0000</pubDate>
	<author>寒川</author>
	<guid>http://huikon.cn/?post=216</guid>

</item>
<item>
	<title>php过滤html标签</title>
	<link>http://huikon.cn/?post=212</link>
	<description><![CDATA[<p>要过过滤html标签，php是很容易办到的，strip_tags()函数就能解决，但是有时候还是不够，网上百度来了一个更爽的，贴出来。。。。<br />&lt;?php</p>
<p>function kill_html($str){&nbsp;&nbsp; //清除HTML标签<br />$st=-1; //开始<br />$et=-1; //结束<br />$stmp=array();<br />$stmp[]=&quot;&amp;nbsp;&quot;;<br />$len=strlen($str);<br />for($i=0;$i&lt;$len;$i++){<br />&nbsp;&nbsp; $ss=substr($str,$i,1);<br />&nbsp;&nbsp; if(ord($ss)==60){ //ord(&quot;&lt;&quot;)==60<br />&nbsp;&nbsp;&nbsp; $st=$i;<br />&nbsp;&nbsp; }<br />&nbsp;&nbsp; if(ord($ss)==62){ //ord(&quot;&gt;&quot;)==62<br />&nbsp;&nbsp;&nbsp; $et=$i;<br />&nbsp;&nbsp;&nbsp; if($st!=-1){<br />&nbsp;&nbsp;&nbsp;&nbsp; $stmp[]=substr($str,$st,$et-$st+1);<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; }<br />}<br />$str=str_replace($stmp,&quot;&quot;,$str);<br />return $str;<br />}</p>
<p>?&gt;</p><div id="related_log" style="font-size:12px"><p><b>您可能还喜欢（Maybe You Would Like）：</b></p><p><a href="http://huikon.cn/?post=161">emlog博客系统升级至3.50</a></p><p><a href="http://huikon.cn/?post=50">计算php代码执行时间</a></p><p><a href="http://huikon.cn/?post=138">简单而全面的sql查询教程(一)</a></p><p><a href="http://huikon.cn/?post=160">网页编程之针对html源码的搜索引擎优化(SEO)建议</a></p><p><a href="http://huikon.cn/?post=77">简单的php验证码验证程序</a></p></div>]]></description>
	<pubDate>Fri, 23 Jul 2010 01:04:55 +0000</pubDate>
	<author>寒川</author>
	<guid>http://huikon.cn/?post=212</guid>

</item>
<item>
	<title>php判断远程文件是否存在</title>
	<link>http://huikon.cn/?post=211</link>
	<description><![CDATA[<p>&lt;?php<br />function check_file($host,$file)<br />{<br />$fp = fsockopen($host, 80, $errno, $errstr, 30);<br />if (!$fp) {<br />&nbsp;&nbsp; echo &quot;$errstr ($errno)&lt;br /&gt;\n&quot;;<br />} else {<br />&nbsp;&nbsp;&nbsp; $out = &quot;HEAD /$file HTTP/1.1\r\n&quot;;// or $out = &quot;HEAD /index.xxx HTTP/1.1\r\n&quot;;<br />&nbsp;&nbsp;&nbsp; $out .= &quot;Host: $host\r\n&quot;;<br />&nbsp;&nbsp;&nbsp; $out .= &quot;Connection: Close\r\n\r\n&quot;;<br />&nbsp;&nbsp;&nbsp; fwrite($fp, $out);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $response = explode(&quot; &quot;,fgets($fp, 128));<br />&nbsp;&nbsp;&nbsp; fclose($fp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $response[2];<br />}<br />}</p>
<p>echo check_file(&#39;huikon.cn&#39;,&#39;index.php&#39;);<br />?&gt;</p>
<p>本函数用于判断远程文件是否存在。</p><div id="related_log" style="font-size:12px"><p><b>您可能还喜欢（Maybe You Would Like）：</b></p><p><a href="http://huikon.cn/?post=147">gb2312编码页面post到utf-8页面乱码解决方案</a></p><p><a href="http://huikon.cn/?post=96">sql随机排序</a></p><p><a href="http://huikon.cn/?post=16">C语言写的一个万年历</a></p><p><a href="http://huikon.cn/?post=132">利用http404错误防止网站文件夹被扫描</a></p><p><a href="http://huikon.cn/?post=174">我也玩玩php多线程</a></p></div>]]></description>
	<pubDate>Wed, 21 Jul 2010 06:29:59 +0000</pubDate>
	<author>寒川</author>
	<guid>http://huikon.cn/?post=211</guid>

</item>
<item>
	<title>封装一个php发QQ微博的类。</title>
	<link>http://huikon.cn/?post=209</link>
	<description><![CDATA[<p>QQ微博API至今未发布，昨几天在给EMLOG写QQ微博插件插件的时候搞定QQ微博，今天封装一个php发QQ微博的类，相当于一个简单的QQ微博API功能。大致原理简单的说来就是用CURL库模拟登陆发表微博。废话不多说，直接上菜：&nbsp;</p>
<p>&lt;?php<br />/*<br />用法：<br />$qq = new qq();<br />$qq-&gt;publish(&#39;xieyanwei&#39;,&#39;password&#39;,&#39;Hi, I\&#39;m a PHPer.&#39;);<br />*/<br />class qq<br />{<br />&nbsp; function publish($username, $password, $content=&#39;&#39;)<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp; $qq = trim($username);<br />&nbsp;&nbsp;&nbsp; $pwd = $this-&gt;md5_3(trim($password));<br />&nbsp;&nbsp;&nbsp; $cookie_jar = $this-&gt;login($qq, $pwd);<br />&nbsp;&nbsp;&nbsp; $url = &#39;http://t.qq.com/publish.php&#39; ;<br />&nbsp;&nbsp;&nbsp; $fields = array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;content&#39;=&gt;urlencode($content),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;pic&#39;=&gt;urlencode(&#39;&#39;),<br />&nbsp;&nbsp;&nbsp; &#39;countType&#39;=&gt;urlencode(&#39;&#39;),<br />&nbsp;&nbsp;&nbsp; &#39;viewModel&#39;=&gt;urlencode(&#39;1&#39;) <br />&nbsp;&nbsp;&nbsp; );<br />&nbsp;&nbsp;&nbsp; $fields_string = &#39;&#39;;<br />&nbsp;&nbsp;&nbsp; foreach($fields as $key=&gt;$value) <br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $fields_string .= $key.&#39;=&#39;.$value.&#39;&amp;amp;&#39; ; <br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; rtrim($fields_string ,&#39;&amp;amp;&#39;) ;<br />&nbsp;&nbsp;&nbsp; $fields_string = substr($fields_string, 0,-5);<br />&nbsp;&nbsp;&nbsp; $referURL = &#39;http://t.qq.com/&#39;.$qq;<br />&nbsp;&nbsp;&nbsp; $curl = curl_init($url) ;<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_POST,count($fields)) ;<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_POSTFIELDS,$fields_string) ;<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar);<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_jar);<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar);<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_REFERER, $referURL);<br />&nbsp;&nbsp;&nbsp; curl_exec($curl) ;<br />&nbsp;&nbsp;&nbsp; curl_close($curl) ;<br />&nbsp;&nbsp;&nbsp; unlink($cookie_jar);<br />&nbsp; }</p>
<p>private&nbsp; function login($username, $password)<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp; $qq = trim($username);<br />&nbsp;&nbsp;&nbsp; $pwd = trim($password);<br />&nbsp;&nbsp;&nbsp; $verifyURL = &#39;http://ptlogin2.qq.com/check?uin=@&#39;.$qq.&#39;&amp;appid=46000101&#39;;<br />&nbsp;&nbsp;&nbsp; $loginURL = &#39;http://ptlogin2.qq.com/login?&#39;;<br />&nbsp;&nbsp;&nbsp; $curl = curl_init($verifyURL);<br />&nbsp;&nbsp;&nbsp; $cookie_jar = tempnam(&#39;.&#39;, &#39;cookie&#39;);<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar);<br />&nbsp;&nbsp;&nbsp; $verifyCode = curl_exec($curl);<br />&nbsp;&nbsp;&nbsp; curl_close($curl);<br />&nbsp;&nbsp;&nbsp; $verifyCode = strtoupper(substr($verifyCode, 18, 4));<br />&nbsp;&nbsp;&nbsp; $loginURL .= &#39;u=@&#39;.$qq.&#39;&amp;p=&#39;.md5($pwd.$verifyCode).&#39;&amp;verifycode=&#39;.$verifyCode.&#39;&amp;aid=46000101&amp;u1=http%3A%2F%2Ft.qq.com&amp;h=1&amp;from_ui=1&amp;fp=loginerroralert&#39;;<br />&nbsp;&nbsp;&nbsp; $curl = curl_init($loginURL);<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar);<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_jar);<br />&nbsp;&nbsp;&nbsp; curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar);<br />&nbsp;&nbsp;&nbsp; curl_exec($curl);<br />&nbsp;&nbsp;&nbsp; curl_close($curl);<br />&nbsp;&nbsp;&nbsp; return $cookie_jar;<br />&nbsp; }</p>
<p>private&nbsp; function md5_3($str) <br />&nbsp; {<br />&nbsp;&nbsp;&nbsp; return strtoupper(md5(md5(md5($str,true),true)));<br />&nbsp; }<br />}<br />?&gt;</p><div id="related_log" style="font-size:12px"><p><b>您可能还喜欢（Maybe You Would Like）：</b></p><p><a href="http://huikon.cn/?post=215">这只是一个测试日志</a></p><p><a href="http://huikon.cn/?post=198">发布个EMlog安装插件的插件</a></p><p><a href="http://huikon.cn/?post=161">emlog博客系统升级至3.50</a></p><p><a href="http://huikon.cn/?post=189">给验证码添加一个点击刷新的功能</a></p></div>]]></description>
	<pubDate>Mon, 19 Jul 2010 01:32:47 +0000</pubDate>
	<author>寒川</author>
	<guid>http://huikon.cn/?post=209</guid>

</item>
<item>
	<title>html 5学习-audio标签插入音乐</title>
	<link>http://huikon.cn/?post=201</link>
	<description><![CDATA[<p>昨天学习了html 5中插入视频的audio标签，详见《<a href="http://huikon.cn/post-199.html">html 5学习-video标签插入视频</a>
》，今天翻开html 5手册，学习学习audio标签插入音乐。&lt;audio&gt;标签也是html 5新增的标签，用于定义声音，比如音乐或其他音频流。因此之前的html版本是没啥用处的。其基本用法：&lt;audio src=&quot;music.wav&quot;&gt;您的浏览器不支持 audio 标签，赶快升级吧。&lt;/audio&gt;</p>
<p>&nbsp;</p>
<table class="dataintable"><tbody><tr><th>属性</th>
<th>值</th>
<th>说明</th>
</tr>
<tr><td>autoplay</td>
<td>true | false</td>
<td>如果是 true，则音频在就绪后马上播放。</td>
</tr>
<tr><td>controls</td>
<td>true | false</td>
<td>如果是 true，则向用户显示控件，比如播放按钮。</td>
</tr>
<tr><td>end</td>
<td><i>numeric value</i>
</td>
<td>定义播放器在音频流中的何处停止播放。默认地，声音会播放到结尾。</td>
</tr>
<tr><td>loopend</td>
<td><i>numeric value</i>
</td>
<td>定义在音频流中循环播放停止的位置，默认是 end 属性的值。</td>
</tr>
<tr><td>loopstart</td>
<td><i>numeric value</i>
</td>
<td>定义在音频流中循环播放的开始位置。默认是 start 属性的值。</td>
</tr>
<tr><td>playcount</td>
<td><i>numeric value</i>
</td>
<td>定义音频片断播放多少次。默认是 1。</td>
</tr>
<tr><td>src</td>
<td><i>url</i>
</td>
<td>所播放音频的 url。</td>
</tr>
<tr><td>start</td>
<td><i>numeric value</i>
</td>
<td>定义播放器在音频流中开始播放的位置。默认地，声音在开头进行播放。</td>
</tr>
</tbody>
</table>
<p>有朋友说希望能给出演示，这要咋演示呢？下载个支持html 5的浏览器就可以测试了，据我所知，目前支持或部分支持html 5的浏览器主要有：Opera，<span class="itemTitle">Chrome</span>
，IE9，<span class="itemTitle">Safari。</span>
</p>
<p><span class="itemTitle">ps：IE9是不支持xp系统的哦。。。。</span>
</p>
<p><br />&nbsp;</p><div id="related_log" style="font-size:12px"><p><b>您可能还喜欢（Maybe You Would Like）：</b></p><p><a href="http://huikon.cn/?post=180">html读取xml并分页显示</a></p><p><a href="http://huikon.cn/?post=2">php遍历文件夹读取文件夹中图片并分页显示图片</a></p><p><a href="http://huikon.cn/?post=115">asp通用安全字符串输入替换server.htmlencode</a></p><p><a href="http://huikon.cn/?post=179">Google Font API打造美轮美奂的网页字体</a></p><p><a href="http://huikon.cn/?post=87">分享一个js判断中文字符的正则</a></p></div>]]></description>
	<pubDate>Tue, 22 Jun 2010 01:59:18 +0000</pubDate>
	<author>寒川</author>
	<guid>http://huikon.cn/?post=201</guid>

</item></channel>
</rss>