<?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.aifou.net/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.aifou.net</link>
	<description>PHP程序开发学习，网页游戏开发学习，AS2.0学习，FMS学习，AS3.0学习,DIV+CSS学习，jQuery学习。。。</description>
	<lastBuildDate>Thu, 19 Aug 2010 08:48:19 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>隐藏或屏蔽IE滚动条</title>
		<link>http://www.aifou.net/?p=418</link>
		<comments>http://www.aifou.net/?p=418#comments</comments>
		<pubDate>Thu, 19 Aug 2010 08:47:23 +0000</pubDate>
		<dc:creator>简单小屋</dc:creator>
				<category><![CDATA[DIV+CSS]]></category>
		<category><![CDATA[其他]]></category>
		<category><![CDATA[收集]]></category>

		<guid isPermaLink="false">http://www.aifou.net/?p=418</guid>
		<description><![CDATA[1、完全隐藏
在&#60;boby&#62;里加入scroll=&#8221;no&#8221;，可隐藏滚动条；
&#60;boby scroll=&#8221;no&#8221;&#62;
2、在不需要时隐藏
指当浏览器窗口宽度或高度大于页面的宽或高时，不显示滚动条；反之，则显示；
&#60;boby scroll=&#8221;auto&#8221;&#62;
3、样式表方法
在&#60;boby&#62;里加入style=&#8221;overflow-x:hidden&#8221;，可隐藏水平滚动条；加入style=&#8221;overflow-y:hidden&#8221;，可隐藏垂直滚动条。
这种方法在页面头部为：&#60;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD XHTML 1.0 Transitional//EN&#8221; &#8220;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#8221;&#62;这种兼容模式下是不行的，其它的没试过，最后终于找到了正确的方法：
被包含页面里加入
&#60;style&#62;
html { overflow-x:hidden; }
&#60;/style&#62;
有一段解释是这样说的：body{ overflow-x:hidden; }在标准 DTD 下是不可以的。
4、另一种方法
&#60;style type=&#8221;text/css&#8221;&#62;
body {
overflow-x:hidden; /*隐藏水平滚动条*/
overflow-y:hidden; /*隐藏水平滚动条*/
}
&#60;/style&#62;
此方法在页面头部为：&#60;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD XHTML 1.0 Transitional//EN&#8221; &#8220;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#8221;&#62;这种兼容模式下也是不行的。
&#60;style type=&#8221;text/css&#8221;&#62;
html {
overflow-x:hidden; /*隐藏水平滚动条*/
overflow-y:hidden; /*隐藏水平滚动条*/
}
&#60;/style&#62;
定义在html里就好了。
]]></description>
			<content:encoded><![CDATA[<p>1、完全隐藏<br />
在&lt;boby&gt;里加入scroll=&#8221;no&#8221;，可隐藏滚动条；<br />
&lt;boby scroll=&#8221;no&#8221;&gt;<br />
2、在不需要时隐藏<br />
指当浏览器窗口宽度或高度大于页面的宽或高时，不显示滚动条；反之，则显示；<br />
&lt;boby scroll=&#8221;auto&#8221;&gt;<span id="more-418"></span><br />
3、样式表方法<br />
在&lt;boby&gt;里加入style=&#8221;overflow-x:hidden&#8221;，可隐藏水平滚动条；加入style=&#8221;overflow-y:hidden&#8221;，可隐藏垂直滚动条。<br />
这种方法在页面头部为：&lt;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD XHTML 1.0 Transitional//EN&#8221; &#8220;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#8221;&gt;这种兼容模式下是不行的，其它的没试过，最后终于找到了正确的方法：<br />
被包含页面里加入<br />
&lt;style&gt;<br />
html { overflow-x:hidden; }<br />
&lt;/style&gt;<br />
有一段解释是这样说的：body{ overflow-x:hidden; }在标准 DTD 下是不可以的。<br />
4、另一种方法<br />
&lt;style type=&#8221;text/css&#8221;&gt;<br />
body {<br />
overflow-x:hidden; /*隐藏水平滚动条*/<br />
overflow-y:hidden; /*隐藏水平滚动条*/<br />
}<br />
&lt;/style&gt;<br />
此方法在页面头部为：&lt;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD XHTML 1.0 Transitional//EN&#8221; &#8220;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#8221;&gt;这种兼容模式下也是不行的。<br />
&lt;style type=&#8221;text/css&#8221;&gt;<br />
html {<br />
overflow-x:hidden; /*隐藏水平滚动条*/<br />
overflow-y:hidden; /*隐藏水平滚动条*/<br />
}<br />
&lt;/style&gt;<br />
定义在html里就好了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aifou.net/?feed=rss2&amp;p=418</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AS3包(Package)写法</title>
		<link>http://www.aifou.net/?p=414</link>
		<comments>http://www.aifou.net/?p=414#comments</comments>
		<pubDate>Wed, 18 Aug 2010 12:12:27 +0000</pubDate>
		<dc:creator>简单小屋</dc:creator>
				<category><![CDATA[AS3.0]]></category>
		<category><![CDATA[as3包]]></category>
		<category><![CDATA[as3学习]]></category>
		<category><![CDATA[Package]]></category>

		<guid isPermaLink="false">http://www.aifou.net/?p=414</guid>
		<description><![CDATA[           包主要用于组织管理类。包是根据类所在的目录路径所构成的，并可以嵌套多层。包名所指的是一个真正存在的文件夹，用 “.”进行分隔。例如，有一个名为 Utils 的类，存在于文件夹 com/ friendsofed/ makingthingsmove/ 中（使用域名作为包名是一个不成文的规定，目的是保证包名是唯一的）。这个类就被写成 com.friendsofed.makingthingsmove.Utils。
            在 AS 2 中，使用整个包名来创建一个类，例如：class com.friendsofed.makingthingsmove.Utils { }
            在 AS 3 中，包名写在包的声名处，类名写类的声名处，例如： package com.friendsofed.makingthingsmove{ public class Utils { } }
]]></description>
			<content:encoded><![CDATA[<p>           包主要用于组织管理类。包是根据类所在的目录路径所构成的，并可以嵌套多层。包名所指的是一个真正存在的文件夹，用 “.”进行分隔。例如，有一个名为 Utils 的类，存在于文件夹 com/ friendsofed/ makingthingsmove/ 中（使用域名作为包名是一个不成文的规定，目的是保证包名是唯一的）。这个类就被写成 com.friendsofed.makingthingsmove.Utils。<br />
            在 AS 2 中，使用整个包名来创建一个类，例如：class com.friendsofed.makingthingsmove.Utils { }<br />
            在 AS 3 中，包名写在包的声名处，类名写类的声名处，例如： package com.friendsofed.makingthingsmove{ public class Utils { } }</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aifou.net/?feed=rss2&amp;p=414</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>解决dedecms栏目内容保存没用</title>
		<link>http://www.aifou.net/?p=412</link>
		<comments>http://www.aifou.net/?p=412#comments</comments>
		<pubDate>Sat, 10 Jul 2010 03:56:21 +0000</pubDate>
		<dc:creator>简单小屋</dc:creator>
				<category><![CDATA[其他]]></category>

		<guid isPermaLink="false">http://www.aifou.net/?p=412</guid>
		<description><![CDATA[找到include/FCKeditor/editor/js/fckeditorcode_ie.js文件，再查的以下代码
{if (FCK.EditorDocument.body.childNodes.length==1&#38;&#38;FCK.EditorDocument.body.firstChild==D){
/*
从这里开始插入。。
*/
if ( FCKSelection._GetSelectionDocument( FCK.EditorDocument.selection ) !=
FCK.EditorDocument ) { return; };
/*
结束
*/
var B=FCK.EditorDocument.body.createTextRange();
 
改好了关闭浏览器重新登陆，就可以保存了
]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;">找到include/FCKeditor/editor/js/fckeditorcode_ie.js文件，再查的以下代码</span></p>
<p><span style="color: #ff0000;">{if (FCK.EditorDocument.body.childNodes.length==1&amp;&amp;FCK.EditorDocument.body.firstChild==D){</span></p>
<p>/*</p>
<p>从这里开始插入。。<br />
*/<br />
if ( FCKSelection._GetSelectionDocument( FCK.EditorDocument.selection ) !=<br />
FCK.EditorDocument ) { return; };<br />
/*</p>
<p>结束</p>
<p>*/</p>
<p><span style="color: #ff0000;">var B=FCK.EditorDocument.body.createTextRange();</span></p>
<p><span style="color: #ff0000;"> </span></p>
<p><span style="color: #ff0000;">改好了关闭浏览器重新登陆，就可以保存了</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.aifou.net/?feed=rss2&amp;p=412</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>解决gb编码中使用json_decode()中文转换中变成空（null）</title>
		<link>http://www.aifou.net/?p=409</link>
		<comments>http://www.aifou.net/?p=409#comments</comments>
		<pubDate>Sun, 13 Jun 2010 06:21:07 +0000</pubDate>
		<dc:creator>简单小屋</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[gb中文转json_decode()]]></category>
		<category><![CDATA[json_decode()编码问题]]></category>
		<category><![CDATA[json_encode()]]></category>

		<guid isPermaLink="false">http://www.aifou.net/?p=409</guid>
		<description><![CDATA[好像用json_decode()将数组/对象 序列化为JSON字符串的时候基本上只支持 UTF-8/ASCII编码。而我们有的站采用了GBK/GB2312编码，这个时候，直接使用json_encode/json_decode的时候就可能会出问题了。比如转含有中文的字符字变成空（null），但有时候我们又必须得用gb编码而又要用到json_decode()转换的时候呢？什么办呢？自己昨晚写了一个不用数据库的一个添加音乐的小后台。也就是用php添加音乐，然后生成xml菜单。不用数据库那也得用一个方式来保存数据了。保存成文本的数据再可以直接拿出来用的，我想是把数组json_decode()用它转成json格式，用的时候再拿出来用它json_encode转回数组就可以了（可能最近弄js被json影响了，好像把数组序列化还有更好的方法，比如用：serialize()和unserialize()），呵呵，转正题。既然json_decode()在gb编码上转不了中文，那么我们可以先把中文转成英文编码的形式。那可以使用这个urlencode()转一下编码，再做json_decode()转换。使用的时候，再用urldecode()转成中文就可以了。
]]></description>
			<content:encoded><![CDATA[<p>好像用json_decode()将数组/对象 序列化为JSON字符串的时候基本上只支持 UTF-8/ASCII编码。而我们有的站采用了GBK/GB2312编码，这个时候，直接使用json_encode/json_decode的时候就可能会出问题了。比如转含有中文的字符字变成空（null），但有时候我们又必须得用gb编码而又要用到json_decode()转换的时候呢？什么办呢？自己昨晚写了一个不用数据库的一个添加音乐的小后台。也就是用php添加音乐，然后生成xml菜单。不用数据库那也得用一个方式来保存数据了。保存成文本的数据再可以直接拿出来用的，我想是把数组json_decode()用它转成json格式，用的时候再拿出来用它json_encode转回数组就可以了（可能最近弄js被json影响了，好像把数组序列化还有更好的方法，比如用：serialize()和unserialize()），呵呵，转正题。既然json_decode()在gb编码上转不了中文，那么我们可以先把中文转成英文编码的形式。那可以使用这个urlencode()转一下编码，再做json_decode()转换。使用的时候，再用urldecode()转成中文就可以了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aifou.net/?feed=rss2&amp;p=409</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>css中的单位</title>
		<link>http://www.aifou.net/?p=405</link>
		<comments>http://www.aifou.net/?p=405#comments</comments>
		<pubDate>Sun, 06 Jun 2010 17:18:23 +0000</pubDate>
		<dc:creator>简单小屋</dc:creator>
				<category><![CDATA[DIV+CSS]]></category>
		<category><![CDATA[cm]]></category>
		<category><![CDATA[css长度单位]]></category>
		<category><![CDATA[em]]></category>
		<category><![CDATA[ex]]></category>
		<category><![CDATA[in]]></category>
		<category><![CDATA[mm]]></category>
		<category><![CDATA[pc]]></category>
		<category><![CDATA[pt]]></category>
		<category><![CDATA[px]]></category>

		<guid isPermaLink="false">http://www.aifou.net/?p=405</guid>
		<description><![CDATA[CSS中定义的长度单位有两种，相对长度和绝对长度。相对长度单位主要有： 
* em (em，元素的字体的高度) 
* ex (x-height，字母 &#8221;x&#8221; 的高度) 
* px (像素，相对于屏幕的分辨率) 
绝对长度单位主要有： 
* in (英寸，1英寸=2.54厘米) 
* cm (厘米，1厘米=10毫米) 
* mm (米) 
* pt (点，1点=1/72英寸) 
* pc (帕，1帕=12点)  
使用px和em主要优缺点如下： 
1. IE无法调整那些使用px作为单位的字体大小，而firefox能够调整使用px和em作为单位的字体； 
2. 任意浏览器的默认字体高都是16px。所有未经调整的浏览器都符合： 1em=16px。那么12px=0.75em,10px=0.625em。为了简化font-size的换算，需要在css中的body选择器中声明 Font-size=62.5%，这就使em值变为 16px*62.5%=10px, 这样12px=1.2em, 10px=1em, 也就是说只需要将你的原来的px数值除以10，然后换上em作为单位就行了。 
em有如下特点： 
1. em的值并不是固定的； 
2. em会继续父级元素的字体大小。 
所以我们在写CSS的时候，需要注重两点： 
1. body选择器中声明Font-size=62.5%； 
2. 将你的原来的px数值除以10，然后换上em作为单位； 
3. 重新计算那些被放大的字体的em数值。避免字体大小的重复声明。 
也就是避免1.2 * 1.2= 1.44的现象。比如说你在#content中声明了字体大小为1.2em，那么在声明p的字体大小时就只能是1em，而不是1.2em, 因为此em非彼em，它因继续#content的字体高而变为了1em=12px。 
但是12px汉字例外，就是由以上方法得到的12px(1.2em)大小的汉字在IE中并不等于直接用 12px定义的字体大小，而是稍大一点。这个问题 Jorux已经解决，只需在body选择器中把62.5%换成63%就能正常显示了。原因可能是IE处理汉字时，对于浮点的取值精确度有限。不知道有没有 其他的解释。
]]></description>
			<content:encoded><![CDATA[<p>CSS中定义的长度单位有两种，相对长度和绝对长度。相对长度单位主要有： <br />
* em (em，元素的字体的高度) <br />
* ex (x-height，字母 &#8221;x&#8221; 的高度) <br />
* px (像素，相对于屏幕的分辨率) <br />
绝对长度单位主要有： <br />
* in (英寸，1英寸=2.54厘米) <br />
* cm (厘米，1厘米=10毫米) <br />
* mm (米) <br />
* pt (点，1点=1/72英寸) <br />
* pc (帕，1帕=12点)  <span id="more-405"></span></p>
<p>使用px和em主要优缺点如下： <br />
1. IE无法调整那些使用px作为单位的字体大小，而firefox能够调整使用px和em作为单位的字体； <br />
2. 任意浏览器的默认字体高都是16px。所有未经调整的浏览器都符合： 1em=16px。那么12px=0.75em,10px=0.625em。为了简化font-size的换算，需要在css中的body选择器中声明 Font-size=62.5%，这就使em值变为 16px*62.5%=10px, 这样12px=1.2em, 10px=1em, 也就是说只需要将你的原来的px数值除以10，然后换上em作为单位就行了。 </p>
<p>em有如下特点： </p>
<p>1. em的值并不是固定的； <br />
2. em会继续父级元素的字体大小。 </p>
<p>所以我们在写CSS的时候，需要注重两点： <br />
1. body选择器中声明Font-size=62.5%； <br />
2. 将你的原来的px数值除以10，然后换上em作为单位； <br />
3. 重新计算那些被放大的字体的em数值。避免字体大小的重复声明。 </p>
<p>也就是避免1.2 * 1.2= 1.44的现象。比如说你在#content中声明了字体大小为1.2em，那么在声明p的字体大小时就只能是1em，而不是1.2em, 因为此em非彼em，它因继续#content的字体高而变为了1em=12px。 </p>
<p>但是12px汉字例外，就是由以上方法得到的12px(1.2em)大小的汉字在IE中并不等于直接用 12px定义的字体大小，而是稍大一点。这个问题 Jorux已经解决，只需在body选择器中把62.5%换成63%就能正常显示了。原因可能是IE处理汉字时，对于浮点的取值精确度有限。不知道有没有 其他的解释。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aifou.net/?feed=rss2&amp;p=405</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql数据库分组（GROUP BY）</title>
		<link>http://www.aifou.net/?p=403</link>
		<comments>http://www.aifou.net/?p=403#comments</comments>
		<pubDate>Fri, 04 Jun 2010 10:39:26 +0000</pubDate>
		<dc:creator>简单小屋</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[group by]]></category>
		<category><![CDATA[mysql分组]]></category>
		<category><![CDATA[数据库分组]]></category>

		<guid isPermaLink="false">http://www.aifou.net/?p=403</guid>
		<description><![CDATA[经常会忘记，在这里记一下
SELECT *
FROM `数据表`
GROUP BY `分组的字段`
LIMIT 0 , 30
 
例：（查询dedecms（织梦）程序的栏目标题表，以栏目id分组）


SELECT *
FROM `dede_archives`
GROUP BY `typeid`
LIMIT 0 , 30


]]></description>
			<content:encoded><![CDATA[<div>经常会忘记，在这里记一下</div>
<div>SELECT *<br />
FROM `数据表`<br />
GROUP BY `分组的字段`<br />
LIMIT 0 , 30</div>
<div> <span id="more-403"></span></div>
<div>例：（查询dedecms（织梦）程序的栏目标题表，以栏目id分组）</div>
<div>
<div>
<div>SELECT *<br />
FROM `dede_archives`<br />
GROUP BY `typeid`<br />
LIMIT 0 , 30</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.aifou.net/?feed=rss2&amp;p=403</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php实现当前用户在线人数</title>
		<link>http://www.aifou.net/?p=397</link>
		<comments>http://www.aifou.net/?p=397#comments</comments>
		<pubDate>Wed, 02 Jun 2010 17:42:54 +0000</pubDate>
		<dc:creator>简单小屋</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[收集]]></category>
		<category><![CDATA[php在线个数]]></category>
		<category><![CDATA[php在线人数]]></category>
		<category><![CDATA[php用户在线]]></category>

		<guid isPermaLink="false">http://www.aifou.net/?p=397</guid>
		<description><![CDATA[网络收集了一下，以后会用到
原理：根据不同的IP统计出当前有多少人在线。
实现方式：可以用数据库，也可以用文本。
我这里用了文本实现。
&#60;?php
/**
*@ Date         2010.04.07
*@ Author       华夏之星 PHP100。com
*@ Blog         http：//hi。baidu。com/woaidelphi/blog
*/
$user_online = &#8220;count.php&#8221;; //保存人数的文件
touch($user_online);//如果没有此文件，则创建
$timeout = 30;//30秒内没动作者,认为掉线
$user_arr = file_get_contents($user_online);
$user_arr = explode(&#8216;#&#8217;,rtrim($user_arr,&#8217;#'));print_r($user_arr);
$temp = array();
foreach($user_arr as $value){
$user = explode(&#8220;,&#8221;,trim($value));
if (($user[0] != getenv(&#8216;REMOTE_ADDR&#8217;)) &#38;&#38; ($user[1] &#62; time())) {//如果不是本用户IP并时间没有超时则放入到数组中
array_push($temp,$user[0].&#8221;,&#8221;.$user[1]);
}
}
array_push($temp,getenv(&#8216;REMOTE_ADDR&#8217;).&#8221;,&#8221;.(time() + ($timeout)).&#8217;#'); //保存本用户的信息
$user_arr = implode(&#8220;#&#8221;,$temp);
//写入文件
$fp = fopen($user_online,&#8221;w&#8221;);
flock($fp,LOCK_EX); //flock() 不能在NFS以及其他的一些网络文件系统中正常工作
fputs($fp,$user_arr);
flock($fp,LOCK_UN);
fclose($fp);
echo &#8220;当前有&#8221;.count($temp).&#8221;人在线&#8221;;
?&#62;
]]></description>
			<content:encoded><![CDATA[<p>网络收集了一下，以后会用到</p>
<p><span style="color: #660000;">原理：根据不同的IP统计出当前有多少人在线。<br />
</span>实现方式：可以用数据库，也可以用文本。<br />
我这里用了文本实现。<br />
&lt;?php<br />
/**<br />
*@ Date         2010.04.07<br />
*@ Author       华夏之星 PHP100。com<br />
*@ Blog         http：//hi。baidu<span style="color: #000000;">。</span>com/woaidelphi/blog<br />
*/<br />
$user_online = &#8220;count.php&#8221;; //保存人数的文件<br />
touch($user_online);//如果没有此文件，则创建<br />
$timeout = 30;//30秒内没动作者,认为掉线<br />
$user_arr = file_get_contents($user_online);<br />
$user_arr = explode(&#8216;#&#8217;,rtrim($user_arr,&#8217;#'));print_r($user_arr);<br />
$temp = array();<span id="more-397"></span><br />
foreach($user_arr as $value){<br />
$user = explode(&#8220;,&#8221;,trim($value));<br />
if (($user[0] != getenv(&#8216;REMOTE_ADDR&#8217;)) &amp;&amp; ($user[1] &gt; time())) {//如果不是本用户IP并时间没有超时则放入到数组中<br />
array_push($temp,$user[0].&#8221;,&#8221;.$user[1]);<br />
}<br />
}<br />
array_push($temp,getenv(&#8216;REMOTE_ADDR&#8217;).&#8221;,&#8221;.(time() + ($timeout)).&#8217;#'); //保存本用户的信息<br />
$user_arr = implode(&#8220;#&#8221;,$temp);<br />
//写入文件<br />
$fp = fopen($user_online,&#8221;w&#8221;);<br />
flock($fp,LOCK_EX); //flock() 不能在NFS以及其他的一些网络文件系统中正常工作<br />
fputs($fp,$user_arr);<br />
flock($fp,LOCK_UN);<br />
fclose($fp);<br />
echo &#8220;当前有&#8221;.count($temp).&#8221;人在线&#8221;;<br />
?&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aifou.net/?feed=rss2&amp;p=397</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>文件上传后缀名与文件类型对照表</title>
		<link>http://www.aifou.net/?p=393</link>
		<comments>http://www.aifou.net/?p=393#comments</comments>
		<pubDate>Wed, 02 Jun 2010 17:31:38 +0000</pubDate>
		<dc:creator>简单小屋</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[php上传后缀名]]></category>
		<category><![CDATA[php上传处理]]></category>
		<category><![CDATA[php上传注意事项]]></category>
		<category><![CDATA[php文件上传格式类型]]></category>

		<guid isPermaLink="false">http://www.aifou.net/?p=393</guid>
		<description><![CDATA[　网上有很多php文件上传的类，文件上传处理是php的一个特色(至少手册上是将此作为php特点来展示的,个人认为php在数组方面的优异功能更有特色)，学php的人都知道文件上传怎么做，但很多人在编程中却可能忽视了一些细节问题，那就是文件的类型(MIME)。在表单将文件提交给php做处理之前，浏览器会先解析识别一边是什么类型的文件，之后进入php处理环节，php又会去识别解析此文件的原始类型(并不是说你改成什么后缀就是什么文件)。在这个过程中会有一些浏览器兼容，更准确来说是文件类型解析标识不一致的问题。这样在php处理Post过来的文件类型时就需要根据不同浏览器做更多的判断，最典型的就是IE和火狐下的区别。 
　　php上传图片文件(gif,jpg,bmp,png,psd,ico)
　　php上传压缩文件(rar,7z,zip)
　　php上传可执行文件(exe)
　　php上传视频文件,音乐文件,歌词文件(avi,rmvb,3gp,flv,mp3,wav,krc,lrc)
　　php上传文本文件和文档文件(word-&#62;doc,excel-&#62;xls,幻灯片-&#62;ppt,pdf,chm)
　　php上传数据库文件(access文件,sql文件,con文件,日志文件log, dat文件)
　　php上传网页文件,脚本文件,字体文件(ini,php,html,htm,字体文件：ttf,fon, js ,xml)
　　php上传其他文件(class类文件,dll动态加载库文件)
史上最完全oophper亲测版php文件上传之文件类型对应表，ie，火狐各一份。



ie
火狐


 




id
后缀名
php识别出的文件类型




0
gif
image/gif


1
jpg
image/pjpeg


2
png
image/x-png


3
bmp
image/bmp


4
psd
application/octet-stream


5
ico
image/x-icon


6
rar
application/octet-stream


7
zip
application/x-zip-compressed


8
7z
application/octet-stream


9
exe
application/octet-stream


10
avi
video/avi


11
rmvb
application/vnd.rn-realmedia-vbr


12
3gp
application/octet-stream


13
flv
application/octet-stream


14
mp3
audio/mpeg


15
wav
audio/wav


16
krc
application/octet-stream


17
lrc
application/octet-stream


18
txt
text/plain


19
doc
application/msword


20
xls
application/vnd.ms-excel


21
ppt
application/vnd.ms-powerpoint


22
pdf
application/pdf


23
chm
application/octet-stream


24
mdb
application/msaccess


25
sql
text/plain


26
con
application/octet-stream


27
log
text/plain


28
dat
text/plain


29
ini
application/octet-stream


30
php
application/octet-stream


31
html
text/html


32
htm
text/html


33
ttf
application/octet-stream


34
fon
application/octet-stream


35
js
text/html


36
xml
text/xml


37
dll
application/octet-stream


38
class
application/java







 
  

* application/octet-stream //应用程序
323 text/h323
acx application/internet-property-stream
ai application/postscript
aif audio/x-aiff
aifc audio/x-aiff
aiff audio/x-aiff
asf video/x-ms-asf
asr video/x-ms-asf
asx video/x-ms-asf
au audio/basic
avi video/x-msvideo
axs application/olescript
bas text/plain
bcpio application/x-bcpio
bin application/octet-stream
bmp image/bmp
c text/plain
cat application/vnd.ms-pkiseccat
cdf application/x-cdf
cer application/x-x509-ca-cert
class application/octet-stream
clp application/x-msclip
cmx image/x-cmx
cod image/cis-cod
cpio application/x-cpio
crd application/x-mscardfile
crl application/pkix-crl
crt application/x-x509-ca-cert
csh application/x-csh
css text/css
dcr application/x-director
der application/x-x509-ca-cert
dir application/x-director
dll application/x-msdownload
dms application/octet-stream
doc application/msword
dot application/msword
dvi application/x-dvi
dxr application/x-director
eps application/postscript
etx text/x-setext
evy application/envoy
exe application/octet-stream
fif application/fractals
flr x-world/x-vrml
gif image/gif
gtar application/x-gtar
gz application/x-gzip
h [...]]]></description>
			<content:encoded><![CDATA[<p>　网上有很多php文件上传的类，文件上传处理是php的一个特色(至少手册上是将此作为php特点来展示的,个人认为php在数组方面的优异功能更有特色)，学php的人都知道文件上传怎么做，但很多人在编程中却可能忽视了一些细节问题，那就是文件的类型(MIME)。在表单将文件提交给php做处理之前，浏览器会先解析识别一边是什么类型的文件，之后进入php处理环节，php又会去识别解析此文件的原始类型(并不是说你改成什么后缀就是什么文件)。在这个过程中会有一些浏览器兼容，更准确来说是文件类型解析标识不一致的问题。这样在php处理Post过来的文件类型时就需要根据不同浏览器做更多的判断，最典型的就是IE和火狐下的区别。 <span id="more-393"></span></p>
<p><span style="color: #343434;"><span style="color: #000000;">　　php上传图片文件(gif,jpg,bmp,png,psd,ico)</span></span></p>
<p><span style="color: #343434;"><span style="color: #000000;">　　php上传压缩文件(rar,7z,zip)</span></span></p>
<p>　　php上传可执行文件(exe)</p>
<p>　　php上传视频文件,音乐文件,歌词文件(avi,rmvb,3gp,flv,mp3,wav,krc,lrc)</p>
<p>　　php上传文本文件和文档文件(word-&gt;doc,excel-&gt;xls,幻灯片-&gt;ppt,pdf,chm)</p>
<p>　　php上传数据库文件(access文件,sql文件,con文件,日志文件log, dat文件)</p>
<p>　　php上传网页文件,脚本文件,字体文件(ini,php,html,htm,字体文件：ttf,fon, js ,xml)</p>
<p>　　php上传其他文件(class类文件,dll动态加载库文件)</p>
<p>史上最完全oophper亲测版php文件上传之文件类型对应表，ie，火狐各一份。</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%" bordercolor="#000000">
<tbody>
<tr>
<td align="center">ie</td>
<td align="center">火狐</td>
</tr>
<tr>
<td align="center"> </td>
<td align="center">
<table border="1" cellspacing="1" cellpadding="1" width="100%" bordercolor="#000000">
<thead>
<tr>
<th>id</th>
<th>后缀名</th>
<th>php识别出的文件类型</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>gif</td>
<td>image/gif</td>
</tr>
<tr>
<td>1</td>
<td>jpg</td>
<td>image/pjpeg</td>
</tr>
<tr>
<td>2</td>
<td>png</td>
<td>image/x-png</td>
</tr>
<tr>
<td>3</td>
<td>bmp</td>
<td>image/bmp</td>
</tr>
<tr>
<td>4</td>
<td>psd</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>5</td>
<td>ico</td>
<td>image/x-icon</td>
</tr>
<tr>
<td>6</td>
<td>rar</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>7</td>
<td>zip</td>
<td>application/x-zip-compressed</td>
</tr>
<tr>
<td>8</td>
<td>7z</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>9</td>
<td>exe</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>10</td>
<td>avi</td>
<td>video/avi</td>
</tr>
<tr>
<td>11</td>
<td>rmvb</td>
<td>application/vnd.rn-realmedia-vbr</td>
</tr>
<tr>
<td>12</td>
<td>3gp</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>13</td>
<td>flv</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>14</td>
<td>mp3</td>
<td>audio/mpeg</td>
</tr>
<tr>
<td>15</td>
<td>wav</td>
<td>audio/wav</td>
</tr>
<tr>
<td>16</td>
<td>krc</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>17</td>
<td>lrc</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>18</td>
<td>txt</td>
<td>text/plain</td>
</tr>
<tr>
<td>19</td>
<td>doc</td>
<td>application/msword</td>
</tr>
<tr>
<td>20</td>
<td>xls</td>
<td>application/vnd.ms-excel</td>
</tr>
<tr>
<td>21</td>
<td>ppt</td>
<td>application/vnd.ms-powerpoint</td>
</tr>
<tr>
<td>22</td>
<td>pdf</td>
<td>application/pdf</td>
</tr>
<tr>
<td>23</td>
<td>chm</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>24</td>
<td>mdb</td>
<td>application/msaccess</td>
</tr>
<tr>
<td>25</td>
<td>sql</td>
<td>text/plain</td>
</tr>
<tr>
<td>26</td>
<td>con</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>27</td>
<td>log</td>
<td>text/plain</td>
</tr>
<tr>
<td>28</td>
<td>dat</td>
<td>text/plain</td>
</tr>
<tr>
<td>29</td>
<td>ini</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>30</td>
<td>php</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>31</td>
<td>html</td>
<td>text/html</td>
</tr>
<tr>
<td>32</td>
<td>htm</td>
<td>text/html</td>
</tr>
<tr>
<td>33</td>
<td>ttf</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>34</td>
<td>fon</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>35</td>
<td>js</td>
<td>text/html</td>
</tr>
<tr>
<td>36</td>
<td>xml</td>
<td>text/xml</td>
</tr>
<tr>
<td>37</td>
<td>dll</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>38</td>
<td>class</td>
<td>application/java</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<p> </p>
<div><span style="color: #ff0000;">  </span></div>
<p><span style="color: #ff0000;"></p>
<div><span style="color: #ff0000;">* application/octet-stream //应用程序<br />
323 text/h323<br />
acx application/internet-property-stream<br />
ai application/postscript<br />
aif audio/x-aiff<br />
aifc audio/x-aiff<br />
aiff audio/x-aiff<br />
asf video/x-ms-asf<br />
asr video/x-ms-asf<br />
asx video/x-ms-asf<br />
au audio/basic<br />
avi video/x-msvideo<br />
axs application/olescript<br />
bas text/plain<br />
bcpio application/x-bcpio<br />
bin application/octet-stream<br />
bmp image/bmp<br />
c text/plain<br />
cat application/vnd.ms-pkiseccat<br />
cdf application/x-cdf<br />
cer application/x-x509-ca-cert<br />
class application/octet-stream<br />
clp application/x-msclip<br />
cmx image/x-cmx<br />
cod image/cis-cod<br />
cpio application/x-cpio<br />
crd application/x-mscardfile<br />
crl application/pkix-crl<br />
crt application/x-x509-ca-cert<br />
csh application/x-csh<br />
css text/css<br />
dcr application/x-director<br />
der application/x-x509-ca-cert<br />
dir application/x-director<br />
dll application/x-msdownload<br />
dms application/octet-stream<br />
doc application/msword<br />
dot application/msword<br />
dvi application/x-dvi<br />
dxr application/x-director<br />
eps application/postscript<br />
etx text/x-setext<br />
evy application/envoy<br />
exe application/octet-stream<br />
fif application/fractals<br />
flr x-world/x-vrml<br />
gif image/gif<br />
gtar application/x-gtar<br />
gz application/x-gzip<br />
h text/plain<br />
hdf application/x-hdf<br />
hlp application/winhlp<br />
hqx application/mac-binhex40<br />
hta application/hta<br />
htc text/x-component<br />
htm text/html<br />
html text/html<br />
htt text/webviewhtml<br />
ico image/x-icon<br />
ief image/ief<br />
iii application/x-iphone<br />
ins application/x-internet-signup<br />
isp application/x-internet-signup<br />
jfif image/pipeg<br />
jpe image/jpeg<br />
jpeg image/jpeg<br />
jpg image/jpeg<br />
jpg image/pjpeg<br />
js application/x-javascript<br />
latex application/x-latex<br />
lha application/octet-stream<br />
lsf video/x-la-asf<br />
lsx video/x-la-asf<br />
lzh application/octet-stream<br />
m13 application/x-msmediaview<br />
m14 application/x-msmediaview<br />
m3u audio/x-mpegurl<br />
man application/x-troff-man<br />
mdb application/x-msaccess<br />
me application/x-troff-me<br />
mht message/rfc822<br />
mhtml message/rfc822<br />
mid audio/mid<br />
mny application/x-msmoney<br />
mov video/quicktime<br />
movie video/x-sgi-movie<br />
mp2 video/mpeg<br />
mp3 audio/mpeg<br />
mpa video/mpeg<br />
mpe video/mpeg<br />
mpeg video/mpeg<br />
mpg video/mpeg<br />
mpp application/vnd.ms-project<br />
mpv2 video/mpeg<br />
ms application/x-troff-ms<br />
mvb application/x-msmediaview<br />
nws message/rfc822<br />
oda application/oda<br />
p10 application/pkcs10<br />
p12 application/x-pkcs12<br />
p7b application/x-pkcs7-certificates<br />
p7c application/x-pkcs7-mime<br />
p7m application/x-pkcs7-mime<br />
p7r application/x-pkcs7-certreqresp<br />
p7s application/x-pkcs7-signature<br />
pbm image/x-portable-bitmap<br />
pdf application/pdf<br />
pfx application/x-pkcs12<br />
pgm image/x-portable-graymap<br />
pko application/ynd.ms-pkipko<br />
pma application/x-perfmon<br />
pmc application/x-perfmon<br />
pml application/x-perfmon<br />
pmr application/x-perfmon<br />
pmw application/x-perfmon<br />
png image/x-png<br />
pnm image/x-portable-anymap<br />
pot, application/vnd.ms-powerpoint<br />
ppm image/x-portable-pixmap<br />
pps application/vnd.ms-powerpoint<br />
ppt application/vnd.ms-powerpoint<br />
prf application/pics-rules<br />
ps application/postscript<br />
pub application/x-mspublisher<br />
qt video/quicktime<br />
ra audio/x-pn-realaudio<br />
ram audio/x-pn-realaudio<br />
ras image/x-cmu-raster<br />
rgb image/x-rgb<br />
rmi audio/mid<br />
roff application/x-troff<br />
rtf application/rtf<br />
rtx text/richtext<br />
scd application/x-msschedule<br />
sct text/scriptlet<br />
setpay application/set-payment-initiation<br />
setreg application/set-registration-initiation<br />
sh application/x-sh<br />
shar application/x-shar<br />
sit application/x-stuffit<br />
snd audio/basic<br />
spc application/x-pkcs7-certificates<br />
spl application/futuresplash<br />
src application/x-wais-source<br />
sst application/vnd.ms-pkicertstore<br />
stl application/vnd.ms-pkistl<br />
stm text/html<br />
sv4cpio application/x-sv4cpio<br />
sv4crc application/x-sv4crc<br />
t application/x-troff<br />
tar application/x-tar<br />
tcl application/x-tcl<br />
tex application/x-tex<br />
texi application/x-texinfo<br />
texinfo application/x-texinfo<br />
tgz application/x-compressed<br />
tif image/tiff<br />
tiff image/tiff<br />
tr application/x-troff<br />
trm application/x-msterminal<br />
tsv text/tab-separated-values<br />
txt text/plain<br />
uls text/iuls<br />
ustar application/x-ustar<br />
vcf text/x-vcard<br />
vrml x-world/x-vrml<br />
wav audio/x-wav<br />
wcm application/vnd.ms-works<br />
wdb application/vnd.ms-works<br />
wks application/vnd.ms-works<br />
wmf application/x-msmetafile<br />
wps application/vnd.ms-works<br />
wri application/x-mswrite<br />
wrl x-world/x-vrml<br />
wrz x-world/x-vrml<br />
xaf x-world/x-vrml<br />
xbm image/x-xbitmap<br />
xla application/vnd.ms-excel<br />
xlc application/vnd.ms-excel<br />
xlm application/vnd.ms-excel<br />
xls application/vnd.ms-excel<br />
xlt application/vnd.ms-excel<br />
xlw application/vnd.ms-excel<br />
xof x-world/x-vrml<br />
xpm image/x-xpixmap<br />
xwd image/x-xwindowdump<br />
z application/x-compress<br />
zip application/zip -firefox<br />
application/x-zip-compressed -IE</span></div>
<p><span style="color: #ff0000;"> </p>
<p></span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.aifou.net/?feed=rss2&amp;p=393</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>十条很有用的CSS</title>
		<link>http://www.aifou.net/?p=391</link>
		<comments>http://www.aifou.net/?p=391#comments</comments>
		<pubDate>Wed, 02 Jun 2010 09:59:23 +0000</pubDate>
		<dc:creator>简单小屋</dc:creator>
				<category><![CDATA[DIV+CSS]]></category>
		<category><![CDATA[css技巧]]></category>
		<category><![CDATA[十条你不知道的css]]></category>
		<category><![CDATA[常用到的css代码]]></category>
		<category><![CDATA[必须学的css代码]]></category>

		<guid isPermaLink="false">http://www.aifou.net/?p=391</guid>
		<description><![CDATA[掌握了这十条css，会让你的css写得更简洁，更有色彩。
  英文原名 (Ten CSS tricks you may not know)
还是非常有用处的，无论CSS新手还是老枪，有些技巧的确鲜为人知。你可以去看英文原版，词汇并不复杂。其实这篇文章有翻译的价值的，不过我最近比较懒，就简单用中文简述一下，其间会插入一些自己的经历和看法：
译文：
1.css字体简写规则
当使用css定义字体时你可能会这样做：
font-size:1em;
line-height:1.5em;
font-weight:bold;
font-style:italic;
font-variant:small-caps;
font-family:verdana,serif;
事实上你可以简写这些属性：
font: 1em/1.5em　bold　italic　small-caps　verdana,serif
　　现在好多了吧，不过有一点要注意：使用这一简写方式你至少要指定font-size和font-family属性，其他的属性（如font-weight, font-style,font-varient）如未指定将自动使用默认值。
2.同时使用两个class
　　通常我们只为属性指定一个class,但这并不等于你只能指定一个，实际上，你想指定多少就可以指定多少，例如：
&#60;p　class=&#8221;text side&#8221;&#62;&#8230;&#60;/p&#62;
　　通过同时使用两个class（使用空格而不是逗号分割）,这个段落将同时应用两个class中制定的规则。如果两者中有任何规则重叠，那么后一个将获得实际的优先应用。
3.css中边框（border)的默认值
　　当编写一条边框的规则时，你通常会指定颜色、宽度以及样式（任何顺序均可）。例如：border:　3px　solid　#000（3像素宽的黑色实线边框），其实这个例子中唯一需要指定的值只是样式。假如你指定样式为实线（solid),那么其余的值将使用默认值：默认的宽度为中等（相当于3到4像素）；默认的颜色为边框里的文字颜色。如果这正是你想要的效果，你完全可以不在css里指定。
4.!important会被IE忽略
　　在css中，通常最后指定的规则会获得优先权。然而对除了IE以外的浏览器来说，任何后面标有!important的语句将获得绝对的优先权，例如：
margin-top:3.5em　!important;margin-top:2em
　　除IE以外所有浏览器中的顶部边界都是3.5em，而IE为2em，有时候这一点很有用，尤其在使用相对边界值时（就像这个例子），可以显示出IE与其他浏览器的细微差别。
（很多人可能还注意到了css的子选择器也是会被IE忽略的）
5.图片替换的技巧
　　使用标准的html而不是图片来显示文字通常更为明智，除了加快下载还可以获得更好的可用性。但是如果你决心使用访问者的机器中可能没有的字体时，你只能选择图片。
　　举例来说，你想在每一页的顶部使用“Buy widgets”的标题，但你同时又希望这是能被搜索引擎发现的，为了美观你使用了少见的字体那么你就得用图片来显示了：
&#60;h1&#62;&#60;img　src=&#8221;widget-image.gif&#8221;　alt=&#8221;Buy widgets&#8221;/&#62;&#60;/h1&#62;
　　这样当然没错，但是有证据显示搜索引擎对真实文本的重视远超过alt文本（因为已经有太多网站使用alt文本充当关键字），因此，我们得用另一种方法：&#60;h1&#62;&#60;span&#62;Buy　widgets&#60;/span&#62;&#60;/h1&#62; ，那你的漂亮字体怎么办呢？下面的css可以帮上忙：
h1
{
background: url(widget-image.gif)　no-repeat;
}
h1　span
{
position:absolute;
left:-2000px;
}
　　现在你既用上了漂亮的图片又很好的隐藏了真实文本——借助css，文本被定位于屏幕左侧-2000像素处。
6.css盒模型hack的另一选择
　　css盒模型hack被用来解决IE6之前的浏览器显示问题，IE6.0之前的版本会把某元素的边框值和填充值包含在宽度之内（而不是加在宽度值上）。例如，你可能会使用以下css来指定某个容器的尺寸：
#box
{
width:100px;
border:5px;
padding:20px;
}
然后在html中应用：&#60;div　id=&#8221;box&#8221;&#62;&#8230;&#60;/div&#62;
　　盒的总宽度在几乎所有浏览器中为150像素（100像素宽度+两条5像素的边框+两个20像素的填充），唯独在IE6之前版本的浏览器中仍然为100像素（边框值和填充值包含在宽度值中），盒模型的hack正是为了解决这一问题，但是也会带来麻烦。更简单的办法如下：
css:
#box
{
width:150px;
}
#box　div{
border:5px;
padding:20px;
}
html:
&#60;div id=&#8221;box&#8221;&#62;&#60;div&#62;&#8230;&#60;/div&#62;&#60;/div&#62;
　　这样一来在任何浏览器中盒的总宽度都将是150像素。
7.将块元素居中
　　假设你的网站使用了固定宽度的布局，所有的内容置于屏幕中央，可以使用以下的css：
#content
{
width:700px;
margin:0　auto;
}
　　你可以把html的body之内任何项目置于&#60;div　id=&#8221;content&#8221;&#62;&#60;/div&#62;中，该项目将自动获得相等的左右边界值从而保证了居中显示。不过，这在IE6之前版本的浏览器中仍然有问题，将不会居中，因此必须修改如下：
body
{
text-align:center;
}
#content
{
text-align:left;
width:700px;
margin:　0　auto;
}
　　对body的设定将导致主体内容居中，但是连所有的文字也居中了，这恐怕不是你想要的效果，为此#content的div还要指定一个值：text-align:left
8.使用css实现垂直居中
　　垂直居中对表格来说是小菜一碟，只需指定单元格为vertical-align:middle即可，但这在css布局中不管用。假设你将一个导航菜单的高度设为2em，然后在css中指定垂直对齐的规则，文字还是会被排到盒的顶部，根本没有什么区别。
　　要解决这一问题，只需将盒的行高设为与盒的高度相同即可，以这个例子来说，盒高2em,那么只需在css中再加入一条：line-height: 2em 就可实现垂直居中了！
9. 容器内的css定位
　　css的最大优点之一就是可以将对象定位在文档的任何位置，同样的也可以将对象在某容器内进行定位。只需要为该容器添加一条css规则：
#container
{
position:relative;
}
　　则容器内的任何元素的定位都是相对于该容器的。假定你使用以下html结构：
&#60;div　id=&#8221;container&#8221;&#62;&#60;div　id=&#8221;navigation&#8221;&#62;&#8230;&#60;/div&#62;&#60;/div&#62;
　　如果想将navigation定位在容器内离左边界30像素，离顶部5像素，可以使用以下css语句：
#navigation
{
position:absolute;
left:30px;
top:5px;
}
10.延伸至屏幕底部的背景色
　　css的缺点之一是缺乏垂直方向的控制，从而导致了一个表格布局不会遇到的问题。假设你在页面的左侧设定了一列用于放置网站的导航。页面为白色背景，但你希望导航所在的列为蓝色背景，使用以下css即可：
#navigation
{
background:blue;
width:150px;
}
　　问题在于导航项不会一直延伸到页面的底部，自然它的背景色也不会延伸到底部。于是左列的蓝色背景在页面上被半路截断，浪费了你的一番设计。怎么办呢？很不幸我们现在只能用欺骗的办法，即将body的背景指定为与左列同颜色同宽度的图片，css如下：
body
{
background:url(blue-image.gif)　0　0　repeat-y;
}
　　背景图应为宽150像素的蓝色图片。这一办法的缺点是没法使用em来指定左列的宽度，当用户改变文字的大小导致内容的宽度扩张时，背景色的宽度不会随之改变。
　　到写这篇文章为止这是对这类问题的唯一解决办法，因此你只能为左列使用像素值来获得能够自动延伸的不同的背景色。
]]></description>
			<content:encoded><![CDATA[<p>掌握了这十条css，会让你的css写得更简洁，更有色彩。</p>
<p>  英文原名 (Ten CSS tricks you may not know)<br />
还是非常有用处的，无论CSS新手还是老枪，有些技巧的确鲜为人知。你可以去看英文原版，词汇并不复杂。其实这篇文章有翻译的价值的，不过我最近比较懒，就简单用中文简述一下，其间会插入一些自己的经历和看法：</p>
<p>译文：</p>
<p>1.css字体简写规则</p>
<p>当使用css定义字体时你可能会这样做：</p>
<p>font-size:1em;<br />
line-height:1.5em;<br />
font-weight:bold;<br />
font-style:italic;<br />
font-variant:small-caps;<br />
font-family:verdana,serif;<br />
事实上你可以简写这些属性：<span id="more-391"></span></p>
<p>font: 1em/1.5em　bold　italic　small-caps　verdana,serif<br />
　　现在好多了吧，不过有一点要注意：使用这一简写方式你至少要指定font-size和font-family属性，其他的属性（如font-weight, font-style,font-varient）如未指定将自动使用默认值。<br />
2.同时使用两个class</p>
<p>　　通常我们只为属性指定一个class,但这并不等于你只能指定一个，实际上，你想指定多少就可以指定多少，例如：</p>
<p>&lt;p　class=&#8221;text side&#8221;&gt;&#8230;&lt;/p&gt;<br />
　　通过同时使用两个class（使用空格而不是逗号分割）,这个段落将同时应用两个class中制定的规则。如果两者中有任何规则重叠，那么后一个将获得实际的优先应用。<br />
3.css中边框（border)的默认值</p>
<p>　　当编写一条边框的规则时，你通常会指定颜色、宽度以及样式（任何顺序均可）。例如：border:　3px　solid　#000（3像素宽的黑色实线边框），其实这个例子中唯一需要指定的值只是样式。假如你指定样式为实线（solid),那么其余的值将使用默认值：默认的宽度为中等（相当于3到4像素）；默认的颜色为边框里的文字颜色。如果这正是你想要的效果，你完全可以不在css里指定。<br />
4.!important会被IE忽略</p>
<p>　　在css中，通常最后指定的规则会获得优先权。然而对除了IE以外的浏览器来说，任何后面标有!important的语句将获得绝对的优先权，例如：</p>
<p>margin-top:3.5em　!important;margin-top:2em<br />
　　除IE以外所有浏览器中的顶部边界都是3.5em，而IE为2em，有时候这一点很有用，尤其在使用相对边界值时（就像这个例子），可以显示出IE与其他浏览器的细微差别。<br />
（很多人可能还注意到了css的子选择器也是会被IE忽略的）<br />
5.图片替换的技巧</p>
<p>　　使用标准的html而不是图片来显示文字通常更为明智，除了加快下载还可以获得更好的可用性。但是如果你决心使用访问者的机器中可能没有的字体时，你只能选择图片。<br />
　　举例来说，你想在每一页的顶部使用“Buy widgets”的标题，但你同时又希望这是能被搜索引擎发现的，为了美观你使用了少见的字体那么你就得用图片来显示了：</p>
<p>&lt;h1&gt;&lt;img　src=&#8221;widget-image.gif&#8221;　alt=&#8221;Buy widgets&#8221;/&gt;&lt;/h1&gt;<br />
　　这样当然没错，但是有证据显示搜索引擎对真实文本的重视远超过alt文本（因为已经有太多网站使用alt文本充当关键字），因此，我们得用另一种方法：&lt;h1&gt;&lt;span&gt;Buy　widgets&lt;/span&gt;&lt;/h1&gt; ，那你的漂亮字体怎么办呢？下面的css可以帮上忙：</p>
<p>h1<br />
{<br />
background: url(widget-image.gif)　no-repeat;<br />
}</p>
<p>h1　span<br />
{<br />
position:absolute;<br />
left:-2000px;<br />
}<br />
　　现在你既用上了漂亮的图片又很好的隐藏了真实文本——借助css，文本被定位于屏幕左侧-2000像素处。</p>
<p>6.css盒模型hack的另一选择</p>
<p>　　css盒模型hack被用来解决IE6之前的浏览器显示问题，IE6.0之前的版本会把某元素的边框值和填充值包含在宽度之内（而不是加在宽度值上）。例如，你可能会使用以下css来指定某个容器的尺寸：</p>
<p>#box<br />
{<br />
width:100px;<br />
border:5px;<br />
padding:20px;<br />
}<br />
然后在html中应用：&lt;div　id=&#8221;box&#8221;&gt;&#8230;&lt;/div&gt;</p>
<p>　　盒的总宽度在几乎所有浏览器中为150像素（100像素宽度+两条5像素的边框+两个20像素的填充），唯独在IE6之前版本的浏览器中仍然为100像素（边框值和填充值包含在宽度值中），盒模型的hack正是为了解决这一问题，但是也会带来麻烦。更简单的办法如下：<br />
css:</p>
<p>#box<br />
{<br />
width:150px;<br />
}</p>
<p>#box　div{<br />
border:5px;<br />
padding:20px;<br />
}<br />
html:</p>
<p>&lt;div id=&#8221;box&#8221;&gt;&lt;div&gt;&#8230;&lt;/div&gt;&lt;/div&gt;<br />
　　这样一来在任何浏览器中盒的总宽度都将是150像素。<br />
7.将块元素居中</p>
<p>　　假设你的网站使用了固定宽度的布局，所有的内容置于屏幕中央，可以使用以下的css：</p>
<p>#content<br />
{<br />
width:700px;<br />
margin:0　auto;<br />
}<br />
　　你可以把html的body之内任何项目置于&lt;div　id=&#8221;content&#8221;&gt;&lt;/div&gt;中，该项目将自动获得相等的左右边界值从而保证了居中显示。不过，这在IE6之前版本的浏览器中仍然有问题，将不会居中，因此必须修改如下：</p>
<p>body<br />
{<br />
text-align:center;<br />
}</p>
<p>#content<br />
{<br />
text-align:left;<br />
width:700px;<br />
margin:　0　auto;<br />
}<br />
　　对body的设定将导致主体内容居中，但是连所有的文字也居中了，这恐怕不是你想要的效果，为此#content的div还要指定一个值：text-align:left<br />
8.使用css实现垂直居中</p>
<p>　　垂直居中对表格来说是小菜一碟，只需指定单元格为vertical-align:middle即可，但这在css布局中不管用。假设你将一个导航菜单的高度设为2em，然后在css中指定垂直对齐的规则，文字还是会被排到盒的顶部，根本没有什么区别。</p>
<p>　　要解决这一问题，只需将盒的行高设为与盒的高度相同即可，以这个例子来说，盒高2em,那么只需在css中再加入一条：line-height: 2em 就可实现垂直居中了！<br />
9. 容器内的css定位</p>
<p>　　css的最大优点之一就是可以将对象定位在文档的任何位置，同样的也可以将对象在某容器内进行定位。只需要为该容器添加一条css规则：</p>
<p>#container<br />
{<br />
position:relative;<br />
}<br />
　　则容器内的任何元素的定位都是相对于该容器的。假定你使用以下html结构：</p>
<p>&lt;div　id=&#8221;container&#8221;&gt;&lt;div　id=&#8221;navigation&#8221;&gt;&#8230;&lt;/div&gt;&lt;/div&gt;<br />
　　如果想将navigation定位在容器内离左边界30像素，离顶部5像素，可以使用以下css语句：</p>
<p>#navigation<br />
{<br />
position:absolute;<br />
left:30px;<br />
top:5px;<br />
}<br />
10.延伸至屏幕底部的背景色</p>
<p>　　css的缺点之一是缺乏垂直方向的控制，从而导致了一个表格布局不会遇到的问题。假设你在页面的左侧设定了一列用于放置网站的导航。页面为白色背景，但你希望导航所在的列为蓝色背景，使用以下css即可：</p>
<p>#navigation<br />
{<br />
background:blue;<br />
width:150px;<br />
}<br />
　　问题在于导航项不会一直延伸到页面的底部，自然它的背景色也不会延伸到底部。于是左列的蓝色背景在页面上被半路截断，浪费了你的一番设计。怎么办呢？很不幸我们现在只能用欺骗的办法，即将body的背景指定为与左列同颜色同宽度的图片，css如下：</p>
<p>body<br />
{<br />
background:url(blue-image.gif)　0　0　repeat-y;<br />
}<br />
　　背景图应为宽150像素的蓝色图片。这一办法的缺点是没法使用em来指定左列的宽度，当用户改变文字的大小导致内容的宽度扩张时，背景色的宽度不会随之改变。</p>
<p>　　到写这篇文章为止这是对这类问题的唯一解决办法，因此你只能为左列使用像素值来获得能够自动延伸的不同的背景色。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aifou.net/?feed=rss2&amp;p=391</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>9个很实用的PHP函数和功能</title>
		<link>http://www.aifou.net/?p=389</link>
		<comments>http://www.aifou.net/?p=389#comments</comments>
		<pubDate>Wed, 02 Jun 2010 08:44:48 +0000</pubDate>
		<dc:creator>简单小屋</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[php小技巧]]></category>
		<category><![CDATA[php常用的函数]]></category>
		<category><![CDATA[php很有用的功能]]></category>
		<category><![CDATA[php收藏]]></category>

		<guid isPermaLink="false">http://www.aifou.net/?p=389</guid>
		<description><![CDATA[收集一下一些很有用的函数功能，了解了这九个要以使得程序写起来更简单简洁。
 即使使用 PHP 多年，也会偶然发现一些未曾了解的函数和功能。其中有些是非常有用的，但没有得到充分利用。并不是所有人都会从头到尾一页一页地阅读手册和函数参考！
1、任意参数数目的函数
你可能已经知道，PHP 允许定义可选参数的函数。但也有完全允许任意数目的函数参数的方法。以下是可选参数的例子：
以下为引用的内容：
// function with 2 optional arguments
function foo($arg1 = &#8221;, $arg2 = &#8221;) {
 echo &#8220;arg1: $arg1\n&#8221;;
 echo &#8220;arg2: $arg2\n&#8221;;
}
foo(&#8216;hello&#8217;,'world&#8217;);
/* prints:
arg1: hello
arg2: world
*/
foo();
/* prints:
arg1:
arg2:
*/
 
现在让我们看看如何建立能够接受任何参数数目的函数。这一次需要使用 func_get_args() 函数：
以下为引用的内容：
// yes, the argument list can be empty
function foo() {
 // returns an array of all passed arguments
 $args = func_get_args();
 foreach ($args as $k =&#62; $v) {
  echo &#8220;arg&#8221;.($k+1).&#8221;: $v\n&#8221;;
 }
}
foo();
/* prints nothing [...]]]></description>
			<content:encoded><![CDATA[<p>收集一下一些很有用的函数功能，了解了这九个要以使得程序写起来更简单简洁。</p>
<p> 即使使用 PHP 多年，也会偶然发现一些未曾了解的函数和功能。其中有些是非常有用的，但没有得到充分利用。并不是所有人都会从头到尾一页一页地阅读手册和函数参考！</p>
<p>1、任意参数数目的函数</p>
<p>你可能已经知道，PHP 允许定义可选参数的函数。但也有完全允许任意数目的函数参数的方法。以下是可选参数的例子：</p>
<p>以下为引用的内容：<span id="more-389"></span></p>
<p>// function with 2 optional arguments<br />
function foo($arg1 = &#8221;, $arg2 = &#8221;) {</p>
<p> echo &#8220;arg1: $arg1\n&#8221;;<br />
 echo &#8220;arg2: $arg2\n&#8221;;</p>
<p>}</p>
<p>foo(&#8216;hello&#8217;,'world&#8217;);<br />
/* prints:<br />
arg1: hello<br />
arg2: world<br />
*/</p>
<p>foo();<br />
/* prints:<br />
arg1:<br />
arg2:<br />
*/<br />
 <br />
现在让我们看看如何建立能够接受任何参数数目的函数。这一次需要使用 func_get_args() 函数：</p>
<p>以下为引用的内容：</p>
<p>// yes, the argument list can be empty<br />
function foo() {</p>
<p> // returns an array of all passed arguments<br />
 $args = func_get_args();</p>
<p> foreach ($args as $k =&gt; $v) {<br />
  echo &#8220;arg&#8221;.($k+1).&#8221;: $v\n&#8221;;<br />
 }</p>
<p>}</p>
<p>foo();<br />
/* prints nothing */</p>
<p>foo(&#8216;hello&#8217;);<br />
/* prints<br />
arg1: hello<br />
*/</p>
<p>foo(&#8216;hello&#8217;, &#8216;world&#8217;, &#8216;again&#8217;);<br />
/* prints<br />
arg1: hello<br />
arg2: world<br />
arg3: again<br />
*/<br />
 <br />
2、使用 Glob() 查找文件</p>
<p>许多 PHP 函数具有长描述性的名称。然而可能会很难说出 glob() 函数能做的事情，除非你已经通过多次使用并熟悉了它。可以把它看作是比 scandir() 函数更强大的版本，可以按照某种模式搜索文件。</p>
<p>以下为引用的内容：</p>
<p>// get all php files<br />
$files = glob(&#8216;*.php&#8217;);</p>
<p>print_r($files);<br />
/* output looks like:<br />
Array<br />
(<br />
    [0] =&gt; phptest.php<br />
    [1] =&gt; pi.php<br />
    [2] =&gt; post_output.php<br />
    [3] =&gt; test.php<br />
)<br />
*/<br />
 <br />
你可以像这样获得多个文件：</p>
<p>以下为引用的内容：</p>
<p>// get all php files AND txt files<br />
$files = glob(&#8216;*.{php,txt}&#8217;, GLOB_BRACE);</p>
<p>print_r($files);<br />
/* output looks like:<br />
Array<br />
(<br />
    [0] =&gt; phptest.php<br />
    [1] =&gt; pi.php<br />
    [2] =&gt; post_output.php<br />
    [3] =&gt; test.php<br />
    [4] =&gt; log.txt<br />
    [5] =&gt; test.txt<br />
)<br />
*/<br />
 <br />
请注意，这些文件其实是可以返回一个路径，这取决于查询条件：</p>
<p>以下为引用的内容：</p>
<p>$files = glob(&#8216;../images/a*.jpg&#8217;);</p>
<p>print_r($files);<br />
/* output looks like:<br />
Array<br />
(<br />
    [0] =&gt; ../images/apple.jpg<br />
    [1] =&gt; ../images/art.jpg<br />
)<br />
*/<br />
 <br />
如果你想获得每个文件的完整路径，你可以调用 realpath() 函数：</p>
<p>以下为引用的内容：</p>
<p>$files = glob(&#8216;../images/a*.jpg&#8217;);</p>
<p>// applies the function to each array element<br />
$files = array_map(&#8216;realpath&#8217;,$files);</p>
<p>print_r($files);<br />
/* output looks like:<br />
Array<br />
(<br />
    [0] =&gt; C:\wamp\www\images\apple.jpg<br />
    [1] =&gt; C:\wamp\www\images\art.jpg<br />
)<br />
*/</p>
<p>3、内存使用信息</p>
<p>通过侦测脚本的内存使用情况，有利于代码的优化。PHP 提供了一个垃圾收集器和一个非常复杂的内存管理器。脚本执行时所使用的内存量，有升有跌。为了得到当前的内存使用情况，我们可以使用 memory_get_usage() 函数。如果需要获得任意时间点的最高内存使用量，则可以使用 memory_limit() 函数。</p>
<p>以下为引用的内容：</p>
<p>echo &#8220;Initial: &#8220;.memory_get_usage().&#8221; bytes \n&#8221;;<br />
/* prints<br />
Initial: 361400 bytes<br />
*/</p>
<p>// let&#8217;s use up some memory<br />
for ($i = 0; $i &lt; 100000; $i++) {<br />
 $array []= md5($i);<br />
}</p>
<p>// let&#8217;s remove half of the array<br />
for ($i = 0; $i &lt; 100000; $i++) {<br />
 unset($array[$i]);<br />
}</p>
<p>echo &#8220;Final: &#8220;.memory_get_usage().&#8221; bytes \n&#8221;;<br />
/* prints<br />
Final: 885912 bytes<br />
*/</p>
<p>echo &#8220;Peak: &#8220;.memory_get_peak_usage().&#8221; bytes \n&#8221;;<br />
/* prints<br />
Peak: 13687072 bytes<br />
*/<br />
 <br />
4、CPU 使用信息</p>
<p>为此，我们要利用 getrusage() 函数。请记住这个函数不适用于 Windows 平台。</p>
<p>以下为引用的内容：</p>
<p>print_r(getrusage());<br />
/* prints<br />
Array<br />
(<br />
    [ru_oublock] =&gt; 0<br />
    [ru_inblock] =&gt; 0<br />
    [ru_msgsnd] =&gt; 2<br />
    [ru_msgrcv] =&gt; 3<br />
    [ru_maxrss] =&gt; 12692<br />
    [ru_ixrss] =&gt; 764<br />
    [ru_idrss] =&gt; 3864<br />
    [ru_minflt] =&gt; 94<br />
    [ru_majflt] =&gt; 0<br />
    [ru_nsignals] =&gt; 1<br />
    [ru_nvcsw] =&gt; 67<br />
    [ru_nivcsw] =&gt; 4<br />
    [ru_nswap] =&gt; 0<br />
    [ru_utime.tv_usec] =&gt; 0<br />
    [ru_utime.tv_sec] =&gt; 0<br />
    [ru_stime.tv_usec] =&gt; 6269<br />
    [ru_stime.tv_sec] =&gt; 0<br />
)<br />
 <br />
*/这可能看起来有点神秘，除非你已经有系统管理员权限。以下是每个值的具体说明（你不需要记住这些）：</p>
<p>以下为引用的内容：</p>
<p>ru_oublock: block output operations<br />
ru_inblock: block input operations<br />
ru_msgsnd: messages sent<br />
ru_msgrcv: messages received<br />
ru_maxrss: maximum resident set size<br />
ru_ixrss: integral shared memory size<br />
ru_idrss: integral unshared data size<br />
ru_minflt: page reclaims<br />
ru_majflt: page faults<br />
ru_nsignals: signals received<br />
ru_nvcsw: voluntary context switches<br />
ru_nivcsw: involuntary context switches<br />
ru_nswap: swaps<br />
ru_utime.tv_usec: user time used (microseconds)<br />
ru_utime.tv_sec: user time used (seconds)<br />
ru_stime.tv_usec: system time used (microseconds)<br />
ru_stime.tv_sec: system time used (seconds)<br />
 <br />
要知道脚本消耗多少 CPU 功率，我们需要看看 ‘user time’ 和 ’system time’ 两个参数的值。秒和微秒部分默认是单独提供的。你可以除以 100 万微秒，并加上秒的参数值，得到一个十进制的总秒数。让我们来看一个例子：</p>
<p>以下为引用的内容：</p>
<p>// sleep for 3 seconds (non-busy)<br />
sleep(3);</p>
<p>$data = getrusage();<br />
echo &#8220;User time: &#8220;.<br />
 ($data['ru_utime.tv_sec'] +<br />
 $data['ru_utime.tv_usec'] / 1000000);<br />
echo &#8220;System time: &#8220;.<br />
 ($data['ru_stime.tv_sec'] +<br />
 $data['ru_stime.tv_usec'] / 1000000);</p>
<p>/* prints<br />
User time: 0.011552<br />
System time: 0<br />
*/<br />
 <br />
尽管脚本运行用了大约 3 秒钟，CPU 使用率却非常非常低。因为在睡眠运行的过程中，该脚本实际上不消耗 CPU 资源。还有许多其他的任务，可能需要一段时间，但不占用类似等待磁盘操作等 CPU 时间。因此正如你所看到的，CPU 使用率和运行时间的实际长度并不总是相同的。下面是一个例子：</p>
<p>以下为引用的内容：</p>
<p>// loop 10 million times (busy)<br />
for($i=0;$i&lt;10000000;$i++) {</p>
<p>}</p>
<p>$data = getrusage();<br />
echo &#8220;User time: &#8220;.<br />
 ($data['ru_utime.tv_sec'] +<br />
 $data['ru_utime.tv_usec'] / 1000000);<br />
echo &#8220;System time: &#8220;.<br />
 ($data['ru_stime.tv_sec'] +<br />
 $data['ru_stime.tv_usec'] / 1000000);</p>
<p>/* prints<br />
User time: 1.424592<br />
System time: 0.004204<br />
*/<br />
 <br />
这花了大约 1.4 秒的 CPU 时间，但几乎都是用户时间，因为没有系统调用。系统时间是指花费在执行程序的系统调用时的 CPU 开销。下面是一个例子：</p>
<p>以下为引用的内容：</p>
<p>$start = microtime(true);<br />
// keep calling microtime for about 3 seconds<br />
while(microtime(true) &#8211; $start &lt; 3) {</p>
<p>}</p>
<p>$data = getrusage();<br />
echo &#8220;User time: &#8220;.<br />
 ($data['ru_utime.tv_sec'] +<br />
 $data['ru_utime.tv_usec'] / 1000000);<br />
echo &#8220;System time: &#8220;.<br />
 ($data['ru_stime.tv_sec'] +<br />
 $data['ru_stime.tv_usec'] / 1000000);</p>
<p>/* prints<br />
User time: 1.088171<br />
System time: 1.675315<br />
*/<br />
 <br />
现在我们有相当多的系统时间占用。这是因为脚本多次调用 microtime() 函数，该函数需要向操作系统发出请求，以获取所需时间。你也可能会注意到运行时间加起来不到 3 秒。这是因为有可能在服务器上同时存在其他进程，并且脚本没有 100% 使用 CPU 的整个 3 秒持续时间。</p>
<p>5、魔术常量</p>
<p>PHP 提供了获取当前行号 (__LINE__)、文件路径 (__FILE__)、目录路径 (__DIR__)、函数名 (__FUNCTION__)、类名 (__CLASS__)、方法名 (__METHOD__) 和命名空间 (__NAMESPACE__) 等有用的魔术常量。在这篇文章中不作一一介绍，但是我将告诉你一些用例。当包含其他脚本文件时，使用 __FILE__ 常量（或者使用 PHP5.3 新具有的 __DIR__ 常量）：</p>
<p>以下为引用的内容：</p>
<p>// this is relative to the loaded script&#8217;s path<br />
// it may cause problems when running scripts from different directories<br />
require_once(&#8216;config/database.php&#8217;);</p>
<p>// this is always relative to this file&#8217;s path<br />
// no matter where it was included from<br />
require_once(dirname(__FILE__) . &#8216;/config/database.php&#8217;);<br />
 <br />
使用 __LINE__ 使得调试更为轻松。你可以跟踪到具体行号。</p>
<p>以下为引用的内容：</p>
<p>// some code<br />
// &#8230;<br />
my_debug(&#8220;some debug message&#8221;, __LINE__);<br />
/* prints<br />
Line 4: some debug message<br />
*/</p>
<p>// some more code<br />
// &#8230;<br />
my_debug(&#8220;another debug message&#8221;, __LINE__);<br />
/* prints<br />
Line 11: another debug message<br />
*/</p>
<p>function my_debug($msg, $line) {<br />
 echo &#8220;Line $line: $msg<br />
 <br />
6、生成唯一标识符</p>
<p>某些场景下，可能需要生成一个唯一的字符串。我看到很多人使用 md5() 函数，即使它并不完全意味着这个目的：</p>
<p>以下为引用的内容：</p>
<p>// generate unique string<br />
echo md5(time() . mt_rand(1,1000000));<br />
There is actually a PHP function named uniqid() that is meant to be used for this.</p>
<p>// generate unique string<br />
echo uniqid();<br />
/* prints<br />
4bd67c947233e<br />
*/</p>
<p>// generate another unique string<br />
echo uniqid();<br />
/* prints<br />
4bd67c9472340<br />
*/<br />
 <br />
你可能会注意到，尽管字符串是唯一的，前几个字符却是类似的，这是因为生成的字符串与服务器时间相关。但实际上也存在友好的一方面，由于每个新生成的 ID 会按字母顺序排列，这样排序就变得很简单。为了减少重复的概率，你可以传递一个前缀，或第二个参数来增加熵：</p>
<p>以下为引用的内容：</p>
<p>// with prefix<br />
echo uniqid(&#8216;foo_&#8217;);<br />
/* prints<br />
foo_4bd67d6cd8b8f<br />
*/</p>
<p>// with more entropy<br />
echo uniqid(&#8221;,true);<br />
/* prints<br />
4bd67d6cd8b926.12135106<br />
*/</p>
<p>// both<br />
echo uniqid(&#8216;bar_&#8217;,true);<br />
/* prints<br />
bar_4bd67da367b650.43684647<br />
*/<br />
 <br />
这个函数将产生比 md5() 更短的字符串，能节省一些空间。</p>
<p>7、序列化</p>
<p>你有没有遇到过需要在数据库或文本文件存储一个复杂变量的情况？你可能没能想出一个格式化字符串并转换成数组或对象的好方法，PHP 已经为你准备好此功能。有两种序列化变量的流行方法。下面是一个例子，使用 serialize() 和 unserialize() 函数：</p>
<p>以下为引用的内容：</p>
<p>// a complex array<br />
$myvar = array(<br />
 &#8217;hello&#8217;,<br />
 42,<br />
 array(1,&#8217;two&#8217;),<br />
 &#8217;apple&#8217;<br />
);</p>
<p>// convert to a string<br />
$string = serialize($myvar);</p>
<p>echo $string;<br />
/* prints<br />
a:4:{i:0;s:5:&#8221;hello&#8221;;i:1;i:42;i:2;a:2:{i:0;i:1;i:1;s:3:&#8221;two&#8221;;}i:3;s:5:&#8221;apple&#8221;;}<br />
*/</p>
<p>// you can reproduce the original variable<br />
$newvar = unserialize($string);</p>
<p>print_r($newvar);<br />
/* prints<br />
Array<br />
(<br />
    [0] =&gt; hello<br />
    [1] =&gt; 42<br />
    [2] =&gt; Array<br />
        (<br />
            [0] =&gt; 1<br />
            [1] =&gt; two<br />
        )</p>
<p>    [3] =&gt; apple<br />
)<br />
*/<br />
 <br />
这是原生的 PHP 序列化方法。然而，由于 JSON 近年来大受欢迎，PHP5.2 中已经加入了对 JSON 格式的支持。现在你可以使用 json_encode() 和 json_decode() 函数：</p>
<p>以下为引用的内容：</p>
<p>// a complex array<br />
$myvar = array(<br />
 &#8217;hello&#8217;,<br />
 42,<br />
 array(1,&#8217;two&#8217;),<br />
 &#8217;apple&#8217;<br />
);</p>
<p>// convert to a string<br />
$string = json_encode($myvar);</p>
<p>echo $string;<br />
/* prints<br />
["hello",42,[1,"two"],&#8221;apple&#8221;]<br />
*/</p>
<p>// you can reproduce the original variable<br />
$newvar = json_decode($string);</p>
<p>print_r($newvar);<br />
/* prints<br />
Array<br />
(<br />
    [0] =&gt; hello<br />
    [1] =&gt; 42<br />
    [2] =&gt; Array<br />
        (<br />
            [0] =&gt; 1<br />
            [1] =&gt; two<br />
        )</p>
<p>    [3] =&gt; apple<br />
)<br />
*/<br />
 <br />
这将更为行之有效，尤其与 JavaScript 等许多其他语言兼容。然而对于复杂的对象，某些信息可能会丢失。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aifou.net/?feed=rss2&amp;p=389</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
