<?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.cndong.cn/feed" rel="self" type="application/rss+xml" />
	<link>http://www.cndong.cn</link>
	<description>PHP Web开发</description>
	<lastBuildDate>Sat, 05 May 2012 09:49:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>惟有长江水，无语东流。</title>
		<link>http://www.cndong.cn/beyond-eternity.html</link>
		<comments>http://www.cndong.cn/beyond-eternity.html#comments</comments>
		<pubDate>Wed, 15 Feb 2012 04:46:27 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[随想&思考]]></category>
		<category><![CDATA[唯有]]></category>
		<category><![CDATA[无语]]></category>

		<guid isPermaLink="false">http://www.cndong.cn/only-the-yangtze-river-water-silent-to-the-east.html</guid>
		<description><![CDATA[如题]]></description>
			<content:encoded><![CDATA[<p>如题</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cndong.cn/beyond-eternity.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP获取用户的浏览器 操作系统信息</title>
		<link>http://www.cndong.cn/php-obtain-the-user-browser-operating-system-information.html</link>
		<comments>http://www.cndong.cn/php-obtain-the-user-browser-operating-system-information.html#comments</comments>
		<pubDate>Sat, 17 Apr 2010 12:36:06 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[$_SERVER]]></category>
		<category><![CDATA[$_SERVER['HTTP_USER_AGENT']]]></category>
		<category><![CDATA[操作系统信息]]></category>
		<category><![CDATA[用户浏览器]]></category>

		<guid isPermaLink="false">http://www.cndong.cn/php-access-to-the-users-browser-operating-system-information.html</guid>
		<description><![CDATA[PHP为了准确获得访问用户的浏览器 操作系统信息,以便返回给不同的用户不同的需求,比如不同的IE用户,分别加载不同的CSS文件 1.用户访问服务器时,利用PHP的超级全局变量$_SERVER数组中字段['HTTP_USER_AGENT'] 获取访问用户的所有信息 我访问时的$_SERVER['HTTP_USER_AGENT'] 字符串 : Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.3 Safari/533.2 2.利用正则表达式匹配以上字符串,用户的浏览器 操作系统信息 3.PHP根据匹配后的字符串(用户的浏览器 操作系统信息),分配需要的CSS文件,JS等等&#8230;返回给用户 我的浏览器 操作系统信息 Browser: Chrome 5.0 Platform: Windows 7 代码如下: &#60;?php //显示访问用户的浏览器信息 echo 'Browser: ' . determinebrowser($Agent) . ''; //显示访问用户的操作系统平台 echo 'Platform: ' . determineplatform($Agent). ''; //正值表达式比对解析$_SERVER['HTTP_USER_AGENT']中的字符串 获取访问用户的浏览器的信息 function determinebrowser ($Agent) { [...]]]></description>
			<content:encoded><![CDATA[<p>PHP为了准确获得访问用户的浏览器 操作系统信息,以便返回给不同的用户不同的需求,比如不同的IE用户,分别加载不同的CSS文件</p>
<p><strong>1</strong>.用户访问服务器时,利用PHP的<strong>超级全局变量$_SERVER</strong>数组中字段['HTTP_USER_AGENT']  获取访问用户的所有信息</p>
<p>我访问时的<strong>$_SERVER['HTTP_USER_AGENT'] </strong>字符串 :</p>
<p>Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.3 Safari/533.2</p>
<p><strong>2</strong>.利用正则表达式匹配以上字符串,用户的浏览器 操作系统信息</p>
<p><strong>3</strong>.PHP根据匹配后的字符串(用户的浏览器 操作系统信息),分配需要的CSS文件,JS等等&#8230;返回给用户</p>
<h2>我的浏览器 操作系统信息</h2>
<p><strong>Browser: Chrome 5.0</strong></p>
<p><strong>Platform: Windows 7</strong></p>
<p>代码如下:</p>
<p><span id="more-80"></span></p>
<pre class="brush: php;">&lt;?php

//显示访问用户的浏览器信息
echo 'Browser: ' . determinebrowser($Agent) . '<br/>';
//显示访问用户的操作系统平台
echo 'Platform: ' . determineplatform($Agent). '<br/>';

//正值表达式比对解析$_SERVER['HTTP_USER_AGENT']中的字符串 获取访问用户的浏览器的信息
function determinebrowser ($Agent) {
$browseragent="";   //浏览器
$browserversion=""; //浏览器的版本
if (ereg('MSIE ([0-9].[0-9]{1,2})',$Agent,$version)) {
	$browserversion=$version[1];
	$browseragent="Internet Explorer";
} else if (ereg( 'Opera/([0-9]{1,2}.[0-9]{1,2})',$Agent,$version)) {
 $browserversion=$version[1];
	$browseragent="Opera";
} else if (ereg( 'Firefox/([0-9.]{1,5})',$Agent,$version)) {
 $browserversion=$version[1];
	$browseragent="Firefox";
}else if (ereg( 'Chrome/([0-9.]{1,3})',$Agent,$version)) {
 $browserversion=$version[1];
	$browseragent="Chrome";
}
else if (ereg( 'Safari/([0-9.]{1,3})',$Agent,$version)) {
	$browseragent="Safari";
	$browserversion="";
}
else {
$browserversion="";
$browseragent="Unknown";
}
return $browseragent." ".$browserversion;
}

// 同理获取访问用户的浏览器的信息
function determineplatform ($Agent) {
$browserplatform=='';
if (eregi('win',$Agent) &amp;&amp; strpos($Agent, '95')) {
$browserplatform="Windows 95";
}
elseif (eregi('win 9x',$Agent) &amp;&amp; strpos($Agent, '4.90')) {
$browserplatform="Windows ME";
}
elseif (eregi('win',$Agent) &amp;&amp; ereg('98',$Agent)) {
$browserplatform="Windows 98";
}
elseif (eregi('win',$Agent) &amp;&amp; eregi('nt 5.0',$Agent)) {
$browserplatform="Windows 2000";
}
elseif (eregi('win',$Agent) &amp;&amp; eregi('nt 5.1',$Agent)) {
$browserplatform="Windows XP";
}
elseif (eregi('win',$Agent) &amp;&amp; eregi('nt 6.0',$Agent)) {
$browserplatform="Windows Vista";
}
elseif (eregi('win',$Agent) &amp;&amp; eregi('nt 6.1',$Agent)) {
$browserplatform="Windows 7";
}
elseif (eregi('win',$Agent) &amp;&amp; ereg('32',$Agent)) {
$browserplatform="Windows 32";
}
elseif (eregi('win',$Agent) &amp;&amp; eregi('nt',$Agent)) {
$browserplatform="Windows NT";
}elseif (eregi('Mac OS',$Agent)) {
$browserplatform="Mac OS";
}
elseif (eregi('linux',$Agent)) {
$browserplatform="Linux";
}
elseif (eregi('unix',$Agent)) {
$browserplatform="Unix";
}
elseif (eregi('sun',$Agent) &amp;&amp; eregi('os',$Agent)) {
$browserplatform="SunOS";
}
elseif (eregi('ibm',$Agent) &amp;&amp; eregi('os',$Agent)) {
$browserplatform="IBM OS/2";
}
elseif (eregi('Mac',$Agent) &amp;&amp; eregi('PC',$Agent)) {
$browserplatform="Macintosh";
}
elseif (eregi('PowerPC',$Agent)) {
$browserplatform="PowerPC";
}
elseif (eregi('AIX',$Agent)) {
$browserplatform="AIX";
}
elseif (eregi('HPUX',$Agent)) {
$browserplatform="HPUX";
}
elseif (eregi('NetBSD',$Agent)) {
$browserplatform="NetBSD";
}
elseif (eregi('BSD',$Agent)) {
$browserplatform="BSD";
}
elseif (ereg('OSF1',$Agent)) {
$browserplatform="OSF1";
}
elseif (ereg('IRIX',$Agent)) {
$browserplatform="IRIX";
}
elseif (eregi('FreeBSD',$Agent)) {
$browserplatform="FreeBSD";
}
if ($browserplatform=='') {$browserplatform = "Unknown"; }
return $browserplatform;
}

?&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.cndong.cn/php-obtain-the-user-browser-operating-system-information.html/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>PHP使用zlib扩展实现页面GZIP压缩输出</title>
		<link>http://www.cndong.cn/php-page-using-the-zlib-extension-gzip-compression-to-achieve-the-output.html</link>
		<comments>http://www.cndong.cn/php-page-using-the-zlib-extension-gzip-compression-to-achieve-the-output.html#comments</comments>
		<pubDate>Mon, 15 Feb 2010 12:45:09 +0000</pubDate>
		<dc:creator>海洋之星</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[GZIP]]></category>
		<category><![CDATA[zlib]]></category>
		<category><![CDATA[页面压缩]]></category>

		<guid isPermaLink="false">http://www.cndong.cn/php-page-using-the-zlib-extension-gzip-compression-to-achieve-the-output.html</guid>
		<description><![CDATA[GZIP（GNU-ZIP）是一种压缩技术。经过GZIP压缩后页面大小可以变为原来的30%甚至更小。这样用户浏览的时候就会感觉很爽很愉快！ 要实现GZIP压缩页面需要浏览器和服务器共同支持，实际上就是服务器压缩，传到浏览器后浏览器解压并解析。浏览器那边不需要我们担心，因为现在绝大多数浏览器都支持解析GZIP过的页面。我们只要把页面在服务器端压缩再输出到浏览器就行了。 要压缩一个页面，首先要获得要输出的内容。PHP中的ob_start()（ob =&#62; output buffer）函数可以实现这个功能，它可以把程序里准备输出的内容先放到一个叫做“缓冲区”的地方，这个函数一定要在页面输出之前使用，所以一般把它放在代码的最顶端。用ob_start()得到要压缩的页面之后，我们就可以压缩页面了！ 代码 function ob_gzip($content) // $content 就是要压缩的页面内容 { if(!headers_sent() &#38;&#38; extension_loaded("zlib") &#38;&#38; strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip"))//判断页面头部信息是否输出，PHP中zlib扩展是否已经加载，浏览器是否支持GZIP技术 { $content = gzencode($content." \n//此页已压缩",9); //为准备压缩的内容贴上“//此页已压缩”的注释标签，然后用zlib提供的gzencode()函数执行级别为9的压缩，这个参数值范围是0-9，0表示无压缩，9表示最大压缩，当然压缩程度越高越费CPU。 //用header()函数给浏览器发送一些头部信息，告诉浏览器这个页面已经用GZIP压缩过了！ header(&#8220;Content-Encoding: gzip&#8221;); header(&#8220;Vary: Accept-Encoding&#8221;); header(&#8220;Content-Length: &#8220;.strlen($content)); } return $content; //返回压缩的内容 函数写好后，就用ob_start调用它，于是原来的ob_start()变成 ob_start('ob_gzip'); //给ob_start()加一个参数，参数名就是刚才的函数名。这样当内容进入缓冲区后PHP就会调用ob_gzip函数把它压缩了。 最后结束缓冲区 ob_end_flush(); //结束缓冲区，输出内容。当然，不用这个函数也行，因为程序执行到最后会自动将缓冲区内容输出。 最终完整的实例 &#60;?php //调用一个函数名为ob_gzip的内容进行压缩 ob_start('ob_gzip'); //输出内容 ob_end_flush(); //这是ob_gzip函数 function ob_gzip($content) { if(!headers_sent()&#38;&#38;extension_loaded("zlib") &#38;&#38;strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip")) { $content [...]]]></description>
			<content:encoded><![CDATA[<p>GZIP（GNU-ZIP）是一种压缩技术。经过GZIP压缩后页面大小可以变为原来的30%甚至更小。这样用户浏览的时候就会感觉很爽很愉快！<br />
要实现GZIP压缩页面需要浏览器和服务器共同支持，实际上就是服务器压缩，传到浏览器后浏览器解压并解析。浏览器那边不需要我们担心，因为现在绝大多数浏览器都支持解析GZIP过的页面。我们只要把页面在服务器端压缩再输出到浏览器就行了。</p>
<p>要压缩一个页面，首先要获得要输出的内容。PHP中的ob_start()（ob =&gt; output buffer）函数可以实现这个功能，它可以把程序里准备输出的内容先放到一个叫做“缓冲区”的地方，这个函数一定要在页面输出之前使用，所以一般把它放在代码的最顶端。用ob_start()得到要压缩的页面之后，我们就可以压缩页面了！</p>
<p><span id="more-79"></span></p>
<p>代码</p>
<p><code>function ob_gzip($content) // $content 就是要压缩的页面内容</code></p>
<p><code>{ </code><code> </code></p>
<p><code> if(!headers_sent() &amp;&amp; extension_loaded("zlib") &amp;&amp;</code><code> strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip"))//判断</code><code>页面头部信息是否输出</code><code>，</code><code>PHP中</code><code>zlib扩展是否已经加载，</code><code>浏览器是否支持GZIP技术<br />
{<br />
$content = gzencode($content." \n//此页已压缩",9); //为准备压缩的内容贴上“//此页已压缩”的注释标签，然后用zlib提供的gzencode()函数执行级别为9的压缩，这个参数值范围是0-9，0表示无压缩，9表示最大压缩，当然压缩程度越高越费CPU。</code><br />
//用header()函数给浏览器发送一些头部信息，告诉浏览器这个页面已经用GZIP压缩过了！<br />
header(&#8220;Content-Encoding: gzip&#8221;);<br />
header(&#8220;Vary: Accept-Encoding&#8221;);<br />
header(&#8220;Content-Length: &#8220;.strlen($content));<br />
}<br />
return $content; //返回压缩的内容</p>
<p><code>函数写好后，就用ob_start调用它，于是原来的ob_start()变成</code></p>
<p><code><code>ob_start('ob_gzip'); //给ob_start()加一个参数，参数名就是刚才的函数名。这样当内容进入缓冲区后PHP就会调用ob_gzip函数把它压缩了。</code></code></p>
<p><code><code>最后结束缓冲区</code></code></p>
<p><code><code>ob_end_flush(); //结束缓冲区，输出内容。当然，不用这个函数也行，因为程序执行到最后会自动将缓冲区内容输出。</code></code></p>
<p><code><code>最终完整的实例</code></code></p>
<p><code><code><code>&lt;?php<br />
//调用一个函数名为ob_gzip的内容进行压缩<br />
ob_start('ob_gzip');<br />
//输出内容<br />
ob_end_flush();<br />
//这是ob_gzip函数</code></code></code></p>
<p><code><code><code>function ob_gzip($content)<br />
{<br />
if(!headers_sent()&amp;&amp;extension_loaded("zlib")</code></code></code><br />
<code><code><code>&amp;&amp;strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip"))<br />
{<br />
$content = gzencode($content." \n//此页已压缩",9);<br />
header("Content-Encoding: gzip");<br />
header("Vary: Accept-Encoding");<br />
header("Content-Length: ".strlen($content));<br />
}<br />
return $content;<br />
}<br />
?&gt;</code></code></code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.cndong.cn/php-page-using-the-zlib-extension-gzip-compression-to-achieve-the-output.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>joomla 模板制作中的 jdoc 介绍</title>
		<link>http://www.cndong.cn/joomla-templates-to-create-the-jdoc-introduction.html</link>
		<comments>http://www.cndong.cn/joomla-templates-to-create-the-jdoc-introduction.html#comments</comments>
		<pubDate>Fri, 12 Feb 2010 12:56:38 +0000</pubDate>
		<dc:creator>海洋之星</dc:creator>
				<category><![CDATA[Joomla]]></category>
		<category><![CDATA[jdoc]]></category>

		<guid isPermaLink="false">http://www.cndong.cn/joomla-templates-to-create-the-jdoc-introduction.html</guid>
		<description><![CDATA[jdoc标签用于声明joomla模板的页面结构,joomla的模板引擎根据jdoc标签输出页面的指定内容. &#60;jdoc:include type=&#8221;component&#8221; /&#62; &#60;jdoc:include type=&#8221;head&#8221; /&#62; &#60;jdoc:include type=&#8221;installation&#8221; /&#62; &#60;jdoc:include type=&#8221;message&#8221; /&#62; &#60;jdoc:include type=&#8221;module&#8221; name=&#8221;breadcrumbs&#8221; /&#62; &#60;jdoc:include type=&#8221;module&#8221; name=&#8221;submenu&#8221; style=&#8221;rounded&#8221; id=&#8221;submenu-box&#8221; /&#62; &#60;jdoc:include type=&#8221;modules&#8221; name=&#8221;left&#8221; style=&#8221;xhtml&#8221; /&#62; &#60;jdoc:include type=&#8221;modules&#8221; name=&#8221;right&#8221; style=&#8221;xhtml&#8221; /&#62; &#60;jdoc:include type=&#8221;modules&#8221; name=&#8221;top&#8221; style=&#8221;xhtml&#8221; /&#62; &#60;jdoc:include type=&#8221;modules&#8221; name=&#8221;user1&#8243; style=&#8221;xhtml&#8221; /&#62; type 属性 jdoc:include 元素中的type属性指定要渲染的内容类型，属性值可以是component，head，installation，message，module，modules component 页面内容主输出部分，在模板页面&#60;body&#62;元素中应该只出现一次。 head 填充当前页的style, script,meta的相关元素，应该在模板的&#60;head&#62;元素中只出现一次。 installation 仅仅在安装模板中有用，在前台和后台的模板中没有用到，某种程度上与 component类型相似，渲染安装步骤中中的一个页面主内容。 [...]]]></description>
			<content:encoded><![CDATA[<p><strong>jdoc标签用于声明joomla模板的页面结构,joomla的模板引擎根据jdoc标签输出页面的指定内容.</strong></p>
<p>&lt;jdoc:include type=&#8221;component&#8221; /&gt;<br />
&lt;jdoc:include type=&#8221;head&#8221; /&gt;<br />
&lt;jdoc:include type=&#8221;installation&#8221; /&gt;<br />
&lt;jdoc:include type=&#8221;message&#8221; /&gt;<br />
&lt;jdoc:include type=&#8221;module&#8221; name=&#8221;breadcrumbs&#8221; /&gt;<br />
&lt;jdoc:include type=&#8221;module&#8221; name=&#8221;submenu&#8221; style=&#8221;rounded&#8221; id=&#8221;submenu-box&#8221; /&gt;<br />
&lt;jdoc:include type=&#8221;modules&#8221; name=&#8221;left&#8221; style=&#8221;xhtml&#8221; /&gt;<br />
&lt;jdoc:include type=&#8221;modules&#8221; name=&#8221;right&#8221; style=&#8221;xhtml&#8221; /&gt;<br />
&lt;jdoc:include type=&#8221;modules&#8221; name=&#8221;top&#8221; style=&#8221;xhtml&#8221; /&gt;<br />
&lt;jdoc:include type=&#8221;modules&#8221; name=&#8221;user1&#8243; style=&#8221;xhtml&#8221; /&gt;</p>
<p><span id="more-78"></span></p>
<p>type 属性</p>
<blockquote><p>jdoc:include 元素中的type属性指定要渲染的内容类型，属性值可以是component，head，installation，message，module，modules</p>
<p>component<br />
页面内容主输出部分，在模板页面&lt;body&gt;元素中应该只出现一次。</p>
<p>head<br />
填充当前页的style, script,meta的相关元素，应该在模板的&lt;head&gt;元素中只出现一次。</p>
<p>installation<br />
仅仅在安装模板中有用，在前台和后台的模板中没有用到，某种程度上与 component类型相似，渲染安装步骤中中的一个页面主内容。</p>
<p>message<br />
在模板的&lt;body&gt;元素中只出现一次，填充系统或者报错信息。</p>
<p>module<br />
渲染由name属性指定的单一模块，模块必须是发布的并且当前用户有权访问，还可以有layout以及controller属性。</p>
<p>modules<br />
渲染模板中所有指定名称的模块，模块必须是发布的并且当前用户有权访问，还可以有layout以及controller属性。</p></blockquote>
<p><strong>style 属性</strong></p>
<blockquote><p>对于module 和modules 类型，style是一个可选属性，这一属性指定了模块被渲染风格，如果没指定style，默认是none</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.cndong.cn/joomla-templates-to-create-the-jdoc-introduction.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>关于MySQL中隐藏空间的问题</title>
		<link>http://www.cndong.cn/with-regard-to-the-issue-of-space-hidden-in-mysql.html</link>
		<comments>http://www.cndong.cn/with-regard-to-the-issue-of-space-hidden-in-mysql.html#comments</comments>
		<pubDate>Wed, 10 Feb 2010 09:24:50 +0000</pubDate>
		<dc:creator>海洋之星</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[TMPDIR 隐藏空间]]></category>

		<guid isPermaLink="false">http://www.cndong.cn/with-regard-to-the-issue-of-space-hidden-in-mysql.html</guid>
		<description><![CDATA[MySQL使用环境变量TMPDIR的值作为保存临时文件的目录的路径名。如果未设置TMPDIR，MySQL将使用系统的默认值，通常为/tmp、/var/tmp或/usr/tmp。如果包含临时文件目录的文件系统过小，可对mysqld使用“—tmpdir”选项，在具有足够空间的文件系统内指定1个目录。 　　在MySQL 5.1中，“—tmpdir”选项可被设置为数个路径的列表，以循环方式使用。在Unix平台上，路径用冒号字符“:”隔开，在Windows、NetWare和OS/2平台上，路径用分号字符“;”隔开。注意，为了有效分布负载，这些路径应位于不同的物理磁盘上，而不是位于相同磁盘的不同分区中。   　　如果MySQL服务器正作为复制从服务器使用，不应将“&#8211;tmpdir”设置为指向基于内存的文件系统的目录，或当服务器主机重启时将清空的目录。对于复制从服务器，需要在机器重启时仍保留一些临时文件，以便能够复制临时表或执行LOAD DATA INFILE操作。如果在服务器重启时丢失了临时文件目录下的文件，复制将失败。 　　MySQL会以隐含方式创建所有的临时文件。这样，就能确保中止mysqld时会删除所有临时文件。使用隐含文件的缺点在于，在临时文件目录所在的位置中，看不到占用了文件系统的大临时文件。 　　进行排序时(ORDER BY或GROUP BY)，MySQL通常会使用1个或多个临时文件。所需的最大磁盘空间由下述表达式决定： 　　(length of what is sorted + sizeof(row pointer)) 　　* number of matched rows 　　* 2 　　“row pointer”(行指针)的大小通常是4字节， 　　但在以后，对于大的表，该值可能会增加。 　　对于某些SELECT查询，MySQL还会创建临时SQL表。它们不是隐含表，并具有SQL_*形式的名称。 　　ALTER TABLE会在与原始表目录相同的目录下创建临时表。]]></description>
			<content:encoded><![CDATA[<p><span><strong>MySQL</strong></span>使用环境变量TMPDIR的值作为保存临时<span><strong>文件</strong></span>的目录的路径名。如果未设置TMPDIR，MySQL将使用系统的默认值，通常为/tmp、/var/tmp或/usr/tmp。如果包含临时文件目录的文件系统过小，可对mysqld使用“—tmpdir”选项，在具有足够<span><strong>空间</strong></span>的文件系统内指定1个目录。</p>
<p>　　在MySQL 5.1中，“—tmpdir”选项可被设置为数个路径的列表，以循环方式使用。在Unix平台上，路径用冒号字符“:”隔开，在<span><strong>Windows</strong></span>、NetWare和OS/2平台上，路径用分号字符“;”隔开。注意，为了有效分布负载，这些路径应位于不同的物理磁盘上，而不是位于相同磁盘的不同分区中。</p>
<p> </p>
<p>　　如果MySQL服务器正作为复制从<span><strong>服务器</strong></span>使用，不应将“&#8211;tmpdir”设置为指向基于内存的文件系统的目录，或当服务器主机重启时将清空的目录。对于复制从服务器，需要在机器重启时仍保留一些临时文件，以便能够复制临时表或执行LOAD DATA INFILE操作。如果在服务器重启时丢失了临时文件目录下的文件，复制将失败。</p>
<p><span id="more-77"></span></p>
<p>　　MySQL会以隐含方式创建所有的临时文件。这样，就能确保中止mysqld时会删除所有临时文件。使用隐含文件的缺点在于，在临时文件目录所在的位置中，看不到占用了文件系统的大临时文件。</p>
<p>　　进行排序时(ORDER BY或GROUP BY)，MySQL通常会使用1个或多个临时文件。所需的最大磁盘空间由下述表达式决定：</p>
<p>　　(length of what is sorted + sizeof(row pointer))</p>
<p>　　* number of matched rows</p>
<p>　　* 2</p>
<p>　　“row pointer”(行指针)的大小通常是4字节，</p>
<p>　　但在以后，对于大的表，该值可能会增加。</p>
<p>　　对于某些SELECT查询，MySQL还会创建临时<span><strong>SQL</strong></span>表。它们不是隐含表，并具有SQL_*形式的名称。</p>
<p>　　ALTER TABLE会在与原始表目录相同的目录下创建临时表。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cndong.cn/with-regard-to-the-issue-of-space-hidden-in-mysql.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何在Win下mysql备份恢复命令</title>
		<link>http://www.cndong.cn/how-to-win-the-next-mysql-backup-and-recovery-commands.html</link>
		<comments>http://www.cndong.cn/how-to-win-the-next-mysql-backup-and-recovery-commands.html#comments</comments>
		<pubDate>Tue, 09 Feb 2010 06:30:52 +0000</pubDate>
		<dc:creator>海洋之星</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[备份 恢复 命令]]></category>

		<guid isPermaLink="false">http://www.cndong.cn/how-to-win-the-next-mysql-backup-and-recovery-commands.html</guid>
		<description><![CDATA[假设mysql安装在c:盘，mysql数据库的用户名是root，密码是123456，数据库名是database_name，在d:盘根目录下面存放备份数据库，备份数据库名字为backup20070713.sql(20070713.sql为备份日期) 　　备份数据库： 　　mysqldump -uroot -p123456 database_name&#62;d:/backup20070713.sql 　　恢复数据库： 　　删除原有数据库，建立数据库，把备份数据库导入。 　　mysqladmin -uroot -p123456 drop database_name 　　mysqladmin -uroot -p123456 create database_name 　　mysql -uroot -p123456 database_name 　　注：在导入备份数据库前，database_name如果没有，是需要创建的;而且与backup20070713.sql中数据库名是一样的才能导入。 　　注：在Windows命令行下使用]]></description>
			<content:encoded><![CDATA[<p>假设<span><strong>mysql</strong></span>安装在c:盘，mysql数据库的<span><strong>用户</strong></span>名是root，密码是123456，<span><strong>数据库</strong></span>名是database_name，在d:盘根目录下面存放备份数据库，备份数据库名字为backup20070713.sql(20070713.sql为备份日期)</p>
<p>　　备份数据库：</p>
<p>　　mysqldump -uroot -p123456 database_name&gt;d:/backup20070713.sql</p>
<p>　　恢复数据库：</p>
<p>　　删除原有数据库，建立数据库，把备份数据库导入。</p>
<p>　　mysqladmin -uroot -p123456 drop database_name</p>
<p>　　mysqladmin -uroot -p123456 create database_name</p>
<p>　　mysql -uroot -p123456 database_name</p>
<p>　　注：在导入备份数据库前，database_name如果没有，是需要创建的;而且与backup20070713.sql中数据库名是一样的才能导入。</p>
<p>　　注：在Windows命令行下使用</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cndong.cn/how-to-win-the-next-mysql-backup-and-recovery-commands.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP内置函数intval()使用不当的安全漏洞分析</title>
		<link>http://www.cndong.cn/php-built-in-function-intval-the-use-of-inappropriate-analysis-of-security-vulnerabilities.html</link>
		<comments>http://www.cndong.cn/php-built-in-function-intval-the-use-of-inappropriate-analysis-of-security-vulnerabilities.html#comments</comments>
		<pubDate>Fri, 05 Feb 2010 07:22:16 +0000</pubDate>
		<dc:creator>海洋之星</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[intval()]]></category>

		<guid isPermaLink="false">http://www.cndong.cn/php-built-in-function-intval-the-use-of-inappropriate-analysis-of-security-vulnerabilities.html</guid>
		<description><![CDATA[一、描述 intval函数有个特性:&#8221;直到遇上数字或正负符号才开始做转换，再遇到非数字或字符串结束时()结束转换&#8221;,在某些应用程序里由于对intval函数这个特性认识不够,错误的使用导致绕过一些安全判断导致安全漏洞. 二、分析 PHP_FUNCTION(intval) { zval **num, **arg_base; int base; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &#38;num) == FAILURE) { WRONG_PARAM_COUNT; } base = 10; break; case 2: if (zend_get_parameters_ex(2, &#38;num, &#38;arg_base) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(arg_base); base = Z_LVAL_PP(arg_base); break; default: WRONG_PARAM_COUNT; } RETVAL_ZVAL(*num, 1, 0); convert_to_long_base(return_value, base); } Zend/zend_operators.c-&#62;&#62;convert_to_long_base() …… case [...]]]></description>
			<content:encoded><![CDATA[<p>一、描述</p>
<p><span><strong>intval</strong></span><span><strong>函数</strong></span>有个特性:&#8221;直到遇上数字或正负符号才开始做转换，再遇到非数字或字符串结束时()结束转换&#8221;,在某些<span><strong>应用</strong></span>程序里由于对intval函数这个特性认识不够,错误的使用导致绕过一些安全判断导致安全<span><strong>漏洞</strong></span>.</p>
<p><strong>二、分析</strong></p>
<p>PHP_FUNCTION(intval)</p>
<p>{</p>
<p>zval **num, **arg_base;</p>
<p>int base;</p>
<p><span id="more-75"></span></p>
<p>switch (ZEND_NUM_ARGS()) {</p>
<p>case 1:</p>
<p>if (zend_get_parameters_ex(1, &amp;num) == FAILURE) {</p>
<p>WRONG_PARAM_COUNT;</p>
<p>}</p>
<p>base = 10;</p>
<p>break;</p>
<p>case 2:</p>
<p>if (zend_get_parameters_ex(2, &amp;num, &amp;arg_base) == FAILURE) {</p>
<p>WRONG_PARAM_COUNT;</p>
<p>}</p>
<p>convert_to_long_ex(arg_base);</p>
<p>base = Z_LVAL_PP(arg_base);</p>
<p>break;</p>
<p>default:</p>
<p>WRONG_PARAM_COUNT;</p>
<p>}</p>
<p>RETVAL_ZVAL(*num, 1, 0);</p>
<p>convert_to_long_base(return_value, base);</p>
<p>}</p>
<p>Zend/zend_operators.c-&gt;&gt;convert_to_long_base()</p>
<p>……</p>
<p>case IS_STRING:</p>
<p>strval = Z_STRVAL_P(op);</p>
<p>Z_LVAL_P(op) = strtol(strval, NULL, base);</p>
<p>STR_FREE(strval);</p>
<p>break;</p>
<p>当intval函数接受到字符串型参数是调用convert_to_long_base()处理，接下来调用Z_LVAL_P(op) = strtol(strval, NULL, base);通过strtol函数来处理参数。</p>
<p>函数原型如下：</p>
<p>long int strtol(const char *nptr,char **endptr,int base);</p>
<p>这个函数会将参数nptr字符串根据参数base来转换成长整型数,参数base范围从2至36,或0.参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制等。</p>
<p>流程为：</p>
<p>strtol()会扫描参数nptr字符串，跳过前面的空格字符，直到遇上数字或正负符号才开始做转换，再遇到非数字或字符串结束时()结束转换，并将结果返回。</p>
<p>那么当intval用在if等的判断里面,将会导致这个判断实去意义,从而导致安全漏洞.</p>
<p><strong>三、测试<span><strong>代码</strong></span></strong></p>
<p><strong></strong>&lt;?php<br />
$o = 0.1;<br />
for($a = 1; $a &lt; 100; $a++){<br />
$o += 0.1;<br />
echo &#8220;&lt;br /&gt;intval($o) = &#8220;.intval($o);<br />
if(intval($o)){<br />
print(&#8220;&amp;nbsp;true&#8221;);<br />
}else{<br />
print(&#8220;&amp;nbsp;false&#8221;);<br />
}<br />
}?&gt;</p>
<p>输出结果：</p>
<p>intval(0.2) = 0 false<br />
intval(0.3) = 0 false<br />
intval(0.4) = 0 false<br />
intval(0.5) = 0 false<br />
intval(0.6) = 0 false<br />
intval(0.7) = 0 false<br />
intval(0.8) = 0 false<br />
intval(0.9) = 0 false<br />
intval(1) = 0 false<br />
intval(1.1) = 1 true<br />
intval(1.2) = 1 true<br />
intval(1.3) = 1 true<br />
intval(1.4) = 1 true<br />
intval(1.5) = 1 true<br />
intval(1.6) = 1 true<br />
intval(1.7) = 1 true<br />
intval(1.8) = 1 true<br />
intval(1.9) = 1 true<br />
intval(2) = 2 true<br />
&#8230;..</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cndong.cn/php-built-in-function-intval-the-use-of-inappropriate-analysis-of-security-vulnerabilities.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP cURL快速入门</title>
		<link>http://www.cndong.cn/php-curl-quick-start.html</link>
		<comments>http://www.cndong.cn/php-curl-quick-start.html#comments</comments>
		<pubDate>Wed, 03 Feb 2010 13:12:41 +0000</pubDate>
		<dc:creator>海洋之星</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[cURL]]></category>

		<guid isPermaLink="false">http://www.cndong.cn/based-on-phps-curl-quick-start.html</guid>
		<description><![CDATA[cURL 是一个利用URL语法规定来传输文件和数据的工具，支持很多协议，如HTTP、FTP、TELNET等。更让人高兴的是，PHP也支持 cURL 库。本文将介绍PHP中如何运用它。 基本结构 先来看一下在PHP中建立cURL请求的基本步骤： 初始化 设置变量 执行并获取结果 释放cURL句柄 // 1. 初始化 $ch = curl_init(); // 2. 设置选项，包括URL curl_setopt($ch, CURLOPT_URL, &#8220;http://www.nettuts.com&#8221;); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 3. 执行并获取HTML文档内容 $output = curl_exec($ch); // 4. 释放curl句柄 curl_close($ch); 第二步（也就是 curl_setopt() ）最为关键，有一长串cURL参数可供设置，它们能指定URL请求的各个细节。要一次性全部看完并理解可能比较困难，所以今天我们只试一下那些常用也更有用的选项。 检查错误 你可以加一段检查错误的语句（虽然这并不是必需的）： // &#8230; $output = curl_exec($ch); if ($output === FALSE) { echo &#8220;cURL [...]]]></description>
			<content:encoded><![CDATA[<p><strong> <a href="http://curl.haxx.se/" target="_blank"><strong>cURL</strong></a></strong> 是一个利用URL语法规定来传输文件和数据的工具，支持很多协议，如HTTP、FTP、TELNET等。更让人高兴的是，PHP也支持 cURL 库。本文将介绍PHP中如何运用它。</p>
<p><strong>基本结构</strong></p>
<p>先来看一下在PHP中建立cURL请求的基本步骤：</p>
<ol>
<li>初始化</li>
<li>设置变量</li>
<li>执行并获取结果</li>
<li>释放cURL句柄</li>
</ol>
<p><span>// 1. 初始化</span></p>
<p>$ch = curl_init();</p>
<p>// 2. 设置选项，包括URL</p>
<p>curl_setopt($ch, CURLOPT_URL, &#8220;http://www.nettuts.com&#8221;);</p>
<p>curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);</p>
<p>curl_setopt($ch, CURLOPT_HEADER, 0);</p>
<p>// 3. 执行并获取HTML文档内容</p>
<p>$output = curl_exec($ch);</p>
<p>// 4. 释放curl句柄</p>
<p>curl_close($ch);<span id="more-74"></span></p>
<p>第二步（也就是 curl_setopt() ）最为关键，有一长串cURL参数可供设置，它们能指定URL请求的各个细节。要一次性全部看完并理解可能比较困难，所以今天我们只试一下那些常用也更有用的选项。</p>
<p><strong>检查错误</strong></p>
<p>你可以加一段检查错误的语句（虽然这并不是必需的）：</p>
<p><span>// &#8230;</span></p>
<p>$output = curl_exec($ch);</p>
<p>if ($output === FALSE) {</p>
<p>echo &#8220;cURL Error: &#8221; . curl_error($ch);</p>
<p>}</p>
<p>// &#8230;</p>
<p>注意，比较的时候我们用的是“=== FALSE”，而非“== FALSE”。因为我们得区分空输出和布尔值FALSE，后者才是真正的错误。</p>
<p><strong>用POST方法发送数据</strong></p>
<p>当发起GET请求时，数据可以通过“查询字串”（query string）传递给一个URL。例如，在google中搜索时，搜索关键即为URL的查询字串的一部分：</p>
<p><span>http://www.google.com/search?q=nettuts</span></p>
<p>这种情况下你可能并不需要cURL来模拟。把这个URL丢给“file_get_contents()”就能得到相同结果。</p>
<p>不过有一些HTML表单是用POST方法提交的。这种表单提交时，数据是通过 HTTP请求体（request body） 发送，而不是查询字串。例如，当使用CodeIgniter论坛的表单，无论你输入什么关键字，总是被POST到如下页面：</p>
<p><span>http://codeigniter.com/forums/do_search/</span></p>
<p>你可以用PHP脚本来模拟这种URL请求。首先，新建一个可以接受并显示POST数据的文件，我们给它命名为post_output.php：</p>
<p><span>print_r($_POST);</span></p>
<p>接下来，写一段PHP脚本来执行cURL请求：</p>
<p><span>$url = &#8220;http://localhost/post_output.php&#8221;;</span></p>
<p>$post_data = array (</p>
<p>&#8220;foo&#8221; =&gt; &#8220;bar&#8221;,</p>
<p>&#8220;query&#8221; =&gt; &#8220;Nettuts&#8221;,</p>
<p>&#8220;action&#8221; =&gt; &#8220;Submit&#8221;</p>
<p>);</p>
<p>$ch = curl_init();</p>
<p>curl_setopt($ch, CURLOPT_URL, $url);</p>
<p>curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);</p>
<p>// 我们在POST数据哦！</p>
<p>curl_setopt($ch, CURLOPT_POST, 1);</p>
<p>// 把post的变量加上</p>
<p>curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);</p>
<p>$output = curl_exec($ch);</p>
<p>curl_close($ch);</p>
<p>echo $output;</p>
<p>这段脚本发送一个POST请求给 post_output.php ，这个页面 $_POST 变量并返回，我们利用cURL捕捉了这个输出。</p>
<p><strong>小结</strong></p>
<p>今天我们一起学习了<strong>cURL</strong>库。希望你喜欢。下一次如果要发起URL请求时，请考虑下cURL吧！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cndong.cn/php-curl-quick-start.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery 1.4新特性及其变化</title>
		<link>http://www.cndong.cn/jquery-1-4-new-features-and-changes-in.html</link>
		<comments>http://www.cndong.cn/jquery-1-4-new-features-and-changes-in.html#comments</comments>
		<pubDate>Sun, 31 Jan 2010 13:32:40 +0000</pubDate>
		<dc:creator>海洋之星</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery 1.4]]></category>
		<category><![CDATA[新特性]]></category>

		<guid isPermaLink="false">http://www.cndong.cn/jquery-1-4-new-features-and-changes-in.html</guid>
		<description><![CDATA[   为庆祝jQuery的四周年生日，jQuery官方团队正式发布了jQuery 1.4版本。在这个版本中，jQuery官方团队做了大量的编码、测试和文档工作，相对之前版本自然改进不少，让我们一起来看看有哪些新变化吧。 1、为一些方法添加设置函数（Setter Functions） 在之前版本中，我们可以给attr()方法传入一个函数，将函数的返回值赋予某个属性。1.4中，这个功能被添加到了更多的方法中：.css()、 .attr()、 .val()、 .html()、 .text()、 .append()、.prepend()、 .before()、 .after()、.replaceWith(), .wrap()、 .wrapInner()、 .offset()、 .addClass()、 .removeClass()、 .toggleClass()。 此外，在下面方法中，还可以传入当前值作为设置函数的第二个参数，供设置函数使用：.css()、.attr()、.val()、.html()、.text()、.append()、.prepend()、.offset()、.addClass()、.removeClass()、和 .toggleClass()。 例如： jQuery(&#8216;&#60;img src=&#8221;enter.png&#8221; alt=&#8221;enter your name&#8221; /&#62;&#8217;) .attr(&#8220;alt&#8221;, function(index, value) {     return &#8220;Please, &#8221; + value; }); 2、更新了jQuery中序列化的核心方法 jQuery.param() 之前对于{foo: ["bar", "baz"]}序列化后的结果是“foo=bar&#38;foo=baz”，现在为“foo[]=bar&#38;foo[]=baz”。 这样更改的目的主要是告诉接收端，传入的是一个数组对象。 3、在jQuery.ajax 中可在不指定dataType属性时，会根据response的content-type自动识别。 例如：ajax请求返回的对象是json类型（application/json），则dataType会自动指定为”json”（不指定的情况下）。 4、在jQuery.ajax请求中，添加对Etag的支持。 之前jQuery在ajax请求中是在header中不发送If-None-Match值的（也就是不支持Etag），也就默认忽略了浏览器缓存。现在可以通过指定ifModified属性开启它。 5、使用原生的JSON.parse，对json进行严格解析 在1.3及更早版本中，jQuery通过javascript的eval方法来解析json对象。在1.4中，如果你用的浏览器支持，则会使用原生的JSON.parse进行json对象解析，这样对json对象的书写验证则更为严格。如：{foo: “bar”}的写法将不会被验证为合法的json对象，必须写成{”foo”: “bar”}。如果你的程序打算升级到1.4版本，那么这一点要尤其注意了。 6、在使用serialize() [...]]]></description>
			<content:encoded><![CDATA[<p>   为庆祝jQuery的四周年生日，<strong>jQuery</strong>官方团队正式发布了<strong>jQuery 1.4</strong>版本。在这个版本中，jQuery官方团队做了大量的编码、测试和文档工作，相对之前版本自然改进不少，让我们一起来看看有哪些新变化吧。</p>
<p><strong>1、为一些方法添加设置函数（Setter Functions）</strong></p>
<p>在之前版本中，我们可以给attr()方法传入一个函数，将函数的返回值赋予某个属性。1.4中，这个功能被添加到了更多的方法中：.css()、 .attr()、 .val()、 .html()、 .text()、 .append()、.prepend()、 .before()、 .after()、.replaceWith(), .wrap()、 .wrapInner()、 .offset()、 .addClass()、 .removeClass()、 .toggleClass()。</p>
<p>此外，在下面方法中，还可以传入当前值作为设置函数的第二个参数，供设置函数使用：.css()、.attr()、.val()、.html()、.text()、.append()、.prepend()、.offset()、.addClass()、.removeClass()、和 .toggleClass()。</p>
<p>例如：</p>
<p><span>jQuery(&#8216;&lt;img src=&#8221;enter.png&#8221; alt=&#8221;enter your name&#8221; /&gt;&#8217;)<br />
.attr(&#8220;alt&#8221;, function(index, value) </span></p>
<p><span>{<br />
    return &#8220;Please, &#8221; + value;<br />
});</span></p>
<p><strong>2、更新了jQuery中序列化的核心方法 jQuery.param()</strong></p>
<p>之前对于{foo: ["bar", "baz"]}序列化后的结果是“foo=bar&amp;foo=baz”，现在为“foo[]=bar&amp;foo[]=baz”。<br />
这样更改的目的主要是告诉接收端，传入的是一个数组对象。</p>
<p><strong>3、在jQuery.ajax 中可在不指定dataType属性时，会根据response的content-type自动识别。</strong></p>
<p>例如：ajax请求返回的对象是json类型（application/json），则dataType会自动指定为”json”（不指定的情况下）。</p>
<p><strong>4、在jQuery.ajax请求中，添加对Etag的支持。</strong></p>
<p>之前jQuery在ajax请求中是在header中不发送If-None-Match值的（也就是不支持Etag），也就默认忽略了浏览器缓存。现在可以通过指定ifModified属性开启它。</p>
<p><span id="more-73"></span></p>
<p><strong>5、使用原生的JSON.parse，对json进行严格解析</strong></p>
<p>在1.3及更早版本中，jQuery通过javascript的eval方法来解析json对象。在1.4中，如果你用的浏览器支持，则会使用原生的JSON.parse进行json对象解析，这样对json对象的书写验证则更为严格。如：{foo: “bar”}的写法将不会被验证为合法的json对象，必须写成{”foo”: “bar”}。如果你的程序打算升级到1.4版本，那么这一点要尤其注意了。</p>
<p><strong>6、在使用serialize() 序列化时，添加对HTML5元素的支持</strong></p>
<p><strong>7、为ajax请求添加上下文支持，参考jQuery.ajax()</strong></p>
<p><span>jQuery.ajax</span></p>
<p><span>({<br />
    url: &#8220;test.html&#8221;,<br />
    context: document.body,<br />
    success: function(){<br />
        jQuery(this).addClass(&#8220;done&#8221;);<br />
    }<br />
});</span></p>
<p><strong>8、在jQuery.ajax()请求时，接收XMLHttpRequest对象作为success的第三个参数</strong></p>
<p><strong>9、在ajax请求时，总是设定Content-Type属性</strong></p>
<p>在1.3版本中，如果ajax发送的数据为空时，则不发送Content-Type属性值，1.4中则总是显式设定Content-Type值。这是因为有些程序后端通过Content-Type值判断如何响应。</p>
<p><strong>10、当用jsonp方式进行ajax请求时，可以显式指定callback的名称</strong></p>
<p>之前jsonp的callback名称是由jQuery生成的随机名称，现在可以通过jsonpCallback参数显式指定</p>
<p><strong>11、部分CSS相关方法被重写。其中，.css()方法效率有两倍的提升， .addClass()、.removeClass()和.hasClass()效率有三倍的提升。.toggleClass() 方法可以一次切换多个class</strong></p>
<p><span>$(&#8220;div&#8221;).toggleClass(&#8220;current active&#8221;);</span></p>
<p><strong>12、在jQuery 1.4中，许多dom操作相关方法在性能上大幅提升</strong></p>
<p>其中.append()、 .prepend()、.before()、和 .after() 的性能被改善，<br />
.html() 的性能提升了近3倍。<br />
.remove() 和 .empty()的性能提升了近4倍。</p>
<p><strong>13、jQuery(”tag”)效率有所提升</strong></p>
<p>当传入一个tag名称进行寻找时，搜索算法有所改进 。</p>
<p><strong>14、使用id开始的选择器获取元素的速度进一步提升</strong></p>
<p>类似于jQuery(’#id p’)这样以id开始的选择器获取元素的速度有所优化，速度是最快的。</p>
<p><strong>15、jQuery()（或$()）将返回jQuery空对象</strong></p>
<p>在之前当调用jQuery()时，默认返回的是document的jQuery对象，也就是等价于jQuery(’document’)。在1.4版本中将不再做这样的转换，直接返回jQuery空对象。</p>
<p>在1.4中，之前jQuery().ready()的写法不建议使用（虽然仍然可以用），应当写作jQuery(document).ready()或jQuery(function(){})</p>
<p><strong>16、添加了新事件.focusin()和.focusout()</strong></p>
<p>.focusin()和.focusout()方法等价于focus()和blur()方法，不同的是支持事件冒泡。需要注意的是focus()和blur()事件依然不可以通过live()方法绑定。</p>
<p><strong>17、几乎所有事件都支持live()绑定</strong></p>
<p>除了ready、focus（用focusin替代）、blur（用focusout替代）事件外的所有事件都支持live绑定</p>
<p><strong>18、jQuery 1.4对内部结构重新组织，并开始建立代码风格规范</strong></p>
<p>之前的core.js被划分为attribute.js, css.js, data.js, manipulation.js, traversing.js和queue.js。ready事件被移至core.js中。</p>
<p>jQuery 1.4开始建立了代码风格规范，大多数核心代码符合这一规范。虽然这个规范仅有几条，但我相信这是一个良好的开端。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cndong.cn/jquery-1-4-new-features-and-changes-in.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>我们需要的人才:因钻研计算机相关技术而缀学退学者优先考虑!!!</title>
		<link>http://www.cndong.cn/research-computer-technology.html</link>
		<comments>http://www.cndong.cn/research-computer-technology.html#comments</comments>
		<pubDate>Mon, 04 Jan 2010 12:24:32 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[随想&思考]]></category>
		<category><![CDATA[思考]]></category>
		<category><![CDATA[钻研计算机技术]]></category>

		<guid isPermaLink="false">http://www.cndong.cn/wo-men-xu-yao-di-ren-cai-yin-zuan-yan-ji-suan-ji-xiang-guan-ji-shu-er-zhui-xue-tui-xue-zhe-you-xian-kao-lv.html</guid>
		<description><![CDATA[可以说DNSPod现在是国内最大的免费DNS解析产品提供商。今天偶然来到他们的网站,一看他们的招聘,顿时闪亮!也值得我深深的思考思考啊&#8230; 我们需要的人才:因钻研计算机相关技术而缀学退学者优先考虑 钻研计算机技术]]></description>
			<content:encoded><![CDATA[<p>可以说DNSPod现在是国内最大的免费DNS解析产品提供商。今天偶然来到他们的网站,一看他们的招聘,顿时闪亮!也值得我深深的思考思考啊&#8230;</p>
<h3>我们需要的人才:因钻研计算机相关技术而缀学退学者优先考虑</h3>
<div id="attachment_66" class="wp-caption aligncenter" style="width: 510px;"><a href="https://www.dnspod.com/About/Jobs" target="_blank"><img class="size-full wp-image-66 " title="钻研计算机技术" src="http://static.panoramio.com/photos/original/30627207.jpg" alt="钻研计算机技术" width="500" height="1227" /></a>
<p class="wp-caption-text">钻研计算机技术</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.cndong.cn/research-computer-technology.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>2010 新年祝福</title>
		<link>http://www.cndong.cn/2010-new-year-blessing.html</link>
		<comments>http://www.cndong.cn/2010-new-year-blessing.html#comments</comments>
		<pubDate>Fri, 01 Jan 2010 12:50:34 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[生活&乐趣]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[新年祝福]]></category>

		<guid isPermaLink="false">http://www.cndong.cn/2010-new-year-greeting.html</guid>
		<description><![CDATA[2009轻轻地走了,满载着我们奋斗的激情和收获的喜悦渐行渐远,而崭新的2010正踏矫健的步伐向我们走来&#8230; 日照新年生紫烟，遥看幸福挂前川， 飞流直下三千尺，疑是快乐落九天。 横看健康竖平安，远近高低各好运， 不识新年真面目，只缘未阅我博客。 2010 新年祝福 新年祝福 : 祝你心想事成，万事如意！]]></description>
			<content:encoded><![CDATA[<p><strong>2009</strong>轻轻地走了,满载着我们奋斗的激情和收获的喜悦渐行渐远,而崭新的<strong>2010</strong>正踏矫健的步伐向我们走来&#8230;</p>
<h3 style="text-align: center;">日照新年生紫烟，遥看幸福挂前川，<br />
飞流直下三千尺，疑是快乐落九天。<br />
横看健康竖平安，远近高低各好运，<br />
不识新年真面目，只缘未阅我博客。</h3>
<div id="attachment_66" class="wp-caption aligncenter" style="margin-bottom: 12px; width: 460px;"><a target="_blank" href="http://static.panoramio.com/photos/original/30520003.jpg"><img class="size-full wp-image-66 " title="2010 新年祝福" src="http://static.panoramio.com/photos/original/30520003.jpg" alt="2010 新年祝福" width="450" height="281" /></a></p>
<p class="wp-caption-text">2010 新年祝福</p>
</div>
<h2 style="text-align: center;font-weight: bold;">新年祝福 : 祝你心想事成，万事如意！</h2>
]]></content:encoded>
			<wfw:commentRss>http://www.cndong.cn/2010-new-year-blessing.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>一首简单的歌</title>
		<link>http://www.cndong.cn/a-simple-song.html</link>
		<comments>http://www.cndong.cn/a-simple-song.html#comments</comments>
		<pubDate>Mon, 28 Dec 2009 12:37:09 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[生活&乐趣]]></category>
		<category><![CDATA[一首简单的歌]]></category>
		<category><![CDATA[快乐]]></category>

		<guid isPermaLink="false">http://www.cndong.cn/a-simple-song.html</guid>
		<description><![CDATA[新的一年就要来了,手指头扳扳还有3天!时间过得真是快啊,我又长大了一岁,哈哈&#8230; 不想说太多,一首简单的歌:《一首简单的歌》送给自己,简简单单的生活&#8230; 《一首简单的歌》 这世界很复杂 混淆我想说的话 我不懂 太复杂的文法 什么样的礼物 能够永远记得住 让幸福 别走得 太仓促 云和天 蝶和花 从来不需要说话 断不了 依然日夜牵挂 唱情歌 说情话 只想让你听清楚 我爱你 是唯一 的倾诉 写一首简单的歌 让你的心情快乐 爱情就像一条河 难免会碰到波折 这一首简单的歌 并没有什么独特 我一直 在思考 让你了解我的好 却忘了 常常对你微笑 失去的 忘记的 我会尽力去弥补 你是我 最珍贵 的财富 写一首简单的歌 让你的心情快乐 爱情就像一条河 难免会碰到波折 这一首简单的歌 并没有什么独特 好像我 那么的平凡却又深刻 (深刻 简单的歌) 简单的歌 写一首简单的歌 让你的心情快乐 爱情就像一条河 难免会碰到波折 [...]]]></description>
			<content:encoded><![CDATA[<p style="TEXT-ALIGN: center">新的一年就要来了,手指头扳扳还有3天!时间过得真是快啊,我又长大了一岁,哈哈&#8230;<br />
不想说太多,一首简单的歌:《<strong>一首简单的歌</strong>》送给自己,简简单单的生活&#8230;
</p>
<p style="margin:0 auto;TEXT-ALIGN: center">
<embed src="http://www.blogcastone.net/audio/player.swf?soundFile=http%3A%2F%2Fbodyhealthmaxgxl.com%2Fmedia%2Fa-simple-song.mp3&#038;playerID=10&#038;bg=0xeeeeee&#038;leftbg=0x357dce&#038;lefticon=0xFFFFFF&#038;rightbg=0xf06a51&#038;rightbghover=0xaf2910&#038;righticon=0xFFFFFF&#038;righticonhover=0xffffff&#038;text=0x666666&#038;slider=0x666666&#038;track=0xFFFFFF&#038;border=0x666666&#038;loader=0x9FFFB8&#038;loop=no&#038;autostart=yes" type="application/x-shockwave-flash" wmode="transparent" height="40" width="290"></embed>
</p>
<h2 style="text-align: center;"><span style="color:#0589E5;">《一首简单的歌》</span></h2>
<p style="text-align: center;">这世界很复杂 混淆我想说的话<br />
我不懂 太复杂的文法<br />
什么样的礼物 能够永远记得住<br />
让幸福 别走得 太仓促<br />
云和天 蝶和花 从来不需要说话<br />
断不了 依然日夜牵挂<br />
唱情歌 说情话 只想让你听清楚<br />
我爱你 是唯一 的倾诉<br />
<strong>写一首简单的歌 让你的心情快乐</strong><br />
爱情就像一条河 难免会碰到波折<br />
这一首简单的歌 并没有什么独特<br />
我一直 在思考 让你了解我的好<br />
却忘了 常常对你微笑<br />
失去的 忘记的 我会尽力去弥补<br />
你是我 最珍贵 的财富<br />
写一首简单的歌 让你的心情快乐<br />
爱情就像一条河 难免会碰到波折<br />
这一首简单的歌 并没有什么独特<br />
好像我 那么的平凡却又深刻 (深刻 简单的歌)<br />
简单的歌 写一首简单的歌<br />
让你的心情快乐 爱情就像一条河<br />
难免会碰到波折 这一首简单的歌<br />
并没有什么独特 好像我 那么的<strong>平凡却又深刻</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.cndong.cn/a-simple-song.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP 全局变量global详解</title>
		<link>http://www.cndong.cn/php-global-variable-xiangjie.html</link>
		<comments>http://www.cndong.cn/php-global-variable-xiangjie.html#comments</comments>
		<pubDate>Thu, 24 Dec 2009 12:56:07 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[global]]></category>
		<category><![CDATA[全局变量]]></category>

		<guid isPermaLink="false">http://www.cndong.cn/php-global-variable-xiangjie.html</guid>
		<description><![CDATA[开发一个PHP程序，不可避免的要使用到全局数据. 全局变量便是其中之一,当然这个观点颇具争议,有许多人还是建议禁用全局变量,使用不当对造成程序的可读性很差!结构混乱,调试更是一头雾水,但是不可否认他的便捷,这便是php为什么会用全局变量global原因吧!&#8230; 今天就遇到了php 全局变量不起作用的问题. 先上一段简单的代码: &#60;?php $a = 0 ; function Test() { $a =1; } Test(); echo $a; ?&#62; 上面的代码中输出是0,那是因为函数体Test内$a变量被缺省设置为局部变量,$a的作用域就是在Test内.修改代码如下 &#60;?php $a = 0 ; function Test() {  global $a;//申明函数体Test内使用的$a变量为global全局变量  $a =1; } Test(); echo $a; ?&#62; 申明函数体Test内使用的$a变量为global全局变量后,使得$a的作用全局,所以输出为1. 上面的实例只是基本的global全局变量知识,下面我们看看复杂点的: //A.php 文件 &#60;?php function Test_Global() {   include 'B.php';   Test();   }   $a = 0 ; Test_Global(); [...]]]></description>
			<content:encoded><![CDATA[<p>开发一个PHP程序，不可避免的要使用到全局数据.</p>
<p><strong>全局变量</strong>便是其中之一,当然这个观点颇具争议,有许多人还是建议禁用全局变量,使用不当对造成程序的可读性很差!结构混乱,调试更是一头雾水,但是不可否认他的便捷,这便是php为什么会用<strong>全局变量global</strong>原因吧!&#8230;</p>
<p>今天就遇到了php 全局变量不起作用的问题.</p>
<p>先上一段简单的代码:</p>
<pre class="brush: php;">&lt;?php
$a = 0 ;
function Test()
{
$a =1;
}
Test();
echo $a;
?&gt;</pre>
<p>上面的代码中输出是0,那是因为函数体Test内$a变量被缺省设置为局部变量,$a的作用域就是在Test内.修改代码如下</p>
<pre class="brush: php;">&lt;?php
$a = 0 ;
function Test()
{
 global $a;//申明函数体Test内使用的$a变量为global全局变量
 $a =1;
}
Test();
echo $a;
?&gt;</pre>
<p><span id="more-69"></span>申明函数体Test内使用的$a变量为global全局变量后,使得$a的作用全局,所以输出为1.<br />
上面的实例只是基本的global全局变量知识,下面我们看看复杂点的:</p>
<pre class="brush: php;">//A.php 文件

&lt;?php
function Test_Global()
{  
include 'B.php';  
Test();  
}  

$a = 0 ;
Test_Global();
echo $a;
?&gt; 

//B.php 文件

&lt;?php
function Test()
{
 global $a;//申明函数体Sum内使用的$a变量为global全局变量
 $a =1;
}
?&gt;</pre>
<p><strong> 为什么输出的却是0?!!</strong></p>
<p>在用户自定义函数中，一个局部函数范围将被引入。<strong>任何用于函数内部的变量按缺省情况将被限制在局部函数范围内(包括include 和 require 导入的文件内的变量)!<br />
</strong>解释:A.php文件的内Test_Global是定义好的第三方函数,该函数用include导入了B.php文件内的$a的global全局变量,所以<strong>$a被限制在Test_Global局部函数范围内</strong>,所以B.php文件内的$a的作用范围都在Test_Global内,而不是作用了整个A.php内&#8230;.</p>
<h3>解决方案:</h3>
<h4>1. 冲出局部函数</h4>
<pre class="brush: php;"> //A.php 文件

&lt;?php
function Test_Global()
{  
Test();  
}  
include 'B.php';   //将include 从局部Test_Global函数中移出
$a = 0 ;
Test_Global();
echo $a;
?&gt; 

//B.php 文件

&lt;?php
function Test()
{
 global $a;
 $a =1;
}
 ?&gt;</pre>
<h4>2.优秀的访问器</h4>
<pre class="brush: php;"> //A.php 文件</pre>
<pre class="brush: php;">&lt;?php
include 'B.php'; 
$a =0;
Set_Global($a);
echo $a;
?&gt; 

//B.php 文件

&lt;?php
function Set_Global(&amp;$var)
{
   $var=1;
}
 ?&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.cndong.cn/php-global-variable-xiangjie.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>2009 快乐圣诞节</title>
		<link>http://www.cndong.cn/happy-christmas-2009.html</link>
		<comments>http://www.cndong.cn/happy-christmas-2009.html#comments</comments>
		<pubDate>Mon, 21 Dec 2009 11:48:39 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[生活&乐趣]]></category>
		<category><![CDATA[2009 圣诞节]]></category>
		<category><![CDATA[向东而立]]></category>
		<category><![CDATA[快乐]]></category>

		<guid isPermaLink="false">http://www.cndong.cn/happy-christmas-2009.html</guid>
		<description><![CDATA[2009年的圣诞节就要到了,不是因为我突然对西方最重要的节日感冒,而是我们公司做的就是外包,而且是即时服务&#8230;.所以圣诞节一到,我们也可以趁着西方的假日好好休息一段时间啦&#8230; 西方人以红、绿、白三色为圣诞色，圣诞节来临时家家户户都要用圣诞色来装饰。红色的有圣诞花和圣诞蜡烛。绿色的是圣诞树。它是圣诞节的主要装饰品，用砍伐来的杉、柏一类呈塔形的常青树装饰而成。上面悬挂着五颜六色的彩灯、礼物和纸花，还点燃着圣诞蜡烛。 哈哈,真是个快乐的节日啊! 想想我的圣诞节啊,怎么过啊??? 好好筹备规划下&#8230;]]></description>
			<content:encoded><![CDATA[<p><strong> 2009年的圣诞节</strong>就要到了,不是因为我突然对西方最重要的节日感冒,而是我们公司做的就是外包,而且是即时服务&#8230;.所以圣诞节一到,我们也可以趁着西方的假日好好休息一段时间啦&#8230;</p>
<div id="attachment_66" class="wp-caption aligncenter" style="width: 460px"><a target="_blank" href="http://static.panoramio.com/photos/original/30488060.jpg"><img class="size-full wp-image-66 " title="Happy Christmas 2009" src="http://static.panoramio.com/photos/original/30488060.jpg" alt="happy-christmas-2009" width="450" height="338" /></a><p class="wp-caption-text">Happy Christmas 2009</p></div>
<p><span id="more-65"></span>西方人以红、绿、白三色为圣诞色，圣诞节来临时家家户户都要用圣诞色来装饰。红色的有圣诞花和圣诞蜡烛。绿色的是圣诞树。它是圣诞节的主要装饰品，用砍伐来的杉、柏一类呈塔形的常青树装饰而成。上面悬挂着五颜六色的彩灯、礼物和纸花，还点燃着圣诞蜡烛。</p>
<div id="attachment_68" class="wp-caption aligncenter" style="width: 460px"><a rel="attachment wp-att-68" href="http://www.cndong.cn/happy-christmas-2009.html/happy-christmas"><img class="size-full wp-image-68" title="Happy Christmas" src="http://static.panoramio.com/photos/original/30488312.jpg" alt="happy-christmas" width="450" height="335" /></a><p class="wp-caption-text">Happy Christmas</p></div>
<p style="text-align: center;">哈哈,真是个快乐的节日啊! 想想我的圣诞节啊,怎么过啊??? 好好筹备规划下&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cndong.cn/happy-christmas-2009.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPress 2.9 正式版发布</title>
		<link>http://www.cndong.cn/wordpress-2-9-official-release.html</link>
		<comments>http://www.cndong.cn/wordpress-2-9-official-release.html#comments</comments>
		<pubDate>Sun, 20 Dec 2009 11:59:03 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[CMS]]></category>

		<guid isPermaLink="false">http://www.cndong.cn/wordpress-2-9-official-release.html</guid>
		<description><![CDATA[WordPress是一个注重美学、易用性和网络标准的个人信息发布平台.虽为免费的开源软件,但其价值是无法用金钱来衡量.针对博客的应用,WordPress能让您省却对后台技术的担心,集中精力做好网站的内容. WordPress今年更是夺得了2009年度开源CMS大奖(2009 Open Source CMS Award). 下面来看看WordPress 2.9新功能: 1. 垃圾回收站功能 后台的文章，页面和留言编辑面板里，增加了一个”Trash“选项。被Trash后的数据将进入回收站列表，然后可以选择恢复(Restore)或永久删除(Delete Permanently)。 2. 内置的图片编辑器 内置了一个图片编辑器，挺强大的。支持对图片的裁剪、顺/逆时针旋转和水平/垂直镜像图片翻转，并且，你可以选择对图片的编辑最终生效于该图片的所有尺寸、缩略图还是除缩略图以外的其它尺寸。 3. 批量插件更新功能 在”工具-&#62;更新“里面，多了一个批量插件更新功能，你可以一次更新多个插件至最新版本。 4. 更简易的视频嵌入功能 这一功能主要方便用户嵌入在线视频或图片网站中的视频和图片。你只需要在文章编辑器中输入视频页面的URL地址，生成的前台文章即会显示该视频。相当于你以前从某个视频网站转视频，需要复制该视频的转贴代码，而现在，只需要输入该视频的访问网址即可。 WordPress 2.9的这些新功能再一次升级了在我心中的地位。]]></description>
			<content:encoded><![CDATA[<p><strong>WordPress</strong>是一个注重美学、易用性和网络标准的个人信息发布平台.虽为免费的开源软件,但其价值是无法用金钱来衡量.针对博客的应用,WordPress能让您省却对后台技术的担心,集中精力做好网站的内容.</p>
<p><strong>WordPress</strong>今年更是夺得了<strong><a title="2009年度开源CMS大奖" href="http://www.cndong.cn/2009-open-source-cms-award.html" target="_blank">2009年度开源CMS大奖(2009 Open Source CMS Award).</a></strong></p>
<h3>下面来看看WordPress 2.9新功能:</h3>
<h4>1. 垃圾回收站功能</h4>
<p>后台的文章，页面和留言编辑面板里，增加了一个”Trash“选项。被Trash后的数据将进入回收站列表，然后可以选择恢复(Restore)或永久删除(Delete Permanently)。</p>
<h4>2. 内置的图片编辑器</h4>
<p>内置了一个图片编辑器，挺强大的。支持对图片的裁剪、顺/逆时针旋转和水平/垂直镜像图片翻转，并且，你可以选择对图片的编辑最终生效于该图片的所有尺寸、缩略图还是除缩略图以外的其它尺寸。<span id="more-9"></span></p>
<h4>3. 批量插件更新功能</h4>
<p>在”工具-&gt;更新“里面，多了一个批量插件更新功能，你可以一次更新多个插件至最新版本。</p>
<h4>4. 更简易的视频嵌入功能</h4>
<p>这一功能主要方便用户嵌入在线视频或图片网站中的视频和图片。你只需要在文章编辑器中输入视频页面的URL地址，生成的前台文章即会显示该视频。相当于你以前从某个视频网站转视频，需要复制该视频的转贴代码，而现在，只需要输入该视频的访问网址即可。</p>
<p><strong>WordPress 2.9</strong>的这些新功能再一次升级了在我心中的地位。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cndong.cn/wordpress-2-9-official-release.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

