<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[Yation.Team]]></title>
  <subtitle type="html"><![CDATA[I have never given up on dream!-[雅讯易盛]]]></subtitle>
  <id>http://www.yation.com/</id>
  <link rel="alternate" type="text/html" href="http://www.yation.com/" /> 
  <link rel="self" type="application/atom+xml" href="http://www.yation.com/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.8">PJBlog3</generator> 
  <updated>2010-02-25T14:03:17+08:00</updated>

  <entry>
	  <title type="html"><![CDATA[ThinkPHP中设置Cookie的方法，cookie方法bug]]></title>
	  <author>
		 <name>yation</name>
		 <uri>http://www.yation.com/</uri>
		 <email>yoft@163.com</email>
	  </author>
	  <category term="" scheme="http://www.yation.com/default.asp?cateID=8" label="Web编程||Yation.Team" /> 
	  <updated>2010-02-25T14:03:17+08:00</updated>
	  <published>2010-02-25T14:03:17+08:00</published>
		  <summary type="html"><![CDATA[<img align="right" src="http://www.yation.com/attachments/month_1001/h201011319924.jpg" border="0" alt=""/>　　　ThinkPHP中内置的cookie方法无效的解决方案，ThinkPHP内置Cookie类只是对setcookie的简单封装，但使用起来却老是无效。这个问题纠结了我一整天终于找到了原因。<br/><br/>以下现象出现在ThinkPHP 2.0中。<br/><br/>故障现象1：使用cookie能发送cookie到浏览器，但是设置有效时间没用。代码：cookie(&#39;c_name&#39;,&#39;c_data&#39;,3600);该条语句发送一个名称为c_name，内容为c_data，有效时间为1天的Cookie到浏览器。结果cookie能发送但是过期时间总是“当会话结束时”，百思不得其解，看下cookie函数的源码（ThinkPHP/Common/functions.php）834行：<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.yation.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>function cookie($name,$value=&#39;&#39;,$option=null)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;// 默认设置<br/>&nbsp;&nbsp;&nbsp;&nbsp;$config = array(<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;prefix&#39; =&gt; C(&#39;COOKIE_PREFIX&#39;), // cookie 名称前缀<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;expire&#39; =&gt; C(&#39;COOKIE_EXPIRE&#39;), // cookie 保存时间<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;path&#39;&nbsp;&nbsp; =&gt; C(&#39;COOKIE_PATH&#39;),&nbsp;&nbsp; // cookie 保存路径<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;domain&#39; =&gt; C(&#39;COOKIE_DOMAIN&#39;), // cookie 有效域名<br/>&nbsp;&nbsp;&nbsp;&nbsp;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;// 参数设置(会覆盖黙认设置)<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (!empty($option)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (is_numeric($option))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$option = array(&#39;expire&#39;=&gt;$option);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elseif( is_string($option) )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parse_str($option,$option);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array_merge($config,array_change_key_case($option));<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;// 清除指定前缀的所有cookie<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (is_null($name)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (empty($_COOKIE)) return;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 要删除的cookie前缀，不指定则删除config设置的指定前缀<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $prefix = empty($value)? $config[&#39;prefix&#39;] : $value;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!empty($prefix))// 如果前缀为空字符串将不作处理直接返回<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach($_COOKIE as $key=&gt;$val) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (0 === stripos($key,$prefix)){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setcookie($_COOKIE[$key],&#39;&#39;,time()-3600,$config[&#39;path&#39;],$config[&#39;domain&#39;]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unset($_COOKIE[$key]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;$name = $config[&#39;prefix&#39;].$name;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (&#39;&#39;===$value){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return isset($_COOKIE[$name]) ? unserialize($_COOKIE[$name]) : null;// 获取指定Cookie<br/>&nbsp;&nbsp;&nbsp;&nbsp;}else {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (is_null($value)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setcookie($name,&#39;&#39;,time()-3600,$config[&#39;path&#39;],$config[&#39;domain&#39;]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unset($_COOKIE[$name]);// 删除指定cookie<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 设置cookie<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$expire = !empty($config[&#39;expire&#39;])? time()+ intval($config[&#39;expire&#39;]):0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setcookie($name,serialize($value),$expire,$config[&#39;path&#39;],$config[&#39;domain&#39;]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$_COOKIE[$name] = serialize($value);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/></div></div><br/>　　　　array_merge($config,array_change_key_case($option));　这条语句就是用来实现设置参数覆盖黙认设置。不过array_merge($array1,$array2);返回的独立的数据集合并没有更新$array1或$arrary2；所以单array_merge($config,array_change_key_case($option));是无法改变$config默认设置的。应该改成<div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.yation.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>$config = array_merge($config,array_change_key_case($option));<br/></div></div><br/><br/>故障现象2：$_COOKIE[&#39;c_name&#39;] 可以显示出结果，但是浏览器中并没有cookie数据。<br/>&nbsp;&nbsp;&nbsp;&nbsp;这个现象也比较烦躁，ThinkPHP中Cookie类仅对setcookie方法进行了简单的封装，所以问题没处在ThinkPHP，百度了下大都说setcookie之前不能有任何输出以及BOM头信息。]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.yation.com/article/webpro/thinkphp_cookie.htm" /> 
	  <id>http://www.yation.com/default.asp?id=93</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Yation作品：湘潭市双环机械设备开发有限公司网站]]></title>
	  <author>
		 <name>yation</name>
		 <uri>http://www.yation.com/</uri>
		 <email>yoft@163.com</email>
	  </author>
	  <category term="" scheme="http://www.yation.com/default.asp?cateID=6" label="作品相关||Yation.Team" /> 
	  <updated>2010-02-01T21:56:06+08:00</updated>
	  <published>2010-02-01T21:56:06+08:00</published>
		  <summary type="html"><![CDATA[<div align="center"><img style="cursor:pointer" src="http://www.yation.com/attachments/month_1002/o201021214846.jpg" border="0" alt="" onclick="showimg(this.src);return false;"/></div><br/><br/><strong><a href="http://www.yation.com/default.asp?cateID=6" target="_blank">作品</a>名称：</strong>湘潭市双环机械设备开发有限公司网站<br/><strong><a href="http://www.yation.com/default.asp?cateID=6" target="_blank">作品</a>简介：</strong>双环机械设备开发有限公司网站是一个典型的企业站，和以往<a href="http://www.yation.com/default.asp?cateID=6" target="_blank">作品</a>的不同在于双环机械是一个中英双语的站点，为此特意采用UTF-8国际通用编码。<br/><strong><a href="http://www.yation.com/default.asp?cateID=6" target="_blank">作品</a>演示：</strong>【<a target="_blank" href="http://www.eggmachine.com/" rel="external">查看演示</a>】]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.yation.com/article/yation/xiangtanshuanghuan.htm" /> 
	  <id>http://www.yation.com/default.asp?id=92</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[雅讯在两大搜索引擎情况对比，Google的收录量飙升，Baidu暴跌]]></title>
	  <author>
		 <name>yation</name>
		 <uri>http://www.yation.com/</uri>
		 <email>yoft@163.com</email>
	  </author>
	  <category term="" scheme="http://www.yation.com/default.asp?cateID=10" label="电脑网络||Yation.Team" /> 
	  <updated>2010-01-28T10:40:40+08:00</updated>
	  <published>2010-01-28T10:40:40+08:00</published>
		  <summary type="html"><![CDATA[　　近来因工作需要稍微研究了下UCH，并发表了一篇关于“<a target="_blank" href="http://www.yation.com/article/webpro/uchome_cache.htm" rel="external">UCHome缓存技术的实现</a>”的博文，今天上班打开统计报表看了下 发现搜索Uchome缓存的关键字从谷歌带来了一些流量，到谷歌查了下“Uchome缓存技术”这篇文章排名第一位，窃喜呵呵。随后检查了下全站搜录量发现<a href="http://www.yation.com" target="_blank">雅讯</a>今天在谷歌的收录量飙升到1140条（往日平稳在210左右），而再百度中却暴跌到只有1条（往日一般平稳在120左右）。<br/><br/>　　搜录量出现骤变是不好的现象（个人认为），曾经有个客户的站点在谷歌的收录量每天以倍数增长，欣喜过后发现狂涨之后被K到10几页都看不到名字，搜索引擎就像女人，很难琢磨的。以下是今日收录量的截图做个纪念呵呵。<br/><br/><div align="center"><img style="cursor:pointer" src="http://www.yation.com/attachments/month_1001/r2010128103558.jpg" border="0" alt="" onclick="showimg(this.src);return false;"/><br/><br/><img style="cursor:pointer" src="http://www.yation.com/attachments/month_1001/72010128103754.jpg" border="0" alt="" onclick="showimg(this.src);return false;"/></div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.yation.com/article/network/yation_seo.htm" /> 
	  <id>http://www.yation.com/default.asp?id=91</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[MySQL命令及使用技巧以及当前时间字段默认值设置]]></title>
	  <author>
		 <name>yation</name>
		 <uri>http://www.yation.com/</uri>
		 <email>yoft@163.com</email>
	  </author>
	  <category term="" scheme="http://www.yation.com/default.asp?cateID=8" label="Web编程||Yation.Team" /> 
	  <updated>2010-01-15T11:38:35+08:00</updated>
	  <published>2010-01-15T11:38:35+08:00</published>
		  <summary type="html"><![CDATA[<img align="right" src="http://www.yation.com/attachments/month_1001/3201011511384.jpg" border="0" alt=""/>　　MySQL数据库中需要建立时间字段并且设置其默认值为当前执行时间的方法是：建立字段类型为timestamp，并设置默认值为CURRENT_TIMESTAMP。即可，另外方法是设置字段为timestamp或者varchar，在执行插入语句时带入的值为 Now()，这个函数产生的时间格式为：2010-01-15 11:28:50。<br/>如果字段类型为DATE，只能存储精确到日期，格式也就是2010-01-15。而有的时候只需要精确到日期，那么自动就可以选择为DATE，插入值可以写 CURRENT_DATE 就可以了。为了更直观的了解NOW()和CURRENT_DATE可在Shell中执行 Sel&#101;ct NOW() ; 和 Sel&#101;ct CURRENT_DATE;查看执行结果。<br/><br/>MYsql中时间字段比较查询语句： sel&#101;ct regtime from uc_member wh&#101;re&nbsp;&nbsp;status = 1 and (to_days(regtime)) between to_days(&#39;2010-02-06&#39;) and to_days(&#39;2010-02-07&#39;);<br/><br/><br/>　　以下是摘录过来的一些使用方法和技巧，骗稿费用的 呵呵。<br/><br/>　　如果MYSQL运行在服务器上,而你在客户端需要连接的化,需要按如下方式进行连接: shell&gt;mysql -h host -u user -p Enter password:************ host和user分别代表MySQL服务器运行的主机名和MySQL帐户名.添写时写上对应的机器的名称和MySQL用户名. *********代表你的密码. 如果MYSQL运行在服务器上,而你在客户端需要连接的化,需要按如下方式进行连接:<br/>　　shell&gt;mysql -h host -u user -p<br/>　　Enter password:************<br/>　　host和user分别代表MySQL服务器运行的主机名和MySQL帐户名.添写时写上对应的机器的名称和MySQL用户名. *********代表你的密码.<br/>　　如果有效,你会看到如下提示:<br/>　　Welcome to the MySQL monitor. Commands end with ; o&#114; \g.<br/>　　Your MySQL connection id is 7 to server version: 5.0.18-nt<br/>　　Type &#39;help;&#39; o&#114; &#39;\h&#39; for help. Type &#39;\c&#39; to clear the buffer.<br/>　　mysql&gt;<br/>　　mysql&gt;提示符告诉你该输入命令了.<br/>　　有些时候MySQL会允许你匿名登陆到服务器上,此时直接输入mysql即可.<br/>　　shell&gt; mysql<br/>　　成功连接后,可在mysql&gt;提示下输入quit随时退出:<br/>　　mysql&gt; quit<br/>　　Bye<br/>　　下面显示一个简单的查询实例,这是一个简单命令,要求得到服务器的版本号和当前日期:<br/>　　mysql&gt; sel&#101;ct version(), current_date;<br/>　　+-----------+--------------+<br/>　　version() current_date<br/>　　+-----------+--------------+<br/>　　5.0.18-nt 2006-07-29<br/>　　+-----------+--------------+<br/>　　1 row in set (0.00 sec)<br/>　　mysql&gt;<br/>　　在这里我们要明白:<br/>　　一个命令通常由SQL语句组成,随后跟着一个分号.<br/>　　MySQL的显示结果用表格(行和列)方式输出.第一行为列的标签,随后行为查询的结果.通常列标签是你查询的数据库表的列名,但若检索的是一表达式而非列值(如上一个例子),通常用表达式本身来标记列.<br/>　　随后它会显示返回了多少行以及查询时间,它提供了服务器性能的一个大致估计.它表示的是时钟时间并非CPU或机器时间.<br/>　　能够以大小写输入关键字,即在MySQL中大小写是等价的,但在一个查询语句中,要求大小写统一.<br/>　　以下是另一个查询:<br/>　　mysql&gt; Sel&#101;ct SIN(PI()/4), (4+1)*5;<br/>　　+------------------+---------+<br/>　　SIN(PI()/4) (4+1)*5<br/>　　+------------------+---------+<br/>　　0.70710678118655 25<br/>　　+------------------+---------+<br/>　　1 row in set (0.02 sec)<br/>　　mysql&gt;<br/>　　可以在一行上输入多条语句,如:<br/>　　mysql&gt; Sel&#101;ct VERSION(); Sel&#101;ct NOW();<br/>　　+-----------------+<br/>　　VERSION()<br/>　　+-----------------+<br/>　　5.1.2-alpha-log<br/>　　+-----------------+<br/>　　1 row in set (0.00 sec)<br/>　　+---------------------+<br/>　　NOW()<br/>　　+---------------------+<br/>　　2005-10-11 15:15:00<br/>　　+---------------------+<br/>　　1 row in set (0.00 sec)<br/>　　mysql&gt;<br/>　　较长的命令可以分多行输入. MySQL是通过分号来判断语句是否结束,而不是换行.<br/>　　下面是一个简单的多行语句的例子:<br/>　　mysql&gt; sel&#101;ct<br/>　　-&gt; user(),<br/>　　-&gt; current_date;<br/>　　+---------------+--------------+<br/>　　USER() CURRENT_DATE<br/>　　+---------------+--------------+<br/>　　jon@localhost 2005-10-11<br/>　　+---------------+--------------+<br/>　　mysql&gt;<br/>　　在这个例子中,输入多行查询的第一行后,你可以看提示符变为 -&gt;,这就是说MySQL没有找到语句结束标识正在等待剩余的输入部分. 如果不想执行正在输入过程的一个命令,输入\c 取消它:<br/>　　mysql&gt; sel&#101;ct<br/>　　-&gt; user()<br/>　　-&gt; \c<br/>　　mysql&gt;<br/>　　下面显示的是各个提示符以及它们所表示的MySQL的状态:<br/>　　提示符 含义<br/>　　mysql&gt; 准备好接受新命令。<br/>　　-&gt; 等待多行命令的下一行。<br/>　　&#39;&gt; 等待下一行，等待以单引号(“&#39;”)开始的字符串的结束。<br/>　　&#34;&gt; 等待下一行，等待以双引号(“&#34;”)开始的字符串的结束。<br/>　　`&gt; 等待下一行，等待以反斜点(‘`’)开始的识别符的结束。<br/>　　/*&gt; 等待下一行，等待以/*开始的注释的结束。<br/><br/>在MySQL中使用Rand()抽取随即数据<br/><br/>　　你不能在一个ORDER BY子句用RAND()值使用列，因为ORDER BY将重复计算列多次。然而在MySQL3.23中，你可以做： Sel&#101;ct * FROM table_name o&#114;DER BY RAND()，这是有利于得到一个来自Sel&#101;ct * FROM table1,table2 Wh&#101;re a=b AND c 实现随机，从手册中找到了下面这个语句，可以完成任务：<br/>　　Sel&#101;ct * FROM table_name o&#114;DER BY rand() LIMIT 5;<br/>　　rand在手册里是这么说的:：<br/>　　RAND()<br/>　　RAND(N)<br/>　　返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指定，它被用作种子值。<br/>　　mysql&gt; sel&#101;ct RAND();<br/>　　-&gt; 0.5925<br/>　　mysql&gt; sel&#101;ct RAND(20);<br/>　　-&gt; 0.1811<br/>　　mysql&gt; sel&#101;ct RAND(20);<br/>　　-&gt; 0.1811<br/>　　mysql&gt; sel&#101;ct RAND();<br/>　　-&gt; 0.2079<br/>　　mysql&gt; sel&#101;ct RAND();<br/>　　-&gt; 0.7888<br/>　　你不能在一个ORDER BY子句用RAND()值使用列，因为ORDER BY将重复计算列多次。然而在MySQL3.23中，你可以做： Sel&#101;ct * FROM table_name o&#114;DER BY RAND()，这是有利于得到一个来自Sel&#101;ct * FROM table1,table2 Wh&#101;re a=b AND c<br/>　　注意在一个Wh&#101;re子句里的一个RAND()将在每次Wh&#101;re被执行时重新评估。<br/>　　但试了一下，8千条记录的表，执行一次需要0.08 sec，慢了些。后来请教了google，得到如下代码：<br/>　　Sel&#101;ct * FROM table_name AS r1 JOIN (Sel&#101;ct ROUND(RAND() * (Sel&#101;ct MAX(id) FROM table_name)) AS id) AS r2 Wh&#101;re r1.id &gt;= r2.id o&#114;DER BY r1.id ASC LIMIT 5;<br/>　　执行效率需要0.02 sec.可惜的是,只有mysql 4.1.*以上才支持这样的子查询.<br/><br/>---------------------不算华丽的分割线----------------------------------<br/><br/><img align="right" src="http://www.yation.com/attachments/month_1001/3201011511384.jpg" border="0" alt=""/>　　MySQL数据库中需要建立时间字段并且设置其默认值为当前执行时间的方法是：建立字段类型为timestamp，并设置默认值为CURRENT_TIMESTAMP。即可，另外方法是设置字段为timestamp或者varchar，在执行插入语句时带入的值为 Now()，这个函数产生的时间格式为：2010-01-15 11:28:50。<br/>如果字段类型为DATE，只能存储精确到日期，格式也就是2010-01-15。而有的时候只需要精确到日期，那么自动就可以选择为DATE，插入值可以写 CURRENT_DATE 就可以了。为了更直观的了解NOW()和CURRENT_DATE可在Shell中执行 Sel&#101;ct NOW() ; 和 Sel&#101;ct CURRENT_DATE;查看执行结果。<br/><br/>　　以下是摘录过来的一些使用方法和技巧，骗稿费用的 呵呵。<br/><br/>　　如果MYSQL运行在服务器上,而你在客户端需要连接的化,需要按如下方式进行连接: shell&gt;mysql -h host -u user -p Enter password:************ host和user分别代表MySQL服务器运行的主机名和MySQL帐户名.添写时写上对应的机器的名称和MySQL用户名. *********代表你的密码. 如果MYSQL运行在服务器上,而你在客户端需要连接的化,需要按如下方式进行连接:<br/>　　shell&gt;mysql -h host -u user -p<br/>　　Enter password:************<br/>　　host和user分别代表MySQL服务器运行的主机名和MySQL帐户名.添写时写上对应的机器的名称和MySQL用户名. *********代表你的密码.<br/>　　如果有效,你会看到如下提示:<br/>　　Welcome to the MySQL monitor. Commands end with ; o&#114; \g.<br/>　　Your MySQL connection id is 7 to server version: 5.0.18-nt<br/>　　Type &#39;help;&#39; o&#114; &#39;\h&#39; for help. Type &#39;\c&#39; to clear the buffer.<br/>　　mysql&gt;<br/>　　mysql&gt;提示符告诉你该输入命令了.<br/>　　有些时候MySQL会允许你匿名登陆到服务器上,此时直接输入mysql即可.<br/>　　shell&gt; mysql<br/>　　成功连接后,可在mysql&gt;提示下输入quit随时退出:<br/>　　mysql&gt; quit<br/>　　Bye<br/>　　下面显示一个简单的查询实例,这是一个简单命令,要求得到服务器的版本号和当前日期:<br/>　　mysql&gt; sel&#101;ct version(), current_date;<br/>　　+-----------+--------------+<br/>　　version() current_date<br/>　　+-----------+--------------+<br/>　　5.0.18-nt 2006-07-29<br/>　　+-----------+--------------+<br/>　　1 row in set (0.00 sec)<br/>　　mysql&gt;<br/>　　在这里我们要明白:<br/>　　一个命令通常由SQL语句组成,随后跟着一个分号.<br/>　　MySQL的显示结果用表格(行和列)方式输出.第一行为列的标签,随后行为查询的结果.通常列标签是你查询的数据库表的列名,但若检索的是一表达式而非列值(如上一个例子),通常用表达式本身来标记列.<br/>　　随后它会显示返回了多少行以及查询时间,它提供了服务器性能的一个大致估计.它表示的是时钟时间并非CPU或机器时间.<br/>　　能够以大小写输入关键字,即在MySQL中大小写是等价的,但在一个查询语句中,要求大小写统一.<br/>　　以下是另一个查询:<br/>　　mysql&gt; Sel&#101;ct SIN(PI()/4), (4+1)*5;<br/>　　+------------------+---------+<br/>　　SIN(PI()/4) (4+1)*5<br/>　　+------------------+---------+<br/>　　0.70710678118655 25<br/>　　+------------------+---------+<br/>　　1 row in set (0.02 sec)<br/>　　mysql&gt;<br/>　　可以在一行上输入多条语句,如:<br/>　　mysql&gt; Sel&#101;ct VERSION(); Sel&#101;ct NOW();<br/>　　+-----------------+<br/>　　VERSION()<br/>　　+-----------------+<br/>　　5.1.2-alpha-log<br/>　　+-----------------+<br/>　　1 row in set (0.00 sec)<br/>　　+---------------------+<br/>　　NOW()<br/>　　+---------------------+<br/>　　2005-10-11 15:15:00<br/>　　+---------------------+<br/>　　1 row in set (0.00 sec)<br/>　　mysql&gt;<br/>　　较长的命令可以分多行输入. MySQL是通过分号来判断语句是否结束,而不是换行.<br/>　　下面是一个简单的多行语句的例子:<br/>　　mysql&gt; sel&#101;ct<br/>　　-&gt; user(),<br/>　　-&gt; current_date;<br/>　　+---------------+--------------+<br/>　　USER() CURRENT_DATE<br/>　　+---------------+--------------+<br/>　　jon@localhost 2005-10-11<br/>　　+---------------+--------------+<br/>　　mysql&gt;<br/>　　在这个例子中,输入多行查询的第一行后,你可以看提示符变为 -&gt;,这就是说MySQL没有找到语句结束标识正在等待剩余的输入部分. 如果不想执行正在输入过程的一个命令,输入\c 取消它:<br/>　　mysql&gt; sel&#101;ct<br/>　　-&gt; user()<br/>　　-&gt; \c<br/>　　mysql&gt;<br/>　　下面显示的是各个提示符以及它们所表示的MySQL的状态:<br/>　　提示符 含义<br/>　　mysql&gt; 准备好接受新命令。<br/>　　-&gt; 等待多行命令的下一行。<br/>　　&#39;&gt; 等待下一行，等待以单引号(“&#39;”)开始的字符串的结束。<br/>　　&#34;&gt; 等待下一行，等待以双引号(“&#34;”)开始的字符串的结束。<br/>　　`&gt; 等待下一行，等待以反斜点(‘`’)开始的识别符的结束。<br/>　　/*&gt; 等待下一行，等待以/*开始的注释的结束。<br/><br/>在MySQL中使用Rand()抽取随即数据<br/><br/>　　你不能在一个ORDER BY子句用RAND()值使用列，因为ORDER BY将重复计算列多次。然而在MySQL3.23中，你可以做： Sel&#101;ct * FROM table_name o&#114;DER BY RAND()，这是有利于得到一个来自Sel&#101;ct * FROM table1,table2 Wh&#101;re a=b AND c 实现随机，从手册中找到了下面这个语句，可以完成任务：<br/>　　Sel&#101;ct * FROM table_name o&#114;DER BY rand() LIMIT 5;<br/>　　rand在手册里是这么说的:：<br/>　　RAND()<br/>　　RAND(N)<br/>　　返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指定，它被用作种子值。<br/>　　mysql&gt; sel&#101;ct RAND();<br/>　　-&gt; 0.5925<br/>　　mysql&gt; sel&#101;ct RAND(20);<br/>　　-&gt; 0.1811<br/>　　mysql&gt; sel&#101;ct RAND(20);<br/>　　-&gt; 0.1811<br/>　　mysql&gt; sel&#101;ct RAND();<br/>　　-&gt; 0.2079<br/>　　mysql&gt; sel&#101;ct RAND();<br/>　　-&gt; 0.7888<br/>　　你不能在一个ORDER BY子句用RAND()值使用列，因为ORDER BY将重复计算列多次。然而在MySQL3.23中，你可以做： Sel&#101;ct * FROM table_name o&#114;DER BY RAND()，这是有利于得到一个来自Sel&#101;ct * FROM table1,table2 Wh&#101;re a=b AND c<br/>　　注意在一个Wh&#101;re子句里的一个RAND()将在每次Wh&#101;re被执行时重新评估。<br/>　　但试了一下，8千条记录的表，执行一次需要0.08 sec，慢了些。后来请教了google，得到如下代码：<br/>　　Sel&#101;ct * FROM table_name AS r1 JOIN (Sel&#101;ct ROUND(RAND() * (Sel&#101;ct MAX(id) FROM table_name)) AS id) AS r2 Wh&#101;re r1.id &gt;= r2.id o&#114;DER BY r1.id ASC LIMIT 5;<br/>　　执行效率需要0.02 sec.可惜的是,只有mysql 4.1.*以上才支持这样的子查询.<br/>---------------------------------不算华丽的分割线---------------------------------<br/><br/>MYSQL 命令行<br/><br/>1、mysql服务的启动和停止 <br/>net stop mysql <br/>net start mysql <br/><br/>2、登陆mysql <br/>语法如下： mysql -u用户名 -p用户密码 <br/>键入命令mysql -uroot -p， 回车后提示你输入密码，输入12345，然后回车即可进入到mysql中了，mysql的提示符是： <br/>mysql&gt; <br/>注意，如果是连接到另外的机器上，则需要加入一个参数-h机器IP <br/><br/>3、增加新用户 <br/>格式：grant 权限 on 数据库.* to 用户名@登录主机 identified by &#34;密码&#34; <br/>如，增加一个用户user1密码为password1，让其可以在本机上登录， 并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql，然后键入以下命令： <br/>grant sel&#101;ct,ins&#101;rt,up&#100;ate,del&#101;te on *.* to user1@localhost Identified by &#34;password1&#34;; <br/>如果希望该用户能够在任何机器上登陆mysql，则将localhost改为&#34;%&#34;。 <br/>如果你不想user1有密码，可以再打一个命令将密码去掉。 <br/>grant sel&#101;ct,ins&#101;rt,up&#100;ate,del&#101;te on mydb.* to user1@localhost identified by &#34;&#34;; <br/><br/>4： 操作数据库 <br/>登录到mysql中，然后在mysql的提示符下运行下列命令，每个命令以分号结束。 <br/>1、 显示数据库列表。 <br/>show databases; <br/>缺省有两个数据库：mysql和test。 mysql库存放着mysql的系统和用户权限信息，我们改密码和新增用户，实际上就是对这个库进行操作。 <br/>2、 显示库中的数据表： <br/>use mysql; <br/>show tables; <br/>3、 显示数据表的结构： <br/>describe 表名; <br/>4、 建库与删库： <br/>cr&#101;ate database 库名; <br/>dro&#112; database 库名; <br/>5、 建表： <br/>use 库名; <br/>cr&#101;ate table 表名(字段列表); <br/>dro&#112; table 表名; <br/>6、 清空表中记录： <br/>del&#101;te from 表名; <br/>7、 显示表中的记录： <br/>sel&#101;ct * from 表名; <br/><br/>5、导出和导入数据 <br/>1. 导出数据： <br/>mysqldump --opt test &gt; mysql.test <br/>即将数据库test数据库导出到mysql.test文件，后者是一个文本文件 <br/>如：mysqldump -u root -p123456 --databases dbname &gt; mysql.dbname <br/>就是把数据库dbname导出到文件mysql.dbname中。 <br/>2. 导入数据: <br/>mysqlimport -u root -p123456 &lt; mysql.dbname。 <br/>不用解释了吧。 <br/>3. 将文本数据导入数据库: <br/>文本数据的字段数据之间用tab键隔开。 <br/>use test; <br/>load data local infile &#34;文件名&#34; into table 表名; <br/>1:使用SHOW语句找出在服务器上当前存在什么数据库： <br/>mysql&gt; SHOW DATABASES; <br/>2:2、创建一个数据库MYSQLDATA <br/>mysql&gt; Cr&#101;ate DATABASE MYSQLDATA; <br/>3:选择你所创建的数据库 <br/>mysql&gt; USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功！) <br/>4:查看现在的数据库中存在什么表 <br/>mysql&gt; SHOW TABLES; <br/>5:创建一个数据库表 <br/>mysql&gt; Cr&#101;ate TABLE MYTABLE (name VARCHAR(20), sex CHAR(1)); <br/>6:显示表的结构： <br/>mysql&gt; DESCRIBE MYTABLE; <br/>7:往表中加入记录 <br/>mysql&gt; ins&#101;rt into MYTABLE values (&#34;hyq&#34;,&#34;M&#34;); <br/>8:用文本方式将数据装入数据库表中（例如D:/mysql.txt） <br/>mysql&gt; LOAD DATA LOCAL INFILE &#34;D:/mysql.txt&#34; INTO TABLE MYTABLE; <br/>9:导入.sql文件命令（例如D:/mysql.sql） <br/>mysql&gt;use database; <br/>mysql&gt;source d:/mysql.sql; <br/>10:删除表 <br/>mysql&gt;dro&#112; TABLE MYTABLE; <br/>11:清空表 <br/>mysql&gt;del&#101;te from MYTABLE; <br/>12:更新表中数据 <br/>mysql&gt;up&#100;ate MYTABLE set sex=&#34;f&#34; wh&#101;re name=&#39;hyq&#39;; 13：备份数据库mysqldump -u root 库名&gt;xxx.data14： <br/><br/>例2：连接到远程主机上的MYSQL <br/>　　假设远程主机的IP为：110.110.110.110，用户名为root,密码为abcd123。则键入以下命令： 　　　 <br/><br/>　　mysql -h110.110.110.110 -uroot -pabcd123 　　 <br/><br/>　　（注:u与root可以不用加空格，其它也一样） 　　 <br/><br/>　　3、退出MYSQL命令： exit <br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.yation.com/article/webpro/MySQL_TIMESTAMP.htm" /> 
	  <id>http://www.yation.com/default.asp?id=90</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[ThinkPHP使用备忘打记]]></title>
	  <author>
		 <name>yation</name>
		 <uri>http://www.yation.com/</uri>
		 <email>yoft@163.com</email>
	  </author>
	  <category term="" scheme="http://www.yation.com/default.asp?cateID=8" label="Web编程||Yation.Team" /> 
	  <updated>2010-01-13T17:49:37+08:00</updated>
	  <published>2010-01-13T17:49:37+08:00</published>
		  <summary type="html"><![CDATA[<img align="right" src="http://www.yation.com/attachments/month_1001/h201011319924.jpg" border="0" alt=""/>　　导入外部CSS文件必须指定type属性的值，例如：<br/><br/>&lt;import type=&#39;css&#39; file=&#34;Css.common&#34; /&gt;<br/><br/>上面的方式默认的import的起始路径是网站的Public目录，如果需要指定其他的目录，可以使用basepath属性，例如：<br/><br/>&lt;import file=&#34;Js.Util.Array&#34;&nbsp;&nbsp;basepath=&#34;./Common&#34; /&gt;<br/><br/>IF标签<br/>如果觉得上面的标签都无法满足条件判断要求的话，我们还可以使用if标签来定义复杂的条件判断，例如：<br/><br/>&lt;if condition=&#34;($name eq 1) o&#114; ($name gt 100) &#34;&gt; value1<br/><br/>&lt;elseif condition=&#34;$name eq 2&#34; /&gt;value2<br/><br/>&lt;else /&gt; value3<br/><br/>&lt;/if&gt;<br/><br/>在condition属性中可以支持eq等判断表达式 ，同上面的比较标签，但是不支持带有”&gt;”、”&lt;”等符号的用法，因为会混淆模板解析，所以下面的用法是错误的：<br/><br/>&lt;if condition=&#34;$id &lt; 5 &#34;&gt; value1<br/><br/>&lt;else /&gt; value2<br/><br/>&lt;/if&gt;<br/><br/>必须改成：<br/><br/>&lt;if condition=&#34;$id lt 5 &#34;&gt; value1<br/><br/>&lt;else /&gt; value2<br/><br/>&lt;/if&gt;<br/><br/>由于if标签的condition属性里面基本上使用的是php语法，尽可能使用判断标签和Switch标签会更加简洁，原则上来说，能够用switch和比较标签解决的尽量不用if标签完成。因为switch和比较标签可以使用变量调节器和系统变量。如果某些特殊的要求下面，IF标签仍然无法满足要求的话，可以使用原生php代码或者PHP标签来直接书写代码。<br/><br/>Php代码可以和标签在模板文件中混合使用，可以在模板文件里面书写任意的PHP语句代码 ，包括下面两种方式：<br/><br/>第一种是使用php标签：<br/><br/>&lt;php&gt;echo &#39;Hello,world!&#39;;&lt;/php&gt;<br/><br/>第二种就是直接使用原始的php代码：<br/><br/>&lt;?php echo &#39;Hello,world!&#39;; ?&gt;<br/><br/>但是php标签或者php代码里面就不能再使用标签（包括普通标签和XML标签）了，因此下面的几种方式都是无效的：<br/><br/>&lt;php&gt;&lt;eq name=&#39;name&#39; value=&#39;value&#39;&gt;value&lt;/eq&gt;&lt;/php&gt;<br/><br/>Php标签里面使用了eq标签，因此无效<br/><br/>&lt;php&gt;if( {$user} != &#39;ThinkPHP&#39; ) echo&nbsp;&nbsp;&#39;ThinkPHP&#39; ;&lt;/php&gt;<br/><br/>Php标签里面使用了{$user}普通标签输出变量 ，因此无效。<br/><br/>&lt;php&gt;if( $user.name != &#39;ThinkPHP&#39; ) echo&nbsp;&nbsp;&#39;ThinkPHP&#39; ;&lt;/php&gt;<br/><br/>Php标签里面使用了$user.name 变量输出 ，因此无效。<br/><br/>简而言之，在PHP标签里面不能再使用PHP本身不支持的代码。<br/><br/>原样输出<br/>可以使用literal标签来防止模板标签被解析，例如：<br/><br/>&lt;literal&gt;<br/><br/>&lt;if condition=&#34;$name eq 1 &#34;&gt; value1<br/><br/>&lt;elseif condition=&#34;$name eq 2&#34; /&gt;value2<br/><br/>&lt;else /&gt; value3<br/><br/>&lt;/if&gt;<br/><br/>&lt;/literal&gt;<br/><br/>上面的if标签被literal标签包含，因此if标签里面的内容并不会被模板引擎解析，而是保持原样输出。<br/><br/>Literal标签可以用于页面的JS代码外面，确保JS代码中的某些用法和模板引擎不产生混淆。<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.yation.com/article/webpro/thinkphp.htm" /> 
	  <id>http://www.yation.com/default.asp?id=89</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[UCHome通用方法，利于UCHome二次开发和插件开发]]></title>
	  <author>
		 <name>yation</name>
		 <uri>http://www.yation.com/</uri>
		 <email>yoft@163.com</email>
	  </author>
	  <category term="" scheme="http://www.yation.com/default.asp?cateID=8" label="Web编程||Yation.Team" /> 
	  <updated>2010-01-09T16:31:11+08:00</updated>
	  <published>2010-01-09T16:31:11+08:00</published>
		  <summary type="html"><![CDATA[<img align="right" src="http://www.yation.com/attachments/month_1001/n201019162952.jpg" border="0" alt=""/>　　近来需要对UCH产品进行二次开发，到网上收集些资料来做备忘了。<br/>　　熟悉uchome里一些自带的通用方法可以使我们在对uchome二次开发或制作uchome插件的时候更加顺心应手。因为这些方法都是 uchome里早就定义好了的全局函数，在调用的时候只需要在文件头部加上function_common.php这个文件的引用就可以方便的调用这些方法了。但是如果你连最基本的php知识都不了解的话，那就需要慎用这些方法了。<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.yation.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>//SQL ADDSLASHES<br/>function saddslashes($string) return $string;<br/>//取消HTML代码<br/>function shtmlspecialchars($string)&nbsp;&nbsp; return $string;<br/>//字符串解密加密<br/>function authcode($string, $operation = ‘DECODE’, $key = ”, $expiry = 0)<br/>//清空cookie<br/>function clearcookie()<br/>//cookie设置<br/>function ssetcookie($var, $value, $life=0)<br/>//数据库连接<br/>function dbconnect()<br/>//获取在线IP<br/>function getonlineip($format=0)<br/>//判断当前用户登录状态<br/>function checkauth()<br/>//获取用户app列表<br/>function getuserapp($uid=0)<br/>//获取到表名<br/>function tname($name)<br/>//对话框<br/>function showmessage($msgkey, $url_forward=”, $second=1, $values=array())<br/>//判断提交是否正确<br/>function submitcheck($var)<br/>//添加数据<br/>function ins&#101;rttable($tablename, $ins&#101;rtsqlarr, $returnid=0, $replace = false, $silent=0)&nbsp;&nbsp; return ins&#101;rt_id;<br/>//更新数据<br/>function up&#100;atetable($tablename, $setsqlarr, $wh&#101;resqlarr, $silent=0)<br/>//获取用户空间信息<br/>function getspace($key, $indextype=’uid’)<br/>//获取当前用户信息<br/>function getmember()<br/>//检查隐私<br/>function ckprivacy($type, $feedmode=0)<br/>//检查APP隐私<br/>function app_ckprivacy($privacy)<br/>//获取用户组<br/>function getgroupid($credit, $gid=0)<br/>//检查权限<br/>function checkperm($permtype)<br/>//写运行日志<br/>function runlog($file, $log, $halt=0)<br/>//获取字符串<br/>function getstr($string, $length, $in_slashes=0, $out_slashes=0, $censor=0, $bbcode=0, $html=0)<br/>//时间格式化<br/>function sgmdate($dateformat, $timestamp=”, $format=0)<br/>//字符串时间化<br/>function sstrtotime($string)<br/>//分页<br/>function multi($num, $perpage, $curpage, $mpurl)<br/>//ob<br/>function obclean()<br/>//模板调用<br/>function template($name)<br/>//子模板更新检查<br/>function subtplcheck($subfiles, $mktime, $tpl)<br/>//模块<br/>function block($param)<br/>//获取数目<br/>function getcount($tablename, $wh&#101;rearr, $get=’COUNT(*)’)<br/>//调整输出<br/>function ob_out()<br/>//rewrite链接<br/>function rewrite_url($pre, $para)<br/>//外链<br/>function iframe_url($url)<br/>//处理搜索关键字<br/>function stripsearchkey($string)<br/>//是否屏蔽二级域名<br/>function isholddomain($domain)<br/>//连接字符<br/>function simplode($ids)<br/>//显示进程处理时间<br/>function debuginfo()<br/>//格式化大小函数<br/>function formatsize($size)<br/>//获取文件内容<br/>function sreadfile($filename)<br/>//写入文件<br/>function swritefile($filename, $writetext, $openmod=’w’)<br/>//产生随机字符<br/>function random($length, $numeric = 0)<br/>//判断字符串是否存在<br/>function strexists($haystack, $needle)<br/>//获取数据<br/>function data_get($var, $isarray=0)<br/>//更新数据<br/>function data_set($var, $datavalue, $clean=0)<br/>//检查站点是否关闭<br/>function checkclose()<br/>//站点链接<br/>function getsiteurl()<br/>//获取文件名后缀<br/>function fileext($filename)<br/>//积分<br/>function creditrule($mode, $type)<br/>//更新积分<br/>function up&#100;atespacestatus($creditmode, $optype)<br/>//去掉slassh<br/>function sstripslashes($string)<br/>//显示广告<br/>function adshow($pagetype)<br/>//编码转换<br/>function siconv($str, $out_charset, $in_charset=”)<br/>//获取用户数据<br/>function getpassport($username, $password)<br/>//用户操作时间间隔检查<br/>function interval_check($type)<br/>//处理上传图片连接<br/>function mkpicurl($pic, $thumb=1)<br/>//处理<a href="http://www.yation.com/default.asp?cateID=10" target="_blank">网络</a>图片链接<br/>function getpicurl($picurl, $maxlenth=’200′)<br/>//处理积分星星<br/>function getstar($credit)<br/>//处理分页<br/>function smulti($start, $perpage, $count, $url, $ajaxdiv=”)<br/>//获取好友状态<br/>function getfriendstatus($uid, $fuid)<br/>//重新组建<br/>function renum($array)<br/>//检查定向<br/>function ckfriend($invalue)<br/>//整理feed<br/>function mkfeed($feed, $actors=array())<br/>//整理分享<br/>function mkshare($share)<br/>//ip访问允许<br/>function ipaccess($ipaccess)<br/>//ip访问禁止<br/>function ipbanned($ipbanned)<br/>//检查start<br/>function ckstart($start, $perpage)<br/>//处理头像<br/>function avatar($uid, $size=’small’)<br/>//检查是否登录<br/>function checklogin()<br/>//获得前台语言<br/>function lang($key, $vars=array())<br/>//获得后台语言<br/>function cplang($key, $vars=array())<br/>//语言替换<br/>function lang_replace($text, $vars)<br/>//获得用户组名<br/>function getfriendgroup()<br/>//截取链接<br/>function sub_url($url, $length)<br/>//获取用户名<br/>function realname_set($uid, $username, $name=”, $namestatus=0)<br/>//获取实名<br/>function realname_get()<br/>//添加窗口标题<br/>function window_set($title, $url, $icon=”)<br/>//更新用户配置<br/>function up&#100;ate_space_setting()<br/>//群组信息<br/>function getmtag($id)<br/>//取数组中的随机个<br/>function sarray_rand($arr, $num)<br/>//获得用户唯一串<br/>function space_key($space)<br/>//产生form防伪码<br/>function formhash() function_cache.php 引用:<br/>//更新配置文件<br/>function config_cache($up&#100;atedata=true)<br/>//更新用户组CACHE<br/>function usergroup_cache()<br/>//更新用户栏目缓存<br/>function profilefield_cache()<br/>//更新群组栏目缓存<br/>function profield_cache()<br/>//更新词语屏蔽<br/>function censor_cache()<br/>//更新积分规则<br/>function creditrule_cache()<br/>//更新广告缓存<br/>function ad_cache()<br/>//更新用户向导任务<br/>function task_cache()<br/>//更新模块<br/>function block_cache()<br/>//更新模板文件<br/>function tpl_cache()<br/>//更新模块缓存<br/>function block_data_cache()<br/>//更新应用名<br/>function app_cache()<br/>//递归清空目录<br/>function deltreedir($dir)<br/>//数组转换成字串<br/>function arrayeval($array, $level = 0)<br/>//写入<br/>function cache_write($name, $var, $values)function_cp.php 引用:<br/>//保存图片<br/>function pic_save($FILE, $albumid, $title ,$tid = 0)<br/>//数据流保存，所有数据均为存放相册的所以写入的数据一定只能是图片<br/>function stream_save($strdata, $albumid = 0, $fileext = ‘jpg’)<br/>//创建相册<br/>function album_creat($arr)<br/>//获取上传路径<br/>function getfilepath($fileext, $mkdir=false)<br/>//获取目录<br/>function sreaddir($dir, $extarr=array())<br/>//检查邮箱是否有效<br/>function isemail($email)<br/>//获取相册封面图片<br/>function getalbumpic($uid, $id)<br/>//获取个人分类<br/>function getclassarr($uid)<br/>//获取相册<br/>function getalbums($uid)<br/>//事件发布<br/>function feed_add($icon, $title_template=”, $title_data=array(), $body_template=”, $body_data=array(),<br/>$body_general=”, $images=array(), $image_links=array(), $target_ids=”, $friend=”, $appid=UC_APPID,<br/>$returnid=0, $system=0)<br/>//分享发布<br/>function share_add($type, $title_template, $body_template, $body_data, $body_general, $image=”,<br/>$image_link=”)<br/>//通知<br/>function notification_add($uid, $type, $note, $returnid=0)<br/>//更新好友状态<br/>function friend_up&#100;ate($uid, $username, $fuid, $fusername, $op=’add’, $gid=0)<br/>//更新好友缓存<br/>function friend_cache($uid)<br/>//检查验证码<br/>function ckseccode($seccode)<br/>//相册产生feed<br/>function album_feed($albumid)<br/>//更新隐私设置<br/>function privacy_up&#100;ate()<br/>//邀请好友<br/>function invite_up&#100;ate($inviteid, $uid, $username, $m_uid, $m_username)<br/>//获得邀请<br/>function invite_get($uid, $code)<br/>//实名认证<br/>function ckrealname($type)<br/>//邮件队列<br/>function addmailcron($touid, $email, $subject, $message=”, $mailtype=”)<br/>//检查头像是否上传<br/>function ckavatar($uid)<br/>//检查黑名单<br/>function isblacklist($to_uid)//管理后台通用方法<br/>function_admincp.php<br/>//获取限制条件<br/>function getwh&#101;res($intkeys, $strkeys, $randkeys, $likekeys, $pre=”)<br/>//获取排序<br/>function getorders($alloworders, $default, $pre=”)<br/>//对话框<br/>function cpmessage($msgkey, $url_forward=”, $second=1, $values=array())<br/>//检查是否操作创始人<br/>function ckfounder($uid)<br/>//生成站点key<br/>function mksitekey()<br/>//统计数据<br/>function getstatistics()<br/>//日志<br/>function admincp_log()function_op.php //帖子操作方法<br/>//合并tag<br/>function mergetag($tagids, $newtagid)<br/>//锁定/开放tag<br/>function closetag($tagids, $optype)<br/>//合并mtag<br/>function mergemtag($tagids, $newtagid)<br/>//锁定/开放tag<br/>function closemtag($tagids, $optype)<br/>//话题精华<br/>function digestthreads($tagid, $tids, $v)<br/>//话题置顶<br/>function topthreads($tagid, $tids, $v)//模块解析通用方法<br/>function_block.php<br/>//处理模块<br/>function block_batch($param)<br/>//获取模块缓存<br/>function block_get($cachekey)<br/>//更新模块<br/>function block_set($cachekey, $blockarr)<br/>//字符串解析<br/>function parseparameter($param)<br/>//获取缓存分类名<br/>function getcachedirname($cachekey, $ext=”)<br/>//MD5规则取缓存名<br/>function smd5($str)<br/>//获取数量sql<br/>function getcountsql($sqlstring, $rule, $tablename, $wh&#101;re)<br/>//获取数量和查询语句<br/>function getparamsql($paramarr)<br/>function mksqltime($time)<br/><br/></div></div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.yation.com/article/webpro/uchome_function.htm" /> 
	  <id>http://www.yation.com/default.asp?id=88</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[UCHome 缓存技术的实现，PHP缓存技术实现]]></title>
	  <author>
		 <name>yation</name>
		 <uri>http://www.yation.com/</uri>
		 <email>yoft@163.com</email>
	  </author>
	  <category term="" scheme="http://www.yation.com/default.asp?cateID=8" label="Web编程||Yation.Team" /> 
	  <updated>2010-01-09T16:16:12+08:00</updated>
	  <published>2010-01-09T16:16:12+08:00</published>
		  <summary type="html"><![CDATA[<img align="right" src="http://www.yation.com/attachments/month_1001/w201019161548.jpg" border="0" alt=""/>　　在康盛UCH中创建缓存只要使用“cache_write”方法就可以直接生成缓存了，非常的方便。为此特地去寻找了下实现的方法以及缓存机制。<br/><br/>代码如下：<div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.yation.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&lt;?php<br/>/**<br/> *<br/> * @param string $name<br/> * @param &lt;type&gt; $var<br/> * @param &lt;type&gt; $values<br/> *<br/> */<br/> define(&#34;S_ROOT&#34;,&#39;cache/&#39;);<br/> $name = &#39;test&#39;;<br/> $vars = array(&#39;config&#39;,&#39;config2&#39;);<br/> $values = array($vars,&#39;sdfghf&#39;,&#39;trrsfa&#39;);<br/> $var = &#39;_SGLOBAL[\&#39;test\&#39;]&#39;;<br/><br/>cache_write($name,$var,$values);<br/><br/>function cache_write($name, $var, $values) {<br/>&#160;&#160;&#160;&#160;$cachefile = S_ROOT.&#39;./data_&#39;.$name.&#39;.php&#39;;//设置缓存文件地址<br/>&#160;&#160;&#160;&#160;//exit(&#34;File:$cachefile&#34;);<br/>&#160;&#160;&#160;&#160;$cachetext = &#34;&lt;?php\r\n&#34;.<br/>&#160;&#160;&#160;&#160;//&#160;&#160;&#160;&#160;&#34;if(!defined(&#39;IN_UCHOME&#39;)) exit(&#39;Access Denied&#39;);\r\n&#34;.<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#39;$&#39;.$var.&#39;=&#39;.arrayeval($values).//将数组转换成字符串<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#34;\r\n?&gt;&#34;;<br/>&#160;&#160;&#160;&#160;if(!swritefile($cachefile, $cachetext)) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;exit(&#34;File: $cachefile write error.&#34;);<br/>&#160;&#160;&#160;&#160;}<br/>}<br/>/**<br/> * 数组转换成字串<br/> * @param array $array 要转换的数组<br/> * @param int $level 数组的层次<br/> * @return string 返回转换后的字符串<br/> */<br/>function arrayeval($array, $level = 0) {<br/>&#160;&#160;&#160;&#160;$space = &#39;&#39;;<br/>&#160;&#160;&#160;&#160;for($i = 0; $i &lt;= $level; $i++) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$space .= &#34;\t&#34;;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;$evaluate = &#34;Array\n$space(\n&#34;;<br/>&#160;&#160;&#160;&#160;$comma = $space;<br/>&#160;&#160;&#160;&#160;foreach($array as $key =&gt; $val) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//addcslashes($key, &#39;\&#39;\\&#39;);只对&#39;与\进行转义<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$key = is_string($key) ? &#39;\&#39;&#39;.addcslashes($key, &#39;\&#39;\\&#39;).&#39;\&#39;&#39; : $key;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果$key不是数字，则设置为字符串，如果是数字，则直接取数字<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$val = !is_array($val) &amp;&amp; (!preg_match(&#34;/^\-?\d+$/&#34;, $val) || strlen($val) &gt; 12 || substr($val, 0, 1)==&#39;0&#39;) ? &#39;\&#39;&#39;.addcslashes($val, &#39;\&#39;\\&#39;).&#39;\&#39;&#39; : $val;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//如果$val不是数字，则设置为字符串，如果是数字，则直接取数字<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(is_array($val)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果是数组，则再一次进行转换<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$evaluate .= &#34;$comma$key =&gt; &#34;.arrayeval($val, $level + 1);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} else {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$evaluate .= &#34;$comma$key =&gt; $val&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$comma = &#34;,\n$space&#34;;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;$evaluate .= &#34;\n$space)&#34;;<br/>&#160;&#160;&#160;&#160;return $evaluate;<br/>}<br/><br/>//写入文件<br/>function swritefile($filename, $writetext, $openmod=&#39;w&#39;) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(@$fp = fopen($filename, $openmod)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flock($fp, 2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fwrite($fp, $writetext);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose($fp);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;} else {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//runlog(&#39;error&#39;, &#34;File: $filename write error.&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/>?&gt;<br/></div></div><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.yation.com/article/webpro/uchome_cache.htm" /> 
	  <id>http://www.yation.com/default.asp?id=87</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Yation作品：江西省莲花中学校友会（校友录）]]></title>
	  <author>
		 <name>yation</name>
		 <uri>http://www.yation.com/</uri>
		 <email>yoft@163.com</email>
	  </author>
	  <category term="" scheme="http://www.yation.com/default.asp?cateID=6" label="作品相关||Yation.Team" /> 
	  <updated>2009-12-10T03:43:05+08:00</updated>
	  <published>2009-12-10T03:43:05+08:00</published>
		  <summary type="html"><![CDATA[<div align="center"><img style="cursor:pointer" src="http://www.yation.com/attachments/month_0912/82009121034240.jpg" border="0" alt="" onclick="showimg(this.src);return false;"/></div><br/><br/><strong><a href="http://www.yation.com/default.asp?cateID=6" target="_blank">作品</a>名称：</strong>莲花中学校友会<br/><strong><a href="http://www.yation.com/default.asp?cateID=6" target="_blank">作品</a>简介：</strong>莲中校友会是<a href="http://www.yation.com" target="_blank">Yation</a>制作开发中的一个项目，该项目采用asp.net+Sql2005构架，一切都还刚刚开始啊，呵呵先放一两个页面做演示，欢迎各行各业的朋友们提供意见。预计项目开发时间需要一个月的样子，呵呵纯开发比较耗时，好在会比LFCms先出来和大家见面的。<br/><strong><a href="http://www.yation.com/default.asp?cateID=6" target="_blank">作品</a>演示：</strong>【<a target="_blank" href="http://lzxyh.org/" rel="external">查看演示</a>】<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.yation.com/article/yation/lztxh.htm" /> 
	  <id>http://www.yation.com/default.asp?id=86</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[给MSSQL数据库创建安全用户，MSSQL数据库中登录名与用户名的区别]]></title>
	  <author>
		 <name>yation</name>
		 <uri>http://www.yation.com/</uri>
		 <email>yoft@163.com</email>
	  </author>
	  <category term="" scheme="http://www.yation.com/default.asp?cateID=8" label="Web编程||Yation.Team" /> 
	  <updated>2009-12-10T02:53:03+08:00</updated>
	  <published>2009-12-10T02:53:03+08:00</published>
		  <summary type="html"><![CDATA[<img align="right" src="http://www.yation.com/attachments/month_0912/a2009121025217.gif" border="0" alt=""/>　　实施步骤：创建数据库 --&gt; 创建登录 --&gt; 在相应数据库下创建用户并关联登录 --&gt; 授权用户相应权限；应用程序中数据库链接串使用的是登录名，用于连接数据库服务器的实例。<br/><br/>执行语句如下：<br/>USE master<br/>GO<br/><br/>--创建一个登录<br/>Cr&#101;ate LOGIN 登录名 WITH PASSWORD = &#39;xx&#39;<br/>GO<br/><br/>USE 你要授权的数据库<br/>GO<br/><br/>--创建一个数据库的用户<br/>Cr&#101;ate USER 用户名 FOR LOGIN 登录名<br/>GO<br/><br/>--授予db_owner权限<br/>EXEC SP_ADDROLEMEMBER &#39;db_owner&#39;,&#39;用户名&#39;<br/>GO<br/><br/>--这样，该用户就只能在该数据库下操作，包括添加，删除，修改等<br/><br/>数据库用户名和登录名的关系<br/><br/>登录：服务器方的一个实体，使用一个登录名只能进入服务器，但是不能让用户访问服务器中的数据库<a href="http://www.yation.com/default.asp?cateID=12" target="_blank">资源</a>。每个登录名的定义存放在master数据库的syslogins表中 <br/>用户：一个或多个登录对象在数据库中的映射，可以对用户对象进行授权，以便为登录对象提供对数据库的访问权限。用户定义信息存放在每个数据库的sysusers表中。<br/><br/>一个登录名可以被授权访问多个数据库，但一个登录名在每个数据库中只能映射一次。即一个登录可对应多个用户，一个用户也可以被多个登录使用。<br/>可以把登录对象比作是驾驶证，把用户对象比作是汽车钥匙来帮助理解。<br/><br/>如果没有为一个登录指定数据库用户，则登录时系统将试图将该登录名映射成guest用户(如果当前的数据库中有guest用户的话)。如果还是失败的话，这个用户将无法访问数据库。<br/><br/><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.yation.com/article/webpro/mssql2005.htm" /> 
	  <id>http://www.yation.com/default.asp?id=85</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[找了个程序员做老公的十大好处]]></title>
	  <author>
		 <name>yation</name>
		 <uri>http://www.yation.com/</uri>
		 <email>yoft@163.com</email>
	  </author>
	  <category term="" scheme="http://www.yation.com/default.asp?cateID=7" label="随心随笔||Yation.Team" /> 
	  <updated>2009-12-06T23:34:57+08:00</updated>
	  <published>2009-12-06T23:34:57+08:00</published>
		  <summary type="html"><![CDATA[<img align="right" src="http://www.yation.com/attachments/month_0912/n200912623346.gif" border="0" alt=""/>　　找了个程序员做老公，所以认识了很多程序员。以前就没对程序员有过不好的看法，现在则更不会。发现csdn上老有悲观的论调，说程序员找不到老婆。今天我就以一个程序员妻子的身份，来写写找程序员做老公的好处。希望能给各位mm有借鉴，找程序gg做男朋友。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;一、找程序员不用担心外遇。程序员是对着<a href="http://www.yation.com/default.asp?cateID=10" target="_blank">电脑</a>工作，周围同事大部分是男生。他的生活中基本接触不到mm，所以不会有办公室恋情的发生，也就不会有外遇问题发生。而且面对的诱惑少，不像销售啊等职位，需要和外人打交道，而且应酬多，所面对的诱惑多，外遇出轨问题容易发生。剪剪常常加班到半夜，我是非常放心的，唯一担心的就是他的身体是否吃得消。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;二、程序员很老实。在单位，老板让加班就加班。在家里，老婆说啥都听。mm们，有个老实的老公是不是很不错啊。他可能没你想象的那么浪漫，给你惊喜，但他会老老实实记住你说的每句话，按照你的要求去做。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;三、程序员很有耐心。这个理由我不多说了，没有耐心的话，怎么写代码。这个在mm当了妈妈会发现是个很好的优点的。我是个没有耐心的人，教小剪学东西他要是学不会，我会没有耐心发脾气的，但是剪剪很有耐心的，会陪他玩，慢慢教会小剪。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;四、程序员很细心。写代码是个细活，不细心就会有bug，真写了bug，还得耐心细心的去找出来。在生活中，对于粗枝大叶的mm来说，有个细心的gg照顾不是很好嘛？反正我们家我是粗枝大叶型，剪剪是细心型。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;五、程序员很热心。论坛上兄弟们有困难，他们会出手相助。生活中，朋友有<a href="http://www.yation.com/default.asp?cateID=10" target="_blank">电脑</a>问题，他们会帮助解决。我周围的同事好友要是<a href="http://www.yation.com/default.asp?cateID=10" target="_blank">电脑</a>出问题了，都是剪剪帮忙处理的。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;六、程序员是IT高手。可能这么说有点夸张，但是身边有个程序员老公，<a href="http://www.yation.com/default.asp?cateID=10" target="_blank">电脑</a>上很多事不用担心的。早到我以前公开教学要做课件，是剪剪帮我做的。到现在家里要弄弄路由器，或者<a href="http://www.yation.com/default.asp?cateID=10" target="_blank">电脑</a>中病毒了重装系统。再到开心网兰蔻粉领丽人评选，剪剪给了技术上的支持。顺带着，“近剪者赤”，看得多了，我也要变成单位里<a href="http://www.yation.com/default.asp?cateID=10" target="_blank">电脑</a>高手了。很多简单问题也能处理了。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;七、程序员单纯。不知道是不是所有程序员是这样，反正我家剪是这样，他对别人不会动什么坏心。对外人没坏心，对你也不会有坏心的。曾经碰到个朋友，老公外遇，要离婚，动了很多坏心，在离婚前还把财产都转移了。朋友离婚，钱没有，房子没有，为了这个男人却付出了青春。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;八、程序员加班多。可能这是个缺点，但有时也觉得是个优点。他加班多，你可以有个人空间，做做自己喜欢做的事。我同事觉得我比他们自由多了。这得归功于剪剪加班多。他加班多，你可以拿着他卡去shopping。他没时间花钱，你帮他花。而且大部分的程序员都是很大方的，不会说自己太太什么的。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;九、程序员可爱。不知道这个是不是和工作性质有关，我认识的程序员们都很老实的，基本没有滑头的。剪剪最老实的事就是，每次工资还没加，就是听到内部风声，就会先告诉我。每次有机会发了现金，其实不告诉我我是不知道的，他也会老交给我。最最可爱老实的一次，是今年公司年会，他中了4000的现金大奖。马上打电话给我。其实他告诉我是两千，我也不知道的。而且晚上回家后，还非要把我摇醒，让我数钱，说是“数钱数到自然醒”。估计那晚是喝多了。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;十、程序员有责任心。没有责任心的程序员，写出来的代码都是问题。当然就是因为有了责任心，想给家人过好幸福的日子。才会拼命加班，努力赚钱。我家剪剪如此，我相信所有的程序员们都是这样的。<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;mm们，选个程序员当老公不会错的。相信我吧!在今后的相处中，你会发现他们越来越多的优点的。 <br/><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.yation.com/article/mood/coder.htm" /> 
	  <id>http://www.yation.com/default.asp?id=84</id>
  </entry>	
		
</feed>
