<?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>php开发者之家</title>
	<atom:link href="http://www.086php.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.086php.com</link>
	<description>记录自己对php学习心得。分享我在用PHP开发时遇到各种问题的解决方法，提供PHP源码、PHP实例、PHP教程、PHP交流</description>
	<lastBuildDate>Fri, 18 May 2012 09:03:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>CentOs6.2 设置静态IP方法</title>
		<link>http://www.086php.com/centos6-2/640</link>
		<comments>http://www.086php.com/centos6-2/640#comments</comments>
		<pubDate>Fri, 18 May 2012 09:03:07 +0000</pubDate>
		<dc:creator>php开发者之家</dc:creator>
				<category><![CDATA[os]]></category>
		<category><![CDATA[CentOs6.2]]></category>
		<category><![CDATA[CentOs6.2设置静态IP]]></category>

		<guid isPermaLink="false">http://www.086php.com/?p=640</guid>
		<description><![CDATA[通过setup无法设置静态IP。只有通过修改网卡配置文件。编辑：vi /etc/sysconfig/network-scripts/ifcfg-eth0 <a href="http://www.086php.com/centos6-2/640">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>通过setup无法设置静态IP。只有通过修改网卡配置文件。编辑：vi /etc/sysconfig/network-scripts/ifcfg-eth0</p>
<p>DEVICE=eth0 #描述网卡对应的设备别名，例如ifcfg-eth0的文件中它为eth0<br />
BOOTPROTO=static #设置网卡获得ip地址的方式，可能的选项为static，dhcp或bootp，分别对应静态指定的 ip地址，通过dhcp协议获得的ip地址，通过bootp协议获得的ip地址<br />
BROADCAST=192.168.0.255 #对应的子网广播地址<br />
HWADDR=00:07:E9:05:E8:B4 #对应的网卡物理地址</p>
<p>IPADDR=12.168.0.33 #如果设置网卡获得 ip地址的方式为静态指定，此字段就指定了网卡对应的ip地址<br />
NETMASK=255.255.255.0 #网卡对应的网络掩码<br />
NETWORK=192.168.0.0 #网卡对应的网络地址</p>
<p>然后重启network就可以了。 service network start;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.086php.com/centos6-2/640/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dedecms 不自动生成HTML静态页</title>
		<link>http://www.086php.com/dedecms/636</link>
		<comments>http://www.086php.com/dedecms/636#comments</comments>
		<pubDate>Tue, 15 May 2012 15:06:53 +0000</pubDate>
		<dc:creator>php开发者之家</dc:creator>
				<category><![CDATA[php教程]]></category>
		<category><![CDATA[dedecms]]></category>
		<category><![CDATA[dedecms静态页]]></category>

		<guid isPermaLink="false">http://www.086php.com/?p=636</guid>
		<description><![CDATA[解决dede生成静态页和动态页转换的一些问题，及火车采集入库生成动态的办法
 <a href="http://www.086php.com/dedecms/636">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>解决dede生成静态页和动态页转换的一些问题，及火车采集入库生成动态的办法<br />
——————————————————–<br />
风十三 落伍首发<br />
转载请注明作者和出处<br />
——————————————————<br />
1.如何修改默认发布为动态页；<br />
这个其实很简单，会改html就可以了！把dede文件夹打开，用编辑器打开article_add.php，找到<span id="more-636"></span></p>
<p>&lt;td width=”90&#8243;&gt;发布选项：&lt;/td&gt;<br />
&lt;td&gt; &lt;input name=”ishtml” type=”radio” value=”1&#8243; checked&gt;<br />
生成HTML<br />
&lt;input name=”ishtml” type=”radio” value=”0&#8243;&gt;<br />
仅动态浏览&lt;/td&gt;<br />
修改为：</p>
<p>&lt;td width=”90&#8243;&gt;发布选项：&lt;/td&gt;<br />
&lt;td&gt; &lt;input name=”ishtml” type=”radio” value=”1&#8243;&gt;<br />
生成HTML<br />
&lt;input name=”ishtml” type=”radio” value=”0&#8243; checked&gt;<br />
仅动态浏览&lt;/td&gt;<br />
刷新一下发布文章页面看看可以了不！用DW可以很直观的修改。<br />
2.如何批量修改动态发布为静态生成，或者反过来修改。<br />
用phpmyadmin打开dede_dede_archives 这个表<br />
ismake这个字段就是我们要修改的对象。<br />
运行sql语句：</p>
<p>UPDATE  dede_archives SET  ismake = &#8216;-1&#8242;  修改所有文档为动态浏览</p>
<p>UPDATE  dede_archives SET  ismake = &#8217;1&#8242;   修改所有文档为静态发布<br />
这样就可以了<br />
2.修改火车登录的静态页面发布和动态生成。火车采集入库的时候如果直接静态发布是很占CPU的，动态发布就会好很多！<br />
先下载一个火车的dede登录模块！很多地方可以下<br />
在WEB发布那里修改模块；<br />
选择文章发布参数，发表POST数据那里修改ishtml=0为动态发布，ishtml=1为静态发布。<br />
菜鸟写的教程，测试都是可行的。有高手还请指正。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.086php.com/dedecms/636/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>mysql性能 SQL语句优化</title>
		<link>http://www.086php.com/mysql-6/621</link>
		<comments>http://www.086php.com/mysql-6/621#comments</comments>
		<pubDate>Fri, 27 Apr 2012 08:53:40 +0000</pubDate>
		<dc:creator>php开发者之家</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysql性能，SQL语句优化]]></category>

		<guid isPermaLink="false">http://www.086php.com/?p=621</guid>
		<description><![CDATA[1. 系统架构 说明： 包括主从、读写分离、分布式散列存储、事务处理、引擎选用，存放数据、是否使用存储过程、视图、临时表、触发器等等 2. 商业需求 说明： 不合理的需求导致资源的投入与产出成反比，开发人员有必要对产品提出的需求进行评估，对不影响大局或者可有可无的功能与产品进行协商，商讨是否可以放弃该功能或者适当修改功能。 实例： 产品提出论坛帖子总数实时更新，当前论坛情况是用户量庞大，同时帖子更新频繁。如果要做到实时，必须每次发帖后同时更新统计表数据(假设统计数据全部存储在统计表里面)。如果一秒内帖子产生很多，由于并发问题导致统计数据并不正确，由于如果有锁资源争用，造成性能下降。 解决方案： 跟产品讨论数据其实可以不那么实时，没有哪个无聊的人会发完帖子，盯着论坛的帖子数研究总数是否增加，即时不准确也不会影响用户的实际操作。把实时功能去掉后，可以做一个定时任务(SHELL或者用户触发皆可)，系统每5分钟跑一次，更新掉论坛帖子数即可，这样最直接的结果是减少了大量由于更新产生的query语句。 事实像类似DZ这样的开源项目都是不做实时的，甚至帖子的回复数都不是实时准确的，它是每发表一个回复，插入统计缓存，系统定时批量执行这些要更新的数据。 思考： 大家曾见过淘宝的分页，它并没有列出总共多少页，而是用户点击的附近几页，这样其实节省了select count(*) 的操作(innodb引擎做这个 跟myisam引擎做这个不在同一个概念，所以对于总数据庞大分页的东西其实可以修改分页方式，比如搜索结果) PS: 无用功能堆积导致系统复杂 开发中经常会遇到做了的一些功能不需要啦，导致出现无用的代码和无用的数据表，应该在确认之后，及时对这些功能下线，可以备份一次数据即可 3. 数据表(schema)设计 Schema设计实质反映了一个项目的实际需求，是项目中的存储数据的一个体现，基本上我们看了数据表，大体知道这个项目在做什么。但在设计的同时需要考虑到基本业务逻辑所需要的QUERY操作以及由此产生的性能问题。 1) 适度冗余，减少JOIN操作 说明： 这个其实是反范式的操作，schema设计时不能完全遵照范式，范式的目的是减少冗余。 但适当的冗余对性能是有不少的提升。 实例： 记录论坛版块最后的发帖人以及发帖时间，这个可以通过在帖子表里面进行查询(select * from posts where pid = ‘’ order by &#8230; <a href="http://www.086php.com/mysql-6/621">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>1. 系统架构</strong><br />
说明：<br />
包括主从、读写分离、分布式散列存储、事务处理、引擎选用，存放数据、是否使用存储过程、视图、临时表、触发器等等</p>
<p><strong>2. 商业需求</strong><br />
说明：<br />
不合理的需求导致资源的投入与产出成反比，开发人员有必要对产品提出的需求进行评估，对不影响大局或者可有可无的功能与产品进行协商，商讨是否可以放弃该功能或者适当修改功能。</p>
<p><span id="more-621"></span>实例：<br />
产品提出论坛帖子总数实时更新，当前论坛情况是用户量庞大，同时帖子更新频繁。如果要做到实时，必须每次发帖后同时更新统计表数据(假设统计数据全部存储在统计表里面)。如果一秒内帖子产生很多，由于并发问题导致统计数据并不正确，由于如果有锁资源争用，造成性能下降。</p>
<p>解决方案：<br />
跟产品讨论数据其实可以不那么实时，没有哪个无聊的人会发完帖子，盯着论坛的帖子数研究总数是否增加，即时不准确也不会影响用户的实际操作。把实时功能去掉后，可以做一个定时任务(SHELL或者用户触发皆可)，系统每5分钟跑一次，更新掉论坛帖子数即可，这样最直接的结果是减少了大量由于更新产生的query语句。<br />
事实像类似DZ这样的开源项目都是不做实时的，甚至帖子的回复数都不是实时准确的，它是每发表一个回复，插入统计缓存，系统定时批量执行这些要更新的数据。</p>
<p>思考：<br />
大家曾见过淘宝的分页，它并没有列出总共多少页，而是用户点击的附近几页，这样其实节省了select count(*) 的操作(innodb引擎做这个 跟myisam引擎做这个不在同一个概念，所以对于总数据庞大分页的东西其实可以修改分页方式，比如搜索结果)</p>
<p>PS:<br />
无用功能堆积导致系统复杂<br />
开发中经常会遇到做了的一些功能不需要啦，导致出现无用的代码和无用的数据表，应该在确认之后，及时对这些功能下线，可以备份一次数据即可</p>
<p><strong>3. 数据表(schema)设计</strong><br />
Schema设计实质反映了一个项目的实际需求，是项目中的存储数据的一个体现，基本上我们看了数据表，大体知道这个项目在做什么。但在设计的同时需要考虑到基本业务逻辑所需要的QUERY操作以及由此产生的性能问题。</p>
<p>1) 适度冗余，减少JOIN操作<br />
说明：<br />
这个其实是反范式的操作，schema设计时不能完全遵照范式，范式的目的是减少冗余。 但适当的冗余对性能是有不少的提升。</p>
<p>实例：<br />
记录论坛版块最后的发帖人以及发帖时间，这个可以通过在帖子表里面进行查询(select * from posts where pid = ‘’ order by dateline desc) , 但如果在版块表设计两个字段last_post_member last_post_time, 则可以减少查询次数，一次取出数据。虽然更新（对于频繁的更新，我们同样使用定时任务操作）要导致数据表的写操作，但相对更新，查询显然更加频繁。</p>
<p>2) 大表水平拆分<br />
说明：<br />
跟适当冗余相反，大表水平拆分则是根据表里面数据读取的频繁度将一张表分成多张。</p>
<p>实例：<br />
大家见过许多开源项目，基本上用户数据存储在两张或者更多的表中，比如bbs_member (主表) bbs_memberfields(从表)，主表存储读写比较多的字段(一般都是定长字段，比如username、password、groups)，而从表存储的是读写相对少的字段(比如qq msn 以及存数容量比较大的数据,比如text类型的数据)</p>
<p>3) 合适的数据类型<br />
说明：更小的数据类型让数据库以更小的空间存储相同的数据量，这样直接较少IO的消耗。 特别是对于要进行比较或者排序的字段应该选用更为迅速的字段类型，从而节省CPU的消耗。</p>
<p>4) 创建合适的索引(单独做一节介绍)</p>
<p>总结：<br />
所以我们在表的设计的时候，需要考虑到我们有多大的用户量(包括一个较为长远的考虑)，考虑哪些query执行得更加频繁，从而给出相应的优化方案。</p>
<p><strong>4. 索引(index)设计</strong><br />
1）索引类型：<br />
B-tree ()<br />
Myisam 主键就是聚集索引<br />
聚集索引（数据表的物理存储顺序和表的逻辑存储顺序一致）<br />
非聚集索引：。。。<br />
InnoDB表会包含一个聚集索引<br />
一般是按照下面的规则来设定聚集索引的：<br />
1，假如表包含PRIMARY KEY，InnoDB使用它作为聚集索引<br />
2，假如表没有定义PRIMARY KEY，InnoDB将第一个只包含NOT NULL属性列的UNIQUE index作为主键并且将它设置为聚集索引<br />
3，前两者都不满足的时候，mysql就增加一个隐藏的autocreament</p>
<p>HASH （仅仅memory和 ndb引擎支持)<br />
full-text （仅仅myisam支持，并且只支持 char varchar text三种数据类型)<br />
r-tree</p>
<p>2）索引用途：<br />
# 提高数据表检索效率<br />
# 降低数据排序成本（排序主要消耗cpu和内存， 对于分组操作同样是先排序后分组）</p>
<p>2）如何判定 是否建立索引：<br />
# 只有在操作频繁的字段建立索引，绝不建不必要或者想当然的索引，这个在设计表的时候要能大致估计SQL要怎么写。</p>
<p># 唯一性太差的字段不建立索引，基本上当一条QUERY返回的数据占15%以上就不适合建立索引(通常的像像性别这样的字段绝对不建立索引)</p>
<p># 更新频繁的字段不建立索引。更新表数据的时候同时要更新索引数据，导致IO访问增大以及影响整个存储系统的消耗。(如果查询更新都较多的情况下，则要比较查询与更新的比例，当比例较大的时候，更新附带的成本是可以接受的)</p>
<p>3) 单键索引和联合索引<br />
# 当where语句的过滤条件比较多的时候，考虑几个字段同时出现的频繁度，对频繁度出现较高的字段集建立联合索引。</p>
<p># 联合索引的缺点是多个字段同时存在，更新可能性更高，索引存储长度也越大。但就查询角度来讲这个因为它过滤掉更多的数据，所以效率更高。同时比在多个字段都建立单键索引效果好（因为mysql query optimizer需要将多个索引 index_merge 成本更高，有时候还会放弃其他索引）</p>
<p># 联合索引左前缀原则<br />
使用最左（leftmost）前缀。建立多列复合索引的时候，你实际上建立了MySQL可以使用的多个索引。复合索引可以作为多个索引使用，因为索引中 最左边的列集合都可以用于匹配数据行。这种列集合被称为”最左前缀”（它与索引某个列的前缀不同，那种索引把某个列的前面几个字符作为索引值）。</p>
<p>假设你在表的state、city和zip数据列上建立了复合索引。索引中的数据行按照state/city/zip次序排列，因此它们也会自动地按照 state/city和state次序排列。这意味着，即使你在查询中只指定了state值，或者指定state和city值，MySQL也可以使用这个 索引。因此，这个索引可以被用于搜索如下所示的数据列组合：<br />
state, city, zip<br />
state, city<br />
state</p>
<p>MySQL不能利用这个索引来搜索没有包含在最左前缀的内容。例如，如果你按照city 或zip来搜索，就不会使用到这个索引。如果你搜索给定的 state和具体的ZIP代码（索引的1和3列），该索引也是不能用于这种组合值的，尽管MySQL可以利用索引来查找匹配的state从而缩小搜索的范 围。</p>
<p># 前缀索引(只使用某个字段前面部分内容作为索引键索引该字段)<br />
4) MYSQL索引限制<br />
# 索引键长度总和不超过1000字节<br />
# BLOB TEXT类型列只创建前缀索引<br />
# 不支持函数索引<br />
# 使用(!= &lt;&gt; )的时候, mysql不支持索引<br />
# 过滤字段使用了函数运算(如abs() ) 等，不支持索引<br />
# join语句中JOIN字段类型不一致，不支持索引<br />
# LIKE语句中以(‘%abc’)开始，不支持索引<br />
# 非等值查询时，不支持HASH索引</p>
<p><strong>5) JOIN语句优化</strong><br />
# 永远用小结果集驱动大结果集（资源消耗存在较大区别外），比如A B联查，<br />
A过滤后 10rows<br />
B过滤后 20rows<br />
A作为驱动表，JOIN过滤则为10次<br />
B作为驱动表，JOIN过滤则为20次<br />
所以选择结果集小的作驱动表</p>
<p># join字段优化，保证每次查询节省资源</p>
<p>6）ORDER BY、 GROUP BY、 DISTINCT优化<br />
原理都需要进行排序，除对字段索引外，需要去掉不必要的返回字段，节省内存(排序的原则)</p>
<p><strong>5. QUERY语句优化</strong><br />
优化10原则：<br />
1）优化更需要的优化<br />
说明：执行对系统影响更大的QUERY，一般指的是高并发，执行更加频繁的SQL）</p>
<p>2）定位优化对象性能瓶颈<br />
3）明确优化目标<br />
4）explain<br />
5）profule<br />
6）小结果集驱动大结果集<br />
7）尽可能在索引中完成排序<br />
8）只取自己需要的字段<br />
9）仅仅使用最有效的过滤条件<br />
10）尽可能避免复杂的JOIN和子查询</p>
<p><strong>6. 实例分析</strong><br />
Demo1：过度弱化query造成性能消耗<br />
Table1: users表(user_id, user_name, last_feed_time)<br />
Table2: feeds表(feed_id, user_id, feed_data, dateline)<br />
显然users表与feeds表是一对多的关系，现在要查询最近有动作的10个用户，同时在列表页要显示该用户最近24小时的动作。</p>
<p>解决方法1：<br />
// 得到10个最近有动作的用户<br />
$sql = ‘SELECT user_id, user_name<br />
FROM users ORDER BY last_feed_time DESC limit 10’;</p>
<p>// PHP获得10条数据 $rs</p>
<p>// 循环query查询对应ID的最近三个动作<br />
foreach($rs as $k=&gt;$v) {<br />
$sql = “SELECT feed_data<br />
FROM feeds WHERE user_id = ‘{$v[‘user_id’]}’ AND dateline &lt;’’ ORDER BY dateline DESC “;<br />
}</p>
<p>解决方法2：<br />
// 同第一步</p>
<p>// 查询10个用户最近24小时动作<br />
$sql = “SELECT user_id, feed_data<br />
FROM feeds WHERE user_id IN () AND dateline &lt; ‘’ ORDER BY dateline DESC ”:</p>
<p>// 数组组装</p>
<p>总结：我们在开发中经常碰到一些二级栏目的列表页，但数据来自不同的数据表，通常的做法是循环里面执行query，殊不知这样增加了QUERY的次数，而每次QUERY都需要MYSQL进行解析，在这种情况下，宁愿QUERY复杂点或者在程序端复杂点，保证性能。而从另一个理论来讲，这种情况属于弱化了QUERY造成性能问题。</p>
<p>Demo2：过度依赖query造成性能消耗<br />
Table1: users表(user_id, user_name)<br />
Table2: user_profile表(user_id, profile_data)<br />
Table3: users_group表(id, group_id, user_id, level)<br />
现在要查询群组ID为1的群组成员信息以及群主的详细信息。<br />
解决方法1：<br />
// 一次查询所有信息<br />
SELECT u.user_name, up.profile_data<br />
FROM users_group ug LEFT JOIN users u ON ug.user_id = u.user_id LEFT JOIN users_profile up ON u.user_id = up.user_id<br />
WHERE ug.group_id = ‘1’</p>
<p>解决方法2：<br />
// 先查询群组下用户的基本信息<br />
SELECT u.user_id, u.user_name,<br />
FROM users_group ug LEFT JOIN users u ON ug.user_id = u.user_id<br />
WHERE ug.group_id = ‘1’<br />
// 查群主信息<br />
SELECT *<br />
FROM users_profile WHERE user_id = ‘’;</p>
<p>总结：与上例相反，这个DEMO操作是增加一个query减少不必要的访问(只需要群主的详细信息，而profile存储的是数据类型比较大的数据，这样操作减少的是IO的访问)</p>
<p>Demo3：小结果集驱动大结果集<br />
Table1: users表(user_id, user_name, sex)<br />
Table3: users_group表(id, group_id, user_id, level, join_time)<br />
现在要查询某个群组下面(id = 1)用户的名称和性别，按加入时间倒序取100-120条的记录</p>
<p>解决方法1：<br />
SELECT u.user_id, u.username, u.sex<br />
FROM users_group ug LEFT JOIN users u ON ug.user_id = u.user_id<br />
WHERE ug.group_id = ‘1’ ORDER BY ug.join_time DESC LIMIT 100,120;</p>
<p>解决方法2：<br />
SELECT u.user_id, u.username, u.sex<br />
FROM （<br />
SELECT user_id<br />
FROM user_group<br />
WHERE user_group.group_id = 1<br />
ORDER BY join_time DESC<br />
LIMIT 100,20) ug, user<br />
WHERE ug.user_id = user.user_id;</p>
<p>总结：方法1参与join操作的是全部user_group中group_id = 1的数据、而方法2 参与join操作的数据仅仅是过滤过的20条数据。所以SQL优化永远记住小结果集驱动大结果集，节省的是CPU和IO的消耗。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.086php.com/mysql-6/621/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>MySql数据类型长度 数值类型对照表</title>
		<link>http://www.086php.com/mysql-4/604</link>
		<comments>http://www.086php.com/mysql-4/604#comments</comments>
		<pubDate>Thu, 26 Apr 2012 14:17:05 +0000</pubDate>
		<dc:creator>php开发者之家</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[MySql数据类型]]></category>
		<category><![CDATA[MySql数据类型长度]]></category>

		<guid isPermaLink="false">http://www.086php.com/?p=604</guid>
		<description><![CDATA[MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC)，以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。关键字INT是INTEGER的同义词，关键字DEC是DECIMAL的同义词。 BIT数据类型保存位字段值，并且支持MyISAM、MEMORY、InnoDB和BDB表。 作为SQL标准的扩展，MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。 类型 字节 最小值 最大值 (带符号的/无符号的) (带符号的/无符号的) TINYINT 1 -128 127 0 255 SMALLINT 2 -32768 32767 0 65535 MEDIUMINT 3 -8388608 8388607 0 16777215 INT 4 -2147483648 2147483647 0 4294967295 BIGINT 8 -9223372036854775808 9223372036854775807 0 18446744073709551615 &#8230; <a href="http://www.086php.com/mysql-4/604">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC)，以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。关键字INT是INTEGER的同义词，关键字DEC是DECIMAL的同义词。</p>
<p>BIT数据类型保存位字段值，并且支持MyISAM、MEMORY、InnoDB和BDB表。</p>
<p>作为SQL标准的扩展，MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。</p>
<p><span id="more-604"></span></p>
<table style="border-spacing: 1px;" cellspacing="1" cellpadding="1" bgcolor="#000000">
<tbody>
<tr>
<td bgcolor="#CCCCCC" height="20"><strong><span>类型</span></strong></td>
<td bgcolor="#CCCCCC" height="20"><strong><span>字节</span></strong></td>
<td bgcolor="#CCCCCC" height="20"><strong><span>最小值</span></strong></td>
<td bgcolor="#CCCCCC" height="20"><strong><span>最大值</span></strong></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="18"></td>
<td align="center" valign="middle" bgcolor="#FFFFFF" height="18"></td>
<td bgcolor="#FFFFFF" height="18"><strong><br />
<span>(</span><span>带符号的<span>/</span>无符号的<span>)</span></span></strong></td>
<td bgcolor="#FFFFFF" height="18"><strong><br />
<span>(</span><span>带符号的<span>/</span>无符号的<span>)</span></span></strong></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="18"><span>TINYINT</span></td>
<td align="center" valign="middle" bgcolor="#FFFFFF" height="18"><span>1</span></td>
<td bgcolor="#FFFFFF" height="18"><span>-128</span></td>
<td bgcolor="#FFFFFF" height="18"><span>127</span></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="18"></td>
<td align="center" valign="middle" bgcolor="#FFFFFF" height="18"></td>
<td bgcolor="#FFFFFF" height="18"><span>0</span></td>
<td bgcolor="#FFFFFF" height="18"><span>255</span></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="18"><span>SMALLINT</span></td>
<td align="center" valign="middle" bgcolor="#FFFFFF" height="18"><span>2</span></td>
<td bgcolor="#FFFFFF" height="18"><span>-32768</span></td>
<td bgcolor="#FFFFFF" height="18"><span>32767</span></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="18"></td>
<td align="center" valign="middle" bgcolor="#FFFFFF" height="18"></td>
<td bgcolor="#FFFFFF" height="18"><span>0</span></td>
<td bgcolor="#FFFFFF" height="18"><span>65535</span></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="18"><span>MEDIUMINT</span></td>
<td align="center" valign="middle" bgcolor="#FFFFFF" height="18"><span>3</span></td>
<td bgcolor="#FFFFFF" height="18"><span>-8388608</span></td>
<td bgcolor="#FFFFFF" height="18"><span>8388607</span></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="18"></td>
<td align="center" valign="middle" bgcolor="#FFFFFF" height="18"></td>
<td bgcolor="#FFFFFF" height="18"><span>0</span></td>
<td bgcolor="#FFFFFF" height="18"><span>16777215</span></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="18"><span>INT</span></td>
<td align="center" valign="middle" bgcolor="#FFFFFF" height="18"><span>4</span></td>
<td bgcolor="#FFFFFF" height="18"><span>-2147483648</span></td>
<td bgcolor="#FFFFFF" height="18"><span>2147483647</span></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="18"></td>
<td align="center" valign="middle" bgcolor="#FFFFFF" height="18"></td>
<td bgcolor="#FFFFFF" height="18"><span>0</span></td>
<td bgcolor="#FFFFFF" height="18"><span>4294967295</span></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="18"><span>BIGINT</span></td>
<td align="center" valign="middle" bgcolor="#FFFFFF" height="18"><span>8</span></td>
<td bgcolor="#FFFFFF" height="18"><span>-9223372036854775808</span></td>
<td bgcolor="#FFFFFF" height="18"><span>9223372036854775807</span></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="18"></td>
<td align="center" valign="middle" bgcolor="#FFFFFF" height="18"></td>
<td bgcolor="#FFFFFF" height="18"><span>0</span></td>
<td bgcolor="#FFFFFF" height="18"><span><span>18446744073709551615</span></span></td>
</tr>
</tbody>
</table>
<p>当使用日期和时间类型时应记住以下几点：</p>
<p>·         MySQL以标准输出格式检索给定日期或时间类型的值，但它尽力解释你指定的各种输入值格式(例如，当你指定一个分配给或与日期或时间类型进行比较的值时)。只支持下面章节中描述的格式。期望你能提供有效值。如果你使用其它格式的值会发生意想不到的结果。</p>
<p>·         包含两位年值的日期会令人模糊，因为世纪不知道。MySQL使用以下规则解释两位年值：</p>
<p>o        70-99范围的年值转换为1970-1999。</p>
<p>o        00-69范围的年值转换为2000-2069。</p>
<p>·         尽管MySQL尝试解释几种格式的值，日期总是以年-月-日顺序(例如，&#8217;98-09-04&#8242;)，而不是其它地方常用的月-日-年或日-月-年顺序(例如，&#8217;09-04-98&#8242;，&#8217;04-09-98&#8242;)。</p>
<p>·         如果值用于数值上下文中，MySQL自动将日期或时间类型的值转换为数字，反之亦然。</p>
<p>·         当 MySQL遇到一个日期或时间类型的超出范围或对于该类型不合法的值时(如本节开始所描述)，它将该值转换为该类的“零”值。一个例外是超出范围的TIME值被裁剪到TIME范围的相应端点。</p>
<p>下面的表显示了各类“零”值的格式。请注意如果启用NO_ZERO_DATE SQL模式，使用这些值会产生警告。</p>
<table style="border-spacing: 1px;" cellspacing="1" cellpadding="1" bgcolor="#000000">
<tbody>
<tr>
<td bgcolor="#CCCCCC"><strong>列类型</strong></td>
<td bgcolor="#CCCCCC"><strong>“</strong><strong>零</strong><strong>“值</strong></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="18">DATETIME</td>
<td bgcolor="#FFFFFF" height="18">&#8217;0000-00-00 00:00:00&#8242;</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="18">DATE</td>
<td bgcolor="#FFFFFF" height="18">&#8217;0000-00-00&#8242;</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="18">TIMESTAMP</td>
<td bgcolor="#FFFFFF" height="18">00000000000000</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="18">TIME</td>
<td bgcolor="#FFFFFF" height="18">&#8217;00:00:00&#8242;</td>
</tr>
<tr>
<td bgcolor="#FFFFFF">YEAR</td>
<td bgcolor="#FFFFFF">0000</td>
</tr>
</tbody>
</table>
<p>CHAR和VARCHAR类型类似，但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。</p>
<p>CHAR和VARCHAR类型声明的长度表示你想要保存的最大字符数。例如，CHAR(30)可以占用30个字符。</p>
<p>CHAR列的长度固定为创建表时声明的长度。长度可以为从0到255的任何值。当保存CHAR值时，在它们的右边填充空格以达到指定的长度。当检索到CHAR值时，尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。</p>
<p>VARCHAR列中的值为可变长字符串。长度可以指定为0到65,535之间的值。(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节）。</p>
<p>同CHAR对比，VARCHAR值保存时只保存需要的字符数，另加一个字节来记录长度(如果列声明的长度超过255，则使用两个字节)。</p>
<p>VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留，符合标准SQL。</p>
<p>如果分配给CHAR或VARCHAR列的值超过列的最大长度，则对值进行裁剪以使其适合。如果被裁掉的字符不是空格，则会产生一条警告。如果裁剪非空格字符，则会造成错误(而不是警告)并通过使用严格SQL模式禁用值的插入。参见<a title="5.3.2. The Server SQL Mode" href="http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html#server-sql-mode">5.3.2节，“SQL服务器模式”</a>。</p>
<p>下面的表显示了将各种字符串值保存到CHAR(4)和VARCHAR(4)列后的结果，说明了CHAR和VARCHAR之间的差别：</p>
<table style="border-spacing: 1px;" border="0" cellspacing="1" cellpadding="1" bgcolor="#000000">
<tbody>
<tr>
<td bgcolor="#CCCCCC"><strong>值</strong></td>
<td bgcolor="#CCCCCC">CHAR(4)</td>
<td bgcolor="#CCCCCC"><strong> 存储需求</strong></td>
<td bgcolor="#CCCCCC">VARCHAR(4)</td>
<td bgcolor="#CCCCCC"><strong> 存储需求</strong></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="18">”</td>
<td bgcolor="#FFFFFF" height="18">&#8216; &#8216;</td>
<td bgcolor="#FFFFFF" height="18">4个字节</td>
<td bgcolor="#FFFFFF" height="18">”</td>
<td bgcolor="#FFFFFF" height="18">1个字节</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="18">&#8216;ab&#8217;</td>
<td bgcolor="#FFFFFF" height="18">&#8216;ab &#8216;</td>
<td bgcolor="#FFFFFF" height="18">4个字节</td>
<td bgcolor="#FFFFFF" height="18">&#8216;ab &#8216;</td>
<td bgcolor="#FFFFFF" height="18">3个字节</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="18">&#8216;abcd&#8217;</td>
<td bgcolor="#FFFFFF" height="18">&#8216;abcd&#8217;</td>
<td bgcolor="#FFFFFF" height="18">4个字节</td>
<td bgcolor="#FFFFFF" height="18">&#8216;abcd&#8217;</td>
<td bgcolor="#FFFFFF" height="18">5个字节</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="18">&#8216;abcdefgh&#8217;</td>
<td bgcolor="#FFFFFF" height="18">&#8216;abcd&#8217;</td>
<td bgcolor="#FFFFFF" height="18">4个字节</td>
<td bgcolor="#FFFFFF" height="18">&#8216;abcd&#8217;</td>
<td bgcolor="#FFFFFF" height="18">5个字节</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.086php.com/mysql-4/604/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>在crontab中利用scp命令从本机到远程机进行自动备份</title>
		<link>http://www.086php.com/crontab_scp/596</link>
		<comments>http://www.086php.com/crontab_scp/596#comments</comments>
		<pubDate>Sun, 22 Apr 2012 03:05:33 +0000</pubDate>
		<dc:creator>php开发者之家</dc:creator>
				<category><![CDATA[os]]></category>
		<category><![CDATA[crontab]]></category>
		<category><![CDATA[scp]]></category>

		<guid isPermaLink="false">http://www.086php.com/?p=596</guid>
		<description><![CDATA[一、把本地主机用户的ssh公匙文件写入到远程主机用户的~/.ssh/authorized_keys文件中,具体方法：假设本地主机localhost,远程主机remote的用户 运行 ssh-keygen -t rsa 结果如下 Generating public/private rsa key pair. Enter file in which to save the key (/home/.username/ssh/id_rsa):#回车 Enter passphrase (empty for no passphrase):#回车 Enter same passphrase again:#回车 Your identification has been saved in /home/.username /.ssh/id_rsa. Your public &#8230; <a href="http://www.086php.com/crontab_scp/596">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>一、把本地主机用户的ssh公匙文件写入到远程主机用户的~/.ssh/authorized_keys文件中,具体方法：假设本地主机localhost,远程主机remote的用户<br />
运行 ssh-keygen -t rsa<br />
结果如下<br />
Generating public/private rsa key pair.<br />
Enter file in which to save the key (/home/.username/ssh/id_rsa):#回车<br />
Enter passphrase (empty for no passphrase):#回车<br />
Enter same passphrase again:#回车<br />
Your identification has been saved in /home/.username /.ssh/id_rsa.<br />
Your public key has been saved in /home/.username /.ssh/id_rsa.pub.<br />
The key fingerprint is:<br />
38:25:c1:4d:5d:d3:89:bb:46:67:bf:52:af:c3:17:0c username@localhost<br />
Generating RSA keys:<br />
Key generation complete.<br />
会在用户目录~/.ssh/产生两个文件，id_rsa，id_rsa.pub<span id="more-596"></span></p>
<p>二、把id_rsa.pub文件拷贝到remote主机的用户目录下 然后再运行如下命令<br />
cat id_rsa.pub &gt;~/.ssh/authorized_keys<br />
它将在/root/.ssh/目录下面生成authorized_keys这个文件<br />
[root@server2 .ssh]# ssh remotehost<br />
Enter passphrase for key &#8216;/root/.ssh/id_rsa&#8217;:    ###输的是私钥的密码，而不是server端的密码###<br />
但这只是以root身份登录才会免密码，如果以其他用户身份登录还是会要求输入密码，不用以上密码加密和解密的过程。</p>
<p>三、ssh-agent（客户端上)<br />
通过上面的实验我们发现虽然加了私钥密码很安全，但是每次连接都要输私钥密码就会很麻烦，所以可以通过代理的方式使私钥只要解密一次，就会把它加载在内存里，以后登录的时候就不用输入密码了<br />
但这只在该新起的shell中生效<br />
[root@server2 .ssh]# ssh-agent /bin/bash<br />
[root@server2 .ssh]# ssh-add    ###将私钥导入内存，输入解密密码###<br />
Enter passphrase for /root/.ssh/id_rsa:<br />
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)<br />
四、scp自动备份：<br />
scp  root@remote:/home/backup/*  /home/backup/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.086php.com/crontab_scp/596/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>服务器 塔式、机架式、刀片式之间的区别</title>
		<link>http://www.086php.com/serve/589</link>
		<comments>http://www.086php.com/serve/589#comments</comments>
		<pubDate>Sat, 21 Apr 2012 12:53:07 +0000</pubDate>
		<dc:creator>php开发者之家</dc:creator>
				<category><![CDATA[webserver]]></category>
		<category><![CDATA[刀片]]></category>
		<category><![CDATA[塔式]]></category>
		<category><![CDATA[服务器]]></category>
		<category><![CDATA[机架式]]></category>

		<guid isPermaLink="false">http://www.086php.com/?p=589</guid>
		<description><![CDATA[服务器是网络环境中的高性能计算机，它侦听网络上的其他计算机（客户机）提交的服务请求，并提供相应的服务。为此，服务器必须具有承担服务并且保障服务的能力。 它的高性能主要体现在高速度的运算能力、长时间的可靠运行、强大的外部数据吞吐能力等方面。 服务器服务器的构成与微机基本相似，有处理器、硬盘、内存、系统总线等，它们是针对具体的网络应用特别制定的，因而服务器与微机在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面存在差异很大。服务器外型有以下3种 实际上是工业标准化下的产品，其外观按照统一标准来设计，配合机柜统一使用，以满足企业的服务器密集部署需求。机架服务器的主要作用是为节省空间，由于能够将多台服务器装到一个机柜上，不仅可以占用更小的空间，而且也便于统一管理。　机架服务器的宽度为１９英寸，高度以Ｕ为单位（１Ｕ＝１。７５英寸＝４４。４５毫米），通常有１Ｕ，２Ｕ，３Ｕ，４Ｕ，５Ｕ，７Ｕ几种标准的服务器。 这种服务器的优点是占用空间小，而且便于统一管理，但由于内部空间限制，扩充性较受限制，例如１Ｕ的服务器大都只有１到２个ＰＣＩ扩充槽。此外，散热性能也是一个需要注意的问题，此外还需要有机柜等设备，因此这种服务器多用于服务器数量较多的大型企业使用，也有不少企业采用这种类型的服务器，但将服务器交付给专门的服务器托管机构来托管，尤其是目前很多网站的服务器都采用这种方式。 这种服务器由于在扩展性和散热问题上受到限制，因而单机性能比较有限，应用范围也受到一定限制，往往只专注于某在方面的应用，如远程存储和网络服务等。 在价格方面，机架式服务器一般比同等配置的塔式服务器贵上二到三成。 塔式服务器一般是大家见得最多的，它的外形及结构都与普通的ＰＣ机差不多，只是个头稍大一些，其外形尺寸并无统一标准。 塔式服务器的主板扩展性较强，插槽也很多，而且塔式服务器的机箱内部往往会预留很多空间，以便进行硬盘，电源等的冗余扩展。这种服务器无需额外设备，对放置空间没多少要求，并且具有良好的可扩展性，配置也能够很高，因而应用范围非常广泛，可以满足一般常见的服务器应用需求。 这种类型服务器尤其适合常见的入门级和工作组级服务器应用，而且成本比较低，性能能满足大部分中小企业用户的要求，目前的市场需求空间还是很大的。 但这种类型服务器也有不少局限性，在需要采用多台服务器同时工作以满足较高的服务器应用需求时，由于其个体比较大，占用空间多，也不方便管理，便显得很不适合。 刀片服务器是一种ＨＡＨＤ（Ｈｉｇｈ　Ａｖａｉｌａｂｉｌｉｔｙ　Ｈｉｇｈ　Ｄｅｎｓｉｔｙ，高可用高密度）的低成本服务器平台，是专门为特殊应用行业和高密度计算机环境设计的，其主要结构为一大型主体机箱，内部可插上许多“刀片”，其中每一块刀片实际上就是一块系统母板，类似于一个个独立的服务器，它们可以通过本地硬盘启动自己的操作系统。每一块刀片可以运行自己的系统，服务于指定的不同用户群，相互之间没有关联。而且，也可以用系统软件将这些主板集合成一个服务器集群。在集群模式下，所有的刀片可以连接起来提供高速的网络环境，共享资源，为相同的用户群服务。在集群中插入新的刀片，就可以提高整体性能。而由于每块刀片都是热插拔的，所以，系统可以轻松地进行替换，并且将维护时间减少到最小。 刀片服务器比机架式服务器更节省空间，同时，散热问题也更突出，往往要在机箱内装上大型强力风扇来散热。此型服务器虽然空间较节省，但是其机柜与刀片价格都不低，一般应用于大型的数据中心或者需要大规模计算的领域，如银行电信金融行业以及互联网数据中心等。 目前，节约空间、便于集中管理、易于扩展和提供不间断的服务，成为对下一代服务器的新要求，而刀片服务器正好能满足这一需求，因而刀片服务器市场需求正不断扩大，具有良好的市场前景。]]></description>
			<content:encoded><![CDATA[<p>服务器是网络环境中的高性能计算机，它侦听网络上的其他计算机（客户机）提交的服务请求，并提供相应的服务。为此，服务器必须具有承担服务并且保障服务的能力。</p>
<p>它的高性能主要体现在高速度的运算能力、长时间的可靠运行、强大的外部数据吞吐能力等方面。</p>
<p>服务器服务器的构成与微机基本相似，有处理器、硬盘、内存、系统总线等，它们是针对具体的网络应用特别制定的，因而服务器与微机在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面存在差异很大。服务器外型有以下3种<br />
<img class="size-full wp-image-590 aligncenter" title="机架服务器" src="http://www.086php.com/wp-content/uploads/2012/04/4ac1c531-9080-4003-8eba-0c7f9cc8a0ac.jpg" alt="机架服务器" width="160" height="160" /><span id="more-589"></span><br />
实际上是工业标准化下的产品，其外观按照统一标准来设计，配合机柜统一使用，以满足企业的服务器密集部署需求。机架服务器的主要作用是为节省空间，由于能够将多台服务器装到一个机柜上，不仅可以占用更小的空间，而且也便于统一管理。　机架服务器的宽度为１９英寸，高度以Ｕ为单位（１Ｕ＝１。７５英寸＝４４。４５毫米），通常有１Ｕ，２Ｕ，３Ｕ，４Ｕ，５Ｕ，７Ｕ几种标准的服务器。</p>
<p>这种服务器的优点是占用空间小，而且便于统一管理，但由于内部空间限制，扩充性较受限制，例如１Ｕ的服务器大都只有１到２个ＰＣＩ扩充槽。此外，散热性能也是一个需要注意的问题，此外还需要有机柜等设备，因此这种服务器多用于服务器数量较多的大型企业使用，也有不少企业采用这种类型的服务器，但将服务器交付给专门的服务器托管机构来托管，尤其是目前很多网站的服务器都采用这种方式。</p>
<p>这种服务器由于在扩展性和散热问题上受到限制，因而单机性能比较有限，应用范围也受到一定限制，往往只专注于某在方面的应用，如远程存储和网络服务等。</p>
<p>在价格方面，机架式服务器一般比同等配置的塔式服务器贵上二到三成。</p>
<p><a href="http://www.086php.com/wp-content/uploads/2012/04/52a88252-6f6e-44e6-88a1-6787871c5649.jpg"><img class="size-full wp-image-591 aligncenter" title="塔式服务器" src="http://www.086php.com/wp-content/uploads/2012/04/52a88252-6f6e-44e6-88a1-6787871c5649.jpg" alt="塔式服务器" width="160" height="160" /></a></p>
<p>塔式服务器一般是大家见得最多的，它的外形及结构都与普通的ＰＣ机差不多，只是个头稍大一些，其外形尺寸并无统一标准。</p>
<p>塔式服务器的主板扩展性较强，插槽也很多，而且塔式服务器的机箱内部往往会预留很多空间，以便进行硬盘，电源等的冗余扩展。这种服务器无需额外设备，对放置空间没多少要求，并且具有良好的可扩展性，配置也能够很高，因而应用范围非常广泛，可以满足一般常见的服务器应用需求。</p>
<p>这种类型服务器尤其适合常见的入门级和工作组级服务器应用，而且成本比较低，性能能满足大部分中小企业用户的要求，目前的市场需求空间还是很大的。</p>
<p>但这种类型服务器也有不少局限性，在需要采用多台服务器同时工作以满足较高的服务器应用需求时，由于其个体比较大，占用空间多，也不方便管理，便显得很不适合。</p>
<p><a href="http://www.086php.com/wp-content/uploads/2012/04/u3043122811372494085fm52gp0.jpg"><img class="aligncenter size-full wp-image-592" title="刀片服务器" src="http://www.086php.com/wp-content/uploads/2012/04/u3043122811372494085fm52gp0.jpg" alt="刀片服务器" width="220" height="140" /></a><br />
刀片服务器是一种ＨＡＨＤ（Ｈｉｇｈ　Ａｖａｉｌａｂｉｌｉｔｙ　Ｈｉｇｈ　Ｄｅｎｓｉｔｙ，高可用高密度）的低成本服务器平台，是专门为特殊应用行业和高密度计算机环境设计的，其主要结构为一大型主体机箱，内部可插上许多“刀片”，其中每一块刀片实际上就是一块系统母板，类似于一个个独立的服务器，它们可以通过本地硬盘启动自己的操作系统。每一块刀片可以运行自己的系统，服务于指定的不同用户群，相互之间没有关联。而且，也可以用系统软件将这些主板集合成一个服务器集群。在集群模式下，所有的刀片可以连接起来提供高速的网络环境，共享资源，为相同的用户群服务。在集群中插入新的刀片，就可以提高整体性能。而由于每块刀片都是热插拔的，所以，系统可以轻松地进行替换，并且将维护时间减少到最小。</p>
<p>刀片服务器比机架式服务器更节省空间，同时，散热问题也更突出，往往要在机箱内装上大型强力风扇来散热。此型服务器虽然空间较节省，但是其机柜与刀片价格都不低，一般应用于大型的数据中心或者需要大规模计算的领域，如银行电信金融行业以及互联网数据中心等。</p>
<p>目前，节约空间、便于集中管理、易于扩展和提供不间断的服务，成为对下一代服务器的新要求，而刀片服务器正好能满足这一需求，因而刀片服务器市场需求正不断扩大，具有良好的市场前景。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.086php.com/serve/589/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>如何配置linux的ssh服务，从客户端远程登录时使用public key authentication？</title>
		<link>http://www.086php.com/ssh-key/584</link>
		<comments>http://www.086php.com/ssh-key/584#comments</comments>
		<pubDate>Sat, 21 Apr 2012 10:07:27 +0000</pubDate>
		<dc:creator>php开发者之家</dc:creator>
				<category><![CDATA[os]]></category>
		<category><![CDATA[key]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://www.086php.com/?p=584</guid>
		<description><![CDATA[ssh协议为我们提供安全的远程登陆，远程复制等功能。现在几乎所有版本的linux都有安装openssh。那么如何实现ssh客户端通过public key authentication访问openssh服务器呢，而不是使用简单的密码认证。 安 全表现在：首先，不需要通过网络传输ssh key，其次，ssh key是经过加密后保存的，即使让人偷了还需要有加密串才能解密。相反，如果密码被偷了，可以直接用来登陆的。这样还可以避免别人对我们的ssh服务器进 行暴力破解。当然有人通过修改ssh默认端口，但是这根本不能起到多大的作用。端口扫描工具很容易就能查到你的开放端口。 我 们这边提到的ssh key实际上是一对key，分别保存在两个文件中。其中私钥也就是我们所谓的密钥保存在客户端的机器上，并使用密窜加密。而公钥则存储在服务器上。在创建 ssh链接时，客户端和服务端之间使用公钥和私钥进行协商，如果它们之间匹配（当然是在加密状态下），则成功创建链接。 了解了基本的过程之后实现起来就不难了。我们需要做的是： １.生成公钥私钥对相应的文件并分别放到客户端和服务端 $ ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/user1/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same &#8230; <a href="http://www.086php.com/ssh-key/584">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>ssh协议为我们提供安全的远程登陆，远程复制等功能。现在几乎所有版本的linux都有安装openssh。那么如何实现ssh客户端通过public key authentication访问openssh服务器呢，而不是使用简单的密码认证。</p>
<p>安 全表现在：首先，不需要通过网络传输ssh key，其次，ssh key是经过加密后保存的，即使让人偷了还需要有加密串才能解密。相反，如果密码被偷了，可以直接用来登陆的。这样还可以避免别人对我们的ssh服务器进 行暴力破解。当然有人通过修改ssh默认端口，但是这根本不能起到多大的作用。端口扫描工具很容易就能查到你的开放端口。<span id="more-584"></span><img title="更多..." src="http://www.086php.com/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" /></p>
<p>我 们这边提到的ssh key实际上是一对key，分别保存在两个文件中。其中私钥也就是我们所谓的密钥保存在客户端的机器上，并使用密窜加密。而公钥则存储在服务器上。在创建 ssh链接时，客户端和服务端之间使用公钥和私钥进行协商，如果它们之间匹配（当然是在加密状态下），则成功创建链接。</p>
<p>了解了基本的过程之后实现起来就不难了。我们需要做的是：<br />
１.生成公钥私钥对相应的文件并分别放到客户端和服务端<br />
$ ssh-keygen -t dsa<br />
Generating public/private dsa key pair.<br />
Enter file in which to save the key (/home/user1/.ssh/id_dsa):<br />
Enter passphrase (empty for no passphrase):<br />
Enter same passphrase again:<br />
Your identification has been saved in /home/user1/.ssh/id_dsa.<br />
Your public key has been saved in /home/user1/.ssh/id_dsa.pub.<br />
The key fingerprint is:<br />
4c:92:e9:88:35:ed:b5:81:ab:6f:97:d5:50:e6:7a:75</p>
<p>其中id_sda是私钥，id_dsa.pub是公钥。<br />
你现在可以通过ftp或scp将公钥传到远程的ssh服务器上。<br />
scp id_sda.pub remote_login@remote_server<br />
(当然，现在你们还是使用密码认证，而不是公钥认证，还没完成呢）</p>
<p>２.远程登陆到ssh服务器<br />
ssh -l remote_login remote_server<br />
在远程服务器上的用户当前目录，看看有没有.ssh目录，通常都会有的，如果没有，则创建。<br />
remotehost$ mkdir -p ~/.ssh<br />
remotehost$ chmod 700 ~/.ssh<br />
把公钥文件id_dsa.pub 的内容附加到 ~/.ssh/authorized_keys<br />
remotehost$ cat id_dsa.pub &gt;&gt; ~/.ssh/authorized_keys<br />
remotehost$ chmod 600 ~/.ssh/authorized_keys</p>
<p>3.配置ssh服务器，允许客户端通过 public-key authentication来登陆<br />
用vim打开ssh服务器的配置文件查看PubkeyAuthentication 配置是不是yes,如果不是则修改并重起sshd守护进程<br />
/etc/ssh/sshd_config:<br />
PubkeyAuthentication yes<br />
之后就你可以通过public-key authentication来访问ssh服务器了。如果登陆失败，则可以在运行ssh时加上-v选项来查看失败的具体原因。</p>
<p>如果你的客户端是在window下使用的,那么你需要使用putty-gen来生成</p>
]]></content:encoded>
			<wfw:commentRss>http://www.086php.com/ssh-key/584/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP5.2.10无法加载mysql组件</title>
		<link>http://www.086php.com/php-version-5-2-10/582</link>
		<comments>http://www.086php.com/php-version-5-2-10/582#comments</comments>
		<pubDate>Fri, 20 Apr 2012 15:28:13 +0000</pubDate>
		<dc:creator>php开发者之家</dc:creator>
				<category><![CDATA[php教程]]></category>
		<category><![CDATA[PHP5.2.10无法mysql]]></category>

		<guid isPermaLink="false">http://www.086php.com/?p=582</guid>
		<description><![CDATA[由于安装一些旧老的程序报错，就把PHP版本降到PHP Version 5.2.10。遇到无法mysql数据库的问题。其实PHP5.2.10无法mysql跟PHP 5.3.4配置方法差不多。只需要在httpd.conf是加入以下两句就可以了。 LoadFile “D:/Wamp/php-5.2.10/libmysql.dll” LoadFile “D:/Wamp/php-5.2.10//libmhash.dll”]]></description>
			<content:encoded><![CDATA[<p>由于安装一些旧老的程序报错，就把PHP版本降到PHP Version 5.2.10。遇到无法mysql数据库的问题。其实PHP5.2.10无法mysql跟<span style="color: #0000ff;"><a title="如何配置apache2.2.17+php5.3.4+mysql" href="http://www.086php.com/%e5%a6%82%e4%bd%95%e9%85%8d%e7%bd%aeapache2-2-17php5-3-4mysql/231" target="_blank"><span style="color: #0000ff;">PHP 5.3.4配置</span></a></span>方法差不多。只需要在httpd.conf是加入以下两句就可以了。</p>
<p>LoadFile “D:/Wamp/php-5.2.10/libmysql.dll”<br />
LoadFile “D:/Wamp/php-5.2.10//libmhash.dll”</p>
]]></content:encoded>
			<wfw:commentRss>http://www.086php.com/php-version-5-2-10/582/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>windows 系统下无法加载php_curl模块</title>
		<link>http://www.086php.com/php_curl/573</link>
		<comments>http://www.086php.com/php_curl/573#comments</comments>
		<pubDate>Tue, 17 Apr 2012 09:15:55 +0000</pubDate>
		<dc:creator>php开发者之家</dc:creator>
				<category><![CDATA[php教程]]></category>
		<category><![CDATA[php_curl]]></category>
		<category><![CDATA[php_curl模块]]></category>
		<category><![CDATA[无法加载curl模块]]></category>

		<guid isPermaLink="false">http://www.086php.com/?p=573</guid>
		<description><![CDATA[我的系统是windows,安装ThinkSNS时出现错误提 您的服务器没有安装这个PHP扩展：curl &#8230; Failed 用phpinfo()看了下。确实php没有加载到php_curl模块。查看php.ini中找到有extension=php_curl.dll，注释打开。还需要将libeay32.dll, ssleay32.dll这两个文件拷贝到C:\WINDOWS\system32下重启apache或IIS就可以了。 别外一种方法: php_curl.dll就依赖两个文件（ssleay32.dll和libeay32.dll）如果这两个文件没有配置对那么就会提示找不到此动态库，这两个文件在php的目录下面。 解决办法：在Apache的httpd.conf的文件中配置一下： LoadFile “D:/php/ssleay32.dll” LoadFile “D:/php/libeay32.dll” 按上面说的方法，操作后仍未解决问题。看一下你的PHP版本是不是5.2.14。因为PHP5.2.14这个版本的curl模块本身就有bug。由果是的话建议你更换PHP版本，下载其他版本。然后按照上说的再重新操作一下。重启APACHE服务，问题解决。你就随心所欲的使用php_curl抓取网页。如果您看到现在还依然未解决，那可能又是另一种情况了，不妨留言一起研究下。]]></description>
			<content:encoded><![CDATA[<p>我的系统是windows,安装ThinkSNS时出现错误提 您的服务器没有安装这个PHP扩展：curl &#8230; Failed<br />
用phpinfo()看了下。确实php没有加载到php_curl模块。查看php.ini中找到有extension=php_curl.dll，注释打开。还需要将libeay32.dll, ssleay32.dll这两个文件拷贝到C:\WINDOWS\system32下重启apache或IIS就可以了。<br />
别外一种方法:<br />
php_curl.dll就依赖两个文件（ssleay32.dll和libeay32.dll）如果这两个文件没有配置对那么就会提示找不到此动态库，这两个文件在php的目录下面。<span id="more-573"></span><br />
解决办法：在Apache的httpd.conf的文件中配置一下：<br />
LoadFile “D:/php/ssleay32.dll”<br />
LoadFile “D:/php/libeay32.dll”</p>
<p>按上面说的方法，操作后仍未解决问题。看一下你的PHP版本是不是5.2.14。因为PHP5.2.14这个版本的curl模块本身就有bug。由果是的话建议你更换PHP版本，下载其他版本。然后按照上说的再重新操作一下。重启APACHE服务，问题解决。你就随心所欲的<span style="color: #888888;"><a title="使用php_curl抓取网页简单实例" href="http://www.086php.com/php_curl-2/288" target="_blank">使用php_curl抓取网页</a></span>。如果您看到现在还依然未解决，那可能又是另一种情况了，不妨留言一起研究下。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.086php.com/php_curl/573/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Smarty3.1.4   html_radios中文汉字不显示</title>
		<link>http://www.086php.com/html_radios/557</link>
		<comments>http://www.086php.com/html_radios/557#comments</comments>
		<pubDate>Fri, 13 Apr 2012 04:40:05 +0000</pubDate>
		<dc:creator>php开发者之家</dc:creator>
				<category><![CDATA[php教程]]></category>
		<category><![CDATA[Smarty3.1.4，html_radios]]></category>

		<guid isPermaLink="false">http://www.086php.com/?p=557</guid>
		<description><![CDATA[最近把Smarty升级到Smarty3.1.4，升级后发现单选按钮汉字不显示的问题。检查了一下自己写的没有发现问题。 $tpl-&#62;assign(&#8216;cust_names&#8217;, array(&#8216;模板一&#8217;, &#8216;模板二&#8217;)); $tpl-&#62;assign(&#8216;cust_ids&#8217;, array(1, 2)); $tpl-&#62;assign(&#8216;cust_id&#8217;, 1); {html_radios name=&#8217;id&#8217; values=$cust_ids output=$cust_names selected=$customer_id separator=&#8217;&#60;br /&#62;&#8217;} 就翻看了一下Smarty代码。看到shared.escape_special_chars.php文件中$string = htmlspecialchars($string, ENT_COMPAT, SMARTY_RESOURCE_CHAR_SET, false); 原因: 编码的问题呀。我网站的编码是GBK的，而Smarty是UTF-8的。 解决方法：打开Smarty.class.php文件，找到define(&#8216;SMARTY_RESOURCE_CHAR_SET&#8217;, SMARTY_MBSTRING ? &#8216;UTF-8&#8242; : &#8216;ISO-8859-1&#8242;);修改为define(&#8216;SMARTY_RESOURCE_CHAR_SET&#8217;, SMARTY_MBSTRING ? &#8216;GB2312&#8242; : &#8216;ISO-8859-1&#8242;);问题解决了。 总结：由于大多数PHP框架，或者模板引擎都是UTF-8。我们开发网站最好也用UTF-8编码，这样就不会遇到编码的烦恼了。]]></description>
			<content:encoded><![CDATA[<p>最近把Smarty升级到<a title="smarty3.1.4中文手册文档API及使用指南" href="http://www.086php.com/357/357" target="_blank"><span style="color: #3366ff;">Smarty3.1.4</span></a>，升级后发现单选按钮汉字不显示的问题。检查了一下自己写的没有发现问题。<br />
$tpl-&gt;assign(&#8216;cust_names&#8217;, array(&#8216;模板一&#8217;, &#8216;模板二&#8217;));<br />
$tpl-&gt;assign(&#8216;cust_ids&#8217;, array(1, 2));<br />
$tpl-&gt;assign(&#8216;cust_id&#8217;, 1);<br />
{html_radios name=&#8217;id&#8217; values=$cust_ids output=$cust_names selected=$customer_id separator=&#8217;&lt;br /&gt;&#8217;}<br />
就翻看了一下Smarty代码。看到shared.escape_special_chars.php文件中$string = htmlspecialchars($string, ENT_COMPAT, SMARTY_RESOURCE_CHAR_SET, false);<span id="more-557"></span></p>
<p>原因: 编码的问题呀。我网站的编码是GBK的，而Smarty是UTF-8的。</p>
<p>解决方法：打开Smarty.class.php文件，找到define(&#8216;SMARTY_RESOURCE_CHAR_SET&#8217;, SMARTY_MBSTRING ? &#8216;UTF-8&#8242; : &#8216;ISO-8859-1&#8242;);修改为define(&#8216;SMARTY_RESOURCE_CHAR_SET&#8217;, SMARTY_MBSTRING ? &#8216;GB2312&#8242; : &#8216;ISO-8859-1&#8242;);问题解决了。</p>
<p>总结：由于大多数<a title="PHP框架MVC模板引擎原理" href="www.086php.com/php%e6%a1%86%e6%9e%b6mvc%e6%a8%a1%e6%9d%bf%e5%bc%95%e6%93%8e%e5%8e%9f%e7%90%86/294" target="_blank"><span style="color: #3366ff;">PHP框架</span></a>，或者模板引擎都是UTF-8。我们开发网站最好也用UTF-8编码，这样就不会遇到编码的烦恼了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.086php.com/html_radios/557/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

