<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>喵了个咪²º¹²</title>
	<atom:link href="http://www.hdj.me/feed" rel="self" type="application/rss+xml" />
	<link>http://www.hdj.me</link>
	<description>PHP/MySQL/NoSQL/Cache/Object-C/Js/JQuery/HTML5/Css3</description>
	<lastBuildDate>Thu, 23 Feb 2012 06:32:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>windows下通过批处理检测进程是否正在运行</title>
		<link>http://www.hdj.me/check-process-by-bat-in-windows</link>
		<comments>http://www.hdj.me/check-process-by-bat-in-windows#comments</comments>
		<pubDate>Thu, 23 Feb 2012 06:32:32 +0000</pubDate>
		<dc:creator>huangdijia</dc:creator>
				<category><![CDATA[Web服务器]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[批处理]]></category>
		<category><![CDATA[检测进程]]></category>

		<guid isPermaLink="false">http://www.hdj.me/?p=750</guid>
		<description><![CDATA[在windows下如何通过批处理检测一个进程是否正在运行。 @ECHO OFF SET status=1 (TASKLIST&#124;FIND /I "qq.exe"&#124;&#124;SET status=0) 2>nul 1>nul ECHO %status% IF %status% EQU 1 (ECHO QQ is running.) ELSE (ECHO QQ is not run.)]]></description>
			<content:encoded><![CDATA[<p>在windows下如何通过批处理检测一个进程是否正在运行。</p>
<pre>
@ECHO OFF

SET status=1
(TASKLIST|FIND /I "qq.exe"||SET status=0) 2>nul 1>nul
ECHO %status%
IF %status% EQU 1 (ECHO QQ is running.) ELSE (ECHO QQ is not run.)
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.hdj.me/check-process-by-bat-in-windows/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache 2.4发布 直接瞄准Nginx</title>
		<link>http://www.hdj.me/apache-2-4-release</link>
		<comments>http://www.hdj.me/apache-2-4-release#comments</comments>
		<pubDate>Wed, 22 Feb 2012 12:03:34 +0000</pubDate>
		<dc:creator>huangdijia</dc:creator>
				<category><![CDATA[Web服务器]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[Apache HTTP Server]]></category>
		<category><![CDATA[apache2.4]]></category>
		<category><![CDATA[apache发布]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[Web Server]]></category>

		<guid isPermaLink="false">http://www.hdj.me/?p=698</guid>
		<description><![CDATA[最流行的Web Server发布了一个重大升级版，Apache HTTP Server 2.4的一个重要目标是大幅改进性能。新版改进了缓存、代理模块，会话控制，改进异步读写支持，等等。 Apache HTTP Server项目管理委员会和Apache基金会主席Jim Jagielski表示，他们希望终端用户能真正看到性能进步，表示Apache 2.4比许多以速度见长的Web Server更快，例如Nginx。]]></description>
			<content:encoded><![CDATA[<p>最流行的Web Server发布了一个重大升级版，<a href="http://httpd.apache.org/docs/trunk/new_features_2_4.html" target="_blank">Apache HTTP Server 2.4</a>的一个重要目标是大幅改进性能。新版改进了缓存、代理模块，会话控制，改进异步读写支持，等等。</p>
<p>Apache HTTP Server项目管理委员会和Apache基金会主席Jim Jagielski表示，他们希望终端用户能真正看到性能进步，表示Apache 2.4比许多以速度见长的Web Server更快，例如Nginx。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hdj.me/apache-2-4-release/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ThinkPHP中数据操作心得</title>
		<link>http://www.hdj.me/a-model-suggest-of-thinkphp</link>
		<comments>http://www.hdj.me/a-model-suggest-of-thinkphp#comments</comments>
		<pubDate>Sat, 18 Feb 2012 14:34:33 +0000</pubDate>
		<dc:creator>huangdijia</dc:creator>
				<category><![CDATA[PHP/PHP框架]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[thinkphp]]></category>
		<category><![CDATA[thinkphp使用心得]]></category>
		<category><![CDATA[数据层]]></category>
		<category><![CDATA[视图]]></category>

		<guid isPermaLink="false">http://www.hdj.me/?p=696</guid>
		<description><![CDATA[模板中使用函数，相信大部分的TPer都知道也用过吧。 案例： 获取用户名的方法 function get_username($uid){ $row = M('User')->getbyUid($uid); return $row['username']; } 在模板中通过uid显示用户名 &#60;volist name=&#34;rows&#34; id=&#34;row&#34;&#62; &#60;tr&#62; &#60;td&#62;{$row.uid}&#60;/td&#62; &#60;td&#62;{$row.uid&#124;get_username}&#60;/td&#62; &#60;/tr&#62; &#60;/volist&#62; 这种方法相信大伙应该很常用吧？这种用法有两个不好的地方： 1、过多数据库操作； 2、数据操作的位置不合理，数据库连接过长。 优化方案： 1、尽可能把能合并的数据库操作； 2、数据操作应该保留在数据层，尽可能避免在视图里操作数据库，建议在视图开始前执行mysql_close()，断开数据库连接。]]></description>
			<content:encoded><![CDATA[<p>模板中使用函数，相信大部分的TPer都知道也用过吧。<br />
案例：<br />
获取用户名的方法</p>
<pre>function get_username($uid){
    $row = M('User')->getbyUid($uid);
    return $row['username'];
}</pre>
<p>在模板中通过uid显示用户名</p>
<pre>
&lt;volist name=&quot;rows&quot; id=&quot;row&quot;&gt;
&lt;tr&gt;
    &lt;td&gt;{$row.uid}&lt;/td&gt;
    &lt;td&gt;{$row.uid|get_username}&lt;/td&gt;
&lt;/tr&gt;
&lt;/volist&gt;</pre>
<p>这种方法相信大伙应该很常用吧？这种用法有两个不好的地方：<br />
1、过多数据库操作；<br />
2、数据操作的位置不合理，数据库连接过长。</p>
<p>优化方案：<br />
1、尽可能把能合并的数据库操作；<br />
2、数据操作应该保留在数据层，尽可能避免在视图里操作数据库，建议在视图开始前执行mysql_close()，断开数据库连接。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hdj.me/a-model-suggest-of-thinkphp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>两步教你开启KindEditor代码高亮功能</title>
		<link>http://www.hdj.me/use-kindeditor-prettify-plugin</link>
		<comments>http://www.hdj.me/use-kindeditor-prettify-plugin#comments</comments>
		<pubDate>Wed, 15 Feb 2012 01:40:14 +0000</pubDate>
		<dc:creator>huangdijia</dc:creator>
				<category><![CDATA[HTML(5)/CSS]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[htmleditor]]></category>
		<category><![CDATA[KindEditor]]></category>
		<category><![CDATA[prettify]]></category>
		<category><![CDATA[代码高亮]]></category>
		<category><![CDATA[在线编辑器]]></category>

		<guid isPermaLink="false">http://www.hdj.me/?p=689</guid>
		<description><![CDATA[KindEditor(下面简称KE)虽然是一个国产货，可并不比洋货(CKEditor)逊色，尤其是插件和API功能，越来越出色了，其中4.0推出了代码高亮功能。 不过该功能在官方文档上并没有相关的说明，这一点要批评一下，这么好使的功能为什么不让大家都用上呢。 我整理了一下用法，供大家参考。 前台页面先加载插件脚本和样式： &#60;link rel=&#34;stylesheet&#34; type=&#34;text/css&#34; href=&#34;[kePath]/plugins/code/prettify.css&#34; /&#62; &#60;script type=&#34;text/javascript&#34; src=&#34;[kePath]/plugins/code/prettify.js&#34;&#62;&#60;/script&#62; &#60;script&#62; $(function(){ prettyPrint(); }); &#60;/script&#62; 后台编辑器声明的时候加上插件样式，缺省这个参数，编辑器中插入代码跟普通文字一样，并且再次编辑的时候被隐藏了，所以这一步很关键。 var editor = KindEditor.create('textarea.editor', { cssPath : ['[kePath]/plugins/code/prettify.css'] });]]></description>
			<content:encoded><![CDATA[<p>KindEditor(下面简称KE)虽然是一个国产货，可并不比洋货(CKEditor)逊色，尤其是插件和API功能，越来越出色了，其中4.0推出了代码高亮功能。<br />
不过该功能在官方文档上并没有相关的说明，这一点要批评一下，这么好使的功能为什么不让大家都用上呢。<br />
我整理了一下用法，供大家参考。</p>
<p>前台页面先加载插件脚本和样式：</p>
<pre>&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;[kePath]/plugins/code/prettify.css&quot; /&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;[kePath]/plugins/code/prettify.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;
$(function(){ prettyPrint(); });
&lt;/script&gt;</pre>
<p>后台编辑器声明的时候加上插件样式，缺省这个参数，编辑器中插入代码跟普通文字一样，并且再次编辑的时候被隐藏了，所以这一步很关键。</p>
<pre>var editor = KindEditor.create('textarea.editor', {
    cssPath : ['[kePath]/plugins/code/prettify.css']
});</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.hdj.me/use-kindeditor-prettify-plugin/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>html判断浏览器版本</title>
		<link>http://www.hdj.me/judge-browser-version-by-html</link>
		<comments>http://www.hdj.me/judge-browser-version-by-html#comments</comments>
		<pubDate>Tue, 07 Feb 2012 04:29:36 +0000</pubDate>
		<dc:creator>huangdijia</dc:creator>
				<category><![CDATA[HTML(5)/CSS]]></category>
		<category><![CDATA[浏览器版本]]></category>

		<guid isPermaLink="false">http://www.hdj.me/?p=684</guid>
		<description><![CDATA[判断浏览器版本的方法有很多，但是我个人认为最快，最有效的方法就是利用html来进行，因为无论是用js根据浏览器的属性来判断还是css中的hack，都需要先执行或者先渲染，而html方法则是从根源上上解决了问题（不符合的版本根本就不加载） html的方法只是简单的一个if判断，应该算是if判断吧。。 其中可以用到的条件： gt 大于 lt 小于 gte 大于或等于 lte 小于或等于 ! 不等、除了 比方说如果要匹配高于且包含ie7的版本的话，我们可以这样些 &#60;!--[if gte IE 7]&#62; IE7以及IE7以上版本可识别的内容 &#60;![endif]--&#62; 下面罗列出来一些常用的判断： &#60;!--[if !IE]&#62; 除IE外都可识别 &#60;![endif]--&#62; &#60;!--[if IE]&#62; 所有的IE可识别 &#60;![endif]--&#62; &#60;!--[if IE 5.0]&#62; 只有IE5.0可以识别 &#60;![endif]--&#62; &#60;!--[if IE 5]&#62; 仅IE5.0与IE5.5可以识别 &#60;![endif]--&#62; &#60;!--[if gt IE 5.0]&#62; IE5.0以及IE5.0以上版本都可以识别 &#60;![endif]--&#62; &#60;!--[if IE 6]&#62; 仅IE6可识别 &#60;![endif]--&#62; &#60;!--[if lt IE 6]&#62; IE6以及IE6以下版本可识别 [...]]]></description>
			<content:encoded><![CDATA[<p>判断浏览器版本的方法有很多，但是我个人认为最快，最有效的方法就是利用html来进行，因为无论是用js根据浏览器的属性来判断还是css中的hack，都需要先执行或者先渲染，而html方法则是从根源上上解决了问题（不符合的版本根本就不加载）</p>
<p>html的方法只是简单的一个if判断，应该算是if判断吧。。</p>
<p><!--[if 条件 IE 版本 ]> 具体内容 <![endif]--><br />
其中可以用到的条件：</p>
<ul>
<li>gt 大于</li>
<li>lt 小于</li>
<li>gte 大于或等于</li>
<li>lte 小于或等于</li>
<li>! 不等、除了</li>
</ul>
<p>比方说如果要匹配高于且包含ie7的版本的话，我们可以这样些</p>
<pre>&lt;!--[if gte IE 7]&gt; IE7以及IE7以上版本可识别的内容 &lt;![endif]--&gt;</pre>
<p>下面罗列出来一些常用的判断：</p>
<pre>&lt;!--[if !IE]&gt; 除IE外都可识别 &lt;![endif]--&gt;
&lt;!--[if IE]&gt; 所有的IE可识别 &lt;![endif]--&gt;
&lt;!--[if IE 5.0]&gt; 只有IE5.0可以识别 &lt;![endif]--&gt;
&lt;!--[if IE 5]&gt; 仅IE5.0与IE5.5可以识别 &lt;![endif]--&gt;
&lt;!--[if gt IE 5.0]&gt; IE5.0以及IE5.0以上版本都可以识别 &lt;![endif]--&gt;
&lt;!--[if IE 6]&gt; 仅IE6可识别 &lt;![endif]--&gt;
&lt;!--[if lt IE 6]&gt; IE6以及IE6以下版本可识别 &lt;![endif]--&gt;
&lt;!--[if gte IE 6]&gt; IE6以及IE6以上版本可识别 &lt;![endif]--&gt;
&lt;!--[if IE 7]&gt; 仅IE7可识别 &lt;![endif]--&gt;
&lt;!--[if lt IE 7]&gt; IE7以及IE7以下版本可识别 &lt;![endif]--&gt;</pre>
<p><!--[if gte IE 7]> IE7以及IE7以上版本可识别 <![endif]--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hdj.me/judge-browser-version-by-html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ThinkPHP 3.0RC2 更新日志</title>
		<link>http://www.hdj.me/thinkphp-3-0-rc2-changelog</link>
		<comments>http://www.hdj.me/thinkphp-3-0-rc2-changelog#comments</comments>
		<pubDate>Sat, 04 Feb 2012 07:14:20 +0000</pubDate>
		<dc:creator>huangdijia</dc:creator>
				<category><![CDATA[PHP/PHP框架]]></category>
		<category><![CDATA[3.0rc2]]></category>
		<category><![CDATA[thinkphp]]></category>

		<guid isPermaLink="false">http://www.hdj.me/?p=679</guid>
		<description><![CDATA[ThinkPHP 3.0RC2 ChangeLog [系统] [修正] 修正R方法的第二个参数传人数组 [修正] 修正部署模式下的模版编译问题。 [新增] 添加项目的core.php配置文件，用于追加项目核心编译列表文件 [新增] 添加layout方法 用于控制布局入口的文件 [新增] functions函数库添加trace函数，用于页面Trace信息设置和自定义添加显示 并调整页面Trace行为扩展和模板，改为调用trace方法 [改进] 优化alias_import方法 [改进] 改进import的项目类库目录判断 [改进] Think类的buildApp方法改进 模式别名定义和项目别名定义支持同时定义 取消模式的公共文件定义，直接在核心文件列表中加载即可 [改进] 系统函数库增加session函数用于操作session App类改进对session的支持 [改进] 改进View类，如果设置模板引擎为PHP的话 则不调用view_parse标签行为扩展 [改进] 项目自定义trace信息配置文件会合并到系统默认页面Trace中 [改进] LOG类完善 支持配置不同的日子记录方式和其他参数 惯例配置文件增加LOG_TYPE、LOG_DEST和LOG_EXTRA配置 LOG_RECORD_LEVEL 参数更名为LOG_LEVEL [改进] 优化import方法的文件导入 如果存在类名冲突则不导入 [改进] 改进系统函数库的load方法 [改进] runtime和alias文件添加访问检测 [改进] 修正部署模式下面开启页面trace后 exec运行时间为负数的错误 [改进] 修正Widget类对于think引擎的判断 [改进] 系统路径常量允许被重定义 [删除] 去掉runtime文件中的mkdirs函数 [配置] [...]]]></description>
			<content:encoded><![CDATA[<p>ThinkPHP 3.0RC2 ChangeLog</p>
<p>[系统]<br />
[修正] 修正R方法的第二个参数传人数组<br />
[修正] 修正部署模式下的模版编译问题。<br />
[新增] 添加项目的core.php配置文件，用于追加项目核心编译列表文件<br />
[新增] 添加layout方法 用于控制布局入口的文件<br />
[新增] functions函数库添加trace函数，用于页面Trace信息设置和自定义添加显示 并调整页面Trace行为扩展和模板，改为调用trace方法<br />
[改进] 优化alias_import方法<br />
[改进] 改进import的项目类库目录判断<br />
[改进] Think类的buildApp方法改进 模式别名定义和项目别名定义支持同时定义 取消模式的公共文件定义，直接在核心文件列表中加载即可<br />
[改进] 系统函数库增加session函数用于操作session App类改进对session的支持<br />
[改进] 改进View类，如果设置模板引擎为PHP的话 则不调用view_parse标签行为扩展<br />
[改进] 项目自定义trace信息配置文件会合并到系统默认页面Trace中<br />
[改进] LOG类完善 支持配置不同的日子记录方式和其他参数 惯例配置文件增加LOG_TYPE、LOG_DEST和LOG_EXTRA配置 LOG_RECORD_LEVEL 参数更名为LOG_LEVEL<br />
[改进] 优化import方法的文件导入 如果存在类名冲突则不导入<br />
[改进] 改进系统函数库的load方法<br />
[改进] runtime和alias文件添加访问检测<br />
[改进] 修正部署模式下面开启页面trace后 exec运行时间为负数的错误<br />
[改进] 修正Widget类对于think引擎的判断<br />
[改进] 系统路径常量允许被重定义<br />
[删除] 去掉runtime文件中的mkdirs函数<br />
<span id="more-679"></span><br />
[配置]<br />
[新增] 增加THINK_RELEASE常量 用于定义当前打包版本<br />
[新增] 惯例配置增加SESSION_OPTIONS SESSION_TYPE和SESSION_PREFIX参数<br />
[改进] 系统默认调试配置文件debug中的参数修改<br />
[删除] 系统内置行为的配置参数去掉不用或者多余的<br />
[删除] 去掉 DB_SUFFIX 配置</p>
<p>[模板]<br />
[修正] 修正模板引擎的 {$Think.template} 输出当前模板的bug<br />
[改进] 优化模板引擎的编译缓存，去除?><?php、空白和注释<br />
[改进] Range标签添加between别名，支持between和notbetween区间判断<br />
[改进] 内置模板引擎优化 所有外部文件include之后，统一进行标签解析<br />
[修正] 内置Cx标签库的import标签默认basepath路径修正<br />
[改进] layout标签增加replace属性 可以定义布局模板中的内容替换字符串<br />
[改进] 优化标签解析替换处理<br />
[改进] CX标签库的if标签默认可以嵌套两层<br />
[改进] 布局模板bug修正 布局模板两种方式的解析顺序调整</p>
<p>[缓存]<br />
[新增] 添加静态缓存行为扩展<br />
[改进] Redis驱动timeout参数改为由DATA_CACHE_TIMEOUT配置参数设置<br />
[改进] Memcacheh缓存驱动的timeout参数改为通过C(&#8216;DATA_CACHE_TIMEOUT&#8217;)获取 </p>
<p>[模型]<br />
[改进] union方法改进 支持UNION ALL 操作和字符串<br />
[改进] Model的实例化方法第二个参数允许传人null 表示没有数据表前缀 同时影响M方法中的第二个参数<br />
[改进] 改进多数据库切换后的字段缓存获取<br />
[改进] 改进Model类的join方法传人空值的处理<br />
取消Db类的析构方法中的close调用 避免产生异常 通常close无需手动调用，必要的时候可以单独调用Db类的close方法</p>
<p>[扩展]<br />
[新增] 添加Db类型session驱动<br />
[修正] 修正高级模型扩展的setLazyInc和setLazyDec错误 并去除一些不再使用的参数<br />
[修正] 修正扩展类库的ORG.Util.Date类的dateAdd方法错误<br />
[改进] PHPRPC和REST模式扩展修改<br />
[改进] 模板引擎驱动接口方法fetch去掉charset变量<br />
[改进] 删除extend扩展函数库里面的send_http_status函数<br />
[改进] 修正扩展行为的方法定义兼容性问题<br />
[改进] REST模式完善 rest模式下面的路由定义规则调整 避免相同URL访问地址的不同请求类型和资源类型路由定义<br />
[改进] 修正扩展类库ORG.Util.String类的randString方法的随机中文截取<br />
[改进] 支持session的hander驱动 扩展Driver目录增加Session子目录<br />
[删除] 删除DbSession行为扩展<br />
[删除] 删除ORG.Util.HtmlCache扩展类</p>
<p>[其它]<br />
[改进] 修正page示例的分页配置缺失<br />
[改进] 修正blog示例的下载附件错误<br />
[改进] 代码规范调整<br />
[改进] 缓存驱动方法定义规范<br />
[改进] 数据库驱动类规范</p>
<p>[SAE]<br />
[新增] 增加平滑函数文件<br />
[改进] SAE将SaeMC编译到核心缓存，SAE版ThinkPHP也能让编译缓存替代入口文件。</p>
<p>这是RC1以后的更新日志整理</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hdj.me/thinkphp-3-0-rc2-changelog/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>一个简单的HTML标签搞死64位的Windows 7</title>
		<link>http://www.hdj.me/simple-html-tag-to-crash-64-bit-windows</link>
		<comments>http://www.hdj.me/simple-html-tag-to-crash-64-bit-windows#comments</comments>
		<pubDate>Sat, 04 Feb 2012 02:47:59 +0000</pubDate>
		<dc:creator>huangdijia</dc:creator>
				<category><![CDATA[HTML(5)/CSS]]></category>
		<category><![CDATA[html标签]]></category>
		<category><![CDATA[iframe]]></category>
		<category><![CDATA[windows7]]></category>

		<guid isPermaLink="false">http://www.hdj.me/?p=677</guid>
		<description><![CDATA[这个很小的 iframe 标签（当然了，实际上它运行起来并不小）是一个强大到足以让一个64位的Win7系统崩溃的标签，它将导致 Win7 发生著名的蓝屏错误 Blue Screen Of Death (BSoD). 该漏洞是由 w3bd3vil 报告的。该漏洞在64位的Win7下的Safari 浏览器测试中招，我很讨厌蓝屏，因此没有测试其他浏览器。微软正在进一步验证该漏洞，下面是关于该漏洞的一些技术细节： &#60;iframe height=&#039;18082563&#039;&#62;&#60;/iframe&#62; 注意：请为自己的测试负责. 描述: 该漏洞是由于 win32k.sys 的一个错误导致内存的崩溃，当页面上包含一个 iframe，其 height 属性是个非常大的值时该错误就会发生。 目前该漏洞仅存在于64位的win7系统。 解决方案: 目前尚无有效方案]]></description>
			<content:encoded><![CDATA[<p>这个很小的 iframe 标签（当然了，实际上它运行起来并不小）是一个强大到足以让一个64位的Win7系统崩溃的标签，它将导致 Win7 发生著名的蓝屏错误 Blue Screen Of Death (BSoD). 该漏洞是由 w3bd3vil 报告的。该漏洞在64位的Win7下的Safari 浏览器测试中招，我很讨厌蓝屏，因此没有测试其他浏览器。微软正在进一步验证该漏洞，下面是关于该漏洞的一些技术细节：</p>
<pre>&lt;iframe height=&#039;18082563&#039;&gt;&lt;/iframe&gt;</pre>
<p><strong>注意：请为自己的测试负责.</strong></p>
<p><strong>描述: </strong><br />
该漏洞是由于 win32k.sys 的一个错误导致内存的崩溃，当页面上包含一个 iframe，其 height 属性是个非常大的值时该错误就会发生。</p>
<p>目前该漏洞仅存在于64位的win7系统。</p>
<p><strong>解决方案:</strong><br />
目前尚无有效方案</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hdj.me/simple-html-tag-to-crash-64-bit-windows/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP开发者常犯的10个MySQL错误</title>
		<link>http://www.hdj.me/ten-error-in-php-about-mysql</link>
		<comments>http://www.hdj.me/ten-error-in-php-about-mysql#comments</comments>
		<pubDate>Tue, 17 Jan 2012 14:56:20 +0000</pubDate>
		<dc:creator>huangdijia</dc:creator>
				<category><![CDATA[MySQL数据库技术]]></category>
		<category><![CDATA[PHP/PHP框架]]></category>
		<category><![CDATA[innodb]]></category>
		<category><![CDATA[myisam]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.hdj.me/?p=671</guid>
		<description><![CDATA[数据库是Web大多数应用开发的基础。如果你是用PHP，那么大多数据库用的是MySQL也是LAMP架构的重要部分。PHP看起来很简单，一个初学者也可以几个小时内就能开始写函数了。但是建立一个稳定、可靠的数据库确需要时间和经验。下面就是一些这样的经验，不仅仅是MYSQL，其他数据库也一样可以参考。 1.使用MyISAM而不是InnoDB MySQL有很多的数据库引擎，单一般也就用MyISAM和InnoDB。 MyISAM 是默认使用的。但是除非你是建立一个非常简单的数据库或者只是实验性的，那么到大多数时候这个选择是错误的。MyISAM不支持外键的约束，这是保证数据 完整性的精华所在啊。另外，MyISAM会在添加或者更新数据的时候将整个表锁住，这在以后的扩展性能上会有很大的问题。 解决办法很简单：使用InnoDB。 2.使用PHP的mysql方法 PHP从一开始就提供了MySQL的函数库。很多程序都依赖于mysql_connect、mysql_query、mysql_fetch_assoc等等，但是PHP手册中建议： 如果你使用的MySQL版本在4.1.3之后，那么强烈建议使用mysqli扩展。 mysqli，或者说MySQL的高级扩展，有一些优点： 有面向对象的接口 prepared statements(预处理语句，可以有效防止SQL-注入攻击，还能提高性能) 支持多种语句和事务 另外，如果你想支持多数据库那么应该考虑一下PDO。 3.不过滤用户输入 应该是：永远别相信用户的输入。用后端的PHP来校验过滤每一条输入的信息，不要相信Javascript。像下面这样的SQL语句很容易就会被攻击： $username = $_POST["name"]; $password = $_POST["password"]; $sql = "SELECT userid FROM usertable WHERE username=?$username?AND password=?$password?;"; // run query... 这样的代码，如果用户输入”admin’;”那么，就相当于下面这条了： SELECT userid FROM usertable WHERE username=?admin?; 这样入侵者就能不输入密码，就通过admin身份登录了。 4.不使用UTF-8 那些英美国家的用户，很少考虑语言的问题，这样就造成很多产品就不能在其他地方通用。还有一些GBK编码的，也会有很多的麻烦。 UTF-8解决了很多国际化的问题。虽然PHP6才能比较完美的解决这个问题，但是也不妨碍你将MySQL的字符集设置为UTF-8。 5.该用SQL的地方使用PHP 如果你刚接触MySQL，有时候解决问题的时候可能会先考虑使用你熟悉的语言来解决。这样就可能造成一些浪费和性能比较差的情况。比如：计算平均值的时候不适用MySQL原生的AVG()方法，而是用PHP将所有值循环一遍然后累加计算平均值。 另外还要注意SQL查询中的PHP循环。通常，在取得所有结果之后再用PHP来循环的效率更高。 一般在处理大量数据的时候使用强有力的数据库方法，更能提高效率。 6.不优化查询 99%的PHP性能问题都是数据库造成的，一条糟糕的SQL语句可能让你的整个程序都非常慢。MySQL的EXPLAIN statement，Query Profiler，many [...]]]></description>
			<content:encoded><![CDATA[<p>数据库是Web大多数应用开发的基础。如果你是用PHP，那么大多数据库用的是MySQL也是LAMP架构的重要部分。PHP看起来很简单，一个初学者也可以几个小时内就能开始写函数了。但是建立一个稳定、可靠的数据库确需要时间和经验。下面就是一些这样的经验，不仅仅是MYSQL，其他数据库也一样可以参考。</p>
<p><strong>1.使用MyISAM而不是InnoDB</strong><br />
MySQL有很多的数据库引擎，单一般也就用MyISAM和InnoDB。<br />
MyISAM 是默认使用的。但是除非你是建立一个非常简单的数据库或者只是实验性的，那么到大多数时候这个选择是错误的。MyISAM不支持外键的约束，这是保证数据 完整性的精华所在啊。另外，MyISAM会在添加或者更新数据的时候将整个表锁住，这在以后的扩展性能上会有很大的问题。<br />
解决办法很简单：使用InnoDB。<span id="more-671"></span></p>
<p><strong>2.使用PHP的mysql方法</strong><br />
PHP从一开始就提供了MySQL的函数库。很多程序都依赖于mysql_connect、mysql_query、mysql_fetch_assoc等等，但是PHP手册中建议：<br />
如果你使用的MySQL版本在4.1.3之后，那么强烈建议使用mysqli扩展。<br />
mysqli，或者说MySQL的高级扩展，有一些优点：<br />
有面向对象的接口<br />
prepared statements(预处理语句，可以有效防止SQL-注入攻击，还能提高性能)<br />
支持多种语句和事务<br />
另外，如果你想支持多数据库那么应该考虑一下PDO。</p>
<p><strong>3.不过滤用户输入</strong><br />
应该是：永远别相信用户的输入。用后端的PHP来校验过滤每一条输入的信息，不要相信Javascript。像下面这样的SQL语句很容易就会被攻击：</p>
<pre>$username = $_POST["name"];
$password = $_POST["password"];
$sql = "SELECT userid FROM usertable WHERE username=?$username?AND password=?$password?;"; // run query...</pre>
<p>这样的代码，如果用户输入”admin’;”那么，就相当于下面这条了：</p>
<pre>SELECT userid FROM usertable WHERE username=?admin?;</pre>
<p>这样入侵者就能不输入密码，就通过admin身份登录了。</p>
<p><strong>4.不使用UTF-8</strong><br />
那些英美国家的用户，很少考虑语言的问题，这样就造成很多产品就不能在其他地方通用。还有一些GBK编码的，也会有很多的麻烦。<br />
UTF-8解决了很多国际化的问题。虽然PHP6才能比较完美的解决这个问题，但是也不妨碍你将MySQL的字符集设置为UTF-8。</p>
<p><strong>5.该用SQL的地方使用PHP</strong><br />
如果你刚接触MySQL，有时候解决问题的时候可能会先考虑使用你熟悉的语言来解决。这样就可能造成一些浪费和性能比较差的情况。比如：计算平均值的时候不适用MySQL原生的AVG()方法，而是用PHP将所有值循环一遍然后累加计算平均值。<br />
另外还要注意SQL查询中的PHP循环。通常，在取得所有结果之后再用PHP来循环的效率更高。<br />
一般在处理大量数据的时候使用强有力的数据库方法，更能提高效率。</p>
<p><strong>6.不优化查询</strong><br />
99%的PHP性能问题都是数据库造成的，一条糟糕的SQL语句可能让你的整个程序都非常慢。MySQL的EXPLAIN statement，Query Profiler，many other tools的这些工具可以帮你找出那些调皮的SELECT。<br />
<strong><br />
7.使用错误的数据类型</strong><br />
MySQL提供一系列数字、字符串、时间等的数据类型。如果你想存储日期，那么就是用DATE或者DATETIME类型，使用整形或者字符串会让事情更加复杂。<br />
有时候你想用自己定义的数据类型，例如，使用字符串存储序列化的PHP对象。数据库的添加可能很容易，但是这样的话，MySQL就会变得很笨重，而且以后可能导致一些问题。</p>
<p><strong>8.在SELECT查询中使用*</strong><br />
不要使用*在表中返回所有的字段，这会非常的慢。你只需要取出你需要的数据字段。如果你需要取出所有的字段，那么可能你的表需要更改了。</p>
<p><strong>9.索引不足或者过度索引</strong><br />
一般来说，应该索引出现在SELECT语句中WHERE后面所有的字段。<br />
例如，假如我们的用户表有一个数字的ID(主键)和email地址。登录之后，MySQL应该通过email找到相应的ID。通过索引，MySQL可以通过搜索算法很快的定位email。如果没有索引，MySQL就需要检查每一项记录直到找到。<br />
这样的话，你可能想给每一个字段都添加索引，但是这样做的后果就是在你更新或者添加的时候，索引就会重新做一遍，当数据量大的时候，就会有性能问题。所以，只在需要的字段做索引。</p>
<p><strong>10.不备份</strong><br />
也许不常发生，但是数据库损毁，硬盘坏了、服务停止等等，这些都会对数据造成灾难性的破坏。所以你一定要确保自动备份数据或者保存副本。</p>
<p><strong>11.另外：不考虑其他数据库</strong><br />
MySQL可能是PHP用的最多的数据库了，但是也不是唯一的选择。 PostgreSQL和Firebird也是竞争者，他们都开源，而且不被某些公司所控制。微软提供SQL Server Express，Oracle有10g Express，这些企业级的也有免费版。SQLite对于一些小型的或者嵌入式应用来说也是不错的选择。</p>
<p>原文地址:<a href="http://www.cnbeta.com/articles/169770.htm" target="_blank">http://www.cnbeta.com/articles/169770.htm</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hdj.me/ten-error-in-php-about-mysql/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ThinkPHP防范XSS跨站攻击</title>
		<link>http://www.hdj.me/thinkphp-deny-xss</link>
		<comments>http://www.hdj.me/thinkphp-deny-xss#comments</comments>
		<pubDate>Fri, 13 Jan 2012 08:55:45 +0000</pubDate>
		<dc:creator>huangdijia</dc:creator>
				<category><![CDATA[PHP/PHP框架]]></category>
		<category><![CDATA[thinkphp]]></category>
		<category><![CDATA[thinkphp3.0]]></category>
		<category><![CDATA[xss跨站攻击]]></category>

		<guid isPermaLink="false">http://www.hdj.me/?p=658</guid>
		<description><![CDATA[一直使用ThinkPHP，通过乌云有向提交了ThinkPHP XSS攻击的bug，抽时间看了一下。 原理是通过URL传入script标签，ThinkPHP异常错误页面直接输出了script。 原理： http://ask.lenovo.com.cn/index.php?s=1%3Cbody+onload=alert(1)%3E 其中m的值是一个不存在的module，同时是一个完全的script，在异常错误页面中被执行实现XSS跨站攻击。 防范方法： 找到异常错误页面模板ThinkException.tpl.php(2,x),think_exception.tpl(3.x)有两个地方要修改： 第57行 echo($_SERVER['PHP_SELF']) 改为 echo strip_tags($_SERVER['PHP_SELF']) 第62行 echo $e['message'] 改为 echo strip_tags($e['message']) 另外，马上要发布的3.0官方已经对TP变量GROUP_NAME,MODULE_NAME,ACTION_NAME,__URL__,__SELF__,__APP__,$_SERVER['PHP_SELF']做了安全处理。 PS：安全不是框架的责任，大家在开发的时候须自己注意。]]></description>
			<content:encoded><![CDATA[<p>一直使用<a href="http://www.thinkphp.cn/" target="_blank">ThinkPHP</a>，通过<a href="http://www.wooyun.org/" target="_blank">乌云</a>有向提交了ThinkPHP XSS攻击的bug，抽时间看了一下。<br />
原理是通过URL传入script标签，ThinkPHP异常错误页面直接输出了script。</p>
<p><strong>原理：</strong></p>
<blockquote>
<p>http://ask.lenovo.com.cn/index.php?s=1%3Cbody+onload=alert(1)%3E</p>
</blockquote>
<p>其中m的值是一个不存在的module，同时是一个完全的script，在异常错误页面中被执行实现XSS跨站攻击。</p>
<p><strong>防范方法</strong>：<br />
找到异常错误页面模板ThinkException.tpl.php(2,x),think_exception.tpl(3.x)有两个地方要修改：</p>
<blockquote><p>
第57行 echo($_SERVER['PHP_SELF'])<br />
改为 echo strip_tags($_SERVER['PHP_SELF'])<br />
第62行 echo $e['message']<br />
改为 echo strip_tags($e['message'])
</p></blockquote>
<p>另外，马上要发布的3.0官方已经对TP变量GROUP_NAME,MODULE_NAME,ACTION_NAME,__URL__,__SELF__,__APP__,$_SERVER['PHP_SELF']做了安全处理。</p>
<p>PS：安全不是框架的责任，大家在开发的时候须自己注意。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hdj.me/thinkphp-deny-xss/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>gow支持命令列表</title>
		<link>http://www.hdj.me/gow-commands</link>
		<comments>http://www.hdj.me/gow-commands#comments</comments>
		<pubDate>Thu, 12 Jan 2012 15:45:15 +0000</pubDate>
		<dc:creator>huangdijia</dc:creator>
				<category><![CDATA[收藏夹]]></category>
		<category><![CDATA[gow]]></category>
		<category><![CDATA[gow支持命令]]></category>

		<guid isPermaLink="false">http://www.hdj.me/?p=656</guid>
		<description><![CDATA[executables_list: agrep 3.37 ansi2knr basename 1.9.4 bash 2.03 bc 1.05 bison 1.28 bunzip2 1.0.1 bzip2 1.0.1 bzip2recover 1.0 cat 2.0 chgrp 3.16 chmod 3.16 chown 3.16 cksum 2.0 cmp 2.7 comm 2.0 compress 2.0 cp 3.16 csplit 2.0 curl 7.15.0 cut 2.0 cvs 2.0.41a dc 1.2 dd 3.16 df 3.16 diff 2.7 diff3 2.7 dircolors [...]]]></description>
			<content:encoded><![CDATA[<p><strong>executables_list:</strong><br />
agrep 3.37<br />
ansi2knr<br />
basename 1.9.4<br />
bash 2.03<br />
bc 1.05<br />
bison 1.28<br />
bunzip2 1.0.1<br />
bzip2 1.0.1<br />
bzip2recover 1.0<br />
cat 2.0<br />
chgrp 3.16<br />
chmod 3.16<br />
chown 3.16<br />
cksum 2.0<br />
cmp 2.7<br />
comm 2.0<br />
compress 2.0<br />
cp 3.16<br />
csplit 2.0<br />
curl 7.15.0<br />
cut 2.0<br />
cvs 2.0.41a<br />
dc 1.2<br />
dd 3.16<br />
df 3.16<br />
diff 2.7<br />
diff3 2.7<br />
dircolors 3.16<br />
dirname 1.13<br />
dos2unix<br />
du 3.16<br />
egrep 2.4.2<br />
env 1.9.4<br />
expand 5.1.2600.0<br />
expr 1.9.4<br />
factor 1.13<br />
fgrep 2.4.2<br />
flex 2.5.4<br />
fmt 2.0<br />
fold 2.0<br />
fsplit<br />
gawk 3.1.0<br />
gclip 1.0<br />
gow<br />
gplay<br />
grep 2.4.2<br />
gsar 1.12<br />
gunzip 1.2.4<br />
gzip 1.2.4<br />
head 2.0<br />
id 1.9.4<br />
indent 2.2.6<br />
install 3.16<br />
join 2.0<br />
jwhois 2.4.1<br />
less 340<br />
lesskey 340<br />
ln 3.16<br />
logname 1.9.4<br />
ls 3.16<br />
m4 1.4<br />
make 3.78.1<br />
md5sum 2.0<br />
mkdir<br />
mkfifo<br />
mknod 3.16<br />
mv 3.16<br />
mvdir 3.16<br />
ncftp 3.1.8<br />
nl 2.0<br />
od 2.0<br />
pageant 0.60<br />
paste 2.5<br />
patch 2.0<br />
pathchk 1.9.4<br />
pclip 1.0<br />
plink 0.60<br />
pr 2.0<br />
printenv 1.9.4<br />
printf 1.9.4<br />
pscp 0.60<br />
psftp 0.60<br />
putty 0.60<br />
puttygen 0.57<br />
pwd<br />
recode 3.6<br />
rm 3.16<br />
rman 3.0.7<br />
rmdir<br />
rsync 2.6.3<br />
scp<br />
sdiff 2.7<br />
sed 3.02<br />
seq 1.13<br />
sftp<br />
sh<br />
shar 4.1<br />
sleep 1.9.4<br />
sort 2.0<br />
split 2.0<br />
stego<br />
su 1.9.4<br />
sum 2.0<br />
sync 3.16<br />
tac 2.0<br />
tail 2.0<br />
tar 1.12<br />
tee 1.9.4<br />
test 1.9.4<br />
touch 3.16<br />
tr 2.0<br />
type<br />
uname 1.9.4<br />
unexpand 2.0<br />
uniq 2.0<br />
unix2dos<br />
unrar 3.4.3<br />
unshar 4.1<br />
unzip 2.3<br />
uudecode 4.1<br />
vim 6.3<br />
wc 2.0<br />
wget 1.8.1<br />
whereis<br />
which 2.4<br />
whoami 1.9.4<br />
xargs 4.1<br />
yes 1.9.4<br />
zcat 1.2.4<br />
zip 3.0</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hdj.me/gow-commands/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

