<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title>shanghuo.net(上火网)</title>
		<link>http://www.shanghuo.net/</link>
		<description>人间五十年，万事如梦幻。一度生存者，岂有长不灭？</description>
		<copyright>Copyright (C) 2004 Security Angel Team [S4T] All Rights Reserved.</copyright>
		<generator>shanghuo Version 1.6 Build 20071004</generator>
		<lastBuildDate>Sun, 01 Aug 2010 02:07:05 +0000</lastBuildDate>
		<ttl></ttl>
		<item>
			<guid>http://www.shanghuo.net/?action=show&amp;id=316</guid>
			<title>百万级PHP网站架构工具箱</title>
			<author>jiashixiang</author>
			<description><![CDATA[<p>在了解过世界最大的PHP站点，Facebook的后台技术后，今天我们来了解一个百万级PHP站点的网站架构：Poppen.de。Poppen.de是德国的一个社交网站，相对Facebook、Flickr来说是一个很小的网站，但它有一个很好的架构，融合了很多技术，如 Nigix、MySql、CouchDB、Erlang、Memcached、RabbitMQ、PHP、Graphite、Red5以及Tsung。</p>
<p>　　51CTO推荐阅读：大型B2C网站高性能可伸缩架构技术探秘</p>
<p>　　Poppen.de目前有200万注册用户数、2万并发用户数、每天20万条私有消息、每天25万登录次数。而项目团队有11个开发人员，两个设计，两个系统管理员。该站点的商业模式采用免费增值模式，用户可以使用搜索用户、给好友发送消息、上载图片和视频等功能。</p>
<p>　　如果用户想享受不受限制发送消息和上载图片，那么就得根据需要支付不同类型的会员服务，视频聊天及网站其他服务也采用同样的策略。</p>
<p>　　Nginx</p>
<p>　　Poppen.de 所有的服务都是基于Nginx服务上的。前端有两台Nginx服务器在高峰期提供每分钟15万次请求的负载，每个机器已经有四年寿命，并且只有一个CPU 和3GB RAM。Poppen.de拥有三台独立的图像服务器，由三台Nginx服务器为*.bilder.poppen.de提供每分钟8万次请求服务。</p>
<p>　　Nginx 架构中一个很酷的设计就是有很多请求是由Memcached处理的，因此请求从缓存中获取内容而不需要直接访问PHP机器。比如，用户信息页(user profile)是网站需要密集处理的内容，如果把用户信息页全部缓存到Memcached上，那么请求直接从Memcached上获取内容。 Poppen.de的Memcached每分钟可以处理8000次请求。</p>
<p>　　架构中有三个Nginx图像服务器提供本地图像缓存，用户上载图 像到一个中央文件服务器。当向这三个Nginx之一中请求图像时，如果服务器本地中没有存在该图像，则从中央文件服务器下载到该服务器上作缓存并提供服 务。这种负载均衡的分布式图像服务器架构设计可以减轻主要存储设备的负载。</p>
<p>　　PHP-FPM</p>
<p>　　该网站运行在PHP- FPM上。共有28台双CPU、6GB内存的PHP机器，每个机器上运行100个PHP-FPM的工作线程。使用启用了APC的PHP5.3.x。 PHP5.3可以降低CPU和内存使用率的30%以上。</p>
<p>　　51CTO推荐阅读：Nginx + PHP-FPM + APC=绝妙的组合</p>
<p>　　程序代码是基于Symfony1.2框架之上开发的。一是可以使用外部资源，二是 能够提高项目开发进度，同时在一个著名的框架上可以让新开发人员更容易加入到团队中来。虽然没有任何事情都是十全十美的，但可以从Symfony框架中得 到很多好处，让团队可以更多的精力放在Poppen.de的业务开发上去。</p>
<p>　　网站性能优化使用XHProf，这是Facebook开源出来的一个类库。这个框架非常容易个性化和配置，能够可以缓存大部分高代价的服务器计算。</p>
<p>　　MySQL</p>
<p>　　MySQL是网站主要的RDBMS。网站又几个MySql服务器：一台4CPU、32GB的服务器存储用户相关信息，如基本信息、照片描述信息等。这台机器已经使用了4 年，下一步计划会使用共享集群来替换它。目前仍基于这个系统上进行设计，以简化数据访问代码。根据用户ID进行数据分区，因为网站中大部分信息都是以用户 为中心的，如照片、视频、消息等。</p>
<p>　　推荐专题：MySQL数据库入门与精通教程</p>
<p>　　有三台服务器按主-从-从配置架构提供用户论坛服务。一台从服务器负责网站自定义消息存储，到现在有 2.5亿条消息。另外四台机器为主-从配置关系。另外由4台机器配置成NDB族群专门服务于密集型写操作数据，如用户访问统计信息。</p>
<p>　　数据表设计尽量避免关联操作，尽可能缓存最多的数据。当然，数据库的结构化规范已经完全被破坏掉了。因此，为了更容易搜索，数据库设计创建了数据挖掘表。大部分表是MyISAM型表，可以提供快速查找。现在的问题是越来越多的表已经全表锁住了。Poppen.de正考虑往XtraDB存储引擎上迁移。</p>
<p>　　Memcached</p>
<p>　　网站架构中Memcached应用相当多，超过45GB的高速缓存和51个节点。缓存了Session会话、视图缓存以及函数执行缓存等。架构中有一个系统 当记录被修改时可以自动地把数据更新到缓存中去。未来改善缓存更新的可能方案是使用新的Redis Hash API或者MongoDB。</p>
<p>　　RabbitMQ</p>
<p>　　在 2009年中开始在架构中使用RabbitMQ。这是一个很好的消息解决方案，便于部署和集中到这个架构中去，在LVS后运行了两台RabbitMQ服务 器。在上个月，已经把更多的东西集成到该队列中，意味着同一时刻有28台PHP服务器每天要处理50万次请求。发送日志、邮件通知、系统消息、图像上载等 更多的东西到这个队列中。</p>
<p>　　应用PHP-FPM中的fastcgi_finish_request()函数集成队列消息，可以把消息异步发 送到队列中。当系统需要给用户发送HTML或JSON格式响应时，就调用这个函数，这样用户就没有必要等到PHP脚本清理。</p>
<p>　　这个系统可以改善架构资源管理。例如，在高峰期服务每分钟可以处理1000次登录请求。这表示有1000并发更新用户表保存用户的登录时间。由于使用了队列机制，可以 按相反的顺序来运行这些查询。如果需要提高处理速度，只需要增加更多的队列处理者即可，甚至可以增加更多的服务器到这集群中去，而不需要修改任何配置和部 署新节点。</p>
<p>　　CouchDB</p>
<p>　　日志存储CouchDB运行在一台机器上。在这台机器上可以根据模块/行为进行日志查询 /分组，或者根据错误类型等等。这对定位问题非常有用。在使用日志聚合服务CouchDB之前，不得不逐台登录到PHP服务器上设法日志分析定位问题，这 是非常麻烦的。而现在把所有的日志集中到队列中保存到CouchDB中，可以集中进行问题检查和分析。</p>
<p>　　Graphite</p>
<p>　　网站使用Graphite采集网站实时信息并统计。从请求每个模块/行为到Memcached的命中和未命中、RabbitMQ状态监控以及Unix负载等等。Graphite服务平均每分钟有4800次更新操作。实践已经证实要监测网站发发生什么是非常有用的，它的简单文本协议和绘图功能可以方便地即插即 用的方式用于任何需要监控的系统上。</p>
<p>　　一件很酷的事情是使用Graphite同时监控了网站的两个版本。一月份部署了Symfony框架新 版本，以前代码作为一个备份部署。这就意味着网站可能会面临性能问题。因此可以使用Graphite来对两个版本在线进行对比。</p>
<p>　　发现新版本上的Unix负载表较高，于是使用XHProf对两个版本进行性能分析，找出问题所在。</p>
<p>　　Red5</p>
<p>　　网站为用户也提供了两种类型的视频服务，一种是用户自己上载的视频，另外一种是视频聊天，用户视频互动和分享。到2009年年中，每月为用户提供17TB的流量服务。</p>
<p>　　Tsung</p>
<p>　　Tsung 是一个Erlang编写的分布式基准分析工具。在Poppen.de网站中主要用于HTTP基准分析、MySQL与其他存储系统(XtraDB)的对比分 析。用一个系统记录了主要的MySQL服务器的流量，再转换成Tsung的基准会话。然后对该流量进行回放，由Tsung产生数以千计的并发用户访问实验 室的服务器。这样就可以在实验环境中与真实场景非常接近。</p>]]></description>
			<link>http://www.shanghuo.net/?action=show&amp;id=316</link>
			<category domain="http://www.shanghuo.net/?cid=16">sever</category>
			<pubDate>2010-07-24 22:15</pubDate>
		</item>
		<item>
			<guid>http://www.shanghuo.net/?action=show&amp;id=315</guid>
			<title>关于PHP你可能不知道的10件事</title>
			<author>jiashixiang</author>
			<description><![CDATA[<p>1.使用ip2long() 和long2ip()函数来把IP地址转化成整型存储到数据库里。<br />
这种方法把存储空间降到了接近四分之一（char(15)的15个字节对整形的4个字节），计算一个特定的地址是不是在一个区段内页更简单了，而且加快了搜索和排序的速度（虽然有时仅仅是快了一点）。</p>
<p>2.在验证Email地址的时候使用checkdnsrr() 函数验证域名是否存在。</p>
<p>这个内置函数能够确认指定的域名能够解析成IP地址。该函数的PHP 文档的用户评论部分有一个简单的用户自定义函数，这个函数基于checkdnsrr()，用来验证 email 地址的合法性。对于那些认为自己的Email地址是<a href="mailto:joeuser@wwwphp.net">joeuser@wwwphp.net</a>而不是<a href="mailto:joeuser@php.net">joeuser@php.net</a>的家伙们，这个方法可以很方便的抓住他们。</p>
<p>3.如果你使用的是PHP 5和MySQL 4.1 或者更高的版本，考虑用mysqli_* 系列函数。</p>
<p>一个很好的功能就是你可以使用预处理语句，如果你在维护一个数据库密集型站点，这个功能能够加快查询速度。一些评估分数。&amp; l6 ]' U&amp; Z: B- z! X</p>
<p>4.学会爱上三元运算符。</p>
<p>5.如果你在项目中感觉到有可复用的部分，在你写下一行代码前先看看PEAR中是否已经有了。</p>
<p>很多PHP程序员都知道 PEAR 是一个很好的资源库，虽然还有很多程序员不知道。这个在线资源库包含了超过400个可以复用的程序片段，这些程序片段你可以立即用刀你的程序里。除非说你的项目真的是非常特别的，你总能找到帮你节省时间的 PEAR包。</p>
<p>6.用 highlight_file()来自动的打印出格式化的很漂亮的源代码。</p>
<p>如果你在留言板、IRC 这些地方寻求一个脚本的帮助的话，这个函数用起来非常的顺手。当然了，要小心不要意外的泄露出你的数据库连接信息和密码等。</p>
<p>7.使用 error_reporting(0)函数来防止用户看到潜在的敏感错误信息。</p>
<p>在理想情况下，发布服务器应该在php.ini 里完全禁止。但是如果你用的是一个共享的 web 服务器的话，你没有自己的 php.ini 文件，那么这种情况下你最好的选择就是在所有脚本的第一行前加上 error_reporting(0);（或者使用 require_once() 方法）。这就能够在出错的时候完全屏蔽敏感的SQL查询语句和路径名。</p>
<p>8.在网数据库中存储很大的字符串之前使用 gzcompress() 和 gzuncompress() 来显式的压缩/解压字符串。</p>
<p>这个PHP内置函数使用 gzip 算法，可以压缩普通文本达 90%。在我每次要读写BLOB类型的字段的时候都使用这些函数。唯一额例外就是当我需要全文检索的时候。</p>
<p>9.通过&ldquo;引用&rdquo;传递参数的方法从一个函数中得到多个返回值。<br />
就像三元运算符一样，大部分受过正式编程训练的程序员都知道这个技巧。但是那些 HTML 背景大于 Pascal 背景的程序员都或多或少的有过这样的疑问&ldquo;在仅能使用一次 return 的情况下，从一个函数里返回多个值？&rdquo;答案就是在变量前加上一个 &ldquo;&amp;&rdquo; 符号，通过&ldquo;引用&rdquo;传递而非&ldquo;值&rdquo;传递。</p>
<p>10.完全理解&ldquo;魔术引号&rdquo;和 SQL 注入的危险性。: <br />
我希望阅读到这里的开发者都已经很对SQL注入很了解了。不过我还是把这条列在这里，是因为这个确实有点难以理解。</p>]]></description>
			<link>http://www.shanghuo.net/?action=show&amp;id=315</link>
			<category domain="http://www.shanghuo.net/?cid=2">php学习</category>
			<pubDate>2010-05-24 18:12</pubDate>
		</item>
		<item>
			<guid>http://www.shanghuo.net/?action=show&amp;id=314</guid>
			<title>兰德公司对中国的评价(转)</title>
			<author>jiashixiang</author>
			<description><![CDATA[<p>兰德是美国领先的智库/思想库。应该是个保守派/右派,下面的文章写的很狠,但耐心想想是有它的道理,是对我们这一代人的一个警钟。中国不要成为一个没有灵魂的巨人。</p><br /><br /><a href="http://www.shanghuo.net/?action=show&amp;id=314" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.shanghuo.net/?action=show&amp;id=314</link>
			<category domain="http://www.shanghuo.net/?cid=10">读书</category>
			<pubDate>2010-03-30 17:21</pubDate>
		</item>
		<item>
			<guid>http://www.shanghuo.net/?action=show&amp;id=313</guid>
			<title>Google勇敢新世界：两个天才的相遇</title>
			<author>jiashixiang</author>
			<description><![CDATA[<p><span id="media_name">南方人物周刊</span></p><br /><br /><a href="http://www.shanghuo.net/?action=show&amp;id=313" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.shanghuo.net/?action=show&amp;id=313</link>
			<category domain="http://www.shanghuo.net/?cid=17">search</category>
			<pubDate>2010-01-25 11:39</pubDate>
		</item>
		<item>
			<guid>http://www.shanghuo.net/?action=show&amp;id=312</guid>
			<title>linux下ps命令</title>
			<author>jiashixiang</author>
			<description><![CDATA[<p>1. ps简介</p>
<p>要对进程进行监测和控制，首先必须要了解当前进程的情况，也就是需要查看当前进程，而ps命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。</p>
<p>2. ps命令及其参数</p>
<p>　 ps命令最常用的还是用于监控后台进程的工作情况，因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信的，所以如果需要检测其情况，便可以使用ps命令了。</p>
<p>　　该命令语法格式如下：</p>
<p>　　ps [选项]</p>
<p>　　下面对命令选项进行说明：</p>
<p>　　-e 显示所有进程。</p>
<p>　　-f 全格式。</p>
<p>　　-h 不显示标题。</p>
<p>　　-l 长格式。</p>
<p>　　-w 宽输出。</p>
<p>　　a 显示终端上的所有进程，包括其他用户的进程。</p>
<p>　　r 只显示正在运行的进程。</p>
<p>　　x 显示没有控制终端的进程。</p>
<p>　　O[+|-] k1 [，[+|-] k2 [，&hellip;]] 根据SHORT KEYS、k1、k2中快捷键指定的多级排序顺序显示进程列表。对于ps的不同格式都存在着默认的顺序指定。这些默认顺序可以被用户的指定所覆盖。其中&ldquo;+&rdquo;字符是可选的，&ldquo;-&rdquo;字符是倒转指定键的方向。</p>
<p>　　以下介绍长命令行选项，这些选项都使用&ldquo;--&rdquo;开头：</p>
<p>　　--sort X[+|-] key [，[+|-] key [，&hellip;]] 从SORT KEYS段中选一个多字母键。&ldquo;+&rdquo;字符是可选的，因为默认的方向就是按数字升序或者词典顺序。<br />
比如： ps -jax -sort=uid，-ppid，+pid。</p>
<p>　　--help 显示帮助信息。</p>
<p>　　--version 显示该命令的版本信息。</p>
<p>　　在前面的选项说明中提到了排序键，接下来对排序键作进一步说明。需要注意的是排序中使用的值是ps使用的内部值，并非仅用于某些输出格式的伪值。排序键列表见表4-3。</p>
<p>　　表4-3　排序键列表</p>
<p>　　短格式 <br />
　　长格式 <br />
　　说 明</p>
<p>　　c <br />
　　cmd <br />
　　可执行的简单名称</p>
<p>　　C <br />
　　cmdline <br />
　　完整命令行</p>
<p>　　f <br />
　　flags <br />
　　长模式标志</p>
<p>　　g <br />
　　pgrp <br />
　　进程的组ID</p>
<p>　　G <br />
　　tpgid <br />
　　控制tty进程组ID</p>
<p>　　j <br />
　　cutime <br />
　　累计用户时间</p>
<p>　　J <br />
　　cstime <br />
　　累计系统时间</p>
<p>　　k <br />
　　utime <br />
　　用户时间</p>
<p>　　K <br />
　　stime <br />
　　系统时间</p>
<p>　　m <br />
　　min_flt <br />
　　次要页错误的数量</p>
<p>　　M <br />
　　maj_flt <br />
　　主要页错误的数量</p>
<p>　　n <br />
　　cmin_flt <br />
　　累计次要页错误</p>
<p>　　N <br />
　　cmaj_flt <br />
　　累计主要页错误</p>
<p>　　o <br />
　　session <br />
　　对话ID</p>
<p>　　p <br />
　　pid <br />
　　进程ID</p>
<p>　　P <br />
　　ppid <br />
　　父进程ID</p>
<p>　　r <br />
　　rss <br />
　　驻留大小</p>
<p>　　R <br />
　　resident <br />
　　驻留页</p>
<p>　　s <br />
　　size <br />
　　内存大小（千字节）</p>
<p>　　S <br />
　　share <br />
　　共享页的数量</p>
<p>　　t <br />
　　tty <br />
　　tty次要设备号</p>
<p>　　T <br />
　　start_time <br />
　　进程启动的时间</p>
<p>　　U <br />
　　uid <br />
　　UID</p>
<p>　　u <br />
　　user <br />
　　用户名</p>
<p>　　v <br />
　　vsize <br />
　　总的虚拟内存数量（字节）</p>
<p>　　y <br />
　　priority <br />
　　内核调度优先级</p>
<p>　　3. 常用ps命令参数</p>
<p>　　前面两节介绍的参数可能让读者觉得有些可怕，实际上这是一个非常容易使用的命令，一般的用户只需掌握一些最常用的命令参数就可以了。</p>
<p>　　最常用的三个参数是u、a、x，下面将通过例子来说明其具体用法。</p>
<p>　　[例] 以root身份登录系统，查看当前进程状况</p>
<p>　　$ ps</p>
<p>　　PID TTY TIME COMMAND</p>
<p>　　5800 ttyp0 00:00:00 bash</p>
<p>　　5835 ttyp0 00:00:00 ps</p>
<p>　　可以看到，显示的项目共分为四项，依次为PID（进程ID）、TTY（终端名称）、TIME（进程执行时间）、COMMAND（该进程的命令行输入）。</p>
<p>　　可以使用u选项来查看进程所有者及其他一些详细信息，如下所示：</p>
<p>　　$ ps u</p>
<p>　　USER PID %CPU %MEM USZ RSS TTY STAT START TIME COMMAND</p>
<p>　　test 5800 0.0 0.4 1892 1040 ttyp0 S Nov27 0:00 -bash</p>
<p>　　test 5836 0.0 0.3 2528 856 ttyp0 R Nov27 0:00 ps u</p>
<p>　　在bash进程前面有条横线，意味着该进程便是用户的登录shell，所以对于一个登录用户来说带短横线的进程只有一个。还可以看到%CPU、%MEM两个选项，前者指该进程占用的CPU时间和总时间的百分比；后者指该进程占用的内存和总内存的百分比。在这种情况下看到了所有控制终端的进程；但是对于其他那些没有控制终端的进程还是没有观察到，所以这时就需要使用x选项。使用x选项可以观察到所有的进程情况。</p>]]></description>
			<link>http://www.shanghuo.net/?action=show&amp;id=312</link>
			<category domain="http://www.shanghuo.net/?cid=16">sever</category>
			<pubDate>2009-05-07 18:45</pubDate>
		</item>
		<item>
			<guid>http://www.shanghuo.net/?action=show&amp;id=311</guid>
			<title>jsp环境县官</title>
			<author>jiashixiang</author>
			<description><![CDATA[<p>经常看到jsp的初学者问tomcat下如何配置jsp、servlet和bean的问题，于是总结了一下如何tomcat下配置jsp、servlet和ben，希望对那些初学者有所帮助。 <br />
<br />
一、开发环境配置 <br />
<br />
第一步：下载j2sdk和tomcat：到sun官方站（<a href="http://java.sun.com/j2se/1.5.0/download.jsp" target="_blank">http://java.sun.com/j2se/1.5.0/download.jsp</a>）下载 j2sdk，注意下载版本为Windows Offline Installation的SDK，同时最好下载J2SE 1.5.0 Documentation，然后到tomcat官方站点（http: //jakarta.apache.org/site/downloads/downloads_tomcat-5.cgi）下载tomcat（下载最新 5.5.9版本的tomcat）； <br />
<br />
第二步：安装和配置你的j2sdk和tomcat：执行j2sdk和tomcat的安装程序，然后按默认设置进行安装即可。 <br />
<br />
1.安装j2sdk以后，需要配置一下环境变量，在我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中添加以下环境变量(假定你的j2sdk安装在c:\j2sdk1.5.0）： <br />
<br />
JAVA_HOME=c:\j2sdk1.5.0 <br />
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;（.;一定不能少，因为它代表当前路径) <br />
path=%JAVA_HOME%\bin <br />
<br />
接着可以写一个简单的java程序来测试J2SDK是否已安装成功： <br />
<br />
public class Test{ <br />
public static void main(String args[]){ <br />
System.out.println(&quot;This is a test program.&quot;); <br />
} <br />
} <br />
<br />
将上面的这段程序保存为文件名为Test.java的文件。 <br />
<br />
然后打开命令提示符窗口，cd到你的Test.java所在目录，然后键入下面的命令 <br />
<br />
javac Test.java <br />
java Test <br />
<br />
此时如果看到打印出来This is a test program.的话说明安装成功了，如果没有打印出这句话，你需要仔细检查一下你的配置情况。 <br />
<br />
2.安装Tomcat后，在我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中添加以下环境变量(假定你的tomcat安装在c:\tomcat)： <br />
<br />
CATALINA_HOME=c:\tomcat <br />
CATALINA_BASE=c:\tomcat <br />
<br />
然后修改环境变量中的classpath，把tomat安装目录下的common\lib下的(可以根据实际追加)servlet.jar追加到classpath中去，修改后的classpath如下： <br />
<br />
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet.jar; <br />
<br />
接着可以启动tomcat，在IE中访问<a href="http://localhost:8080/" target="_blank">http://localhost:8080</a>，如果看到tomcat的欢迎页面的话说明安装成功了。 <br />
<br />
第三步：建立自己的jsp app目录 <br />
<br />
1.到Tomcat的安装目录的webapps目录，可以看到ROOT，examples, tomcat-docs之类Tomcat自带的的目录； <br />
2.在webapps目录下新建一个目录，起名叫myapp； <br />
3.myapp下新建一个目录WEB-INF，注意，目录名称是区分大小写的； <br />
4.WEB-INF下新建一个文件web.xml，内容如下： <br />
<br />
&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt; <br />
&lt;!DOCTYPE web-app <br />
PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot; <br />
&quot;<a href="http://java.sun.com/dtd/web-app_2_3.dtd" target="_blank">http://java.sun.com/dtd/web-app_2_3.dtd</a>&quot;&gt; <br />
&lt;web-app&gt; <br />
&lt;display-name&gt;My Web Application&lt;/display-name&gt; <br />
&lt;description&gt; <br />
A application for test. <br />
&lt;/description&gt; <br />
&lt;/web-app&gt; <br />
<br />
5.在myapp下新建一个测试的jsp页面，文件名为index.jsp，文件内容如下： <br />
&lt;html&gt;&lt;body&gt;&lt;center&gt; <br />
Now time is: &lt;%=new java.util.Date()%&gt; <br />
&lt;/center&gt;&lt;/body&gt;&lt;/html&gt; <br />
<br />
6.重启Tomcat <br />
<br />
7.打开浏览器，输入<a href="http://localhost:8080/myapp/index.jsp" target="_blank">http://localhost:8080/myapp/index.jsp</a> 看到当前时间的话说明就成功了。 <br />
<br />
第四步：建立自己的Servlet： <br />
<br />
1.用你最熟悉的编辑器（建议使用有语法检查的java ide）新建一个servlet程序，文件名为Test.java，文件内容如下： <br />
<br />
package test; <br />
import java.io.IOException; <br />
import java.io.PrintWriter; <br />
import javax.servlet.ServletException; <br />
import javax.servlet.http.HttpServlet; <br />
import javax.servlet.http.HttpServletRequest; <br />
import javax.servlet.http.HttpServletResponse; <br />
public class Test extends HttpServlet { <br />
protected void doGet(HttpServletRequest request, HttpServletResponse response) <br />
throws ServletException, IOException { <br />
PrintWriter out=response.getWriter(); <br />
out.println(&quot;&lt;html&gt;&lt;body&gt;&lt;h1&gt;This is a servlet test.&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;&quot;); <br />
out.flush(); <br />
} <br />
} <br />
<br />
2 .编译 <br />
将Test.java放在c:\test下，使用如下命令编译： <br />
<br />
C:\Test&gt;javac Test.java <br />
<br />
然后在c:\Test下会产生一个编译后的servlet文件：Test.class <br />
<br />
3 .将结构test\Test.class剪切到%CATALINA_HOME%\webapps\myapp\WEB-INF\classes下，也就是剪切那个test目录到classes目录下，如果classes目录不存在，就新建一个。现在webapps\myapp\WEB-INF\ classes下有test\Test.class的文件目录结构 <br />
<br />
4 .修改webapps\myapp\WEB-INF\web.xml，添加servlet和servlet-mapping <br />
<br />
编辑后的web.xml如下所示，红色为添加的内容: <br />
<br />
&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt; <br />
&lt;!DOCTYPE web-app <br />
PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot; <br />
&quot;<a href="http://java.sun.com/dtd/web-app_2_3.dtd" target="_blank">http://java.sun.com/dtd/web-app_2_3.dtd</a>&quot;&gt; <br />
&lt;web-app&gt; <br />
&lt;display-name&gt;My Web Application&lt;/display-name&gt; <br />
&lt;description&gt; <br />
A application for test. <br />
&lt;/description&gt; <br />
&lt;servlet&gt; <br />
&lt;servlet-name&gt;Test&lt;/servlet-name&gt; <br />
&lt;display-name&gt;Test&lt;/display-name&gt; <br />
&lt;description&gt;A test Servlet&lt;/description&gt; <br />
&lt;servlet-class&gt;test.Test&lt;/servlet-class&gt; <br />
&lt;/servlet&gt; <br />
&lt;servlet-mapping&gt; <br />
&lt;servlet-name&gt;Test&lt;/servlet-name&gt; <br />
&lt;url-pattern&gt;/Test&lt;/url-pattern&gt; <br />
&lt;/servlet-mapping&gt; <br />
&lt;/web-app&gt; <br />
<br />
这段话中的servlet这一段声明了你要调用的Servlet，而servlet-mapping则是将声明的servlet&quot;映射&quot;到地址/Test上 <br />
<br />
5 .好了，重启动Tomcat，启动浏览器，输入<a href="http://localhost:8080/myapp/Test" target="_blank">http://localhost:8080/myapp/Test</a> 如果看到输出This is a servlet test.就说明编写的servlet成功了。 <br />
<br />
注意：修改了web.xml以及新加了class，都要重启Tomcat <br />
<br />
第四步：建立自己的Bean： <br />
<br />
1.用你最熟悉的编辑器（建议使用有语法检查的java ide）新建一个java程序，文件名为TestBean.java，文件内容如下： <br />
<br />
package test; <br />
public class TestBean{ <br />
private String name = null; <br />
public TestBean(String strName_p){ <br />
this.name=strName_p; <br />
} <br />
public void setName(String strName_p){ <br />
this.name=strName_p; <br />
} <br />
public String getName(){ <br />
return this.name; <br />
} <br />
} <br />
<br />
2 .编译 <br />
<br />
将TestBean.java放在c:\test下，使用如下命令编译： <br />
<br />
C:\Test&gt;javac TestBean.java <br />
<br />
然后在c:\Test下会产生一个编译后的bean文件：TestBean.class <br />
<br />
3 .将TestBean.class文件剪切到 %CATALINA_HOME%\webapps\myapp\WEB-INF\classes\test下， <br />
<br />
4 .新建一个TestBean.jsp文件，文件内容为： <br />
<br />
&lt;%@ page import=&quot;test.TestBean&quot; %&gt; <br />
&lt;html&gt;&lt;body&gt;&lt;center&gt; <br />
&lt;% <br />
TestBean testBean=new TestBean(&quot;This is a test java bean.&quot;); <br />
%&gt; <br />
Java bean name is: &lt;%=testBean.getName()%&gt; <br />
&lt;/center&gt;&lt;/body&gt;&lt;/html&gt; <br />
<br />
5 .好了，重启Tomcat，启动浏览器，输入<a href="http://localhost:8080/myapp/TestBean.jsp" target="_blank">http://localhost:8080/myapp/TestBean.jsp</a> 如果看到输出Java bean name is: This is a test java bean.就说明编写的Bean成功了。 <br />
<br />
这样就完成了整个Tomcat下的jsp、servlet和javabean的配置。接下来需要做的事情就是多看书、多读别人的好代码，自己多动手写代码以增强自己在这方面开发的能力了。 <br />
<br />
jvm应填写到 <br />
c:\j2sdk\bin <br />
<br />
给你一个简单的配置：：：： <br />
<br />
JSP环境配置心得 <br />
<br />
首先要说的是，使用jdk+tomcat完全可以配置我们的jsp服务器，不再需要其实任何东东，有很多文章介绍了Apache，其实根本用不着，一般的学习调试tomcat完全可以胜任了。 <br />
<br />
安装jdk后，tomcat在安装之前会自动找到jdk的安装路径，一路点击&quot;下一步&quot;，经过一段时间的文件复制，最后&quot;close&quot;，完成comcat的安装。 <br />
<br />
您最好去下载一个版本较高的tomcat，比如4.1以上的，因为它不需要设置太多的系统变量，右击&quot;我的电脑&quot;，选择&quot;属性&quot;-&gt;&quot;高级&quot;- &gt;&quot;环境变量&quot;-&gt;&quot;系统变量&quot;，新建一个TOMCAT_HOME，值设置成你的tomcat所在的路径，比如：D:\Program Files\Apache Group\Tomcat 5.5，配置完成。 <br />
<br />
从开始菜单中找到tomcat选项，一般打开顺序是：开始-&gt;程序-&gt;Apache Tomcat 5.5，选择&quot;Start Tomcat&quot;，让jsp服务器开始运行，此时会打开一个类似Dos的窗口，会显示一些相关的信息。 <br />
<br />
如果您使用代理上网，一定要先撤掉代理，不然您的jsp程序永远也得不到执行。如果不是代理的，这一步就跳过了。 <br />
<br />
打开浏览器，在地址栏中输入：<a href="http://localhost:8080/" target="_blank">http://localhost:8080</a>，如果看到有老虎（我也不知道是老虎还是猫）的画面，恭喜您，您成功了一半。 <br />
<br />
先来享受一下成功的喜悦吧，请输入下面的代码： <br />
<br />
&lt;html&gt; <br />
&lt;head&gt; <br />
&lt;title&gt;First Page&lt;/title&gt; <br />
&lt;/head&gt; <br />
&lt;body&gt; <br />
&lt;H3&gt;Today is: h <br />
&lt;%= new java.util.Date() %&gt; <br />
&lt;/H3&gt; <br />
&lt;/body&gt; <br />
&lt;/html&gt; <br />
<br />
将该程序保存为:First.jsp，放到Tomcat的ROOT目录下，然后在浏览器的地址栏中输入：<a href="http://localhost/" target="_blank">http://localhost:</a> 8080/First.jsp，(First.jsp跟我们保存的文件名的大小写要一致)回车，如果不出意外，应该可以看到形如Today is: h Fri Apr 11 08:32:38 CST 2003 的结果。 <br />
<br />
注意：ROOT是tomcat的默认虚拟目录，如果要改成自己的虚拟目录怎么办呢？请继续往下看吧。 <br />
<br />
要改成自己的虚拟目录，就要请出server.xml来了，该文件是一个配置文件，在Tomcat\conf目录下，使用任何文本编辑软件都能打开它，我们先找到下面一句： <br />
<br />
&lt;Connector className=&quot;org.apache.coyote.tomcat4.CoyoteConnector&quot; <br />
port=&quot;8080&quot; minProcessors=&quot;5&quot; maxProcessors=&quot;75&quot; <br />
enableLookups=&quot;true&quot; redirectPort=&quot;8443&quot; <br />
acceptCount=&quot;100&quot; debug=&quot;0&quot; connectionTimeout=&quot;20000&quot; <br />
useURIValidationHack=&quot;false&quot; disableUploadTimeout=&quot;true&quot; /&gt; <br />
<br />
这里的port=&quot;8080&quot;就是端口，我们完全可以用别的端口来代替，但不能是被系统占用的端口（0--1023），这里简单提一下。 <br />
<br />
下面我们再往下找，会发现以下的语句： <br />
<br />
&lt;/Context&gt; <br />
&lt;/Host&gt; <br />
<br />
我们就应该找到这两个语句，如果不懂E文，您就认定这两个语句好了。然后我们将该语句更改如下： <br />
<br />
&lt;/Context&gt; <br />
&lt;Context path=&quot;/myjsp&quot; debug=&quot;0&quot; docBase=&quot;e:/myjsp&quot; reloadable=&quot;true&quot;&gt; <br />
&lt;/Context&gt; <br />
&lt;/Host&gt; <br />
<br />
这里的path=&quot;/myjsp&quot;就是我们就配置的虚拟目录了，以后在地址栏中输入<a href="http://localhost:8080/myjsp" target="_blank">http://localhost:8080/myjsp</a>即可。而docBase=&quot;e:/myjsp&quot; 则是机器本地路径，他们通过这个语句形成一个映射关系，其它照抄。 <br />
<br />
将上面的First.jsp文件放到e:/myjsp目录下，输入<a href="http://localhost:8080/myjsp/First.jsp" target="_blank">http://localhost:8080/myjsp/First.jsp</a>，是不是有一种喜上眉梢的感觉？ <br />
<br />
在论坛里我见得最多的就是很多人不知道javaBean文件放到哪里，老实说开始我也不知道，更令人不解的是，十个人有九种不同的说法，这更让我们茫然。其实这问题也不是我们想像的那么复杂，我们以一个例子说明： <br />
<br />
先建立一个java程序，代码如下： <br />
<br />
package hall; <br />
public class SimpleBean { <br />
private String message = &quot;No message specified&quot;; <br />
public String getMessage() { <br />
return(message); <br />
} <br />
public void setMessage(String message) { <br />
this.message = message; <br />
} <br />
} <br />
<br />
保存为SimpleBean.java，编译后会生成一个包，其实就相当于一个目录，也就是SimpleBean.class会存放在hall目录中，暂且保存起来，将来备用。 <br />
<br />
再输入以下代码： <br />
<br />
&lt;HTML&gt; <br />
&lt;HEAD&gt; <br />
&lt;TITLE&gt;Reusing JavaBeans in JSP&lt;/TITLE&gt; <br />
&lt;/HEAD&gt; <br />
&lt;BODY&gt; <br />
&lt;CENTER&gt; <br />
&lt;TABLE BORDER=5&gt; <br />
&lt;TR&gt;&lt;TH CLASS=&quot;TITLE&quot;&gt; <br />
Reusing JavaBeans in JSP&lt;/TABLE&gt; <br />
&lt;/CENTER&gt; <br />
&lt;P&gt; <br />
&lt;jsp:useBean id=&quot;test&quot; class=&quot;hall.SimpleBean&quot; /&gt; <br />
&lt;jsp:setProperty name=&quot;test&quot; property=&quot;message&quot; value=&quot;Hello WWW&quot; /&gt; <br />
&lt;H1&gt;Message: &lt;I&gt; <br />
&lt;jsp:getProperty name=&quot;test&quot; property=&quot;message&quot; /&gt; <br />
&lt;/I&gt;&lt;/H1&gt; <br />
&lt;/BODY&gt; <br />
<br />
保存在我们刚才建立的虚拟目录e:/myjsp下面，并命名为：BeanTest.jsp。 <br />
<br />
现在我们应该将hall（包）目录放在哪儿呢？别急，我们先在e:/myjsp下建立一个文件夹WEB-INF，然后再在WEB-INF下建立一个 classes文件夹，最后将hall目录放到classes下，当然，hall下的字节码文件SimpleBean.class也一并要移过来，而 SimpleBean.java就和BeanTest.jsp放到同一目录吧（可以不需要放的，自己试试）。 <br />
<br />
重新启动机器（如果您试了好多次都不行，这一步一定要做），在浏览器中输入：<a href="http://localhost:8080/myjsp/BeanTest.jsp" target="_blank">http://localhost:8080/myjsp/BeanTest.jsp</a>，您看到了什么？呵，别告诉我您什么都没看到，那肯定是您设置的问题了。 <br />
<br />
Java学习 - 技术文章中心 <br />
<br />
初学者问的诸如：《怎样配置环境变量》《怎样运行Servlet》啊？这样的问题太多了，现在我写一个初学者入门必读，以便对初学者有指导作用！ <br />
<br />
首先是下载工具： <br />
<br />
我建议初学者用Editplus＋JDK，我觉得如果用例如JB，Eclipse，JCreator，虽然刚开始的时候比较方便，但是确使初学者门不知道怎样配置环境变量， <br />
<br />
从而难以达到知其然，知其所以然的地步 <br />
<br />
可以通过如下地址下载： <br />
<br />
Editplus (最新版本是v2.11)：<a href="http://count.skycn.com/softdown.php?id=3641&amp;url=http:" target="_blank">http://count.skycn.com/softdown.php?id=3641&amp;url=http:</a> //sc-http.skycn.net/down/epp211a_cn.exe(要照注册码就自己找吧，网上很多的） <br />
<br />
JDK(最新版本是Java2sdk1_5_0)：http: //192.18.97.54/ECom/EComTicketServlet/BEGIN30AA3B63E5C2F61C8C26F84B78970A98/ -2147483648/926882595/1/627578/627410/926882595/2ts+/westCoastFSEND/jdk-1.5.0_04 -oth-JPR/jdk-1.5.0_04-oth-JPR:3/jdk-1_5_0_04-windows-i586-p.exe（这是For Windows） <br />
<br />
然后就是安装JDK，我是把它装到从c:\JDK目录下面： <br />
<br />
然后就是CLASSPATH的问题了： <br />
<br />
正如操作系统利用PATH来搜索可执行程序一样，Java运行环境也会遍历CLASSPATH来查找类，即便是HelloWorld这样简单的程序，JVM也会遍历 <br />
<br />
CLASSPATH定义的每一个路径，直到找到相应的文件为止。 <br />
<br />
相信大家用的系统不是2k就是XP，然后就应当如下设置Path： <br />
<br />
我的电脑-&gt;属性-&gt;高级-&gt;环境变量 <br />
<br />
然后在环境变量的Path后面追加: C:\JDK\bin;.;C:\JDK\lib <br />
<br />
也可以这样配置:C:\JDK\bin;.;C:\JDK\lib\dt.jar;C:\JDK\lib\tools.jar <br />
<br />
★记住:环境变量中的 . 切记不能少，它表示当前路径，如果少掉出现的错误等会就说！ <br />
<br />
dt.jar是关于运行环境的类库，tools.jar是关于一些工具的类库 <br />
<br />
如果没有配置:C:\JDK\bin，则会出现 &quot; javac&prime; 不是内部或外部命令，也不是可运行的程序或批处理文件。&quot;这样的错误。 <br />
<br />
然后下面就该写程序了： <br />
<br />
首先是(HelloWorld.java),打开Editplus，新建一个Java文件，请照着如下输入，要一字不漏，并且分清大小写： <br />
<br />
public class HelloWorld{ <br />
public static void main(String[] args){ <br />
System.out.println(&quot;Hello,World!&quot;); <br />
} <br />
} <br />
<br />
然后把这个文件保存(ctrl + s)到HelloWorld.java,记住大小写一定要分清，是HelloWorld.java不是helloworld.java或者其它的 <br />
<br />
下面就该运行了，开始-&gt;运行-&gt;cmd <br />
<br />
在控制台中把目录切换到当前目录： <br />
<br />
javac HelloWorld.java <br />
java HelloWorld <br />
<br />
你就会在控制台上看见输出的Hello,World!(没出来？我把电脑吃了：）) <br />
<br />
javac是编译命令，它把HelloWorld.java编译成HelloWorld.class <br />
<br />
java就是解释命令，JVM把HelloWorld.class解释执行. <br />
<br />
在这个时候： <br />
<br />
1。如果出现Exception in thread &quot;main&quot; java.lang.NoClassDefFoundError: HelloWorld <br />
<br />
那就是你在环境变量中没有加上那个.(dot) <br />
<br />
2。如果出现Exception in thread &quot;main&quot; java.lang.NoSuchMethodError: main <br />
<br />
或者HelloWorld.java:1: Public class helloworld must be defined in a file called <br />
<br />
&quot;HelloWorld.java&quot;. <br />
<br />
那就是你没有分清大小写的写入这个HelloWorld，或者保存得时候没有保存为HelloWorld.java <br />
<br />
这个名字一定要跟public class的名字一样 <br />
<br />
对于环境变量的问题就说到这里，下面我先所说怎么在Editplus里面编译和运行，在Tools－&gt;参数设置-&gt;配置用户工具 <br />
<br />
1.添加工具（添加应用程序） <br />
<br />
菜单文字：Compile Java Program <br />
<br />
程序：C:\JDK\bin\javac.exe <br />
<br />
参数：文件名称 <br />
<br />
初始目录：文件目录 <br />
<br />
2.添加工具（添加应用程序） <br />
<br />
菜单文字：Run Java Program <br />
<br />
程序：C:\JDK\bin\java.exe <br />
<br />
参数：文件名称（不含扩展名） <br />
<br />
初始目录：文件目录 <br />
<br />
工具组名称可以随便添，比如Debug Java Program <br />
<br />
然后在Tools的下拉菜单中，你就会看见Compile Java Program以及Run Java Program这两个选项，以后你就可以利用ctrl + 1编译和ctrl ＋2运行程序了 <br />
<br />
下面就讨论Servlet的运行： <br />
<br />
首先要运行Servlet，则需要JSP/Servlet container，我建议初学者用Tomcat <br />
<br />
Tomcat（最新版本5.5）：<a href="http://apache.justdn.org/jakarta/tomcat-5/v5.5.9/bin/jakarta-tomcat-5.5.9.exe" target="_blank">http://apache.justdn.org/jakarta/tomcat-5/v5.5.9/bin/jakarta-tomcat-5.5.9.exe</a>然后把这个压缩包解压到： <br />
<br />
C:\Tomcat <br />
<br />
然后再配置环境变量： <br />
<br />
添加三个系统变量： <br />
<br />
JAVA_HOME: C:\JDK <br />
TOMCAT_HOME: C:\Tomcat <br />
CLASSPATH: %JAVA_HOME%\lib;%TOMCAT_HOME%\lib <br />
<br />
Tomcat的环境变量就配置完毕了，下面检验Tomcat是否能够运行： <br />
<br />
在控制台中转到C:\Tomcat\bin这个目录，运行startup，然后回出现一个窗口，连跳一大串东西，最后表示Server已经运行 <br />
<br />
在浏览器中输入<a href="http://localhost:8080/" target="_blank">http://localhost:8080</a>，出现欢迎界面，则表示Tomcat没问题了 <br />
<br />
然后和上面一样，写入你的第一个Servlet <br />
<br />
import java.io.*; <br />
import javax.servlet.*; <br />
import javax.servlet.http.*; <br />
public class HelloWorld extends HttpServlet <br />
{ <br />
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException <br />
{ <br />
response.setContentType(&quot;text/html&quot;); <br />
PrintWriter out = response.getWriter(); <br />
out.println(&quot;&lt;html&gt;&lt;head&gt;&lt;title&gt;&quot;); <br />
out.println(&quot;This is my first Servlet&quot;); <br />
out.println(&quot;&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&quot;); <br />
out.println(&quot;&lt;h1&gt;Hello,World!&lt;/h1&gt;&quot;); <br />
out.println(&quot;&lt;/body&gt;&lt;/html&gt;&quot;); <br />
<br />
} <br />
} <br />
<br />
然后照样用javac HelloWorld.java来编译这个文件，如果出现无法import javax.servlet.* <br />
<br />
那么就是应该把C:\Tomcat\common\lib里面的servlet.jar（根据实际来看）文件拷贝到C:\JDK\jre\lib\ext中，再次编译，就没有问题了！ <br />
<br />
然后在Tomcat目录里面的C:\Tomcat\webapps\ROOT里面按如下的文件结构： <br />
<br />
ROOT\index.html <br />
ROOT\welcom.jsp <br />
ROOT\WEB-INF\lib\MyServlet.jar（如果你的servlet的.class打成了.jar文件，则放在lib下面) <br />
ROOT\WEB-INF\classes\HelloWorld.class(把上面生成的HelloWorld.class文件放在这个里面) <br />
<br />
然后在浏览器中输入<a href="http://localhost:8080/servlet/HelloWorld" target="_blank">http://localhost:8080/servlet/HelloWorld</a>,于是Server众望所归的报错了:Error 404--Not Found <br />
<br />
怎么回事呢？ <br />
<br />
Servlet必须使用C:\Tomcat\webapps\ROOT\WEB-INF这个目录下面的web.xml文件进行注册，用EP打开这个web.xml文件，在里面加入 <br />
<br />
&lt;servlet&gt; <br />
&lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt; <br />
&lt;servlet-class&gt;HelloWorld&lt;/servlet-class&gt; <br />
&lt;/servlet&gt; <br />
&lt;servlet-mapping&gt; <br />
&lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt; <br />
&lt;url-pattern&gt;/servlet/helloworld&lt;/url-pattern&gt; <br />
&lt;/servlet-mapping&gt; <br />
<br />
这样的结构 <br />
<br />
&lt;servlet&gt; <br />
&lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt; <br />
&lt;servlet-class&gt;HelloWorld&lt;/servlet-class&gt; <br />
&lt;/servlet&gt; <br />
<br />
表示指定包含的servlet类. <br />
而以下的结构 <br />
<br />
&lt;servlet-mapping&gt; <br />
&lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt; <br />
&lt;url-pattern&gt;/servlet/HelloWorld&lt;/url-pattern&gt; <br />
&lt;/servlet-mapping&gt; <br />
<br />
表示指定HelloServlet应当映射到哪一种URL模式。 <br />
<br />
在修改web.xml完毕过后，重新启动Server，然后再输入<a href="http://localhost:8080/servlet/HelloWorld" target="_blank">http://localhost:8080/servlet/HelloWorld</a>，那么偌大一个Hello,World!等着你呢。</p>]]></description>
			<link>http://www.shanghuo.net/?action=show&amp;id=311</link>
			<category domain="http://www.shanghuo.net/?cid=2">php学习</category>
			<pubDate>2009-05-07 18:43</pubDate>
		</item>
		<item>
			<guid>http://www.shanghuo.net/?action=show&amp;id=310</guid>
			<title>韩国人篡改中国历史行为大集合！</title>
			<author>jiashixiang</author>
			<description><![CDATA[<p>1、向联合国申报&ldquo;活字印刷术&ldquo;是韩国发明的，联合国教科文组织不明究里，竟同意了；</p>
<p>韩国在德国办&ldquo;韩国是印刷术的起源国&rdquo;展览</p>
<p>在石墓林中走读&ldquo;1377年，世界上发生过什麽惊天动地的大事珐&rdquo;韩国方面的答案是：人类历史上最古老的金属活字本&mdash;&mdash;《白云和尚抄录佛祖直指心体要节》（简称《直指》）诞生了，这比德国人古登堡的四十二行圣经还要早78年。</p>
<p>自认为一直站在日本、中国文化阴影＿的韩国，此次便是高举着&ldquo;活字印刷术起源国&rdquo;的尚方宝剑，一路劈开路障，顺利登上全球最大书展主宾国的舞台，在数万观众的集体记忆＿刻上烙印。</p>
<p>然而，&ldquo;金属活字印刷&rdquo;一直是中韩两国之间共同争夺的古代科学专利。北宋时期，平民毕升发明活字印刷术，但在韩国学者看来，毕升只有奇思妙想，所造活字并不适用，很快便被束之高阁。中方专家引用《梦溪笔谈》、《造活字印书法》等历史文献中的相关资料反唇相讥，要求韩国学界匡正视听、还历史本来面目。近年来，韩国go-vern-ment对《直指》表现出异乎寻常的重视，进行了超大规模的宣传，并争取到了联合国教科文组织的承认，确立了《直指》的世界元老地位，并将之编入小学课本以传后世。</p>
<p>不止如此，其他三大发明他们也说是他们的！！</p>
<p>2、抢注端午节为韩国文化遗产，也成功了；</p>
<p>由韩国申报的江陵端午祭巴黎时间2006年7月24日被联合国教科文组织正式确定为&ldquo;人类传说及无形遗产着作&rdquo;。一度沸沸扬扬的中韩端午节&ldquo;申遗&rdquo;之争以韩国的胜利而告终。</p>
<p>3、正在酝酿把孔子纳入韩国的遗产，不久就要出手了；</p>
<p>9月28日，是孔子诞辰2557周年，大陆与台湾同时举行了祭孔大典。而在此前的9月26日，一组韩国祭孔大典的图片也成为各大门户网站的头条。抢在中国之前大规模宣传自己的祭孔活动，韩国人的用意又何在呢？韩国人的目的很明确，就是要让人觉得只有他们才是祭孔的正统，只有他们才最有资格祭祀孔子。然后就可以拿他们几百年历史的祭孔大典去申请世界文化遗产！韩国人论证孔子是韩国人还有这样的论据：朝鲜半岛最早建立政权的是商朝贵族箕子。箕子是商朝纣王的亲戚，西周武王伐纣。箕子不愿意接受西周统治。于是率领5000名商朝人逃跑到朝鲜半岛和辽东半岛，建立了政治难民国家&mdash;箕子朝鲜。而商朝大部分人都留在了中国，分布在西周封建的宋卫等多个国家。宋国的第一个国君就是箕子的亲戚&mdash;微子。孔子是宋国贵族后代，当然也就是韩国祖宗箕子的后代了。</p>
<p>除了孔子，古代美女西施，撰写了《本草纲目》的李时珍也早已是韩国人了！！</p>
<p>4、官民学大联合，进占中国东海苏岩礁，把我东海大陆架暗礁俨然视为韩国的最南端，指鹿为马的说它是&ldquo;岛&ldquo;，以在中国东海捞取最大的好处；</p>
<p>当代，科学技术发达，航海航空手段先进，大海不再是制约人类的天堑了，韩国开始向东拓展领域，在日本海上与日本争夺竹岛（韩称独岛），采取先占原则，日方居下风，韩国成功开辟了东疆。这回，韩国又开始扩张南疆的领土了，照搬在日本海的方式来中国东海，强硬迅速地先占为主，中国go-vern-ment已经两次交涉此问题，韩方没当回事儿。韩国想将苏岩礁筑成一个人工岛，然后根据国际海洋法，在我国东海、黄海圈出一块相当于法国大小的大片海域来，属于韩国私有，欲鲸吞东中国海。去年底，中国飞机在苏岩岛上空侦察飞行，韩国传媒立即群情汹涌，指摘中国侵犯韩国领土，韩国go-vern-ment也向中国抗出抗议。</p>
<p>5、把中医、本草纲目、人参、针灸据为己有，说成是韩国发明的，或韩国的文化遗产；</p>
<p>6、汉城pol.ice对中国外交官进行迫害，联合媒体教唆记者仗着&ldquo;本地人&ldquo;的优势，对孤立无援的&ldquo;外地人&ldquo;进行围攻，在欺侮中国外交官的同时，中方捍卫着国格，保卫着外交官的尊严，pol.ice强迫有外交豁免权的外交官下车，其实是以检查是否酒后驾车为名，欲剥夺中国外交官豁免权之目的，双方僵持不下，韩国媒体次日狠狠地大大的曝光这一事件，&ldquo;中外交人员酒驾，拒我pol.ice取缔&ldquo;、&ldquo;中使馆蛮横无理，在我地界闹事&ldquo;，目的就是丑化中国形象，替韩国加分。</p>
<p>7、今年长春冬季奥运会上，众多韩国运动员在领奖台上联手打出&ldquo;长白山是我们的领土&ldquo;的韩文标语，在中国的地盘上如此嚣张，不是背后有韩go-vern-ment撑腰，就是长期以来的歪曲历史教育所导致的恶劣影响；</p>
<p>8、韩国有六千年历史，日前韩国教育部着手修订历史教科书，把韩国青铜器出现的时间提前了一千年，超过传授他此项技术的中国；</p>
<p>世界杯足球赛韩国总统的讲话还比较客气的,说有5000年历史,后来媒体进一步说他们的历史有6000年比中国还长。另据韩国媒体称，韩国教育人力资源部23日表示，从今年新学期开始将采用新编初中、高中教科书，新教科书将青铜器时代的开始时间从&ldquo;公元前10世纪(公元前1000年)&rdquo;修改为&ldquo;公元前20世纪(公元前2000年)-公元前15世纪(公元前1500年)&rdquo;。照韩国人的思维方式，估计过不了多久他们的历史起始就和恐龙同时代了！！</p>
<p>9、把今年新版的10000圆钞票（韩面额最大纸币，相当于人民币80元左右）的背面，印上了中国古代天文学家张衡发明的&ldquo;浑天仪&ldquo;图案，这意味着浑天仪是韩国人发明的，是韩国的东西；</p>
<p>10、黄禹锡&ldquo;第一&rdquo;科学家</p>
<p>韩国的民族英雄黄禹锡造假事件，如今可以说已经真相大白，只剩下残局留待韩国各界的处理。如果硬要说中国人要有什么启发的话，那就是要学一下韩国人的敢于无耻，那就是以后中国人对于韩国人的吹牛无耻一定要小心。</p>
<p>11、哺育黄河文明</p>
<p>韩国没有自己的炫耀的文明，先是中国为宗主国，是中国的附属国；近代受日本欺负，造成他们偏执狭隘的心理。最为典型的要算韩国92年出版的教科书了.</p>
<p>这部共分5章:一开头宣示韩民族的祖先在公元前8000年从帕米尔高原远涉迁移到了半岛,途中催醒了满洲的&rdquo;红山文明&rdquo;,哺育了中原的&rdquo;黄河文明&rdquo;,韩人并在公元前7000东渡日本,创造了日本文明&hellip;...不过后来见了韩国人的&ldquo;考古&rdquo;，我倒觉得至少日本人还想着去做假证据，韩国人甚至把这一步都省了，还把成果出来大肆宣传。</p>
<p>12、去汉化</p>
<p>就是&ldquo;韩民族&rdquo;割断文化和中华文化的联系。汉城改&ldquo;汉城&rdquo;的闹剧刚刚过去，这不，几个韩国议员又开始张罗把&ldquo;汉江&rdquo;改为&ldquo;韩江&rdquo;了。在韩国，&ldquo;中医&rdquo;被改名成&ldquo;韩医&rdquo;，并被作为高丽医学而拼命向世界宣传推广。大长今中针灸也被认为是韩国人发明的。但朝鲜日报分明是报道了这个&ldquo;发现&rdquo;，并找到了个法国人作证，宣称要纠正世界人民的错误认识，把针灸还给韩国。怎么不把八卦图国旗也改了？八卦图可是正宗中国文化。什么时候韩国不用有中国八卦图的国旗,再来和中国谈尊严吧!日本人很自豪地说，我们的文化学习自中国，但是我们发扬光大了。所以，有这种意识的日本终究还是个强国。可是今天的韩国人否认了历史，忘记了中国文明对自己的教化.</p>
<p>13、台湾不属中国</p>
<p>韩国是先和台湾建交的，后来才和大陆建交的，我的同学说如果她不来中国，根本不知道台湾是中国的领土，可见韩国媒体对中国的妖魔化宣传。认识很多韩国同学.但确实他们国家的媒体会经常丑化中国，夸张中国的落后与贫穷.我曾遇到过这样的事：韩国人如果比较喜欢你，会对你说：&ldquo;你长得像韩国人&rdquo;，他们认为这是赞扬你。但我认识的一位朋友为表示友好，对一个韩国人说,&rdquo;你长得像中国人&ldquo;，结果那人非常不高兴，认为是污辱它。</p>
<p>14、蒙古人是朝鲜族分支</p>
<p>韩国人没有过征服别人的纪录（韩国人似乎很看重这一点），可以说韩国（朝鲜）的历史就是一部窝囊废的历史。他们就迂回出击&mdash;&mdash;和那些能征善战的民族&ldquo;攀亲戚&rdquo;。曾经征服过中原的北方的蒙古族和满族理所当然的是首选，于是上述两个民族全部变成了韩民族的&ldquo;分支&rdquo;。</p>
<p>&ldquo;爱新觉罗&rdquo;去掉&ldquo;爱&rdquo;和&ldquo;觉&rdquo;就是&ldquo;新罗&rdquo;，因此&ldquo;爱新觉罗&rdquo;的意思就是&ldquo;勿忘新罗&rdquo;或者&ldquo;爱新罗&rdquo;。说努尔哈赤的父亲来自朝鲜半岛，可稍具历史常识的人都知道，&ldquo;爱新觉罗&rdquo;出自满语，意思是&ldquo;金&rdquo;。韩国人籍此说&ldquo;金&rdquo;是韩国大姓，因此满族是朝鲜族分支！！！而韩国人论证自己与蒙古人关系的依据就更可笑&mdash;&mdash;韩国人新生婴儿屁股上有个青斑，和蒙古人一样。因此蒙古人是朝鲜族分支！！！可惜，这个蒙古斑是所有东亚人种共有的标记！</p>
<p>近日网上很多朝鲜人去满族的论坛&ldquo;认亲&rdquo;，其谄媚、下贱（被对方迎头痛骂之后，或是装作不知、或是说人家不是真正满族），让人&ldquo;五体投地&rdquo;。更好笑的是,某些韩国人认为孔子是韩国人，连西施都是韩国人。</p>
<p>15、教大禹治水</p>
<p>为了突出他们文明的优越，韩国学者做了篇文章，乖乖，连大禹治水用的&ldquo;神书&rdquo;都是朝鲜半岛传过来的，对韩国学者的学术能力找不到语言形容了，惊如天人。他们说他们的祖先檀宗，是我们祖先大禹的老师，是他教大禹治水的&mdash;&mdash;呵呵，后来甚至进一步说他们的历史有6000年比中国还长(世界杯足球赛韩国总统的讲话还是比较客气的，说有5000年，汗呀～～～世界杯靠黑哨拿第四名)韩国新歌剧《啊，高句丽！广大土好太王》。。&rdquo;。结尾是高句丽征服了燕国，燕国将高句丽的好太王供奉为主君。是一部典型的历史胡说剧！辽东在七雄时期是燕国，秦始皇灭六国而统一中国是世界公认的历史，还反咬一口说是中国人歪曲历史。秦始皇灭燕怎会突然之间变为高句丽王灭燕又突发奇想地出现在韩国的历史舞台上？庆幸的是，多数人还是有着清醒的头脑和良知，如果都按照韩国方式诠释历史，世界从此多事矣。</p>
<p>16、剽窃高句丽</p>
<p>请注意，高句丽和韩国的高丽完全是两码事情，高句丽是中国古代少数民族的一支。唐朝名将薛仁贵在高句丽的最后一个首都平壤（高句丽前后有过三个首都）接受了高句丽王的无条件投降书后，大唐军接收了高句丽全部的领土，自然继承了高句丽文化。而此时韩国的前身王氏高丽还没有诞生。在高句丽灭亡了二百多年以后，也就是公元9世纪初，由原高句丽旁边的新罗合并百济组成了高丽王朝。2004年9月17日，在被韩国命名为&ldquo;高句丽在韩国的历史作用&rdquo;的有多国学者参与的国际学术研讨会上，中国学者，沈阳东亚研究所研究员孙进已发言重申：&ldquo;高句丽是中国的历史因为高句丽的主体发生在中国，直至今天，原高句丽2/3的领土都在中国，而在当时3/4的高句丽居民都归顺了中国&rdquo;.&ldquo;在高句丽的大部分历史里，高句丽一直归属中原。看看韩国忠南大学考古学教授朴洋震论证&ldquo;满洲历史上属于高丽&rdquo;。拿出两个据他说是在满洲和韩半岛出土的青铜器，说这两件文物相似，又举出一件据说是中原出土的文物，说与前两件不同。于是得出结论：满洲和韩半岛属于一个文化共同体，满洲历史上韩民族的舞台。这是笔者平生所看见过的最荒唐最无耻的历史论证了。还扬言&ldquo;把满洲归纳与韩国古代领域不仅合乎情理，而且也是必要的&rdquo;甚至想把中国东北境内的高句丽历史剽窃为己有。2004年，中国把高句丽成功向联合国申请为中国的人类文化遗产，就是为了挫败韩国对历史的篡改。灭国先灭其史，韩国在赤裸裸的伪造历史！谈到满洲和朝鲜半岛的关系，还有一个朴洋震极力回避的突出的例子就是满清建立了满洲国后，为什么不是马上去合并朝鲜，以实现今天朴洋震等领土扩张野心家的梦想，去组成由满洲加半岛所谓韩民族的大统一？而要舍近求远，舍易攻难地入关攻克北京直捣中原？就是因为满洲人认为自己是中国人要入关统一中国。而对近在咫尺的朝鲜半岛，在满族人看来？是一个无关重要的边隧小邻国。</p>
<p>绑着写有&ldquo;还我河山&rdquo;四个鲜红大字布条的韩国人时常会成群结队出现在吉林吉安，延边，或者长白山。朝鲜日报做的调查，居然过半的韩国年轻人赞成&ldquo;夺回&rdquo;&ldquo;满洲（东北）和间岛（吉林延边）&rdquo;。韩国在高句丽问题上已经完成了发动群众的工作，而中国人大概很少有人知道这个争端关系到了东北的归属。</p>
<p>17、将中国领土划入版图百济曾统治西藏</p>
<p>根据史书记载，古代朝鲜半岛南部地区存在着两个古代王朝：新罗、百济。而北部则是领土跨越鸭绿江两岸的高勾丽。后来百济和高勾丽相继灭亡，新罗基本上完成了朝鲜半岛的统一。但在林均泽所着的《韩国史》标记的地图内容却与历史相差甚大，书中中国地图竟然用三种颜色分为三个国家：百济、新罗和唐朝。其中的百济除了统治整个朝鲜半岛外，还统治中国华北和西藏，而上海、江苏、浙江在内长江以南的中国区域则标记着&ldquo;新罗&rdquo;，表示这是新罗的统治区。而云南、四川部分地区，地图中用红颜色在这块小小地区标着&ldquo;唐&rdquo;。另外，该书的作者在描述三国割据结束后，统一的新罗王朝甚至还成立了安西都护府、安东都护府这样的government机构。</p>
<p>18、韩国已向联合国提交汉服申遗书。</p>
<p>据称，朝鲜族民族服装襦裙就是明朝汉族女性平常爱穿的服装，韩国已向联国提交汉服申遗书。</p>
<p>韩国还斥巨资对汉服拍摄电视剧《朱蒙》，为汉服申遗造势。剧中汉服飘飘，文化鲜明，韩国自信此剧定能为申遗加分。《朱蒙》被一些网民所指责，认为此剧歪曲历史，亦有人指剧集丑化了中国人。例如：剧中指汉武帝消灭了卫满朝鲜之后，把古朝鲜的遗民用作试验钢兵器的材料。这种说法都欠缺历史根据，有污蔑之嫌。韩国自古以来崇拜中国文化，而今就以为中国的历史是他们创造的了。还记得韩国2005年将首都的中文名称从汉城改名为汉城，虽然不可谓之不妥，却是民族主义空前高涨的一个表现。</p>]]></description>
			<link>http://www.shanghuo.net/?action=show&amp;id=310</link>
			<category domain="http://www.shanghuo.net/?cid=7">新闻</category>
			<pubDate>2009-03-23 17:29</pubDate>
		</item>
		<item>
			<guid>http://www.shanghuo.net/?action=show&amp;id=309</guid>
			<title>Gmail访问量超YouTube 成美国第十大网站</title>
			<author>jiashixiang</author>
			<description><![CDATA[<p>据国外媒体报道，美国互联网流量监测机构Hitwise周二公布的统计数据显示，在截至今年3月7日的前两周期间，谷歌旗下Gmail电子邮件服务网站的访问量已超过该公司旗下视频共享网站YouTube。以流量为标准，Gmail已成为美国第十大网站。</p>
<p><br />
Hitwise称，在截至今年1月10之前，YouTube在美国市场的流量排名一直稳居第十位，但进入2月份以来，这种情况发生了变化。到3月7日的前两周中，Gmail网站已取代了YouTube第十位置。Hitwise表示，由于此前美国十大网站流量排名一直非常稳定，这次Gmail取代YouTube，说明美国网民使用Gmail的频率已大幅提高。</p>
<p><br />
如果以谷歌旗下各项资产为标准，则Gmail流量已位居第二，仅位于谷歌搜索之后，YouTube退居第三。Hitwise称，与去年同期相比，Gmail网站3月7日的前两周中流量增长了70%。尽管YouTube流量与去年同期相比也有所提高(同比增长19%)，但增速已不如Gmail。(编译/中涛)</p>
<p><br />
附：Hitwise所统计今年3月7日前两周美国前12大网站排名(以流量为标准)：</p>
<p><br />
1、谷歌搜索</p>
<p><br />
2、雅虎邮箱</p>
<p><br />
3、雅虎网站</p>
<p><br />
4、新闻集团旗下社交网站Myspace</p>
<p><br />
5、美国社交网站Facebook</p>
<p><br />
6、美国网上拍卖网站eBay</p>
<p><br />
7、微软Windows Live邮箱</p>
<p><br />
8、雅虎搜索</p>
<p><br />
9、微软MSN网站</p>
<p><br />
10、谷歌Gmail邮箱</p>
<p><br />
11、谷歌旗下视频共享网站YouTube</p>
<p><br />
12、谷歌图片搜索</p>]]></description>
			<link>http://www.shanghuo.net/?action=show&amp;id=309</link>
			<category domain="http://www.shanghuo.net/?cid=7">新闻</category>
			<pubDate>2009-03-11 13:49</pubDate>
		</item>
		<item>
			<guid>http://www.shanghuo.net/?action=show&amp;id=308</guid>
			<title>file_get_contents 和 curl</title>
			<author>jiashixiang</author>
			<description><![CDATA[<p>&lt;?php<br />
// create a new curl resource<br />
$ch = curl_init();</p>
<p>// set URL and other appropriate options<br />
curl_setopt($ch, CURLOPT_URL, &quot;<a href="http://www.example.com/">http://www.example.com/</a>&quot;);<br />
curl_setopt($ch, CURLOPT_HEADER, 0);</p>
<p>// grab URL and pass it to the browser<br />
curl_exec($ch);</p>
<p>// close curl resource, and free up system resources<br />
curl_close($ch);<br />
?&gt;</p>
<p>当然此功能也有被关闭的可能。</p>
<p>使用以上2个方法可以使用function_exists()判断使用</p>
<p>if(function_exists('file_get_contents')) {<br />
$file_contents = file_get_contents($url);<br />
} else {<br />
$ch = curl_init();<br />
$timeout = 5;<br />
curl_setopt ($ch, CURLOPT_URL, $url);<br />
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);<br />
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);<br />
$file_contents = curl_exec($ch);<br />
curl_close($ch);<br />
}<br />
return $file_contents;<br />
if(function_exists('file_get_contents')) {<br />
$file_contents = file_get_contents($url);<br />
} else {<br />
$ch = curl_init();<br />
$timeout = 5;<br />
curl_setopt ($ch, CURLOPT_URL, $url);<br />
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);<br />
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);<br />
$file_contents = curl_exec($ch);<br />
curl_close($ch);<br />
}<br />
return $file_contents;</p>]]></description>
			<link>http://www.shanghuo.net/?action=show&amp;id=308</link>
			<category domain="http://www.shanghuo.net/?cid=2">php学习</category>
			<pubDate>2009-03-09 16:35</pubDate>
		</item>
		<item>
			<guid>http://www.shanghuo.net/?action=show&amp;id=307</guid>
			<title>几个常用的去空、分组、调试数组函数</title>
			<author>jiashixiang</author>
			<description><![CDATA[<p>dump() 把数组以数组格式数组，有益于调试</p>
<p>function dump($vars, $label = '', $return = false){<br />
&nbsp;&nbsp;&nbsp; if (ini_get('html_errors')) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $content = &quot;&lt;pre&gt;\n&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($label != '') {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $content .= &quot;&lt;strong&gt;{$label} :&lt;/strong&gt;\n&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $content .= htmlspecialchars(print_r($vars, true));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $content .= &quot;\n&lt;/pre&gt;\n&quot;;<br />
&nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $content = $label . &quot; :\n&quot; . print_r($vars, true);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; if ($return) { return $content; }<br />
&nbsp;&nbsp;&nbsp; echo $content;<br />
&nbsp;&nbsp;&nbsp; return null;<br />
}</p>
<p>array_remove_empty()去除数组中为空的元素</p>
<p>function array_remove_empty(&amp; $arr, $trim = true){<br />
&nbsp;&nbsp;&nbsp; foreach ($arr as $key =&gt; $value) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (is_array($value)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; array_remove_empty($arr[$key]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $value = trim($value);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($value == '') {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unset($arr[$key]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } elseif ($trim) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $arr[$key] = $value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>]]></description>
			<link>http://www.shanghuo.net/?action=show&amp;id=307</link>
			<category domain="http://www.shanghuo.net/?cid=2">php学习</category>
			<pubDate>2009-03-09 16:33</pubDate>
		</item>
	</channel>
</rss>
