<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_酷赛瑞</title><subtitle type="text">——专攻ASP.NET+JQUERY+AJAX+WEBSERVICE</subtitle><id>http://feed.cnblogs.com/blog/u/59963/rss</id><updated>2012-02-03T08:58:49Z</updated><author><name>酷赛瑞</name><uri>http://www.cnblogs.com/cosiray/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cosiray/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/59963/rss"/><entry><id>http://www.cnblogs.com/cosiray/archive/2012/02/03/2337334.html</id><title type="text">向IIS注册ASP.NET代码</title><summary type="text">C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i</summary><published>2012-02-03T08:59:00Z</published><updated>2012-02-03T08:59:00Z</updated><author><name>酷赛瑞</name><uri>http://www.cnblogs.com/cosiray/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cosiray/archive/2012/02/03/2337334.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cosiray/archive/2012/02/03/2337334.html"/><content type="html">C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i&lt;br /&gt;&lt;img src="http://www.cnblogs.com/cosiray/aggbug/2337334.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cosiray/archive/2012/02/03/2337334.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cosiray/archive/2012/01/04/2312109.html</id><title type="text">Windows下安装Redmine</title><summary type="text">为food项目配置了项目管理平台，综合了trac、dotProject、Redmine等几个开源平台，最终选择了Redmine。项目主页 http://www.redmine.org下面是安装方法：一、Redmine安装。1、准备安装之前请阅读：RailsInstaller简化了Rails在Windows上的安装过程英文原文：RailsInstaller Provides Easy Rails on Windows Installation作者：Rob Bazinet 译者：张龙RailsInstaller向Windows开发者提供了一种便捷的方式以轻松、快速创建Ruby on Rails 3</summary><published>2012-01-04T07:43:00Z</published><updated>2012-01-04T07:43:00Z</updated><author><name>酷赛瑞</name><uri>http://www.cnblogs.com/cosiray/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cosiray/archive/2012/01/04/2312109.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cosiray/archive/2012/01/04/2312109.html"/><content type="html">&lt;div id="cnblogs_post_body"&gt;&#xD;
&lt;p&gt;为food项目配置了项目管理平台，综合了trac、dotProject、Redmine等几个开源平台，最终选择了Redmine。项目主页 &lt;a href="http://www.redmine.org/"&gt;&lt;font color="#3b5999"&gt;http://www.redmine.org&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;下面是安装方法：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;一、Redmine安装。&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1、准备&lt;/p&gt;&#xD;
&lt;p&gt;安装之前请阅读：&lt;a href="http://news.cnblogs.com/n/90182/"&gt;&lt;font color="#3b5999"&gt;RailsInstaller简化了Rails在Windows上的安装过程&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;英文原文：&lt;a href="http://www.infoq.com/news/2011/01/railsinstaller-windows"&gt;&lt;font color="#3b5999"&gt;RailsInstaller Provides Easy Rails on Windows Installation&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;作者：Rob Bazinet 译者：张龙&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://railsinstaller.org/"&gt;&lt;font color="#3b5999"&gt;RailsInstaller&lt;/font&gt;&lt;/a&gt;向Windows开发者提供了一种便捷的方式以轻松、快速创建Ruby on Rails 3应用。到目前为止，Windows开发者需要自己搭建好Ruby、RubyGems、Rails以及SQLite才能开始创建Rails应用。多亏了来自&lt;a href="http://www.engineyard.com/"&gt;&lt;font color="#3b5999"&gt;Engine Yard&lt;/font&gt;&lt;/a&gt;的Nic Williams博士及其团队，现在一切都变得简单异常。&lt;/p&gt;&#xD;
&lt;p&gt;目前的RailsInstaller提供了如下功能：&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;通过向导的轻松安装&lt;/li&gt;&lt;li&gt;Rails 3.0.3&lt;/li&gt;&lt;li&gt;Ruby 1.8.7&amp;#8212;&amp;#8212;p330&lt;/li&gt;&lt;li&gt;SLQite 3.7.3&lt;/li&gt;&lt;li&gt;Git 1.7.3.1&lt;/li&gt;&lt;li&gt;DevKit &lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;2、安装&lt;/p&gt;&#xD;
&lt;p&gt;注意：下面的操作要在联网的情况下进行。&lt;/p&gt;&#xD;
&lt;p&gt;转自：&lt;a href="http://www.cppblog.com/giigie/archive/2011/07/31/152160.html"&gt;&lt;font color="#3b5999"&gt;http://www.cppblog.com/giigie/archive/2011/07/31/152160.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;最近在一家公司实习。公司用的项目管理软件是开源的redmine，体验非常不错。我想这个东西不仅可以用来管理项目，也可以用来管理个人的学习工作进展啊。于是，我也在自己的虚拟机的2003 server 下安装。&lt;/p&gt;&#xD;
&lt;p&gt;之前为了安装wordpress，我已经在我的电脑上安装了 xampp。这是一个搭建服务器环境的傻瓜式安装包，里面集成了apache,php,mysql,phpMyAdmin,FileZilla FTP Server,Tomcat，这些组件可以选择安装。.&lt;/p&gt;&#xD;
&lt;p&gt;因为redmine是需要apache 和mysql的，所以正好。此外，redmine使用ruby写的，所以还需要ruby的环境。&lt;/p&gt;&#xD;
&lt;p&gt;配置ruby 的环境我选用的是railsinstaller 。&lt;/p&gt;&#xD;
&lt;p&gt;之前我在网上搜索安装redmine 的教程，配置ruby环境大多是用InstantRails。我实际用了一下，效果不太好。因为InstantRails从2007年开始就没有更新了，里面包含的很多组件版本都很旧，直接搭建的话需要升级各种组件，而且组件之间的依赖关系比较混乱，反正我是在里面绕了很多弯路。而且InstantRails 里面自带有很低版本的apache,mysql,phpMyAdmin,如果你电脑本来安装了这些，那么又要改这些服务的端口和对应的配置文件。总之一句话，InstantRails 已经过时了。&lt;/p&gt;&#xD;
&lt;p&gt;好了，现在开始进入正题吧。&lt;/p&gt;&#xD;
&lt;p&gt;1.去redmine的官方网站下载 redmine 的最新版本。我下载的的是redmine 1.2.1.然后弄清楚这个版本的需要的环境。Redmine 的网站的&lt;a href="http://www.redmine.org/projects/redmine/wiki/Guide"&gt;&lt;font color="#3b5999"&gt;Guide&lt;/font&gt;&lt;/a&gt; &amp;#187; &lt;a href="http://www.redmine.org/projects/redmine/wiki/Installation_Guide"&gt;&lt;font color="#3b5999"&gt;Installation Guide&lt;/font&gt;&lt;/a&gt; &amp;#187; 会清楚的告诉你这些事项的。&lt;/p&gt;&#xD;
&lt;p&gt;2.如果你的电脑上还没有apache ,php,mysql 建议你去下载xampp,如果有的话，跳过这步。&lt;/p&gt;&#xD;
&lt;p&gt;3.去railsinstaller 的官方网站去下载最新版的railsinstaller 。看它所包含的组件以及其版本。然后安装。&lt;/p&gt;&#xD;
&lt;p&gt;4.做好这些准备工作了。就可以开始配置redmine运行环境了。把redmine的解压到railsinstaller所产生的sites目录。在dos窗口进入sites\redmine目录下。&lt;/p&gt;&#xD;
&lt;p&gt;5.gem install rails -v=2.3.11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 安装rails 2.3.11版本，这个redmine 1.2.1所要求的。&lt;/p&gt;&#xD;
&lt;p&gt;6.gem install rack -v=1.1.1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 安装rack 1.1.1版本，这个redmine 1.2.1所要求的。&lt;/p&gt;&#xD;
&lt;p&gt;7.gem install -v=0.4.2 i18n&amp;nbsp; 这个根据安装时返回的错误命令提示来决定。比如的我就是提示Missing the i18n 0.4.2 gem. Please `gem install -v=0.4.2 i18n`&lt;/p&gt;&#xD;
&lt;p&gt;8.进入phpMyAdmin 创建数据库。执行以下三条sql 语句。&lt;/p&gt;&#xD;
&lt;p&gt;create database redmine character set utf8;&lt;/p&gt;&#xD;
&lt;p&gt;create user 'redmine'@'localhost' identified by 'my_password';&lt;/p&gt;&#xD;
&lt;p&gt;grant all privileges on redmine.* to 'redmine'@'localhost';&lt;/p&gt;&#xD;
&lt;p&gt;9.拷贝config/database.yml.example文件到config/database.yml，修改database.yml的内容 production:&lt;/p&gt;&#xD;
&lt;p&gt;adapter: mysql&lt;/p&gt;&#xD;
&lt;p&gt;database: redmine&lt;/p&gt;&#xD;
&lt;p&gt;host: localhost&lt;/p&gt;&#xD;
&lt;p&gt;username: redmine&lt;/p&gt;&#xD;
&lt;p&gt;password: my_password&lt;/p&gt;&#xD;
&lt;p&gt;Username 和password字段就是自己要设置的数据库的账号和密码。&lt;/p&gt;&#xD;
&lt;p&gt;10.回到dos 窗口下，设置Session Key，执行 rake generate_session_store&lt;/p&gt;&#xD;
&lt;p&gt;如果提示 mysql 错误，再执行如下语句 gem install mysql&lt;/p&gt;&#xD;
&lt;p&gt;11.然后set RAILS_ENV=production&lt;/p&gt;&#xD;
&lt;p&gt;rake db:migrate&lt;/p&gt;&#xD;
&lt;p&gt;rake redmine:load_default_data&lt;/p&gt;&#xD;
&lt;p&gt;执行rake load_default_data RAILS_ENV="production" 完后，会提示Select language: bg, bs, ca, cs, da, de, el, en, en-GB, es, eu, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mn, nl,no, pl, pt, pt-BR, ro, ru, sk, sl, sr, sr-CY, sv, th, tr, uk, vi, zh, zh-TW [en] zh&lt;/p&gt;&#xD;
&lt;p&gt;输入zh选择中文&lt;/p&gt;&#xD;
&lt;p&gt;12.最后ruby script/server webrick -e production&amp;nbsp; 启动。以后每次开机后都需要这句来启动。&lt;/p&gt;&#xD;
&lt;p&gt;13.打开浏览器 输入 &lt;a href="http://localhost:3000/"&gt;&lt;font color="#3b5999"&gt;http://localhost:3000&lt;/font&gt;&lt;/a&gt; 。账号，密码都是 admin 。&lt;/p&gt;&#xD;
&lt;p&gt;14.安装完了，就可以使用admin用户登录，密码也是admin，登入后，发现页面又变成了英文的，在这里要设置个人用户，修改语言为中文就可以了。然后进入管理页面，可以管理项目，用户，角色，权限，问题状态，跟踪类型，流程等。&lt;/p&gt;&#xD;
&lt;p&gt;上面的步骤是比较顺利的，如果是组件的版本有问题，这篇博客比较有价值&lt;a href="http://like-eagle.iteye.com/blog/847218"&gt;&lt;font color="#3b5999"&gt;http://like-eagle.iteye.com/blog/847218&lt;/font&gt;&lt;/a&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;如果还有问题，你可以根据问题的提示去google.&lt;/p&gt;&#xD;
&lt;p&gt;下面我简单翻译一下redmine 1.2.1 官方的安装向导。（仅 windows 平台）&lt;/p&gt;&#xD;
&lt;p&gt;官方发行版已经在其 vendor 目录包含了适当的Rails 版本，所以不需要为此做什么。&lt;/p&gt;&#xD;
&lt;p&gt;你也可以查看redmine 的版本，运行一下命令特地的为它安装某个版本的组件：&lt;/p&gt;&#xD;
&lt;p&gt;gem install rails -v=2.3.11&lt;/p&gt;&#xD;
&lt;p&gt;安装rack&lt;/p&gt;&#xD;
&lt;p&gt;gem install rack -v=1.1.0&lt;/p&gt;&#xD;
&lt;p&gt;兼容性提示&lt;/p&gt;&#xD;
&lt;p&gt;&amp;#183; Ruby 1.9 版本目前还不支持，但你必须安装ruby 1.8.x 以上的版本。&lt;/p&gt;&#xD;
&lt;p&gt;&amp;#183; RubyGems 1.3.7 或者更高版本有以下限制 :&lt;/p&gt;&#xD;
&lt;p&gt;o Rails 2.3.5 与rubygems 1.5.0或者更高的版本工作会失败，请使用rubygems的更早的版本!&lt;/p&gt;&#xD;
&lt;p&gt;o Rails 2.3.11 与rubygems 1.7.9或者更高版本工作会失败，请使用rubygems更早的版本 !&lt;/p&gt;&#xD;
&lt;p&gt;&amp;#183; 需要Rake 0.8.7 (rake 0.9.x 尚未被 Rails 支持)&lt;/p&gt;&#xD;
&lt;p&gt;&amp;#183; 需要Rack1.1.x , 1.1.0 版本有引用 (&lt;a href="http://www.redmine.org/issues/8416"&gt;&lt;font color="#3b5999"&gt;#8416&lt;/font&gt;&lt;/a&gt;)所描述的bug. 同其他版本的迁移会失败.&lt;/p&gt;&#xD;
&lt;p&gt;&amp;#183; Mongrel1.1.5 需要补丁 &lt;a href="http://www.redmine.org/issues/7688"&gt;&lt;font color="#3b5999"&gt;#7688&lt;/font&gt;&lt;/a&gt; 才能和 Rails 2.3.11工作. 在升级的情况下，其他问题可能会出现 (&lt;a href="http://www.redmine.org/issues/7857"&gt;&lt;font color="#3b5999"&gt;#7857&lt;/font&gt;&lt;/a&gt;).&lt;/p&gt;&#xD;
&lt;p&gt;&amp;#183;&amp;nbsp; Redmine &amp;gt;= 1.0.5版本需要I18n 0.4.2&lt;/p&gt;&#xD;
&lt;p&gt;数据库&lt;/p&gt;&#xD;
&lt;p&gt;&amp;#183; 需要mysql 5.0或者更高的版本。MySQL 5.0 or higher (建议)&lt;/p&gt;&#xD;
&lt;p&gt;安装步骤&lt;/p&gt;&#xD;
&lt;p&gt;1.获得redmine 的源代码或者发行包。参见 &lt;a href="http://www.redmine.org/projects/redmine/wiki/Download"&gt;&lt;font color="#3b5999"&gt;Download&lt;/font&gt;&lt;/a&gt;.&lt;/p&gt;&#xD;
&lt;p&gt;2.用mysql 创建一个空的数据库和一个名为 redmine的用户，例如：&lt;/p&gt;&#xD;
&lt;p&gt;create database redmine character set utf8;&lt;/p&gt;&#xD;
&lt;p&gt;create user 'redmine'@'localhost' identified by 'my_password';&lt;/p&gt;&#xD;
&lt;p&gt;grant all privileges on redmine.* to 'redmine'@'localhost';&lt;/p&gt;&#xD;
&lt;p&gt;对于mysql 5.0.2 的版本 跳过create user ,用这个代替grant all privileges on redmine.* to 'redmine'@'localhost' identified by 'my_password';&lt;/p&gt;&#xD;
&lt;p&gt;3.复制Copy config/database.yml.example改为 config/database.yml ，编辑文件配置数据库设置。例如mysql:&lt;/p&gt;&#xD;
&lt;p&gt;production:&lt;/p&gt;&#xD;
&lt;p&gt;adapter: mysql&lt;/p&gt;&#xD;
&lt;p&gt;database: redmine&lt;/p&gt;&#xD;
&lt;p&gt;host: localhost&lt;/p&gt;&#xD;
&lt;p&gt;username: redmine&lt;/p&gt;&#xD;
&lt;p&gt;password: my_password&lt;/p&gt;&#xD;
&lt;p&gt;如果服务器没有工作在3306端口，用下面的配置代替：&lt;/p&gt;&#xD;
&lt;p&gt;production:&lt;/p&gt;&#xD;
&lt;p&gt;adapter: mysql&lt;/p&gt;&#xD;
&lt;p&gt;database: redmine&lt;/p&gt;&#xD;
&lt;p&gt;host: localhost&lt;/p&gt;&#xD;
&lt;p&gt;port: 3307&lt;/p&gt;&#xD;
&lt;p&gt;username: redmine&lt;/p&gt;&#xD;
&lt;p&gt;password: my_password&lt;/p&gt;&#xD;
&lt;p&gt;4.生成会话密钥：&lt;/p&gt;&#xD;
&lt;p&gt;rake generate_session_store&lt;/p&gt;&#xD;
&lt;p&gt;5.创建数据库：&lt;/p&gt;&#xD;
&lt;p&gt;AILS_ENV=production rake db:migrate&lt;/p&gt;&#xD;
&lt;p&gt;这将创建一个管理员账户。&lt;/p&gt;&#xD;
&lt;p&gt;如果你得到以下错误：&lt;/p&gt;&#xD;
&lt;p&gt;Rake aborted!&lt;/p&gt;&#xD;
&lt;p&gt;no such file to load -- net/https&lt;/p&gt;&#xD;
&lt;p&gt;你需要安装libopenssl-ruby1.8&lt;/p&gt;&#xD;
&lt;p&gt;6.向数据库插入默认的配置数据&lt;/p&gt;&#xD;
&lt;p&gt;RAILS_ENV=production rake redmine:load_default_data&lt;/p&gt;&#xD;
&lt;p&gt;7.运行使用ruby script/server webrick -e production命令&lt;/p&gt;&#xD;
&lt;p&gt;配置：&lt;/p&gt;&#xD;
&lt;p&gt;从1.2.0版本开始，redmine的配置都在config/configuration.yml文件里。不要忘记修改了默认配置都需要重启服务。&lt;/p&gt;&#xD;
&lt;p&gt;Window 用户的特别提醒&lt;/p&gt;&#xD;
&lt;p&gt;RAILS_ENV=production rake db:migrate&lt;/p&gt;&#xD;
&lt;p&gt;RAILS_ENV=production rake redmine:load_default_data&lt;/p&gt;&#xD;
&lt;p&gt;等命令已经变成了&lt;/p&gt;&#xD;
&lt;p&gt;set RAILS_ENV=production&lt;/p&gt;&#xD;
&lt;p&gt;rake db:migrate&lt;/p&gt;&#xD;
&lt;p&gt;rake redmine:load_default_data&lt;/p&gt;&#xD;
&lt;p&gt;如果你需要安装mysql ，使用如下命令：&lt;/p&gt;&#xD;
&lt;p&gt;gem install mysql&lt;/p&gt;&#xD;
&lt;p&gt;在一些情况下，你需要复制libmysql.dll到你的ruby/bin目录，但不是所有的libmysql.dll 都适合，请参考&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://instantrails.rubyforge.org/svn/trunk/InstantRails-win/InstantRails/mysql/bin/libmySQL.dll"&gt;&lt;font color="#3b5999"&gt;http://instantrails.rubyforge.org/svn/trunk/InstantRails-win/InstantRails/mysql/bin/libmySQL.dll&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;二、Redmine集成SVN&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;参考&lt;a href="http://www.cnblogs.com/Quincy/archive/2011/06/03/2070479.html"&gt;&lt;font color="#3b5999"&gt;http://www.cnblogs.com/Quincy/archive/2011/06/03/2070479.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;进入Redmine目录下Config，有文件&amp;#8220;configuration.yml.example&amp;#8221;，复制该文件重命名&amp;#8220;configuration.yml&amp;#8221;，修改其中的SVN配置&lt;/p&gt;&#xD;
&lt;p&gt;scm_subversion_command: svn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # (default: svn)，&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;这里需要设置在环境变量PATH中添加svn所在的目录&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;再重启服务器，配置SCM，选用SVN设置库路径，就可以看到代码了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;三、Redmine配置上传文件存储地址、邮件服务器等&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;参考上步，在这个文件中有相应的配置选项。&lt;/p&gt;&#xD;
&lt;p&gt;注意：configuration.yml 中无用的项不用写，有严格的格式&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;下面这两句是一个配置例子：&lt;/p&gt;&#xD;
&lt;p&gt;default: &lt;br /&gt;&amp;nbsp; attachments_storage_path: D:\RedmineFiles &lt;br /&gt;&amp;nbsp; scm_subversion_command: svn&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;四、Redmine以windows服务方式启动&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;参考 &lt;a href="http://bufeifang.blog.163.com/blog/static/558981512009421113134391/"&gt;&lt;font color="#3b5999"&gt;http://bufeifang.blog.163.com/blog/static/558981512009421113134391/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Redemine的启动是用命令行执行的，在Redmine根目录下执行：ruby script/server -e production即可，但是执行后不能关闭控制台，不然服务就会关闭，这对于重启服务器来说是一件很麻烦的事情，每次都要手动启动Redmine；&lt;/p&gt;&#xD;
&lt;p&gt;既然Windows有服务，可自启，那就安装成服务，安装步骤如下：&lt;/p&gt;&#xD;
&lt;p&gt;A、先安装mongrel_service，在在C:\InstantRails\ruby\bin目录下运行：gem install mongrel_service，此过程中会下载一些其他必须的包；&lt;/p&gt;&#xD;
&lt;p&gt;B、使用mongrel_service将Redmine安装为服务：mongrel_rails service::install -N RedMine -c C:\redmine -p 3000 &amp;#8211;e production；C:\redmine是具体的目录，参考修改；&lt;/p&gt;&#xD;
&lt;p&gt;C、安装服务后，查看-e后的参数是不是production，如果不是production而是development，则在注册表中把参数手动改为production即可，修改方法是：在&amp;#8220;开始&amp;#8594;运行&amp;#8221;中键入&amp;#8220;regedit.exe&amp;#8221;，打开&amp;#8220;注册表编辑器&amp;#8221;，展开分支&amp;#8220;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services&amp;#8221;，在下面都是系统服务的名称，右侧窗格中显示的就是服务的详细参数。找到ImagePath项，修改保存后在服务列表中启动服务，并把服务设置自动启动。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;code&gt;然后修改启动方式为自动启动，并添加MySQL服务为其依赖服务（如果你的MySQL服务器不是本机就不用麻烦了）：&lt;/code&gt;&lt;/p&gt;&#xD;
&lt;p&gt;sc config RedMine start= auto depend= MySQL&lt;/p&gt;&#xD;
&lt;p&gt;注意：上面命令=后有一个空格。&lt;/p&gt;&#xD;
&lt;p&gt;注意，执行sc config系列指令，服务必须是未启动的才行，否则会出错。&lt;/p&gt;&#xD;
&lt;p&gt;将来如果想去掉这个服务，只要执行：&lt;/p&gt;&#xD;
&lt;p&gt;mongrel_rails service::remove -N RedMine&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;五、Redmine服务方式不能正常运行bug补丁&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;补丁（很重要）&lt;/p&gt;&#xD;
&lt;p&gt;上面第四步操作完以后，Redmine并不能正常运行，log中有这日志&lt;/p&gt;&#xD;
&lt;p&gt;A NoMethodError occurred in account#login&lt;/p&gt;&#xD;
&lt;p&gt;参见 &lt;a href="http://www.redmine.org/issues/7857"&gt;&lt;font color="#3b5999"&gt;http://www.redmine.org/issues/7857&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;解决办法：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;由 &lt;a href="http://www.redmine.org/users/9396"&gt;&lt;font color="#3b5999"&gt;Alfredo Bonilla&lt;/font&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Hi everybody, we are trying to upgrade to 1.2 and we are having both problems here described... the problem is that after applying what here is detailed... there is no way... problems still remain.&lt;/p&gt;&#xD;
&lt;p&gt;Please, let me know if I'm missing something or doing something wrong!!):&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;Copy mongrel.rb (&lt;a href="https://gist.github.com/826692"&gt;&lt;font color="#3b5999"&gt;https://gist.github.com/826692&lt;/font&gt;&lt;/a&gt;), patch_for_mongrel.rb (&lt;a href="http://www.redmine.org/attachments/4699/patch_for_mongrel.rb"&gt;&lt;font color="#3b5999"&gt;http://www.redmine.org/attachments/4699/patch_for_mongrel.rb&lt;/font&gt;&lt;/a&gt;) and rails_6440_patch.rb (&lt;a href="http://www.redmine.org/attachments/6146/rails_6440_patch.rb"&gt;&lt;font color="#3b5999"&gt;http://www.redmine.org/attachments/6146/rails_6440_patch.rb&lt;/font&gt;&lt;/a&gt;) files in /&amp;lt;my-redmine-path&amp;gt;/config/initializers &lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;Thx in advance&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a name="note-14"&gt;&lt;/a&gt;由 &lt;a href="http://www.redmine.org/users/6508"&gt;&lt;font color="#3b5999"&gt;Etienne Massip&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;mongrel.rb is mandatory to get mongrel 1.1.5 work with RoR 2.3.11. It's the only patch I'm actually running with.&lt;/li&gt;&lt;li&gt;patch_for_mongrel.rb might be useful for a sub-URL Redmine setup ?&lt;/li&gt;&lt;li&gt;rails_6440_patch.rb might be useful at start to prevent the hereby discussed issue (maybe only in case of a Redmine upgrade) but can be remove after some time &lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;a name="note-15"&gt;&lt;/a&gt;由 &lt;a href="http://www.redmine.org/users/9396"&gt;&lt;font color="#3b5999"&gt;Alfredo Bonilla&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Thanks for clarifications. As I commented in &lt;a href="http://www.redmine.org/issues/7688"&gt;&lt;font color="#3b5999"&gt;http://www.redmine.org/issues/7688&lt;/font&gt;&lt;/a&gt;, our problem was not having installed the mongrel gems. Once installed, just with mongrel.rb in /config/initializers, everything is working. :)&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div id="MySignature"&gt;&#xD;
&lt;div id="postcopyright"&gt;&#xD;
&lt;p&gt;&lt;strong&gt;文章信息：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;作者：&lt;a href="http://www.cnblogs.com/afarmer" target="_blank"&gt;&lt;font color="#3b5999"&gt;一个农夫&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;出处：&lt;a href="http://www.cnblogs.com/afarmer" target="_blank"&gt;&lt;font color="#3b5999"&gt;一个园子 - http://www.cnblogs.com/afarmer&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;本文版权归作者和博客园共有，转载请遵循&amp;#8220;署名-非商业使用-禁止演绎&amp;#8221;协议，未经作者授权，必须在文章页面明显位置给出原文连接，同时诚挚期望您保留此段声明。谢谢合作。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/cosiray/aggbug/2312109.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cosiray/archive/2012/01/04/2312109.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cosiray/archive/2011/12/23/2299167.html</id><title type="text">Perl简单教程</title><summary type="text">第一节：基本上，简单变量就是一个数据单元，这个单元可以是数字或字符串。一、整型1、整型PERL最常用的简单变量，由于其与其它语言基本相同，不再赘述。例：$x = 12345;if (1217 + 116 == 1333) {# statement block goes here}整型的限制：PERL实际上把整数存在你的计算机中的浮点寄存器中，所以实际上被当作浮点数看待。在多数计算机中，浮点寄存器可以存贮约16位数字，长于此的被丢弃。整数实为浮点数的特例。2、8进制和16进制数8进制以0打头，16进制以0x打头。例：$var1 = 047; (等于十进制的39)$var2 = 0x1f; (等于</summary><published>2011-12-23T03:36:00Z</published><updated>2011-12-23T03:36:00Z</updated><author><name>酷赛瑞</name><uri>http://www.cnblogs.com/cosiray/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cosiray/archive/2011/12/23/2299167.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cosiray/archive/2011/12/23/2299167.html"/><content type="html">&lt;span  style="line-height: 18px; font-family: 'Times New Roman'; "&gt;&#xD;
&lt;p&gt;第一节：&lt;br /&gt;&#xD;
基本上，简单变量就是一个数据单元，这个单元可以是数字或字符串。&lt;br /&gt;&#xD;
一、整型&lt;br /&gt;&#xD;
1、整型&lt;br /&gt;&#xD;
PERL最常用的简单变量，由于其与其它语言基本相同，不再赘述。&lt;br /&gt;&#xD;
例：&lt;br /&gt;&#xD;
$x = 12345;&lt;br /&gt;&#xD;
if (1217 + 116 == 1333) {&lt;br /&gt;&#xD;
# statement block goes here&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
整型的限制：&lt;br /&gt;&#xD;
PERL实际上把整数存在你的计算机中的浮点寄存器中，所以实际上被当作浮点数看待。在多数计算机中，浮点寄存器可以存贮约16位数字，长于此的被丢弃。整数实为浮点数的特例。&lt;br /&gt;&#xD;
2、8进制和16进制数&lt;br /&gt;&#xD;
8进制以0打头，16进制以0x打头。&lt;br /&gt;&#xD;
例：$var1 = 047; (等于十进制的39)&lt;br /&gt;&#xD;
$var2 = 0x1f; (等于十进制的31)&lt;br /&gt;&#xD;
二、浮点数&lt;br /&gt;&#xD;
如 11.4 、 -0.3 、.3 、 3. 、 54.1e+02 、 5.41e03&lt;br /&gt;&#xD;
浮点寄存器通常不能精确地存贮浮点数，从而产生误差，在运算和比较中要特别注意。指数的范围通常为-309到+308。&lt;br /&gt;&#xD;
例：&lt;/p&gt;&#xD;
&lt;p&gt;#!/usr/local/bin/perl&lt;br /&gt;&#xD;
$value = 9.01e+21 + 0.01 - 9.01e+21;&lt;br /&gt;&#xD;
print ("first value is ", $value, "\n");&lt;br /&gt;&#xD;
$value = 9.01e+21 - 9.01e+21 + 0.01;&lt;br /&gt;&#xD;
print ("second value is ", $value, "\n");&lt;/p&gt;&#xD;
&lt;p&gt;---------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;$ program3_3&lt;br /&gt;&#xD;
first value is 0&lt;br /&gt;&#xD;
second value is 0.01&lt;br /&gt;&#xD;
三、字符串&lt;br /&gt;&#xD;
惯用C的程序员要注意，在PERL中，字符串的末尾并不含有隐含的NULL字符，NULL字符可以出现在串的任何位置。&lt;br /&gt;&#xD;
. 双引号内的字符串中支持简单变量替换，例如：&lt;br /&gt;&#xD;
$number = 11;&lt;br /&gt;&#xD;
$text = "This text contains the number $number.";&lt;br /&gt;&#xD;
则$text的内容为："This text contains the number 11."&lt;/p&gt;&#xD;
&lt;p&gt;.双引号内的字符串中支持转义字符&lt;br /&gt;&#xD;
Table 3.1. Escape sequences in strings.&lt;/p&gt;&#xD;
&lt;p&gt;Escape Sequence Description&lt;br /&gt;&#xD;
\a Bell (beep)&lt;br /&gt;&#xD;
\b Backspace&lt;br /&gt;&#xD;
\cn The Ctrl+n character&lt;br /&gt;&#xD;
\e Escape&lt;br /&gt;&#xD;
\E Ends the effect of \L, \U or \Q&lt;br /&gt;&#xD;
\f Form feed&lt;br /&gt;&#xD;
\l Forces the next letter into lowercase&lt;br /&gt;&#xD;
\L All following letters are lowercase&lt;br /&gt;&#xD;
\n Newline&lt;br /&gt;&#xD;
\r Carriage return&lt;br /&gt;&#xD;
\Q Do not look for special pattern characters&lt;br /&gt;&#xD;
\t Tab&lt;br /&gt;&#xD;
\u Force next letter into uppercase&lt;br /&gt;&#xD;
\U All following letters are uppercase&lt;br /&gt;&#xD;
\v Vertical tab&lt;/p&gt;&#xD;
&lt;p&gt;\L、\U、\Q功能可以由\E关闭掉，如：&lt;br /&gt;&#xD;
$a = "T\LHIS IS A \ESTRING"; # same as "This is a STRING"&lt;/p&gt;&#xD;
&lt;p&gt;.要在字符串中包含双引号或反斜线，则在其前加一个反斜线，反斜线还可以取消变量替换，如：&lt;br /&gt;&#xD;
$res = "A quote \" and A backslash \\";&lt;br /&gt;&#xD;
$result = 14;&lt;br /&gt;&#xD;
print ("The value of \$result is $result.\n")的结果为：&lt;br /&gt;&#xD;
The value of $result is 14.&lt;/p&gt;&#xD;
&lt;p&gt;.可用\nnn(8进制)或\xnn(16进制)来表示ASCII字符，如：&lt;br /&gt;&#xD;
$result = "\377"; # this is the character 255,or EOF&lt;br /&gt;&#xD;
$result = "\xff"; # this is also 255&lt;/p&gt;&#xD;
&lt;p&gt;.单引号字符串&lt;br /&gt;&#xD;
单引号字符串与双引号字符串有两个区别，一是没有变量替换功能，二是反斜线不支持转义字符，而只在包含单引号和反斜线时起作用。单引号另一个特性是可以跨多行，如：&lt;br /&gt;&#xD;
$text = 'This is two&lt;br /&gt;&#xD;
lines of text&lt;br /&gt;&#xD;
';&lt;br /&gt;&#xD;
与下句等效：&lt;br /&gt;&#xD;
$text = "This is two\nlines of text\n";&lt;/p&gt;&#xD;
&lt;p&gt;.字符串和数值的互相转换&lt;br /&gt;&#xD;
例1：&lt;br /&gt;&#xD;
$string = "43";&lt;br /&gt;&#xD;
$number = 28;&lt;br /&gt;&#xD;
$result = $string + $number; # $result = 71&lt;br /&gt;&#xD;
若字符串中含有非数字的字符，则从左起至第一个非数字的字符，如：&lt;br /&gt;&#xD;
$result = "hello" * 5; # $result = 0&lt;br /&gt;&#xD;
$result = "12a34" +1; # $result = 13&lt;/p&gt;&#xD;
&lt;p&gt;.变量初始值&lt;br /&gt;&#xD;
在PERL中，所有的简单变量都有缺省初始值：""，即空字符。但是建议给所有变量赋初值，否则当程序变得大而复杂后，很容易出现不可预料且很难调试的错误。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
第二节：&lt;/p&gt;&#xD;
&lt;p&gt;一、算术操作符 ：+(加)、-(减)、*(乘)、/(除)、**(乘幂)、%(取余)、-(单目负)&lt;br /&gt;&#xD;
(1)乘幂的基数不能为负，如 (-5) ** 2.5 # error；&lt;br /&gt;&#xD;
(2)乘幂结果不能超出计算机表示的限制，如10 ** 999999 # error&lt;br /&gt;&#xD;
(3)取余的操作数如不是整数，四舍五入成整数后运算；运算符右侧不能为零&lt;br /&gt;&#xD;
(4)单目负可用于变量： - $y ; # 等效于 $y * -1&lt;br /&gt;&#xD;
二、整数比较操作符&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Table 3.1. 整数比较操作符&lt;/p&gt;&#xD;
&lt;p&gt;操作符 描述&lt;br /&gt;&#xD;
&amp;lt; 小于&lt;br /&gt;&#xD;
&amp;gt; 大于&lt;br /&gt;&#xD;
== 等于&lt;br /&gt;&#xD;
&amp;lt;= 小于等于&lt;br /&gt;&#xD;
&amp;gt;= 大于等于&lt;br /&gt;&#xD;
!= 不等于&lt;br /&gt;&#xD;
&amp;lt;=&amp;gt; 比较，返回 1, 0, or -1&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
操作符&amp;lt;=&amp;gt;结果为：&lt;br /&gt;&#xD;
0 - 两个值相等&lt;br /&gt;&#xD;
1 - 第一个值大&lt;br /&gt;&#xD;
1 - 第二个值大&lt;br /&gt;&#xD;
三、字符串比较操作符&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Table 3.2. 字符串比较操作符&lt;/p&gt;&#xD;
&lt;p&gt;操作符 描述 　&lt;br /&gt;&#xD;
lt 小于 　&lt;br /&gt;&#xD;
gt 大于 　&lt;br /&gt;&#xD;
eq 等于 　&lt;br /&gt;&#xD;
le 小于等于 　&lt;br /&gt;&#xD;
ge 大于等于 　&lt;br /&gt;&#xD;
ne 不等于 　&lt;br /&gt;&#xD;
cmp 比较，返回 1, 0, or -1 　&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
四、逻辑操作符&lt;br /&gt;&#xD;
逻辑或：$a || $b 或 $a or $b&lt;br /&gt;&#xD;
逻辑与：$a &amp;amp;&amp;amp; $b 或 $a and $b&lt;br /&gt;&#xD;
逻辑非：! $a 或 not $a&lt;br /&gt;&#xD;
逻辑异或：$a xor $b&lt;br /&gt;&#xD;
五、位操作符&lt;br /&gt;&#xD;
位与：&amp;amp;&lt;br /&gt;&#xD;
位或：|&lt;br /&gt;&#xD;
位非：~&lt;br /&gt;&#xD;
位异或：^&lt;br /&gt;&#xD;
左移：$x &amp;lt;&amp;lt; 1&lt;br /&gt;&#xD;
右移：$x &amp;gt;&amp;gt; 2&lt;br /&gt;&#xD;
注：不要将&amp;amp;用于负整数，因为PERL将会把它们转化为无符号数。&lt;br /&gt;&#xD;
六、赋值操作符&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Table 3.3. 赋值操作符&lt;/p&gt;&#xD;
&lt;p&gt;操作符 描述&lt;br /&gt;&#xD;
= Assignment only&lt;br /&gt;&#xD;
+= Addition and assignment&lt;br /&gt;&#xD;
-= Subtraction and assignment&lt;br /&gt;&#xD;
*= Multiplication and assignment&lt;br /&gt;&#xD;
/= Division and assignment&lt;br /&gt;&#xD;
%= Remainder and assignment&lt;br /&gt;&#xD;
**= Exponentiation and assignment&lt;br /&gt;&#xD;
&amp;amp;= Bitwise AND and assignment&lt;br /&gt;&#xD;
|= Bitwise OR and assignment&lt;br /&gt;&#xD;
^= Bitwise XOR and assignment&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
Table 3.4. 赋值操作符例子&lt;/p&gt;&#xD;
&lt;p&gt;表达式 等效表达式&lt;br /&gt;&#xD;
$a = 1; none (basic assignment)&lt;br /&gt;&#xD;
$a -= 1; $a = $a - 1;&lt;br /&gt;&#xD;
$a *= 2; $a = $a * 2;&lt;br /&gt;&#xD;
$a /= 2; $a = $a / 2;&lt;br /&gt;&#xD;
$a %= 2; $a = $a % 2;&lt;br /&gt;&#xD;
$a **= 2; $a = $a ** 2;&lt;br /&gt;&#xD;
$a &amp;amp;= 2; $a = $a &amp;amp; 2;&lt;br /&gt;&#xD;
$a |= 2; $a = $a | 2;&lt;br /&gt;&#xD;
$a ^= 2; $a = $a ^ 2;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
.=可在一个赋值语句中出现多次，如：&lt;br /&gt;&#xD;
$value1 = $value2 = "a string";&lt;br /&gt;&#xD;
.=作为子表达式&lt;br /&gt;&#xD;
($a = $b) += 3;&lt;br /&gt;&#xD;
等价于&lt;br /&gt;&#xD;
$a = $b;&lt;br /&gt;&#xD;
$a += 3;&lt;br /&gt;&#xD;
但建议不要使用这种方式。&lt;br /&gt;&#xD;
七、自增自减操作符 ：++、--(与C++中的用法相同)&lt;br /&gt;&#xD;
.不要在变量两边都使用此种操作符：++$var-- # error&lt;br /&gt;&#xD;
.不要在变量自增/减后在同一表达式中再次使用：$var2 = $var1 + ++$var1; # error&lt;br /&gt;&#xD;
.在PERL中++可用于字符串，但当结尾字符为'z'、'Z'、'9'时进位，如：&lt;br /&gt;&#xD;
$stringvar = "abc";&lt;br /&gt;&#xD;
$stringvar++; # $stringvar contains "abd" now&lt;/p&gt;&#xD;
&lt;p&gt;$stringvar = "aBC";&lt;br /&gt;&#xD;
$stringvar++; # $stringvar contains "aBD" now&lt;/p&gt;&#xD;
&lt;p&gt;$stringvar = "abz";&lt;br /&gt;&#xD;
$stringvar++; # $stringvar now contains "aca"&lt;/p&gt;&#xD;
&lt;p&gt;$stringvar = "AGZZZ";&lt;br /&gt;&#xD;
$stringvar++; # $stringvar now contains "AHAAA"&lt;/p&gt;&#xD;
&lt;p&gt;$stringvar = "ab4";&lt;br /&gt;&#xD;
$stringvar++; # $stringvar now contains "ab5"&lt;/p&gt;&#xD;
&lt;p&gt;$stringvar = "bc999";&lt;br /&gt;&#xD;
$stringvar++; # $stringvar now contains "bd000"&lt;br /&gt;&#xD;
.不要使用--，PERL将先将字符串转换为数字再进行自减&lt;br /&gt;&#xD;
$stringvar = "abc";&lt;br /&gt;&#xD;
$stringvar--; # $stringvar = -1 now&lt;/p&gt;&#xD;
&lt;p&gt;.如果字符串中含有非字母且非数字的字符，或数字位于字母中，则经过++运算前值转换为数字零，因此结果为1，如：&lt;br /&gt;&#xD;
$stringvar = "ab*c";&lt;br /&gt;&#xD;
$stringvar++;&lt;br /&gt;&#xD;
$stringvar = "ab5c";&lt;br /&gt;&#xD;
$stringvar++;&lt;br /&gt;&#xD;
八、字符串联结和重复操作符&lt;br /&gt;&#xD;
联接: .&lt;br /&gt;&#xD;
重复：x&lt;br /&gt;&#xD;
联接且赋值(类似+=)： .=&lt;br /&gt;&#xD;
例：&lt;br /&gt;&#xD;
$newstring = "potato" . "head";&lt;br /&gt;&#xD;
$newstring = "t" x 5;&lt;br /&gt;&#xD;
$a = "be";&lt;br /&gt;&#xD;
$a .= "witched"; # $a is now "bewitched"&lt;br /&gt;&#xD;
九、逗号操作符&lt;br /&gt;&#xD;
其前面的表达式先进行运算，如：&lt;br /&gt;&#xD;
$var1 += 1, $var2 = $var1;&lt;br /&gt;&#xD;
等价于&lt;br /&gt;&#xD;
$var1 += 1;&lt;br /&gt;&#xD;
$var2 = $var1;&lt;br /&gt;&#xD;
使用此操作符的唯一理由是提高程序的可读性，将关系密切的两个表达式结合在一起，如：&lt;br /&gt;&#xD;
$val = 26;&lt;br /&gt;&#xD;
$result = (++$val, $val + 5); # $result = 32&lt;br /&gt;&#xD;
注意如果此处没有括号则意义不同：&lt;br /&gt;&#xD;
$val = 26;&lt;br /&gt;&#xD;
$result = ++$val, $val + 5; # $result = 27&lt;br /&gt;&#xD;
十、条件操作符&lt;br /&gt;&#xD;
与C中类似，条件?值1:值2，当条件为真时取值1，为假时取值2，如：&lt;br /&gt;&#xD;
$result = $var == 0 ? 14 : 7;&lt;br /&gt;&#xD;
$result = 43 + ($divisor == 0 ? 0 : $dividend / $divisor);&lt;br /&gt;&#xD;
PERL 5中，还可以在赋值式左边使用条件操作符来选择被赋值的变量，如：&lt;br /&gt;&#xD;
$condvar == 43 ? $var1 : $var2 = 14;&lt;br /&gt;&#xD;
$condvar == 43 ? $var1 = 14 : $var2 = 14;&lt;br /&gt;&#xD;
十一、操作符的次序&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Table 3.6. 操作符次序&lt;/p&gt;&#xD;
&lt;p&gt;操作符 描述&lt;br /&gt;&#xD;
++, -- 自增，自减&lt;br /&gt;&#xD;
-, ~, ! 单目&lt;br /&gt;&#xD;
** 乘方&lt;br /&gt;&#xD;
=~, !~ 模式匹配&lt;br /&gt;&#xD;
*, /, %, x 乘，除，取余，重复&lt;br /&gt;&#xD;
+, -, . 加，减，联接&lt;br /&gt;&#xD;
&amp;lt;&amp;lt;, &amp;gt;&amp;gt; 移位&lt;br /&gt;&#xD;
-e, -r, etc. 文件状态&lt;br /&gt;&#xD;
&amp;lt;, &amp;lt;=, &amp;gt;, &amp;gt;=, lt, le, gt, ge 不等比较&lt;br /&gt;&#xD;
==, !=, &amp;lt;=&amp;gt;, eq, ne, cmp 相等比较&lt;br /&gt;&#xD;
&amp;amp; 位与&lt;br /&gt;&#xD;
|, ^ 位或，位异或&lt;br /&gt;&#xD;
&amp;amp;&amp;amp; 逻辑与&lt;br /&gt;&#xD;
|| 逻辑或&lt;br /&gt;&#xD;
.. 列表范围&lt;br /&gt;&#xD;
? and : 条件操作符&lt;br /&gt;&#xD;
=, +=, -=, *=, 赋值&lt;br /&gt;&#xD;
and so on 　&lt;br /&gt;&#xD;
, 逗号操作符&lt;br /&gt;&#xD;
not Low-precedence logical NOT&lt;br /&gt;&#xD;
and Low-precedence logical AND&lt;br /&gt;&#xD;
or, xor Low-precedence logical OR and XOR&lt;/p&gt;&#xD;
&lt;p&gt;.操作符结合性(associativity)：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
Table 3.7. 操作符结合性&lt;/p&gt;&#xD;
&lt;p&gt;操作符 结合性&lt;br /&gt;&#xD;
++, -- 无&lt;br /&gt;&#xD;
-, ~, ! Right-to-left&lt;br /&gt;&#xD;
** Right-to-left&lt;br /&gt;&#xD;
=~, !~ Left-to-right&lt;br /&gt;&#xD;
*, /, %, x Left-to-right&lt;br /&gt;&#xD;
+, -, . Left-to-right&lt;br /&gt;&#xD;
&amp;lt;&amp;lt;, &amp;gt;&amp;gt; Left-to-right&lt;br /&gt;&#xD;
-e, -r, 无&lt;br /&gt;&#xD;
&amp;lt;, &amp;lt;=, &amp;gt;, &amp;gt;=, lt, le, gt, ge Left-to-right&lt;br /&gt;&#xD;
==, !=, &amp;lt;=&amp;gt;, eq, ne, cmp Left-to-right&lt;br /&gt;&#xD;
&amp;amp; Left-to-right&lt;br /&gt;&#xD;
|, ^ Left-to-right&lt;br /&gt;&#xD;
&amp;amp;&amp;amp; Left-to-right&lt;br /&gt;&#xD;
|| Left-to-right&lt;br /&gt;&#xD;
.. Left-to-right&lt;br /&gt;&#xD;
? and : Right-to-left&lt;br /&gt;&#xD;
=, +=, -=, *=, Right-to-left&lt;br /&gt;&#xD;
and so on 　&lt;br /&gt;&#xD;
, Left-to-right&lt;br /&gt;&#xD;
not Left-to-right&lt;br /&gt;&#xD;
and Left-to-right&lt;br /&gt;&#xD;
or, xor Left-to-right&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;建议：&lt;br /&gt;&#xD;
1、当你不确定某操作符是否先执行时，一定要用括号明确之。&lt;br /&gt;&#xD;
2、用多行、空格等方式提高程序的可读性。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
第三节：&lt;/p&gt;&#xD;
&lt;p&gt;一、列表&lt;br /&gt;&#xD;
列表是包含在括号里的一序列的值，可以为任何数值，也可为空，如：(1, 5.3 , "hello" , 2)，空列表：()。&lt;br /&gt;&#xD;
注：只含有一个数值的列表(如：(43.2) )与该数值本身(即：43.2 )是不同的，但它们可以互相转化或赋值。&lt;br /&gt;&#xD;
列表例：&lt;br /&gt;&#xD;
(17, $var, "a string")&lt;br /&gt;&#xD;
(17, 26 &amp;lt;&amp;lt; 2)&lt;br /&gt;&#xD;
(17, $var1 + $var2)&lt;br /&gt;&#xD;
($value, "The answer is $value")&lt;br /&gt;&#xD;
二、数组--列表的存贮&lt;br /&gt;&#xD;
列表存贮于数组变量中，与简单变量不同，数组变量以字符"@"打头，如：&lt;br /&gt;&#xD;
@array = (1, 2, 3);&lt;br /&gt;&#xD;
注：&lt;br /&gt;&#xD;
(1)数组变量创建时初始值为空列表：()。&lt;br /&gt;&#xD;
(2)因为PERL用@和$来区分数组变量和简单变量，所以同一个名字可以同时用于数组变量和简单变量，如：&lt;br /&gt;&#xD;
$var = 1;&lt;br /&gt;&#xD;
@var = (11, 27.1 , "a string");&lt;br /&gt;&#xD;
但这样很容易混淆，故不推荐。&lt;br /&gt;&#xD;
1、数组的存取&lt;br /&gt;&#xD;
.对数组中的值通过下标存取，第一个元素下标为0。试图访问不存在的数组元素，则结果为NULL，但如果给超出数组大小的元素赋值，则数组自动增长，原来没有的元素值为NULL。如：&lt;br /&gt;&#xD;
@array = (1, 2, 3, 4);&lt;br /&gt;&#xD;
$scalar = $array[0];&lt;br /&gt;&#xD;
$array[3] = 5; # now @array is (1,2,3,5)&lt;br /&gt;&#xD;
$scalar = $array[4]; # now $scalar = null;&lt;br /&gt;&#xD;
$array[6] = 17; # now @array is (1,2,3,5,"","",17)&lt;br /&gt;&#xD;
.数组间拷贝&lt;br /&gt;&#xD;
@result = @original;&lt;br /&gt;&#xD;
.用数组给列表赋值&lt;br /&gt;&#xD;
@list1 = (2, 3, 4);&lt;br /&gt;&#xD;
@list2 = (1, @list1, 5); # @list2 = (1, 2, 3, 4, 5)&lt;br /&gt;&#xD;
.数组对简单变量的赋值&lt;br /&gt;&#xD;
(1) @array = (5, 7, 11);&lt;br /&gt;&#xD;
($var1, $var2) = @array; # $var1 = 5, $var2 = 7, 11被忽略&lt;br /&gt;&#xD;
(2) @array = (5, 7);&lt;br /&gt;&#xD;
($var1, $var2, $var3) = @array; # $var1 = 5, $var2 = 7, $var3 ="" (null)&lt;br /&gt;&#xD;
.从标准输入(STDIN)给变量赋值&lt;br /&gt;&#xD;
$var = &amp;lt;STDIN&amp;gt;;&lt;br /&gt;&#xD;
@array = &amp;lt;STDIN&amp;gt;; # ^D为结束输入的符号&lt;br /&gt;&#xD;
2 、字符串中的方括号和变量替换&lt;br /&gt;&#xD;
"$var[0]" 为数组@var的第一个元素。&lt;br /&gt;&#xD;
"$var[0]" 将字符"["转义，等价于"$var". "[0]"，$var被变量替换，[0]保持不变。&lt;br /&gt;&#xD;
"${var}[0]" 亦等价于"$var" ."[0]"。&lt;br /&gt;&#xD;
"${var}"则取消了大括号的变量替换功能，包含文字：${var}.&lt;br /&gt;&#xD;
3、列表范围：&lt;br /&gt;&#xD;
(1..10) = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)&lt;br /&gt;&#xD;
(2, 5..7, 11) = (2, 5, 6, 7, 11)&lt;br /&gt;&#xD;
(3..3) = (3)&lt;br /&gt;&#xD;
.用于实数&lt;br /&gt;&#xD;
(2.1..5.3) = (2.1, 3.1 ,4.1, 5.1)&lt;br /&gt;&#xD;
(4.5..1.6) = ()&lt;br /&gt;&#xD;
.用于字符串&lt;br /&gt;&#xD;
("aaa".."aad") = ("aaa","aab", "aac", "aad")&lt;br /&gt;&#xD;
@day_of_month = ("01".."31")&lt;br /&gt;&#xD;
.可包含变量或表达式&lt;br /&gt;&#xD;
($var1..$var2+5)&lt;br /&gt;&#xD;
.小技巧：&lt;br /&gt;&#xD;
$fred = "Fred";&lt;br /&gt;&#xD;
print (("Hello, " . $fred . "!n") x 2);&lt;br /&gt;&#xD;
其结果为：&lt;br /&gt;&#xD;
Hello, Fred!&lt;br /&gt;&#xD;
Hello, Fred!&lt;br /&gt;&#xD;
4、数组的输出：&lt;br /&gt;&#xD;
(1) @array = (1, 2, 3);&lt;br /&gt;&#xD;
print (@array, "n");&lt;br /&gt;&#xD;
结果为：&lt;br /&gt;&#xD;
123&lt;br /&gt;&#xD;
(2) @array = (1, 2, 3);&lt;br /&gt;&#xD;
print ("@arrayn");&lt;br /&gt;&#xD;
结果为：&lt;br /&gt;&#xD;
1 2 3&lt;br /&gt;&#xD;
5、列表/数组的长度&lt;br /&gt;&#xD;
当数组变量出现在预期简单变量出现的地方，则PERL解释器取其长度。&lt;br /&gt;&#xD;
@array = (1, 2, 3);&lt;br /&gt;&#xD;
$scalar = @array; # $scalar = 3,即@array的长度&lt;br /&gt;&#xD;
($scalar) = @array; # $scalar = 1,即@array第一个元素的值&lt;br /&gt;&#xD;
注：以数组的长度为循环次数可如下编程：&lt;br /&gt;&#xD;
$count = 1;&lt;br /&gt;&#xD;
while ($count &amp;lt;= @array) {&lt;br /&gt;&#xD;
print ("element $count: $array[$count-1]n");&lt;br /&gt;&#xD;
$count++;&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
6、子数组&lt;br /&gt;&#xD;
@array = (1, 2, 3, 4, 5);&lt;br /&gt;&#xD;
@subarray = @array[0,1]; # @subarray = (1, 2)&lt;br /&gt;&#xD;
@subarray2 = @array[1..3]; # @subarray2 = (2,3,4)&lt;br /&gt;&#xD;
@array[0,1] = ("string", 46); # @array =("string",46,3,4,5) now&lt;br /&gt;&#xD;
@array[0..3] = (11, 22, 33, 44); # @array = (11,22,33,44,5) now&lt;br /&gt;&#xD;
@array[1,2,3] = @array[3,2,4]; # @array = (11,44,33,5,5) now&lt;br /&gt;&#xD;
@array[0..2] = @array[3,4]; # @array = (5,5,"",5,5) now&lt;br /&gt;&#xD;
可以用子数组形式来交换元素：&lt;br /&gt;&#xD;
@array[1,2] = @array[2,1];&lt;br /&gt;&#xD;
7、有关数组的库函数&lt;br /&gt;&#xD;
(1)sort--按字符顺序排序&lt;br /&gt;&#xD;
@array = ("this", "is", "a","test");&lt;br /&gt;&#xD;
@array2 = sort(@array); # @array2 = ("a","is", "test", "this")&lt;br /&gt;&#xD;
@array = (70, 100, 8);&lt;br /&gt;&#xD;
@array = sort(@array); # @array = (100, 70, 8) now&lt;br /&gt;&#xD;
( 2)reverse--反转数组&lt;br /&gt;&#xD;
@array2 = reverse(@array);&lt;br /&gt;&#xD;
@array2 = reverse sort (@array);&lt;br /&gt;&#xD;
(3)chop--数组去尾&lt;br /&gt;&#xD;
chop的意义是去掉STDIN（键盘）输入字符串时最后一个字符--换行符。而如果它作用到数组上，则将数组中每一个元素都做如此处理。&lt;br /&gt;&#xD;
@list = ("rabbit", "12345","quartz");&lt;br /&gt;&#xD;
chop (@list); # @list = ("rabbi", "1234","quart") now&lt;br /&gt;&#xD;
( 4)join/split--连接/拆分&lt;br /&gt;&#xD;
join的第一个参数是连接所用的中间字符，其余则为待连接的字符数组。&lt;br /&gt;&#xD;
$string = join(" ", "this", "is","a", "string"); # 结果为"this is a string"&lt;br /&gt;&#xD;
@list = ("words","and");&lt;br /&gt;&#xD;
$string = join("::", @list, "colons"); #结果为"words::and::colons"&lt;br /&gt;&#xD;
@array = split(/::/,$string); # @array = ("words","and", "colons") now&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;第四节：&lt;/p&gt;&#xD;
&lt;p&gt;一、条件判断&lt;br /&gt;&#xD;
if ( &amp;lt;expression&amp;gt;) {&lt;br /&gt;&#xD;
&amp;lt;statement_block_1&amp;gt;&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
elsif ( &amp;lt;expression&amp;gt; ) {&lt;br /&gt;&#xD;
&amp;lt;statement_block_2&amp;gt;&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
...&lt;br /&gt;&#xD;
else{&lt;br /&gt;&#xD;
&amp;lt;statement_block_3&amp;gt;&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
二、循环：&lt;br /&gt;&#xD;
1、while循环&lt;br /&gt;&#xD;
while ( &amp;lt;expression&amp;gt; ) {&lt;br /&gt;&#xD;
&amp;lt;statement_block&amp;gt;&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
2、until循环&lt;br /&gt;&#xD;
until ( &amp;lt;expression&amp;gt; ) {&lt;br /&gt;&#xD;
&amp;lt;statement_block&amp;gt;&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
3、类C的for循环 ，如&lt;br /&gt;&#xD;
for ($count=1; $count &amp;lt;= 5; $count++) {&lt;br /&gt;&#xD;
# statements inside the loop go here&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
下面是在for循环中使用逗号操作符的例子：&lt;br /&gt;&#xD;
for ($line = &amp;lt;STDIN&amp;gt;, $count = 1; $count &amp;lt;= 3; $line = &amp;lt;STDIN&amp;gt;, $count++) {&lt;br /&gt;&#xD;
print ($line);&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
它等价于下列语句：&lt;br /&gt;&#xD;
$line = &amp;lt;STDIN&amp;gt;;&lt;br /&gt;&#xD;
$count = 1;&lt;br /&gt;&#xD;
while ($count &amp;lt;= 3) {&lt;br /&gt;&#xD;
print ($line);&lt;br /&gt;&#xD;
$line = &amp;lt;STDIN&amp;gt;;&lt;br /&gt;&#xD;
$count++;&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
4、针对列表(数组)每个元素的循环：foreach，语法为：&lt;br /&gt;&#xD;
foreach localvar (listexpr) {&lt;br /&gt;&#xD;
statement_block;&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
例：&lt;br /&gt;&#xD;
foreach $word (@words) {&lt;br /&gt;&#xD;
if ($word eq "the") {&lt;br /&gt;&#xD;
print ("found the word 'the'n");&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
注：&lt;br /&gt;&#xD;
(1)此处的循环变量localvar是个局部变量，如果在此之前它已有值，则循环后仍恢复该值。&lt;br /&gt;&#xD;
(2)在循环中改变局部变量，相应的数组变量也会改变，如：&lt;br /&gt;&#xD;
@list = (1, 2, 3, 4, 5);&lt;br /&gt;&#xD;
foreach $temp (@list) {&lt;br /&gt;&#xD;
if ($temp == 2) {&lt;br /&gt;&#xD;
$temp = 20;&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
此时@list已变成了(1, 20, 3, 4, 5)。&lt;br /&gt;&#xD;
5、do循环&lt;br /&gt;&#xD;
do {&lt;br /&gt;&#xD;
statement_block&lt;br /&gt;&#xD;
} while_or_until (condexpr);&lt;br /&gt;&#xD;
do循环至少执行一次循环。&lt;br /&gt;&#xD;
6、循环控制&lt;br /&gt;&#xD;
退出循环为last，与C中的break作用相同；执行下一个循环为next，与C中的continue作用相同；PERL特有的一个命令是redo，其含义是重复此次循环，即循环变量不变，回到循环起始点，但要注意，redo命令在do循环中不起作用。&lt;br /&gt;&#xD;
7、传统的goto label;语句。&lt;/p&gt;&#xD;
&lt;p&gt;三、单行条件&lt;br /&gt;&#xD;
语法为statement keyword condexpr。其中keyword可为if、unless、while或until，如：&lt;br /&gt;&#xD;
print ("This is zero.n") if ($var == 0);&lt;br /&gt;&#xD;
print ("This is zero.n") unless ($var != 0);&lt;br /&gt;&#xD;
print ("Not zero yet.n") while ($var-- &amp;gt; 0);&lt;br /&gt;&#xD;
print ("Not zero yet.n") until ($var-- == 0);&lt;br /&gt;&#xD;
虽然条件判断写在后面，但却是先执行的。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;第五节：&lt;/p&gt;&#xD;
&lt;p&gt;一、定义&lt;br /&gt;&#xD;
子程序即执行一个特殊任务的一段分离的代码，它可以使减少重复代码且使程序易读。PERL中，子程序可以出现在程序的任何地方。定义方法为：&lt;br /&gt;&#xD;
sub subroutine{&lt;br /&gt;&#xD;
statements;&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
二、调用&lt;br /&gt;&#xD;
调用方法如下：&lt;br /&gt;&#xD;
1、用&amp;amp;调用&lt;br /&gt;&#xD;
&amp;amp;subname;&lt;br /&gt;&#xD;
...&lt;br /&gt;&#xD;
sub subname{&lt;br /&gt;&#xD;
...&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
2、先定义后调用 ，可以省略&amp;amp;符号&lt;br /&gt;&#xD;
sub subname{&lt;br /&gt;&#xD;
...&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
...&lt;br /&gt;&#xD;
subname;&lt;br /&gt;&#xD;
3、前向引用 ，先定义子程序名，后面再定义子程序体&lt;br /&gt;&#xD;
sub subname;&lt;br /&gt;&#xD;
...&lt;br /&gt;&#xD;
subname;&lt;br /&gt;&#xD;
...&lt;br /&gt;&#xD;
sub subname{&lt;br /&gt;&#xD;
...&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
4、用do调用&lt;br /&gt;&#xD;
do my_sub(1, 2, 3);等价于&amp;amp;my_sub(1, 2, 3);&lt;br /&gt;&#xD;
三、返回值&lt;br /&gt;&#xD;
缺省的，子程序中最后一个语句的值将用作返回值。语句return (retval);也可以推出子程序并返回值retval，retval可以为列表。&lt;br /&gt;&#xD;
四、局部变量&lt;br /&gt;&#xD;
子程序中局部变量的定义有两种方法：my和local。其区别是：my定义的变量只在该子程序中存在；而local定义的变量不存在于主程序中，但存在于该子程序和该子程序调用的子程序中(在PERL4中没有my)。定义时可以给其赋值，如：&lt;br /&gt;&#xD;
my($scalar) = 43;&lt;br /&gt;&#xD;
local(@array) = (1, 2, 3);&lt;br /&gt;&#xD;
五、子程序参数传递&lt;br /&gt;&#xD;
1、形式&lt;br /&gt;&#xD;
&amp;amp;sub1(&amp;amp;number1, $number2, $nubmer3);&lt;br /&gt;&#xD;
...&lt;br /&gt;&#xD;
sub sub1{&lt;br /&gt;&#xD;
my($number1, $number2, $number3) = @_;&lt;br /&gt;&#xD;
...&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
2、传送数组&lt;br /&gt;&#xD;
&amp;amp;addlist (@mylist);&lt;br /&gt;&#xD;
&amp;amp;addlist ("14", "6", "11");&lt;br /&gt;&#xD;
&amp;amp;addlist ($value1, @sublist, $value2);&lt;br /&gt;&#xD;
...&lt;br /&gt;&#xD;
sub addlist {&lt;br /&gt;&#xD;
my (@list) = @_;&lt;br /&gt;&#xD;
...&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
参数为数组时，子程序只将它赋给一个数组变量。如&lt;br /&gt;&#xD;
sub twolists {&lt;br /&gt;&#xD;
my (@list1, @list2) = @_;&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
中@list2必然为空。但简单变量和数组变量可以同时传递：&lt;br /&gt;&#xD;
&amp;amp;twoargs(47, @mylist); # 47赋给$scalar，@mylist赋给@list&lt;br /&gt;&#xD;
&amp;amp;twoargs(@mylist); # @mylist的第一个元素赋给$scalar，其余的元素赋给@list&lt;br /&gt;&#xD;
...&lt;br /&gt;&#xD;
sub twoargs {&lt;br /&gt;&#xD;
my ($scalar, @list) = @_;&lt;br /&gt;&#xD;
...&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
六、递归子程序&lt;br /&gt;&#xD;
PERL中，子程序可以互相调用，其调用方法与上述相同，当调用该子程序本身时，即成了递归子程序。递归子程序有两个条件：1、除了不被子程序改变的变量外，所有的变量必须的局部的；2、该子程序要含有停止调用本身的代码。&lt;br /&gt;&#xD;
七、用别名传递数组参数&lt;br /&gt;&#xD;
1、用前面讲到的调用方法&amp;amp;my_sub(@array)将把数组@array的数据拷贝到子程序中的变量@_中，当数组很大时，将会花费较多的资源和时间，而用别名传递将不做这些工作，而对该数组直接操作。形式如：&lt;br /&gt;&#xD;
@myarray = (1, 2, 3, 4, 5);&lt;br /&gt;&#xD;
&amp;amp;my_sub(*myarray);&lt;br /&gt;&#xD;
sub my_sub {&lt;br /&gt;&#xD;
my (*subarray) = @_;&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
2、此方法类似于C语言中的传递数组的起始地址指针，但并不一样，在定义数组的别名之后，如果有同名的简单变量，则对该变量也是起作用的。如：&lt;br /&gt;&#xD;
$foo = 26;&lt;br /&gt;&#xD;
@foo = ("here's", "a", "list");&lt;br /&gt;&#xD;
&amp;amp;testsub (*foo);&lt;br /&gt;&#xD;
...&lt;br /&gt;&#xD;
sub testsub {&lt;br /&gt;&#xD;
local (*printarray) = @_;&lt;br /&gt;&#xD;
...&lt;br /&gt;&#xD;
$printarray = 61;&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
当子程序执行完，主程序中的$foo的值已经成了61，而不再是26了。&lt;br /&gt;&#xD;
3、用别名的方法可以传递多个数组，如：&lt;br /&gt;&#xD;
@array1 = (1, 2, 3);&lt;br /&gt;&#xD;
@array2 = (4, 5, 6);&lt;br /&gt;&#xD;
&amp;amp;two_array_sub (*array1, *array2);&lt;br /&gt;&#xD;
sub two_array_sub {&lt;br /&gt;&#xD;
my (*subarray1, *subarray2) = @_;&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
在该子程序中，subarray1是array1的别名，subarray2是array2的别名。&lt;br /&gt;&#xD;
八、预定义的子程序&lt;br /&gt;&#xD;
PERL5预定义了三个子程序，分别在特定的时间执行，它们是：BEGIN子程序在程序启动时被调用；END子程序在程序结束时被调用；AUTOLOAD子程序在找不到某个子程序时被调用。你可以自己定义它们，以在特定时间执行所需要的动作。如：&lt;br /&gt;&#xD;
BEGIN {&lt;br /&gt;&#xD;
print("Hi! Welcome to Perl!n");&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
AUTOLOAD{&lt;br /&gt;&#xD;
print("subroutine $AUTOLOAD not foundn"); # 变量$AUTOLOAD即未找到的子程序名&lt;br /&gt;&#xD;
print("arguments passed: @_n");&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
若同一个预定义子程序定义了多个，则BEGIN顺序执行，END逆序执行。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;第六节：&lt;/p&gt;&#xD;
&lt;p&gt;一、数组变量的限制&lt;br /&gt;&#xD;
在前面讲的数组变量中，可以通过下标访问其中的元素。例如，下列语句访问数组@array的第三个元素：&lt;br /&gt;&#xD;
$scalar = $array[2];&lt;br /&gt;&#xD;
虽然数组很有用，但它们有一个显著缺陷，即很难记住哪个元素存贮的什么内容。假如我们来写一个程序计算某文件中首字母大写的单词出现的次数，用数组来实现就比较困难，程序代码如下：&lt;/p&gt;&#xD;
&lt;p&gt;1 : #!/usr/local/bin/perl&lt;br /&gt;&#xD;
2 :&lt;br /&gt;&#xD;
3 : while ($inputline = &amp;lt;STDIN&amp;gt;) {&lt;br /&gt;&#xD;
4 : while ($inputline =~ /b[A-Z]S+/g) {&lt;br /&gt;&#xD;
5 : $word = $&amp;amp;;&lt;br /&gt;&#xD;
6 : $word =~ s/[;.,:-]$//; # remove punctuation&lt;br /&gt;&#xD;
7 : for ($count = 1; $count &amp;lt;= @wordlist;&lt;br /&gt;&#xD;
8 : $count++) {&lt;br /&gt;&#xD;
9 : $found = 0;&lt;br /&gt;&#xD;
10: if ($wordlist[$count-1] eq $word) {&lt;br /&gt;&#xD;
11: $found = 1;&lt;br /&gt;&#xD;
12: $wordcount[$count-1] += 1;&lt;br /&gt;&#xD;
13: last;&lt;br /&gt;&#xD;
14: }&lt;br /&gt;&#xD;
15: }&lt;br /&gt;&#xD;
16: if ($found == 0) {&lt;br /&gt;&#xD;
17: $oldlength = @wordlist;&lt;br /&gt;&#xD;
18: $wordlist[$oldlength] = $word;&lt;br /&gt;&#xD;
19: $wordcount[$oldlength] = 1;&lt;br /&gt;&#xD;
20: }&lt;br /&gt;&#xD;
21: }&lt;br /&gt;&#xD;
22: }&lt;br /&gt;&#xD;
23: print ("Capitalized words and number of occurrences:n");&lt;br /&gt;&#xD;
24: for ($count = 1; $count &amp;lt;= @wordlist; $count++) {&lt;br /&gt;&#xD;
25: print ("$wordlist[$count-1]: $wordcount[$count-1]n");&lt;br /&gt;&#xD;
26: }&lt;/p&gt;&#xD;
&lt;p&gt;运行结果如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
Here is a line of Input.&lt;br /&gt;&#xD;
This Input contains some Capitalized words.&lt;br /&gt;&#xD;
^D&lt;br /&gt;&#xD;
Capitalized words and number of occurrences:&lt;br /&gt;&#xD;
Here: 1&lt;br /&gt;&#xD;
Input: 2&lt;br /&gt;&#xD;
This: 1&lt;br /&gt;&#xD;
Capitalized: 1&lt;/p&gt;&#xD;
&lt;p&gt;这个程序每次从标准输入文件读一行文字，第四行起的循环匹配每行中首字母大写的单词，每找到一个循环一次，赋给简单变量$word。在第六行中去掉标点后，查看该单词是否曾出现过，7~15行中在@wordlist中挨个元素做此检查，如果某个元素与$word相等，@wordcount中相应的元素就增加一个数。如果没有出现过，即@wordlist中没有元素与$word相等，16~20行给@wordlist和@wordcount增加一个新元素。&lt;br /&gt;&#xD;
二、定义&lt;br /&gt;&#xD;
正如你所看到的，使用数组元素产生了一些问题。首先，@wordlist中哪个元素对应着哪个单词并不明显；更糟的是，每读进一个新单词，程序必须检查整个列表才能知道该单词是否曾经出现过，当列表变得较大时，这是很耗费时间的。&lt;br /&gt;&#xD;
这些问题产生的原因是数组元素通过数字下标访问，为了解决这类问题，Perl定义了另一种数组，可以用任意简单变量值来访问其元素，这种数组叫做关联数组，也叫哈希表。&lt;br /&gt;&#xD;
为了区分关联数组变量与普通的数组变量，Perl使用%作为其首字符，而数组变量以@打头。与其它变量名一样，%后的第一个字符必须为字母，后续字符可以为字母、数字或下划线。&lt;br /&gt;&#xD;
三、访问关联数组的元素&lt;br /&gt;&#xD;
关联数组的下标可以为任何简单/标量值，访问单个元素时以$符号打头，下标用大括号围起来。例如：&lt;/p&gt;&#xD;
&lt;p&gt;$fruit{"bananas"}&lt;br /&gt;&#xD;
$number{3.14159}&lt;br /&gt;&#xD;
$integer{-7}&lt;/p&gt;&#xD;
&lt;p&gt;简单变量也可作为下标，如：&lt;br /&gt;&#xD;
$fruit{$my_fruit}&lt;br /&gt;&#xD;
四、增加元素&lt;br /&gt;&#xD;
创建一个关联数组元素最简单的方法是赋值，如语句$fruit{"bananas"} = 1； 把1赋给关联数组%fruit下标为bananas的元素，如果该元素不存在，则被创建，如果数组%fruit从未使用过，也被创建。&lt;br /&gt;&#xD;
这一特性使得关联数组很容易用于计数。下面我们用关联数组改写上面的程序，注意实现同样的功能此程序简化了许多。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
1 : #!/usr/local/bin/perl&lt;br /&gt;&#xD;
2 :&lt;br /&gt;&#xD;
3 : while ($inputline = ) {&lt;br /&gt;&#xD;
4 : while ($inputline =~ /b[A-Z]S+/g) {&lt;br /&gt;&#xD;
5 : $word = $&amp;amp;;&lt;br /&gt;&#xD;
6 : $word =~ s/[;.,:-]$//; # remove punctuation&lt;br /&gt;&#xD;
7 : $wordlist{$word} += 1;&lt;br /&gt;&#xD;
8 : }&lt;br /&gt;&#xD;
9 : }&lt;br /&gt;&#xD;
10: print ("Capitalized words and number of occurrences:n");&lt;br /&gt;&#xD;
11: foreach $capword (keys(%wordlist)) {&lt;br /&gt;&#xD;
12: print ("$capword: $wordlist{$capword}n");&lt;br /&gt;&#xD;
13: }&lt;/p&gt;&#xD;
&lt;p&gt;运行结果如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
Here is a line of Input.&lt;br /&gt;&#xD;
This Input contains some Capitalized words.&lt;br /&gt;&#xD;
^D&lt;br /&gt;&#xD;
Capitalized words and number of occurrences:&lt;br /&gt;&#xD;
This: 1&lt;br /&gt;&#xD;
Input: 2&lt;br /&gt;&#xD;
Here: 1&lt;br /&gt;&#xD;
Capitalized: 1&lt;/p&gt;&#xD;
&lt;p&gt;你可以看到，这次程序简单多了，读取输入并存贮各单词数目从20行减少到了7行。&lt;br /&gt;&#xD;
本程序用关联数组%wordlist跟踪首字母大写的单词，下标就用单词本身，元素值为该单词出现的次数。第11行使用了内嵌函数keys()。这个函数返回关联数组的下标列表，foreach语句就用此列表循环。&lt;br /&gt;&#xD;
注：关联数组总是随机存贮的，因此当你用keys()访问其所有元素时，不保证元素以任何顺序出现，特别值得一提的是，它们不会以被创建的顺序出现。&lt;br /&gt;&#xD;
要想控制关联数组元素出现的次序，可以用sort()函数对keys()返回值进行排列，如：&lt;/p&gt;&#xD;
&lt;p&gt;foreach $capword (sort keys(%wordlist)) {&lt;br /&gt;&#xD;
print ("$capword: $wordlist{$capword}n");&lt;br /&gt;&#xD;
}&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;五、创建关联数组&lt;br /&gt;&#xD;
可以用单个赋值语句创建关联数组，如：&lt;br /&gt;&#xD;
%fruit = ("apples",17,"bananas",9,"oranges","none");&lt;br /&gt;&#xD;
此语句创建的关联数组含有下面三个元素：&lt;/p&gt;&#xD;
&lt;p&gt;下标为apples的元素，值为17&lt;br /&gt;&#xD;
下标为bananas的元素，值为9&lt;br /&gt;&#xD;
下标为oranges的元素，值为none&lt;br /&gt;&#xD;
注：用列表给关联数组赋值时，Perl5允许使用"=&amp;gt;"或","来分隔下标与值，用"=&amp;gt;"可读性更好些，上面语句等效于：&lt;br /&gt;&#xD;
%fruit = ("apples"=&amp;gt;17,"bananas"=&amp;gt;9,"oranges"=&amp;gt;"none");&lt;br /&gt;&#xD;
六、从数组变量复制到关联数组&lt;br /&gt;&#xD;
与列表一样，也可以通过数组变量创建关联数组，当然，其元素数目应该为偶数，如：&lt;br /&gt;&#xD;
@fruit = ("apples",17,"bananas",9,"oranges","none");&lt;br /&gt;&#xD;
%fruit = @fruit;&lt;br /&gt;&#xD;
反之，可以把关联数组赋给数组变量，如：&lt;br /&gt;&#xD;
%fruit = ("grapes",11,"lemons",27);&lt;br /&gt;&#xD;
@fruit = %fruit;&lt;br /&gt;&#xD;
注意，此语句中元素次序未定义，那么数组变量@fruit可能为("grapes",11,"lemons",27)或("lemons",27,"grapes",11)。&lt;br /&gt;&#xD;
关联数组变量之间可以直接赋值，如：%fruit2 = %fruit1; 还可以把数组变量同时赋给一些简单变量和一个关联数组变量，如：&lt;br /&gt;&#xD;
($var1, $var2, %myarray) = @list;&lt;br /&gt;&#xD;
此语句把@list的第一个元素赋给$var1，第二个赋给$var2，其余的赋给%myarray。&lt;br /&gt;&#xD;
最后，关联数组可以通过返回值为列表的内嵌函数或用户定义的子程序来创建，下例中把split()函数的返回值--一个列表--赋给一个关联数组变量。&lt;/p&gt;&#xD;
&lt;p&gt;1: #!/usr/local/bin/perl&lt;br /&gt;&#xD;
2:&lt;br /&gt;&#xD;
3: $inputline = &amp;lt;STDIN&amp;gt;;&lt;br /&gt;&#xD;
4: $inputline =~ s/^s+|s+n$//g;&lt;br /&gt;&#xD;
5: %fruit = split(/s+/, $inputline);&lt;br /&gt;&#xD;
6: print ("Number of bananas: $fruit{"bananas"}n");&lt;/p&gt;&#xD;
&lt;p&gt;运行结果如下：&lt;/p&gt;&#xD;
&lt;p&gt;oranges 5 apples 7 bananas 11 cherries 6&lt;br /&gt;&#xD;
Number of bananas: 11&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;七、元素的增删&lt;br /&gt;&#xD;
增加元素已经讲过，可以通过给一个未出现过的元素赋值来向关联数组中增加新元素，如$fruit{"lime"} = 1;创建下标为lime、值为1的新元素。&lt;br /&gt;&#xD;
删除元素的方法是用内嵌函数delete，如欲删除上述元素，则：&lt;br /&gt;&#xD;
delete ($fruit{"lime"});&lt;br /&gt;&#xD;
注意：&lt;/p&gt;&#xD;
&lt;p&gt;1、一定要使用delete函数来删除关联数组的元素，这是唯一的方法。&lt;br /&gt;&#xD;
2、一定不要对关联数组使用内嵌函数push、pop、shift及splice，因为其元素位置是随机的。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;八、列出数组的索引和值&lt;br /&gt;&#xD;
上面已经提到，keys()函数返回关联数组下标的列表，如：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
%fruit = ("apples", 9,&lt;br /&gt;&#xD;
"bananas", 23,&lt;br /&gt;&#xD;
"cherries", 11);&lt;br /&gt;&#xD;
@fruitsubs = keys(%fruits);&lt;br /&gt;&#xD;
这里，@fruitsubs被赋给apples、bananas、cherries构成的列表，再次提请注意，此列表没有次序，若想按字母顺序排列，可使用sort()函数。&lt;br /&gt;&#xD;
@fruitindexes = sort keys(%fruits);&lt;br /&gt;&#xD;
这样结果为("apples","bananas","cherries")。类似的，内嵌函数values()返回关联数组值的列表，如：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
%fruit = ("apples", 9,&lt;br /&gt;&#xD;
"bananas", 23,&lt;br /&gt;&#xD;
"cherries", 11);&lt;br /&gt;&#xD;
@fruitvalues = values(%fruits);&lt;br /&gt;&#xD;
这里，@fruitvalues可能的结果为(9,23.11)，次序可能不同。&lt;br /&gt;&#xD;
九、用关联数组循环&lt;br /&gt;&#xD;
前面已经出现过利用keys()函数的foreach循环语句，这种循环效率比较低，因为每返回一个下标，还得再去寻找其值，如：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
foreach $holder (keys(%records)){&lt;br /&gt;&#xD;
$record = $records{$holder};&lt;br /&gt;&#xD;
}&lt;/p&gt;&#xD;
&lt;p&gt;Perl提供一种更有效的循环方式，使用内嵌函数each()，如：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
%records = ("Maris", 61, "Aaron", 755, "Young", 511);&lt;br /&gt;&#xD;
while (($holder, $record) = each(%records)) {&lt;br /&gt;&#xD;
# stuff goes here&lt;br /&gt;&#xD;
}&lt;/p&gt;&#xD;
&lt;p&gt;each()函数每次返回一个双元素的列表，其第一个元素为下标，第二个元素为相应的值，最后返回一个空列表。&lt;br /&gt;&#xD;
注意：千万不要在each()循环中添加或删除元素，否则会产生不可预料的后果。&lt;br /&gt;&#xD;
十、用关联数组创建数据结构&lt;br /&gt;&#xD;
用关联数组可以模拟在其它高级语言中常见的多种数据结构，本节讲述如何用之实现：链表、结构和树。&lt;br /&gt;&#xD;
1、(单)链表&lt;br /&gt;&#xD;
链表是一种比较简单的数据结构，可以按一定的次序存贮值。每个元素含有两个域，一个是值，一个是引用（或称指针），指向链表中下一个元素。一个特殊的头指针指向链表的第一个元素。&lt;br /&gt;&#xD;
在Perl中，链表很容易用关联数组实现，因为一个元素的值可以作为下一个元素的索引。下例为按字母顺序排列的单词链表：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
%words = ("abel", "baker",&lt;br /&gt;&#xD;
"baker", "charlie",&lt;br /&gt;&#xD;
"charlie", "delta",&lt;br /&gt;&#xD;
"delta", "");&lt;br /&gt;&#xD;
$header = "abel";&lt;br /&gt;&#xD;
上例中，简单变量$header含有链表中第一个单词，它同时也是关联数组第一个元素的下标，其值baker又是下一个元素的下标，依此类推。&lt;br /&gt;&#xD;
下标为delta的最后一个元素的值为空串，表示链表的结束。&lt;br /&gt;&#xD;
在将要处理的数据个数未知或其随程序运行而增长的情况下，链表十分有用。下例用链表按字母次序输出一个文件中的单词。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
1 : #!/usr/local/bin/perl&lt;br /&gt;&#xD;
2 :&lt;br /&gt;&#xD;
3 : # initialize list to empty&lt;br /&gt;&#xD;
4 : $header = "";&lt;br /&gt;&#xD;
5 : while ($line = &amp;lt;STDIN&amp;gt;) {&lt;br /&gt;&#xD;
6 : # remove leading and trailing spaces&lt;br /&gt;&#xD;
7 : $line =~ s/^s+|s+$//g;&lt;br /&gt;&#xD;
8 : @words = split(/s+/, $line);&lt;br /&gt;&#xD;
9 : foreach $word (@words) {&lt;br /&gt;&#xD;
10: # remove closing punctuation, if any&lt;br /&gt;&#xD;
11: $word =~ s/[.,;:-]$//;&lt;br /&gt;&#xD;
12: # convert all words to lower case&lt;br /&gt;&#xD;
13: $word =~ tr/A-Z/a-z/;&lt;br /&gt;&#xD;
14: &amp;amp;add_word_to_list($word);&lt;br /&gt;&#xD;
15: }&lt;br /&gt;&#xD;
16: }&lt;br /&gt;&#xD;
17: &amp;amp;print_list;&lt;br /&gt;&#xD;
18:&lt;br /&gt;&#xD;
19: sub add_word_to_list {&lt;br /&gt;&#xD;
20: local($word) = @_;&lt;br /&gt;&#xD;
21: local($pointer);&lt;br /&gt;&#xD;
22:&lt;br /&gt;&#xD;
23: # if list is empty, add first item&lt;br /&gt;&#xD;
24: if ($header eq "") {&lt;br /&gt;&#xD;
25: $header = $word;&lt;br /&gt;&#xD;
26: $wordlist{$word} = "";&lt;br /&gt;&#xD;
27: return;&lt;br /&gt;&#xD;
28: }&lt;br /&gt;&#xD;
29: # if word identical to first element in list,&lt;br /&gt;&#xD;
30: # do nothing&lt;br /&gt;&#xD;
31: return if ($header eq $word);&lt;br /&gt;&#xD;
32: # see whether word should be the new&lt;br /&gt;&#xD;
33: # first word in the list&lt;br /&gt;&#xD;
34: if ($header gt $word) {&lt;br /&gt;&#xD;
35: $wordlist{$word} = $header;&lt;br /&gt;&#xD;
36: $header = $word;&lt;br /&gt;&#xD;
37: return;&lt;br /&gt;&#xD;
38: }&lt;br /&gt;&#xD;
39: # find place where word belongs&lt;br /&gt;&#xD;
40: $pointer = $header;&lt;br /&gt;&#xD;
41: while ($wordlist{$pointer} ne "" &amp;amp;&amp;amp;&lt;br /&gt;&#xD;
42: $wordlist{$pointer} lt $word) {&lt;br /&gt;&#xD;
43: $pointer = $wordlist{$pointer};&lt;br /&gt;&#xD;
44: }&lt;br /&gt;&#xD;
45: # if word already seen, do nothing&lt;br /&gt;&#xD;
46: return if ($word eq $wordlist{$pointer});&lt;br /&gt;&#xD;
47: $wordlist{$word} = $wordlist{$pointer};&lt;br /&gt;&#xD;
48: $wordlist{$pointer} = $word;&lt;br /&gt;&#xD;
49: }&lt;br /&gt;&#xD;
50:&lt;br /&gt;&#xD;
51: sub print_list {&lt;br /&gt;&#xD;
52: local ($pointer);&lt;br /&gt;&#xD;
53: print ("Words in this file:n");&lt;br /&gt;&#xD;
54: $pointer = $header;&lt;br /&gt;&#xD;
55: while ($pointer ne "") {&lt;br /&gt;&#xD;
56: print ("$pointern");&lt;br /&gt;&#xD;
57: $pointer = $wordlist{$pointer};&lt;br /&gt;&#xD;
58: }&lt;br /&gt;&#xD;
59: }&lt;/p&gt;&#xD;
&lt;p&gt;运行结果如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
Here are some words.&lt;br /&gt;&#xD;
Here are more words.&lt;br /&gt;&#xD;
Here are still more words.&lt;br /&gt;&#xD;
^D&lt;br /&gt;&#xD;
Words in this file:&lt;br /&gt;&#xD;
are&lt;br /&gt;&#xD;
here&lt;br /&gt;&#xD;
more&lt;br /&gt;&#xD;
some&lt;br /&gt;&#xD;
still&lt;br /&gt;&#xD;
words&lt;/p&gt;&#xD;
&lt;p&gt;此程序分为三个部分：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
主程序：读取输入并转换到相应的格式。&lt;br /&gt;&#xD;
子程序：add_word_to_list，建立排序单词链表。&lt;br /&gt;&#xD;
子程序：print_list，输出单词链表&lt;br /&gt;&#xD;
第3~17行为主程序，第4行初始化链表，将表头变量$header设为空串，第5行起的循环每次读取一行输入，第7行去掉头、尾的空格，第8行将句子分割成单词。9~15行的内循环每次处理一个单词，如果该单词的最后一个字符是标点符号，就去掉。第13行把单词转换成全小写形式，第14行传递给子程序 add_word_to_list。&lt;br /&gt;&#xD;
子程序add_word_to_list先在第24行处检查链表是否为空。如果是，第25行将单词赋给$header，26行创建链表第一个元素，存贮在关联数组%wordlist中。如果链表非空，37行检查第一个元素是否与该单词相同，如果相同，就立刻返回。下一步检查这一新单词是否应该为链表第一个元素，即其按字母顺序先于$header。如果是这样，则：&lt;br /&gt;&#xD;
1、创建一个新元素，下标为该新单词，其值为原第一个单词。&lt;br /&gt;&#xD;
2、该新单词赋给$header。&lt;br /&gt;&#xD;
如果该新单词不该为第一个元素，则40~44行利用局域变量$pointer寻找其合适的有效位置，41~44行循环到$wordlist{$ pointer}大于或等于$word为止。接下来46行查看该单词是否已在链表中，如果在就返回，否则47~48行将其添加到链表中。首先47行创建新元素$wordlist{$word}，其值为$wordlist{$pointer}，这时$wordlist{$word}和$wordlist{$ pointer}指向同一个单词。然后，48行将$wordlist{$pointer}的值赋为$word，即将$wordlist{$ pointer}指向刚创建的新元素$wordlist{$word}。&lt;br /&gt;&#xD;
最后当处理完毕后，子程序print_list()依次输出链表，局域变量$pointer含有正在输出的值，$wordlist{$pointer}为下一个要输出的值。&lt;br /&gt;&#xD;
注：一般不需要用链表来做这些工作，用sort()和keys()在关联数组中循环就足够了，如：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
foreach $word (sort keys(%wordlist)) {&lt;br /&gt;&#xD;
# print the sorted list, or whatever }&lt;/p&gt;&#xD;
&lt;p&gt;但是，这里涉及的指针的概念在其它数据结构中很有意义。&lt;br /&gt;&#xD;
2、结构&lt;br /&gt;&#xD;
许多编程语言可以定义结构(structure)，即一组数据的集合。结构中的每个元素有其自己的名字，并通过该名字来访问。&lt;br /&gt;&#xD;
Perl不直接提供结构这种数据结构，但可以用关联数组来模拟。例如模拟C语言中如下的结构：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
struce{&lt;br /&gt;&#xD;
int field1;&lt;br /&gt;&#xD;
int field2;&lt;br /&gt;&#xD;
int field3; }mystructvar;&lt;/p&gt;&#xD;
&lt;p&gt;我们要做的是定义一个含有三个元素的关联数组，下标分别为field1、field2、field3，如：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
%mystructvar = ("field1" , "" ,&lt;br /&gt;&#xD;
"field2" , "" ,&lt;br /&gt;&#xD;
"field3" , "" ,);&lt;/p&gt;&#xD;
&lt;p&gt;像上面C语言的定义一样，这个关联数组%mystrctvar有三个元素，下标分别为field1、field2、field3，各元素初始值均为空串。对各元素的访问和赋值通过指定下标来进行，如：&lt;br /&gt;&#xD;
$mystructvar{"field1"} = 17;&lt;br /&gt;&#xD;
3、树&lt;br /&gt;&#xD;
另一个经常使用的数据结构是树。树与链表类似，但每个节点指向的元素多于一个。最简单的树是二叉树，每个节点指向另外两个元素，称为左子节点和右子节点（或称孩子），每个子节点又指向两个孙子节点，依此类推。&lt;br /&gt;&#xD;
注：此处所说的树像上述链表一样是单向的，每个节点指向其子节点，但子节点并不指向父节点。&lt;br /&gt;&#xD;
树的概念可以如下描述：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
因为每个子节点均为一个树，所以左/右子节点也称为左/右子树。（有时称左/右分支）&lt;br /&gt;&#xD;
第一个节点（不是任何节点的子节点的节点）称为树的根。&lt;br /&gt;&#xD;
没有孩子（子节点）的节点称为叶节点。&lt;br /&gt;&#xD;
有多种使用关联数组实现树结构的方法，最好的一种应该是：给子节点分别加上left和right以访问之。例如，alphaleft和alpharight指向alpha的左右子节点。下面是用此方法创建二叉树并遍历的例程：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
1 : #!/usr/local/bin/perl&lt;br /&gt;&#xD;
2 :&lt;br /&gt;&#xD;
3 : $rootname = "parent";&lt;br /&gt;&#xD;
4 : %tree = ("parentleft", "child1",&lt;br /&gt;&#xD;
5 : "parentright", "child2",&lt;br /&gt;&#xD;
6 : "child1left", "grandchild1",&lt;br /&gt;&#xD;
7 : "child1right", "grandchild2",&lt;br /&gt;&#xD;
8 : "child2left", "grandchild3",&lt;br /&gt;&#xD;
9 : "child2right", "grandchild4");&lt;br /&gt;&#xD;
10: # traverse tree, printing its elements&lt;br /&gt;&#xD;
11: &amp;amp;print_tree($rootname);&lt;br /&gt;&#xD;
12:&lt;br /&gt;&#xD;
13: sub print_tree {&lt;br /&gt;&#xD;
14: local ($nodename) = @_;&lt;br /&gt;&#xD;
15: local ($leftchildname, $rightchildname);&lt;br /&gt;&#xD;
16:&lt;br /&gt;&#xD;
17: $leftchildname = $nodename . "left";&lt;br /&gt;&#xD;
18: $rightchildname = $nodename . "right";&lt;br /&gt;&#xD;
19: if ($tree{$leftchildname} ne "") {&lt;br /&gt;&#xD;
20: &amp;amp;print_tree($tree{$leftchildname});&lt;br /&gt;&#xD;
21: }&lt;br /&gt;&#xD;
22: print ("$nodenamen");&lt;br /&gt;&#xD;
23: if ($tree{$rightchildname} ne "") {&lt;br /&gt;&#xD;
24: &amp;amp;print_tree($tree{$rightchildname});&lt;br /&gt;&#xD;
25: }&lt;br /&gt;&#xD;
26: }&lt;/p&gt;&#xD;
&lt;p&gt;结果输出如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
grandchild1&lt;br /&gt;&#xD;
child1&lt;br /&gt;&#xD;
grandchild2&lt;br /&gt;&#xD;
parent&lt;br /&gt;&#xD;
grandchild3&lt;br /&gt;&#xD;
child2&lt;br /&gt;&#xD;
grandchild4&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;第七节：&lt;/p&gt;&#xD;
&lt;p&gt;一、引用简介&lt;br /&gt;&#xD;
二、使用引用&lt;br /&gt;&#xD;
三、使用反斜线()操作符&lt;br /&gt;&#xD;
四、引用和数组&lt;br /&gt;&#xD;
五、多维数组&lt;br /&gt;&#xD;
六、子程序的引用&lt;br /&gt;&#xD;
子程序模板&lt;br /&gt;&#xD;
七、数组与子程序&lt;br /&gt;&#xD;
八、文件句柄的引用&lt;/p&gt;&#xD;
&lt;p&gt;一、引用简介&lt;br /&gt;&#xD;
引用就是指针，可以指向变量、数组、哈希表（也叫关联数组）甚至子程序。Pascal或C程序员应该对引用（即指针）的概念很熟悉，引用就是某值的地址，对其的使用则取决于程序员和语言的规定。在Perl中，可以把引用称为指针，二者是通用的，无差别的。引用在创建复杂数据方面十分有用。&lt;br /&gt;&#xD;
Perl5中的两种引用类型为硬引用和符号引用。符号引用含有变量的名字，它对运行时创建变量名并定位很有用，基本上，符号引用就象文件名或UNIX系统中的软链接。而硬引用则象文件系统中的硬链接。&lt;br /&gt;&#xD;
Perl4只允许符号引用，给使用造成一些困难。例如，只允许通过名字对包的符号名哈希表（名为_main{}）建立索引。Perl5则允许数据的硬引用，方便多了。&lt;br /&gt;&#xD;
硬引用跟踪引用的计数，当其数为零时，Perl自动将被引用的项目释放，如果该项目是对象，则析构释放到内存池中。Perl本身就是个面向对象的语言，因为Perl中的任何东西都是对象，包和模块使得对象更易于使用。&lt;br /&gt;&#xD;
简单变量的硬引用很简单，对于非简单变量的引用，你必须显式地解除引用并告诉其应如何做，详见《第 章Perl中的面向对象编程》。&lt;br /&gt;&#xD;
二、使用引用&lt;br /&gt;&#xD;
本章中，简单变量指像$pointer这样的变量，$pointer仅含一个数据项，其可以为数字、字符串或地址。&lt;br /&gt;&#xD;
任何简单变量均可保存硬引用。因为数组和哈希表含有多个简单变量，所以可以建立多种组合而成的复杂的数据结构，如数组的数组、哈希表的数组、子程序的哈希表等等。只要你理解其实只是在用简单变量在工作，就应该可以正确的在最复杂的结构中正确地解除引用。&lt;br /&gt;&#xD;
首先来看一些基本要点。&lt;br /&gt;&#xD;
如果$pointer的值为一个数组的指针，则通过形式@$pointer来访问数组中的元素。形式@$pointer的意义为&amp;#8220;取出$pointer中的地址值当作数组使用&amp;#8221;。类似的，%$pointer为指向哈希表中第一个元素的引用。&lt;br /&gt;&#xD;
有多种构建引用的方法，几乎可以对任何数据建立引用，如数组、简单变量、子程序、文件句柄，以及--C程序员会感兴趣的--引用。Perl使你有能力写出把自己都搞糊涂的极其复杂的代码。:)&lt;br /&gt;&#xD;
下面看看Perl中创建和使用引用的方法。&lt;br /&gt;&#xD;
三、使用反斜线()操作符&lt;br /&gt;&#xD;
反斜线操作符与C语言中传递地址的操作符&amp;amp;功能类似。一般是用创建变量又一个新的引用。下面为创建简单变量的引用的例子：&lt;br /&gt;&#xD;
$variavle = 22;&lt;br /&gt;&#xD;
$pointer = $variable;&lt;br /&gt;&#xD;
$ice = "jello";&lt;br /&gt;&#xD;
$iceprt = $ice;&lt;br /&gt;&#xD;
引用$pointer指向存有$variable值的位置，引用$iceptr指向"jello"。即使最初的引用$variable销毁了，仍然可以通过$pointer访问该值，这是一个硬引用，所以必须同时销毁$pointer和$variable以便该空间释放到内存池中。&lt;br /&gt;&#xD;
在上面的例子中，引用变量$pointer存的是$variable的地址，而不是值本身，要获得值，形式为两个$符号，如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
#!/usr/bin/perl&lt;br /&gt;&#xD;
$value = 10;&lt;br /&gt;&#xD;
$pointer = $value;&lt;br /&gt;&#xD;
printf "n Pointer Address $pointer of $value n";&lt;br /&gt;&#xD;
printf "n What Pointer *($pointer) points to $$pointern";&lt;/p&gt;&#xD;
&lt;p&gt;结果输出如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
Pointer Address SCALAR(0x806c520) of 10&lt;br /&gt;&#xD;
What Pointer *(SCALAR(0x806c520)) points to 10&lt;/p&gt;&#xD;
&lt;p&gt;每次运行，输出结果中的地址会有所改变，但可以看到$pointer给出地址，而$$pointer给出$variable的值。&lt;br /&gt;&#xD;
看一下地址的显示，SCALAR后面一串十六进制，SCALAR说明该地址指向简单变量（即标量），后面的数字是实际存贮值的地址。&lt;br /&gt;&#xD;
注意：指针就是地址，通过指针可以访问该地址处存贮的数据。如果指针指向了无效的地址，就会得到不正确的数据。通常情况下，Perl会返回NULL值，但不该依赖于此，一定要在程序中把所有的指针正确地初始化，指向有效的数据项。&lt;br /&gt;&#xD;
四、引用和数组&lt;br /&gt;&#xD;
关于Perl语言应该记住的最重要的一点可能是：Perl中的数组和哈希表始终是一维的。因此，数组和哈希表只保存标量值，不直接存贮数组或其它的复杂数据结构。数组的成员要么是数（或字符串）要么是引用。&lt;br /&gt;&#xD;
对数组和哈希表可以象对简单变量一样使用反斜线操作符，数组的引用如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
1 #!/usr/bin/perl&lt;br /&gt;&#xD;
2 #&lt;br /&gt;&#xD;
3 # Using Array references&lt;br /&gt;&#xD;
4 #&lt;br /&gt;&#xD;
5 $pointer = @ARGV;&lt;br /&gt;&#xD;
6 printf "n Pointer Address of ARGV = $pointern";&lt;br /&gt;&#xD;
7 $i = scalar(@$pointer);&lt;br /&gt;&#xD;
8 printf "n Number of arguments : $i n";&lt;br /&gt;&#xD;
9 $i = 0;&lt;br /&gt;&#xD;
10 foreach (@$pointer) {&lt;br /&gt;&#xD;
11 printf "$i : $$pointer[$i++]; n";&lt;br /&gt;&#xD;
12 }&lt;/p&gt;&#xD;
&lt;p&gt;运行结果如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
$ test 1 2 3 4&lt;br /&gt;&#xD;
Pointer Address of ARGV = ARRAY(0x806c378)&lt;br /&gt;&#xD;
Number of arguments : 4&lt;br /&gt;&#xD;
0 : 1;&lt;br /&gt;&#xD;
1 : 2;&lt;br /&gt;&#xD;
2 : 3;&lt;br /&gt;&#xD;
3 : 4;&lt;/p&gt;&#xD;
&lt;p&gt;第5行将引用$pointer指向数组@ARGV，第6行输出ARGV的地址。$pointer返回数组第一个元素的地址，这与C语言中的数组指针是类似的。第7行调用函数scalar()获得数组的元素个数，该参数亦可为@ARGV，但用指针则必须用@$pointer的形式指定其类型为数组，$ pointer给出地址，@符号说明传递的地址为数组的第一个元素的地址。第10行与第7行类似，第11行用形式$$pointer[$i]列出所有元素。&lt;br /&gt;&#xD;
对关联数组使用反斜线操作符的方法是一样的--把所有关联数组名换成引用$poniter。注意数组和简单变量（标量）的引用显示时均带有类型--ARRAY和SCALAR，哈希表（关联数组）和函数也一样，分别为HASH和CODE。下面是哈希表的引用的例子。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
#!/usr/bin/perl&lt;br /&gt;&#xD;
1 #&lt;br /&gt;&#xD;
2 # Using Associative Array references&lt;br /&gt;&#xD;
3 #&lt;br /&gt;&#xD;
4 %month = (&lt;br /&gt;&#xD;
5 '01', 'Jan',&lt;br /&gt;&#xD;
6 '02', 'Feb',&lt;br /&gt;&#xD;
7 '03', 'Mar',&lt;br /&gt;&#xD;
8 '04', 'Apr',&lt;br /&gt;&#xD;
9 '05', 'May',&lt;br /&gt;&#xD;
10 '06', 'Jun',&lt;br /&gt;&#xD;
11 '07', 'Jul',&lt;br /&gt;&#xD;
12 '08', 'Aug',&lt;br /&gt;&#xD;
13 '09', 'Sep',&lt;br /&gt;&#xD;
14 '10', 'Oct',&lt;br /&gt;&#xD;
15 '11', 'Nov',&lt;br /&gt;&#xD;
16 '12', 'Dec',&lt;br /&gt;&#xD;
17 );&lt;br /&gt;&#xD;
18&lt;br /&gt;&#xD;
19 $pointer = %month;&lt;br /&gt;&#xD;
20&lt;br /&gt;&#xD;
21 printf "n Address of hash = $pointern ";&lt;br /&gt;&#xD;
22&lt;br /&gt;&#xD;
23 #&lt;br /&gt;&#xD;
24 # The following lines would be used to print out the&lt;br /&gt;&#xD;
25 # contents of the associative array if %month was used.&lt;br /&gt;&#xD;
26 #&lt;br /&gt;&#xD;
27 # foreach $i (sort keys %month) {&lt;br /&gt;&#xD;
28 # printf "n $i $$pointer{$i} ";&lt;br /&gt;&#xD;
29 # }&lt;br /&gt;&#xD;
30&lt;br /&gt;&#xD;
31 #&lt;br /&gt;&#xD;
32 # The reference to the associative array via $pointer&lt;br /&gt;&#xD;
33 #&lt;br /&gt;&#xD;
34 foreach $i (sort keys %$pointer) {&lt;br /&gt;&#xD;
35 printf "$i is $$pointer{$i} n";&lt;br /&gt;&#xD;
36 }&lt;/p&gt;&#xD;
&lt;p&gt;结果输出如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
$ mth&lt;br /&gt;&#xD;
Address of hash = HASH(0x806c52c)&lt;br /&gt;&#xD;
01 is Jan&lt;br /&gt;&#xD;
02 is Feb&lt;br /&gt;&#xD;
03 is Mar&lt;br /&gt;&#xD;
04 is Apr&lt;br /&gt;&#xD;
05 is May&lt;br /&gt;&#xD;
06 is Jun&lt;br /&gt;&#xD;
07 is Jul&lt;br /&gt;&#xD;
08 is Aug&lt;br /&gt;&#xD;
09 is Sep&lt;br /&gt;&#xD;
10 is Oct&lt;br /&gt;&#xD;
11 is Nov&lt;br /&gt;&#xD;
12 is Dec&lt;/p&gt;&#xD;
&lt;p&gt;与数组类似，通过引用访问哈希表的元素形式为$$pointer{$index}，当然，$index是哈希表的键值，而不仅是数字。还有几种访问形式，此外，构建哈希表还可以用=&amp;gt;操作符，可读性更好些。下面再看一个例子：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
1 #!/usr/bin/perl&lt;br /&gt;&#xD;
2 #&lt;br /&gt;&#xD;
3 # Using Array references&lt;br /&gt;&#xD;
4 #&lt;br /&gt;&#xD;
5 %weekday = (&lt;br /&gt;&#xD;
6 '01' =&amp;gt; 'Mon',&lt;br /&gt;&#xD;
7 '02' =&amp;gt; 'Tue',&lt;br /&gt;&#xD;
8 '03' =&amp;gt; 'Wed',&lt;br /&gt;&#xD;
9 '04' =&amp;gt; 'Thu',&lt;br /&gt;&#xD;
10 '05' =&amp;gt; 'Fri',&lt;br /&gt;&#xD;
11 '06' =&amp;gt; 'Sat',&lt;br /&gt;&#xD;
12 '07' =&amp;gt; 'Sun',&lt;br /&gt;&#xD;
13 );&lt;br /&gt;&#xD;
14 $pointer = %weekday;&lt;br /&gt;&#xD;
15 $i = '05';&lt;br /&gt;&#xD;
16 printf "n ================== start test ================= n";&lt;br /&gt;&#xD;
17 #&lt;br /&gt;&#xD;
18 # These next two lines should show an output&lt;br /&gt;&#xD;
19 #&lt;br /&gt;&#xD;
20 printf '$$pointer{$i} is ';&lt;br /&gt;&#xD;
21 printf "$$pointer{$i} n";&lt;br /&gt;&#xD;
22 printf '${$pointer}{$i} is ';&lt;br /&gt;&#xD;
23 printf "${$pointer}{$i} n";&lt;br /&gt;&#xD;
24 printf '$pointer-&amp;gt;{$i} is ';&lt;br /&gt;&#xD;
25&lt;br /&gt;&#xD;
26 printf "$pointer-&amp;gt;{$i}n";&lt;br /&gt;&#xD;
27 #&lt;br /&gt;&#xD;
28 # These next two lines should not show anything 29 #&lt;br /&gt;&#xD;
30 printf '${$pointer{$i}} is ';&lt;br /&gt;&#xD;
31 printf "${$pointer{$i}} n";&lt;br /&gt;&#xD;
32 printf '${$pointer-&amp;gt;{$i}} is ';&lt;br /&gt;&#xD;
33 printf "${$pointer-&amp;gt;{$i}}";&lt;br /&gt;&#xD;
34 printf "n ================== end of test ================= n";&lt;br /&gt;&#xD;
35&lt;/p&gt;&#xD;
&lt;p&gt;结果输出如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
================== start test =================&lt;br /&gt;&#xD;
$$pointer{$i} is Fri&lt;br /&gt;&#xD;
${$pointer}{$i} is Fri&lt;br /&gt;&#xD;
$pointer-&amp;gt;{$i} is Fri&lt;br /&gt;&#xD;
${$pointer{$i}} is&lt;br /&gt;&#xD;
${$pointer-&amp;gt;{$i}} is&lt;br /&gt;&#xD;
================== end of test =================&lt;/p&gt;&#xD;
&lt;p&gt;可以看到，前三种形式的输出显示了预期的结果，而后两种则没有。当你不清楚是否正确时，就输出结果看看。在Perl中，有不明确的代码就用print语句输出来实验一下，这能使你清楚Perl是怎样解释你的代码的。&lt;br /&gt;&#xD;
五、多维数组&lt;br /&gt;&#xD;
语句@array = list;可以创建数组的引用，中括号可以创建匿名数组的引用。下面语句为用于画图的三维数组的例子：&lt;br /&gt;&#xD;
$line = ['solid' , 'black' , ['1','2','3'] , ['4','5','6']];&lt;br /&gt;&#xD;
此语句建立了一个含四个元素的三维数组，变量$line指向该数组。前两个元素是标量，存贮线条的类型和颜色，后两个元素是匿名数组的引用，存贮线条的起点和终点。访问其元素语法如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
$arrayReference-&amp;gt;[$index] single-dimensional array&lt;br /&gt;&#xD;
$arrayReference-&amp;gt;[$index1][$index2] two-dimensional array&lt;br /&gt;&#xD;
$arrayReference-&amp;gt;[$index1][$index2][$index3] three-dimensional array&lt;/p&gt;&#xD;
&lt;p&gt;可以创建在你的智力、设计经验和计算机的内存允许的情况下极尽复杂的结构，但最好对可能读到或管理你的代码的人友好一些--尽量使代码简单些。另一方面，如果你想向别人炫耀你的编程能力，Perl给你足够的机会和能力编写连自己都难免糊涂的代码。:)&lt;br /&gt;&#xD;
建议：当你想使用多于三维的数组时，最好考虑使用其它数据结构来简化代码。&lt;br /&gt;&#xD;
下面为创建和使用二维数组的例子：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
1 #!/usr/bin/perl&lt;br /&gt;&#xD;
2 #&lt;br /&gt;&#xD;
3 # Using Multi-dimensional Array references&lt;br /&gt;&#xD;
4 #&lt;br /&gt;&#xD;
5 $line = ['solid', 'black', ['1','2','3'] , ['4', '5', '6']];&lt;br /&gt;&#xD;
6 print "$line-&amp;gt;[0] = $line-&amp;gt;[0] n";&lt;br /&gt;&#xD;
7 print "$line-&amp;gt;[1] = $line-&amp;gt;[1] n";&lt;br /&gt;&#xD;
8 print "$line-&amp;gt;[2][0] = $line-&amp;gt;[2][0] n";&lt;br /&gt;&#xD;
9 print "$line-&amp;gt;[2][1] = $line-&amp;gt;[2][1] n";&lt;br /&gt;&#xD;
10 print "$line-&amp;gt;[2][2] = $line-&amp;gt;[2][2] n";&lt;br /&gt;&#xD;
11 print "$line-&amp;gt;[3][0] = $line-&amp;gt;[3][0] n";&lt;br /&gt;&#xD;
12 print "$line-&amp;gt;[3][1] = $line-&amp;gt;[3][1] n";&lt;br /&gt;&#xD;
13 print "$line-&amp;gt;[3][2] = $line-&amp;gt;[3][2] n";&lt;br /&gt;&#xD;
14 print "n"; # The obligatory output beautifier.&lt;/p&gt;&#xD;
&lt;p&gt;结果输出如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
$line-&amp;gt;[0] = solid&lt;br /&gt;&#xD;
$line-&amp;gt;[1] = black&lt;br /&gt;&#xD;
$line-&amp;gt;[2][0] = 1&lt;br /&gt;&#xD;
$line-&amp;gt;[2][1] = 2&lt;br /&gt;&#xD;
$line-&amp;gt;[2][2] = 3&lt;br /&gt;&#xD;
$line-&amp;gt;[3][0] = 4&lt;br /&gt;&#xD;
$line-&amp;gt;[3][1] = 5&lt;br /&gt;&#xD;
$line-&amp;gt;[3][2] = 6&lt;/p&gt;&#xD;
&lt;p&gt;那么三维数组又如何呢？下面是上例略为改动的版本。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
1 #!/usr/bin/perl&lt;br /&gt;&#xD;
2 #&lt;br /&gt;&#xD;
3 # Using Multi-dimensional Array references again&lt;br /&gt;&#xD;
4 #&lt;br /&gt;&#xD;
5 $line = ['solid', 'black', ['1','2','3', ['4', '5', '6']]];&lt;br /&gt;&#xD;
6 print "$line-&amp;gt;[0] = $line-&amp;gt;[0] n";&lt;br /&gt;&#xD;
7 print "$line-&amp;gt;[1] = $line-&amp;gt;[1] n";&lt;br /&gt;&#xD;
8 print "$line-&amp;gt;[2][0] = $line-&amp;gt;[2][0] n";&lt;br /&gt;&#xD;
9 print "$line-&amp;gt;[2][1] = $line-&amp;gt;[2][1] n";&lt;br /&gt;&#xD;
10 print "$line-&amp;gt;[2][2] = $line-&amp;gt;[2][2] n";&lt;br /&gt;&#xD;
11 print "$line-&amp;gt;[2][3][0] = $line-&amp;gt;[2][3][0] n";&lt;br /&gt;&#xD;
12 print "$line-&amp;gt;[2][3][1] = $line-&amp;gt;[2][3][1] n";&lt;br /&gt;&#xD;
13 print "$line-&amp;gt;[2][3][2] = $line-&amp;gt;[2][3][2] n";&lt;br /&gt;&#xD;
14 print "n";&lt;/p&gt;&#xD;
&lt;p&gt;结果输出如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
$line-&amp;gt;[0] = solid&lt;br /&gt;&#xD;
$line-&amp;gt;[1] = black&lt;br /&gt;&#xD;
$line-&amp;gt;[2][0] = 1&lt;br /&gt;&#xD;
$line-&amp;gt;[2][1] = 2&lt;br /&gt;&#xD;
$line-&amp;gt;[2][2] = 3&lt;br /&gt;&#xD;
$line-&amp;gt;[2][3][0] = 4&lt;br /&gt;&#xD;
$line-&amp;gt;[2][3][1] = 5&lt;br /&gt;&#xD;
$line-&amp;gt;[2][3][2] = 6&lt;/p&gt;&#xD;
&lt;p&gt;访问第三层元素的方式形如$line-&amp;gt;[2][3][0]，类似于C语言中的Array_pointer[2][3][0]。本例中，下标均为数字，当然亦可用变量代替。用这种方法可以把数组和哈希表结合起来构成复杂的结构，如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
1 #!/usr/bin/perl&lt;br /&gt;&#xD;
2 #&lt;br /&gt;&#xD;
3 # Using Multi-dimensional Array and Hash references&lt;br /&gt;&#xD;
4 #&lt;br /&gt;&#xD;
5 %cube = (&lt;br /&gt;&#xD;
6 '0', ['0', '0', '0'],&lt;br /&gt;&#xD;
7 '1', ['0', '0', '1'],&lt;br /&gt;&#xD;
8 '2', ['0', '1', '0'],&lt;br /&gt;&#xD;
9 '3', ['0', '1', '1'],&lt;br /&gt;&#xD;
10 '4', ['1', '0', '0'],&lt;br /&gt;&#xD;
11 '5', ['1', '0', '1'],&lt;br /&gt;&#xD;
12 '6', ['1', '1', '0'],&lt;br /&gt;&#xD;
13 '7', ['1', '1', '1']&lt;br /&gt;&#xD;
14 );&lt;br /&gt;&#xD;
15 $pointer = %cube;&lt;br /&gt;&#xD;
16 print "n Da Cube n";&lt;br /&gt;&#xD;
17 foreach $i (sort keys %$pointer) {&lt;br /&gt;&#xD;
18 $list = $$pointer{$i};&lt;br /&gt;&#xD;
19 $x = $list-&amp;gt;[0];&lt;br /&gt;&#xD;
20 $y = $list-&amp;gt;[1];&lt;br /&gt;&#xD;
21 $z = $list-&amp;gt;[2];&lt;br /&gt;&#xD;
22 printf " Point $i = $x,$y,$z n";&lt;br /&gt;&#xD;
23 }&lt;/p&gt;&#xD;
&lt;p&gt;结果输出如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
Da Cube&lt;br /&gt;&#xD;
Point 0 = 0,0,0&lt;br /&gt;&#xD;
Point 1 = 0,0,1&lt;br /&gt;&#xD;
Point 2 = 0,1,0&lt;br /&gt;&#xD;
Point 3 = 0,1,1&lt;br /&gt;&#xD;
Point 4 = 1,0,0&lt;br /&gt;&#xD;
Point 5 = 1,0,1&lt;br /&gt;&#xD;
Point 6 = 1,1,0&lt;br /&gt;&#xD;
Point 7 = 1,1,1&lt;/p&gt;&#xD;
&lt;p&gt;这是一个定义立方体的例子。%cube中保存的是点号和坐标，坐标是个含三个数字的数组。变量$list获取坐标数组的引用：$list = $$ pointer{$i}; 然后访问各坐标值：$x = $list-&amp;gt;[0]; ... 也可用如下方法给$x、$y和$z赋值：($x,$y,$z) = @$list;&lt;br /&gt;&#xD;
使用哈希表和数组时，用$和用-&amp;gt;是类似的，对数组而言下面两个语句等效：&lt;br /&gt;&#xD;
$$names[0] = "kamran";&lt;br /&gt;&#xD;
$names-&amp;gt;[0] = "kamran";&lt;br /&gt;&#xD;
对哈希表而言下面两个语句等效：&lt;br /&gt;&#xD;
$$lastnames{"kamran"} = "Husain";&lt;br /&gt;&#xD;
$lastnames-&amp;gt;{"kamran"} = "Husain";&lt;br /&gt;&#xD;
Perl中的数组可以在运行中创建和扩展。当数组的引用第一次在等式左边出现时，该数组自动被创建，简单变量和多维数组也是一样。如下句，如果数组contours不存在，则被创建：&lt;br /&gt;&#xD;
$contours[$x][$y][$z] = &amp;amp;xlate($mouseX, $mouseY);&lt;br /&gt;&#xD;
六、子程序的引用&lt;br /&gt;&#xD;
perl中子程序的引用与C中函数的指针类似，构造方法如下：&lt;br /&gt;&#xD;
$pointer_to_sub = sub {... declaration of sub ...};&lt;br /&gt;&#xD;
通过所构造的引用调用子程序的方法为：&lt;br /&gt;&#xD;
&amp;amp;$pointer_to_sub(parameters);&lt;br /&gt;&#xD;
子程序模板&lt;br /&gt;&#xD;
子程序的返回值不仅限于数据，还可以返回子程序的引用。返回的子程序在调用处执行，但却是在最初被创建的调用处被设置，这是由Perl对Closure处理的方式决定的。Closure意即如果你定义了一个函数，它就以最初定义的内容运行。(Closure详见OOP的参考书)下面的例子中，设置了多个错误信息显示子程序，这样的子程序定义方法可用于创建模板。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
#!/usr/bin/perl&lt;br /&gt;&#xD;
sub errorMsg {&lt;br /&gt;&#xD;
my $lvl = shift;&lt;br /&gt;&#xD;
#&lt;br /&gt;&#xD;
# define the subroutine to run when called.&lt;br /&gt;&#xD;
#&lt;br /&gt;&#xD;
return sub {&lt;br /&gt;&#xD;
my $msg = shift; # Define the error type now.&lt;br /&gt;&#xD;
print "Err Level $lvl:$msgn"; }; # print later.&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
$severe = errorMsg("Severe");&lt;br /&gt;&#xD;
$fatal = errorMsg("Fatal");&lt;br /&gt;&#xD;
$annoy = errorMsg("Annoying");&lt;/p&gt;&#xD;
&lt;p&gt;&amp;amp;$severe("Divide by zero");&lt;br /&gt;&#xD;
&amp;amp;$fatal("Did you forget to use a semi-colon?");&lt;br /&gt;&#xD;
&amp;amp;$annoy("Uninitialized variable in use");&lt;/p&gt;&#xD;
&lt;p&gt;结果输出如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
Err Level Severe:Divide by zero&lt;br /&gt;&#xD;
Err Level Fatal:Did you forget to use a semi-colon?&lt;br /&gt;&#xD;
Err Level Annoying:Uninitialized variable in use&lt;/p&gt;&#xD;
&lt;p&gt;上例中，子程序errorMsg使用了局域变量$lvl，用于返回给调用者。当errorMsg被调用时，$lvl的值设置到返回的子程序内容中，虽然是用的my函数。三次调用设置了三个不同的$lvl变量值。当errorMsg返回时，$lvl的值保存到每次被声明时所产生的子程序代码中。最后三句对产生的子程序引用进行调用时$msg的值被替换，但$lvl的值仍是相应子程序代码创建时的值。&lt;br /&gt;&#xD;
很混淆是吗？是的，所以这样的代码在Perl程序中很少见。&lt;br /&gt;&#xD;
七、数组与子程序&lt;br /&gt;&#xD;
数组利于管理相关数据，本节讨论如何向子程序传递多个数组。前面我们讲过用@_传递子程序的参数，但是@_是一个单维数组，不管你传递的参数是多少个数组，都按序存贮在@_中，故用形如my(@a,@b)=@_; 的语句来获取参数值时，全部值都赋给了@a，而@b为空。那么怎么把一个以上的数组传递给子程序呢？方法是用引用。见下例：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
#!/usr/bin/perl&lt;br /&gt;&#xD;
@names = (mickey, goofy, daffy );&lt;br /&gt;&#xD;
@phones = (5551234, 5554321, 666 );&lt;br /&gt;&#xD;
$i = 0;&lt;br /&gt;&#xD;
sub listem {&lt;br /&gt;&#xD;
my ($a,$b) = @_;&lt;br /&gt;&#xD;
foreach (@$a) {&lt;br /&gt;&#xD;
print "a[$i] = " . @$a[$i] . " " . "tb[$i] = " . @$b[$i] ."n";&lt;br /&gt;&#xD;
$i++;&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
&amp;amp;listem(@names, @phones);&lt;/p&gt;&#xD;
&lt;p&gt;结果输出如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
a[0] = mickey b[0] = 5551234&lt;br /&gt;&#xD;
a[1] = goofy b[1] = 5554321&lt;br /&gt;&#xD;
a[2] = daffy b[2] = 666&lt;br /&gt;&#xD;
注意：&lt;/p&gt;&#xD;
&lt;p&gt;1、当想传递给子程序的参数是多于一个的数组时一定要使用引用。&lt;br /&gt;&#xD;
2、一定不要在子程序中使用形如 (@variable)=@_; 的语句处理参数，除非你想把所有参数集中到一个长的数组中。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;八、文件句柄的引用&lt;br /&gt;&#xD;
有时，必须将同一信息输出到不同的文件，例如，某程序可能在一个实例中输出到屏幕，另一个输出到打印机，再一个输出到记录文件，甚至同时输出到这三个文件。相比较于每种处理写一个单独的语句，可以有更好的实现方式如下：&lt;br /&gt;&#xD;
spitOut(*STDIN);&lt;br /&gt;&#xD;
spitOut(*LPHANDLE);&lt;br /&gt;&#xD;
spitOut(*LOGHANDLE);&lt;br /&gt;&#xD;
其中子程序spitOut的代码如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
sub spitOut {&lt;br /&gt;&#xD;
my $fh = shift;&lt;br /&gt;&#xD;
print $fh "Gee Wilbur, I like this lettucen";&lt;br /&gt;&#xD;
}&lt;/p&gt;&#xD;
&lt;p&gt;注意其中文件句柄引用的语法为*FILEHANDLE。&lt;br /&gt;&#xD;
Perl中的模块&lt;/p&gt;&#xD;
&lt;p&gt;注: 如果你的e文好, 那就看一看PERL的MAN手册吧 那里面什么都有PERL 中的模块 结构很简单 用起来也不难 但至少我不是很喜欢它&lt;/p&gt;&#xD;
&lt;p&gt;注意 PERL中的模块和类是同意词&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
perlobj.1 中对模块有三条简单的定义&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
1 一个模块是一个引用 但系统知道它属于那一个类&lt;/p&gt;&#xD;
&lt;p&gt;2 一个类是一个包 它提供了一些方法&lt;/p&gt;&#xD;
&lt;p&gt;3 一个方法是一个SUB 它的第一个参数为一个类的引用&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
在PERL中并没有明确的定义类的构造函数&lt;/p&gt;&#xD;
&lt;p&gt;我们所使用的类的引用一般是一个HASH的引用 通过调用函数bless&lt;/p&gt;&#xD;
&lt;p&gt;将它同一个类绑在一起&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
例如:&lt;/p&gt;&#xD;
&lt;p&gt;Critter.pm&lt;/p&gt;&#xD;
&lt;p&gt;package Critter&lt;/p&gt;&#xD;
&lt;p&gt;sub new {&lt;/p&gt;&#xD;
&lt;p&gt;bless {};&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;本例中返回了一个空的HASH表(PERL中也叫做匿名表)&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
复杂一点的例子&lt;/p&gt;&#xD;
&lt;p&gt;try.pm&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
package try;&lt;/p&gt;&#xD;
&lt;p&gt;sub new {&lt;/p&gt;&#xD;
&lt;p&gt;$para = @_;&lt;/p&gt;&#xD;
&lt;p&gt;%hash = {};&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
$hash{'a'} = $para{'a'};&lt;/p&gt;&#xD;
&lt;p&gt;bless %hash, try;&lt;/p&gt;&#xD;
&lt;p&gt;return %hash;&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
sub pp {&lt;/p&gt;&#xD;
&lt;p&gt;print shift;&lt;/p&gt;&#xD;
&lt;p&gt;print ("\n", @_);&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;a.pl // 它与try.pm放在同一个目录下&lt;/p&gt;&#xD;
&lt;p&gt;use try;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
$m_try = try::new(a =&amp;gt; "hello");&lt;/p&gt;&#xD;
&lt;p&gt;$m_try-&amp;gt;pp("hello world");&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
一般的文章上都说 应该这样用:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
sub new {&lt;/p&gt;&#xD;
&lt;p&gt;my $this = shift;&lt;/p&gt;&#xD;
&lt;p&gt;my $class = ref($this) || $this;&lt;/p&gt;&#xD;
&lt;p&gt;my $self = {};&lt;/p&gt;&#xD;
&lt;p&gt;bless $self, $class&lt;/p&gt;&#xD;
&lt;p&gt;$self-&amp;gt;initialize();&lt;/p&gt;&#xD;
&lt;p&gt;return $self;&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
而上面的例子却不是这样 Why?&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
这个问题涉及到如何new一个类.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
1 try::new(a =&amp;gt; "hello");&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
2 try-&amp;gt;new(a =&amp;gt; "hello");&lt;/p&gt;&#xD;
&lt;p&gt;3 new try(a =&amp;gt; "hello");&lt;/p&gt;&#xD;
&lt;p&gt;第二个和第三个是一样的&lt;/p&gt;&#xD;
&lt;p&gt;2,3 中函数new的参数是 ('try', 'a', 'hello')&lt;/p&gt;&#xD;
&lt;p&gt;1 的参数却是('a', 'hello');&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
#对于2 3 你可以理解为将class-&amp;gt;new(arg); 转换为 new::(class,arg)&lt;/p&gt;&#xD;
&lt;p&gt;#这与class是什么东西无关 如同 $m_class-&amp;gt;method(arg)被转换为&lt;/p&gt;&#xD;
&lt;p&gt;#class::method($m_class,arg)一样&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
PERL的类常用 2 3 两种方法创建&lt;/p&gt;&#xD;
&lt;p&gt;当调用一个类中的方法时 第一个参数为HASH表的引用&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
try.pm&lt;/p&gt;&#xD;
&lt;p&gt;sub pp {&lt;/p&gt;&#xD;
&lt;p&gt;$class = shift;&lt;/p&gt;&#xD;
&lt;p&gt;print (@_, $class-&amp;gt;{'a'});&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
$m_try = new try('a' =&amp;gt; 'hello');&lt;/p&gt;&#xD;
&lt;p&gt;$m_try-&amp;gt;pp("ha ha ha");&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;下面看一看 PERL中类的继承&lt;/p&gt;&#xD;
&lt;p&gt;PERL的类继承很奇怪 子类的目录比父类低一层&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
如&lt;/p&gt;&#xD;
&lt;p&gt;Tk.pm&lt;/p&gt;&#xD;
&lt;p&gt;Tk/Button.pm&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
Button.pm&lt;/p&gt;&#xD;
&lt;p&gt;package Tk::Button.pm&lt;/p&gt;&#xD;
&lt;p&gt;...&lt;/p&gt;&#xD;
&lt;p&gt;...&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
另一种方法是使用@ISA&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
class UNIVERSAL&lt;/p&gt;&#xD;
&lt;p&gt;这是一个特殊的类 所有的类都是它的子类 它定义了如下的方法&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
isa 判断是不是某个类的引用&lt;/p&gt;&#xD;
&lt;p&gt;can 是否存在某个方法&lt;/p&gt;&#xD;
&lt;p&gt;VERSION 判断版本号&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
SUPER:: 用于调用父类中的方法&lt;/p&gt;&#xD;
&lt;p&gt;如:&lt;/p&gt;&#xD;
&lt;p&gt;$self-&amp;gt;SUPER::get();&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
先看一看如何使用@ISA 完成类的继承&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
#try.pm 父类&lt;/p&gt;&#xD;
&lt;p&gt;package try;&lt;/p&gt;&#xD;
&lt;p&gt;$VERSION = "1.00";&lt;/p&gt;&#xD;
&lt;p&gt;sub new {&lt;/p&gt;&#xD;
&lt;p&gt;bless {} ,try;&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;sub pp {&lt;/p&gt;&#xD;
&lt;p&gt;print "this is in father class\n";&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
#tt.pm 子类&lt;/p&gt;&#xD;
&lt;p&gt;package tt;&lt;/p&gt;&#xD;
&lt;p&gt;use trk;&lt;/p&gt;&#xD;
&lt;p&gt;@ISA = qw(try); #这样在tt中找不到的方法 会在try中查找&lt;/p&gt;&#xD;
&lt;p&gt;#如同tt是try的子类&lt;/p&gt;&#xD;
&lt;p&gt;sub new {&lt;/p&gt;&#xD;
&lt;p&gt;bless {} ,tt;&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;sub pp {&lt;/p&gt;&#xD;
&lt;p&gt;print "this is in son class\n";&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
#c.pl&lt;/p&gt;&#xD;
&lt;p&gt;#!/usr/bin/perl&lt;/p&gt;&#xD;
&lt;p&gt;use tt;&lt;/p&gt;&#xD;
&lt;p&gt;$m_tt = new tt;&lt;/p&gt;&#xD;
&lt;p&gt;$m_tt-&amp;gt;pp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
这中方法会显示 "this is in son class"&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
注: 你应该定义new在类tt.pm中, 不然会显示&lt;/p&gt;&#xD;
&lt;p&gt;"this is in father class"&lt;/p&gt;&#xD;
&lt;p&gt;原因是调用了try中的new, 引用被bless成了try的.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
修改tt.pm&lt;/p&gt;&#xD;
&lt;p&gt;sub pp {&lt;/p&gt;&#xD;
&lt;p&gt;$self = shift;&lt;/p&gt;&#xD;
&lt;p&gt;$self-&amp;gt;SUPER::pp; #调用父类中的方法&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;会显示"this is in father"&lt;br /&gt;&#xD;
9: Perl 中的正则表达式&lt;br /&gt;&#xD;
正则表达式的三种形式&lt;/p&gt;&#xD;
&lt;p&gt;正则表达式中的常用模式&lt;/p&gt;&#xD;
&lt;p&gt;正则表达式的 8 大原则&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;正则表达式是 Perl 语言的一大特色，也是 Perl 程序中的一点难点，不过如果大家能够很好的掌握他，就可以轻易地用正则表达式来完成字符串处理的任务，当然在 CGI 程序设计中就更能得心应手了。下面我们列出一些正则表达式书写时的一些基本语法规则。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
--------------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;9.1 正则表达式的三种形式&lt;br /&gt;&#xD;
首先我们应该知道 Perl 程序中，正则表达式有三种存在形式，他们分别是：&lt;/p&gt;&#xD;
&lt;p&gt;匹配：m/&amp;lt;regexp&amp;gt;/ （还可以简写为 /&amp;lt;regexp&amp;gt;/ ，略去 m）&lt;/p&gt;&#xD;
&lt;p&gt;替换：s/&amp;lt;pattern&amp;gt;/&amp;lt;replacement&amp;gt;/&lt;/p&gt;&#xD;
&lt;p&gt;转化：tr/&amp;lt;pattern&amp;gt;/&amp;lt;replacemnt&amp;gt;/&lt;/p&gt;&#xD;
&lt;p&gt;这三种形式一般都和 =~ 或 !~ 搭配使用（其中 "=~" 表示相匹配，在整条语句中读作 does，"!~" 表示不匹配，在整条语句中读作 doesn't），并在左侧有待处理的标量变量。如果没有该变量和 =~ !~ 操作符，则默认为处理 $_ 变量中的内容。举例如下：&lt;/p&gt;&#xD;
&lt;p&gt;$str = "I love Perl";&lt;br /&gt;&#xD;
$str =~ m/Perl/; # 表示如果在 $str 中发现 "Perl" 字符串，则返回 "1" 否则返回 "0"。&lt;br /&gt;&#xD;
$str =~ s/Perl/BASH/; # 表示将变量 $str 中的 "Perl" 字符串替换为 "BASH"，如果发生此替换则返回 "1"，否则返回 "0"。&lt;br /&gt;&#xD;
$str !~ tr/A-Z/a-z/; # 表示将变量 $str 中的所有大写字母转化为小写字母，如果转化发生了则返回 "0"，否则返回 "1"。&lt;/p&gt;&#xD;
&lt;p&gt;另外还有：&lt;/p&gt;&#xD;
&lt;p&gt;foreach (@array) { s/a/b/; } # 此处每次循环将从 @array 数组中取出一个元素存放在 $_ 变量中，并对 $_ 进行替换处理。&lt;br /&gt;&#xD;
while (&amp;lt;FILE&amp;gt;) { print if (m/error/); } # 这一句稍微复杂一些，他将打印 FILE 文件中所有包含 error 字符串的行。&lt;/p&gt;&#xD;
&lt;p&gt;Perl 的正则表达式中如果出现 () ，则发生匹配或替换后 () 内的模式被 Perl 解释器自动依次赋给系统 $1, $2 ...... 请看下面的例子：&lt;/p&gt;&#xD;
&lt;p&gt;$string = "I love perl";&lt;br /&gt;&#xD;
$string =~ s/(love)/&amp;lt;$1&amp;gt;/; # 此时 $1 = "love"，并且该替换的结果是将 $string 变为 "I &amp;lt;love&amp;gt; perl"&lt;br /&gt;&#xD;
$string = "i love perl";&lt;br /&gt;&#xD;
$string =~ s/(i)(.*)(perl)/&amp;lt;$3&amp;gt;$2&amp;lt;$1&amp;gt;/; # 这里 $1 = "i"，$2 = " love "，$3 = "perl"，并且替换后 $string 变为 "&amp;lt;perl&amp;gt; love &amp;lt;i&amp;gt;"&lt;/p&gt;&#xD;
&lt;p&gt;替换操作 s/&amp;lt;pattern&amp;gt;/&amp;lt;replacement&amp;gt;/ 还可以在末尾加上 e 或 g 参数，他们的含义分别为：&lt;/p&gt;&#xD;
&lt;p&gt;s/&amp;lt;pattern&amp;gt;/&amp;lt;replacement&amp;gt;/g 表示把待处理字符串中所有符合 &amp;lt;pattern&amp;gt; 的模式全部替换为 &amp;lt;replacement&amp;gt; 字符串，而不是只替换第一个出现的模式。&lt;br /&gt;&#xD;
s/&amp;lt;pattern&amp;gt;/&amp;lt;replacement&amp;gt;/e 表示将把 &amp;lt;replacemnet&amp;gt; 部分当作一个运算符，这个参数用的不多。&lt;/p&gt;&#xD;
&lt;p&gt;比如下面的例子：&lt;/p&gt;&#xD;
&lt;p&gt;$string = "i:love:perl";&lt;br /&gt;&#xD;
$string =~ s/:/*/; #此时 $string="i*love:perl";&lt;br /&gt;&#xD;
$string = "i:love:perl";&lt;br /&gt;&#xD;
$string =~ s/:/*/g; #此时 $string="i*love*perl";&lt;br /&gt;&#xD;
$string =~ tr/*/ /; #此时 $string="i love perl";&lt;br /&gt;&#xD;
$string = "www22cgi44";&lt;br /&gt;&#xD;
$string =~ s/(\d+)/$1*2/e; # (/d+)代表 $string 中的一个或多个数字字符，将这些数字字符执行 *2 的操作，因此最后 $string 变成了 "www44cgi88"。&lt;/p&gt;&#xD;
&lt;p&gt;下面给出一个完整的例子：&lt;/p&gt;&#xD;
&lt;p&gt;#!/usr/bin/perl&lt;/p&gt;&#xD;
&lt;p&gt;print"请输入一个字符串!\n";&lt;br /&gt;&#xD;
$string = &amp;lt;STDIN&amp;gt;; # &amp;lt;STIDN&amp;gt;代表标准输入，会让使用者输入一字符串&lt;br /&gt;&#xD;
chop($string); # 将$string最后一个换行的字符\n删除掉&lt;br /&gt;&#xD;
if($string =~ /perl/){&lt;br /&gt;&#xD;
print("输入的字符串中有 perl 这个字符串!\n";&lt;br /&gt;&#xD;
}&lt;/p&gt;&#xD;
&lt;p&gt;如果输入的字符串含有 perl 这个字符串的话，就会显示后面的提示信息。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;9.2 正则表达式中的常用模式&lt;br /&gt;&#xD;
下面是正则表达式中的一些常用模式。&lt;/p&gt;&#xD;
&lt;p&gt;/pattern/ 结果&lt;br /&gt;&#xD;
. 匹配除换行符以外的所有字符&lt;br /&gt;&#xD;
x? 匹配 0 次或一次 x 字符串&lt;br /&gt;&#xD;
x* 匹配 0 次或多次 x 字符串，但匹配可能的最少次数&lt;br /&gt;&#xD;
x+ 匹配 1 次或多次 x 字符串，但匹配可能的最少次数&lt;br /&gt;&#xD;
.* 匹配 0 次或一次的任何字符&lt;br /&gt;&#xD;
.+ 匹配 1 次或多次的任何字符&lt;br /&gt;&#xD;
{m} 匹配刚好是 m 个 的指定字符串&lt;br /&gt;&#xD;
{m,n} 匹配在 m个 以上 n个 以下 的指定字符串&lt;br /&gt;&#xD;
{m,} 匹配 m个 以上 的指定字符串&lt;br /&gt;&#xD;
[] 匹配符合 [] 内的字符&lt;br /&gt;&#xD;
[^] 匹配不符合 [] 内的字符&lt;br /&gt;&#xD;
[0-9] 匹配所有数字字符&lt;br /&gt;&#xD;
[a-z] 匹配所有小写字母字符&lt;br /&gt;&#xD;
[^0-9] 匹配所有非数字字符&lt;br /&gt;&#xD;
[^a-z] 匹配所有非小写字母字符&lt;br /&gt;&#xD;
^ 匹配字符开头的字符&lt;br /&gt;&#xD;
$ 匹配字符结尾的字符&lt;br /&gt;&#xD;
\d 匹配一个数字的字符，和 [0-9] 语法一样&lt;br /&gt;&#xD;
\d+ 匹配多个数字字符串，和 [0-9]+ 语法一样&lt;br /&gt;&#xD;
\D 非数字，其他同 \d&lt;br /&gt;&#xD;
\D+ 非数字，其他同 \d+&lt;br /&gt;&#xD;
\w 英文字母或数字的字符串，和 [a-zA-Z_0-9] 语法一样&lt;br /&gt;&#xD;
\w+ 和 [a-zA-Z0-9]+ 语法一样&lt;br /&gt;&#xD;
\W 非英文字母或数字的字符串，和 [^a-zA-Z_0-9] 语法一样&lt;br /&gt;&#xD;
\W+ 和 [^a-zA-Z_0-9]+ 语法一样&lt;br /&gt;&#xD;
\s 空格，和 [\n\t\r\f] 语法一样&lt;br /&gt;&#xD;
\s+ 和 [\n\t\r\f]+ 一样&lt;br /&gt;&#xD;
\S 非空格，和 [^\n\t\r\f] 语法一样&lt;br /&gt;&#xD;
\S+ 和 [^\n\t\r\f]+ 语法一样&lt;br /&gt;&#xD;
\b 匹配以英文字母,数字为边界的字符串&lt;br /&gt;&#xD;
\B 匹配不以英文字母,数值为边界的字符串&lt;br /&gt;&#xD;
a|b|c 匹配符合a字符 或是b字符 或是c字符 的字符串&lt;br /&gt;&#xD;
abc 匹配含有 abc 的字符串&lt;br /&gt;&#xD;
(pattern) () 这个符号会记住所找寻到的字符串，是一个很实用的语法。第一个 () 内所找到的字符串变成 $1 这个变量或是 \1 变量，第二个 () 内所找到的字符串变成 $2 这个变量或是 \2 变量，以此类推下去。&lt;br /&gt;&#xD;
/pattern/i i 这个参数表示忽略英文大小写，也就是在匹配字符串的时候，不考虑英文的大小写问题。&lt;br /&gt;&#xD;
\ 如果要在 pattern 模式中找寻一个特殊字符，如 "*"，则要在这个字符前加上 \ 符号，这样才会让特殊字符失效&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
下面给出一些例子：&lt;/p&gt;&#xD;
&lt;p&gt;范例 说明&lt;br /&gt;&#xD;
/perl/ 找到含有 perl 的字符串&lt;br /&gt;&#xD;
/^perl/ 找到开头是 perl 的字符串&lt;br /&gt;&#xD;
/perl$/ 找到结尾是 perl 的字符串&lt;br /&gt;&#xD;
/c|g|i/ 找到含有 c 或 g 或 i 的字符串&lt;br /&gt;&#xD;
/cg{2,4}i/ 找到 c 后面跟着 2个到 4个 g ，再跟着 i 的字符串&lt;br /&gt;&#xD;
/cg{2,}i/ 找到 c 后面跟着 2个以上 g ，再跟着 i 的字符串&lt;br /&gt;&#xD;
/cg{2}i/ 找到 c 后面跟着 2个 g，再跟着 i 的字符串&lt;br /&gt;&#xD;
/cg*i/ 找到 c 后面跟着 0个或多个 g ，再跟着 i 的字符串，如同/cg{0,}i/&lt;br /&gt;&#xD;
/cg+i/ 找到 c 后面跟着一个以上 g，再跟着 i 的字符串，如同/cg{1,}i/&lt;br /&gt;&#xD;
/cg?i/ 找到 c 后面跟着 0个或是 1个 g ，再跟着 i 的字符串，如同/cg{0,1}i/&lt;br /&gt;&#xD;
/c.i/ 找到 c 后面跟着一个任意字符，再跟着 i 的字符串&lt;br /&gt;&#xD;
/c..i/ 找到 c 后面跟着二个任意字符，再跟着 i 的字符串&lt;br /&gt;&#xD;
/[cgi]/ 找到符合有这三个字符任意一个的字符串&lt;br /&gt;&#xD;
/[^cgi]/ 找到没有这三个字符中任意一个的字符串&lt;br /&gt;&#xD;
/\d/ 找寻符合数字的字符，可以使用/\d+/来表示一个或是多个数字组成的字符串&lt;br /&gt;&#xD;
/\D/ 找寻符合不是数字的字符，可以使用/\D+/来表示一个或是更多个非数字组成的字符串&lt;br /&gt;&#xD;
/\*/ 找寻符合 * 这个字符，因为 * 在常规表达式中有它的特殊意思，所以要在这个特殊符号前加上 \ 符号，这样才会让这个特殊字符失效&lt;br /&gt;&#xD;
/abc/i 找寻符合 abc 的字符串而且不考虑这些字符串的大小写&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;9.3 正则表达式的八大原则&lt;br /&gt;&#xD;
如果在 Unix 中曾经使用过 sed、awk、grep 这些命令的话，相信对于 Perl 语言中的正则表达式(Regular Expression)不会感到陌生。Perl 语言由于有这个功能，所以对字符串的处理能力非常强。在Perl语言的程序中，经常可以看到正则表达式的运用，在 CGI 程序设计中也不例外。&lt;/p&gt;&#xD;
&lt;p&gt;正则表达式是初学 Perl 的难点所在，不过只要一旦掌握其语法，你就可以拥有几乎无限的模式匹配能力，而且 Perl 编程的大部分工作都是掌握常规表达式。下面给大家介绍几条正则表达式使用过程中的 8 大原则。&lt;/p&gt;&#xD;
&lt;p&gt;正则表达式在对付数据的战斗中可形成庞大的联盟&amp;#8212;&amp;#8212;这常常是一场战争。我们要记住下面八条原则：&lt;/p&gt;&#xD;
&lt;p&gt;&amp;#183; 原则1：正则表达式有三种不同形式(匹配(m/ /)，替换(s/ / /eg)和转换(tr/ / /))。&lt;/p&gt;&#xD;
&lt;p&gt;&amp;#183; 原则2：正则表达式仅对标量进行匹配( $scalar =~ m/a/; 可以工作; @array =~ m/a/ 将把@array作为标量对待，因此可能不会成功)。&lt;/p&gt;&#xD;
&lt;p&gt;&amp;#183; 原则3：正则表达式匹配一个给定模式的最早的可能匹配。缺省时，仅匹配或替换正则表达式一次( $a = 'string string2'; $a =~ s/string/ /; 导致 $a = 'string 2')。&lt;/p&gt;&#xD;
&lt;p&gt;&amp;#183; 原则4：正则表达式能够处理双引号所能处理的任意和全部字符( $a =~ m/$varb/ 在匹配前把varb扩展为变量；如果 $varb = 'a' $a = 'as'，$a =~ s/$varb/ /; 等价于 $a =~ s/a/ /; ，执行结果使 $a = " s" )。&lt;/p&gt;&#xD;
&lt;p&gt;&amp;#183; 原则5：正则表达式在求值过程中产生两种情况：结果状态和反向引用： $a=~ m/pattern/ 表示 $a 中是否有子串 pattern 出现，$a =~ s/(word1)(word2)/$2$1/ 则&amp;#8220;调换&amp;#8221;这两个单词。&lt;/p&gt;&#xD;
&lt;p&gt;&amp;#183; 原则6：正则表达式的核心能力在于通配符和多重匹配运算符以及它们如何操作。$a =~ m/\w+/ 匹配一个或多个单词字符；$a =~ m/\d/" 匹配零个或多个数字。&lt;/p&gt;&#xD;
&lt;p&gt;&amp;#183; 原则7：如果欲匹配不止一个字符集合，Perl使用 "|" 来增加灵活性。如果输入 m/(cat|dog)/ 则相当于&amp;#8220;匹配字符串 cat 或者 dog。&lt;/p&gt;&#xD;
&lt;p&gt;&amp;#183; 原则8：Perl用 (?..) 语法给正则表达式提供扩展功能。（这一点请同学们课后看相关资料）&lt;/p&gt;&#xD;
&lt;p&gt;想要学习所有这些原则？我建议大家先从简单的开始，并且不断的尝试和实验。实际上如果学会了 $a =~ m/ERROR/ 是在 $a 中查找子串ERROR，那么你就已经比在 C 这样的低层语言中得到了更大的处理能力。&amp;nbsp;&lt;br /&gt;&#xD;
Perl 数据结构&lt;/p&gt;&#xD;
&lt;p&gt;变量名字&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
Perl 有三种数据结构: 数值, 数值的数组, 还有数值的关联数组, 即``哈希表''. 普通的数组以数字为索引, 从 0 开始(负值的下标从数组尾部开始计算). 哈希表中的元素是以字符串索引.&lt;/p&gt;&#xD;
&lt;p&gt;数值变量以 '$' 打头, 当引用数组中的一个元素时也一样. 意思是"这". 举例:&lt;/p&gt;&#xD;
&lt;p&gt;$days # 数值变量 &amp;amp;amp;quot;days&amp;amp;amp;quot; $days[28] # 数组 @days 的第29个元素 $days{'Feb'} # 哈希表 %days 中 'Feb' 代表的数值 $#days # 数组 @days 的最大下标&lt;/p&gt;&#xD;
&lt;p&gt;当表示整个数组或数组的一部分时, 用&amp;nbsp;&lt;a href="&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#116;&amp;#111;&amp;#58;&amp;#39;&amp;#64;&amp;#39;" style="color: #0000ff; "&gt;'@'&lt;/a&gt;&amp;nbsp;打头, 意思是 "这些" 或 "那些"&lt;/p&gt;&#xD;
&lt;p&gt;@days # ($days[0], $days[1],... $days[n]) @days[3,4,5] # 即 @days[3..5] @days{'a','c'} # 即 ($days{'a'},$days{'c'})&lt;/p&gt;&#xD;
&lt;p&gt;当表示整个哈希表时用 '%' 打头:&lt;/p&gt;&#xD;
&lt;p&gt;%days # (key1, val1, key2, val2 ...)&lt;/p&gt;&#xD;
&lt;p&gt;此外, 子过程用 '&amp;amp;' 打头, 当不致引起混淆的时候可以省略. 符号表表项用 '*' 打头, 手册后面部分有详细说明.&lt;/p&gt;&#xD;
&lt;p&gt;不同的变量类型有自己的名字空间. 为一个数值变量, 一个数组和一个哈希表(一个文件句柄, 一个子过程, 一个标号)取相同的名字并不会引起冲突. 也就是说, $foo 和 @foo 是两个不同的变量. $foo[1] 是 @foo 的一部分, 而不是 $foo 的一部分. 看起来也许有点怪, 但要习惯它.&lt;/p&gt;&#xD;
&lt;p&gt;既然变量和数组名都是以 '$',&amp;nbsp;&lt;a href="&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#116;&amp;#111;&amp;#58;&amp;#39;&amp;#64;&amp;#39;" style="color: #0000ff; "&gt;'@'&lt;/a&gt;, 或 '%' 打头, 那些 ``保留字'' 实际上并非对变量而言. (它们实际上是对标号和文件句柄而言, 标号和文件句柄是没有特殊的打头字母. 给一个文件句柄取名 ``log'' 是错误的. 应该用 open(LOG,'logfile') 而非 open(log,'logfile') . 用大写字母来表示文件句柄也增加了可读性, 避免和将来出现的保留字冲突.) 大小写是区分的 -- ``FOO'', ``Foo'' 和 ``foo'' 是完全不同的名字. 以字母或下划线开头的名字可以包含数字和下划线.&lt;/p&gt;&#xD;
&lt;p&gt;一个以字母数字组成的名字代表的变量可以用一个返回同类型的引用的表达式代替, 详见 perlref .&lt;/p&gt;&#xD;
&lt;p&gt;数字开头的名字只能包含更多的数字. 不是以字母, 数字, 下划线开头的名字只能有一个字符. 例如: $% 或 $$ . (大部分这些单字符名字是 Perl 的预定义变量, 例如, $$ 是当前进程号.)&lt;/p&gt;&#xD;
&lt;p&gt;变量名字&lt;br /&gt;&#xD;
Perl 对操作和变量值的解释有时依赖于上下文. 主要的上下文有两种: 数值和列表. 某些操作, 如果上下文期待的是列表, 就返回列表结果, 对期待数值的上下文就返回数值(如果某种操作有这种上下文依赖性, 会在有关文档中说明). 换句话说, Perl 会根据期待的结果是单个或多个重载一些操作.&lt;/p&gt;&#xD;
&lt;p&gt;与此相对的, 一个操作会为它的每一个参数确定上下文. 例如&lt;/p&gt;&#xD;
&lt;p&gt;int( &amp;amp;lt;stdin&amp;amp;gt;)&lt;/p&gt;&#xD;
&lt;p&gt;取整数操作为 &amp;lt;STDIN&amp;gt; 提供了一个数值上下文, &amp;lt;STDIN&amp;gt; 在 STDIN 读入一行并传送给取整数操作, 后者求出这一行代表的整数值并返回. 而下面的例子&lt;/p&gt;&#xD;
&lt;p&gt;sort( &amp;amp;lt;stdin&amp;amp;gt;)&lt;/p&gt;&#xD;
&lt;p&gt;排序操作为 &amp;lt;STDIN&amp;gt; 提供了一个列表上下文, 从 STDIN 中读入所有的行直到文件结束, 这些行组成的列表被传送到排序操作, 后者对它们排序并返回排序后的行列表.&lt;/p&gt;&#xD;
&lt;p&gt;赋值操作是用等号左边的参数来确定右边参数的上下文. 为数值变量赋值的操作给右边参数确定了数值上下文, 给数组或数组的一部分赋值的时候右边参数是处于列表上下文.&lt;/p&gt;&#xD;
&lt;p&gt;自定义的子过程可以自行确定被调用时的上下文, 但很多场合下不需要这么做, 因为数值可以自动转化成列表. 参看 wantarray .&lt;/p&gt;&#xD;
&lt;p&gt;数值变量&lt;br /&gt;&#xD;
Perl 里的数据要么是数值型, 要么是数值型的数组, 要么是数值型的哈希表. 数值变量可以存放不同类型的单个数据, 比如数字, 字符串, 和引用. 一般情况下, 不同类型之间的转换是透明的. (一个数值型不能存放多个值, 但可以存放对数组或哈希表的引用.) 由于自动类型转换, 返回数值型的操作和函数不需要担心(实际上是不能担心)上下文是等待一个数字还是一个字符串.&lt;/p&gt;&#xD;
&lt;p&gt;数值型不必确定自己的类型. 其实也没有地方去把一个数值型变量声明为``string'', 或 ``number'', 或``filehandle'', 或是其它什么类型. 在 Perl 中, 数值型变量的类型可以是数字或字符串或引用, 根据上下文确定. 字符串和数字实际上没什么两样, 但引用是不可转换的指针, 有内建的引用计数和析构过程.&lt;/p&gt;&#xD;
&lt;p&gt;非空的字符串或非 0 (字符串``0'')的数字可以表示布尔类型中的真值. 布尔上下文是一种特殊的数值型上下文.&lt;/p&gt;&#xD;
&lt;p&gt;空数值型实际上有两种情况: 已定义和未定义的. 当没有任何实际的值存在时, 未定义的空数值型被返回, 比如发生错误的时候, 或者读到文件结束的地方, 或者引用了一个未初始化的变量. 当一个未定义的空数值型首次被使用时, 就变成已定义的, 在此之前可以用 defined() 去检查一个值是否被定义了.&lt;/p&gt;&#xD;
&lt;p&gt;要知道一个字符串是否一个有效的非 0 数字, 一般是确定它不是数值 0 或 字符串 ``0''&lt;/p&gt;&#xD;
&lt;p&gt;if ($str == 0 &amp;amp;amp;amp;&amp;amp;amp;amp; $str ne &amp;amp;amp;quot;0&amp;amp;amp;quot;) { warn &amp;amp;amp;quot;That doesn't look like a number&amp;amp;amp;quot;; }&lt;/p&gt;&#xD;
&lt;p&gt;别的方法是用正则表达式进行检查, 参看 perlre 中对正则表达式的详细介绍.&lt;/p&gt;&#xD;
&lt;p&gt;warn &amp;amp;amp;quot;has nondigits&amp;amp;amp;quot; if /\D/; warn &amp;amp;amp;quot;not a whole number&amp;amp;amp;quot; unless /^\d+$/; warn &amp;amp;amp;quot;not an integer&amp;amp;amp;quot; unless /^[+-]?\d+$/ warn &amp;amp;amp;quot;not a decimal number&amp;amp;amp;quot; unless /^[+-]?\d+\.?\d*$/ warn &amp;amp;amp;quot;not a C float&amp;amp;amp;quot; unless /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/;&lt;/p&gt;&#xD;
&lt;p&gt;数组的长度是一个数值型. 数组 @days 的长度是 $# days, 的值, 和 csh 里一样. (实际上这不是数组的长度, 是最大的下标, 因为有数组里第 0 个元素.) 给 $# days 赋值可以改变数组的长度. 用同样的方法缩短数组的长度会破坏被截去的数值. 重新增加被缩短的数组不再能恢复这些数值(在 Perl 4 里是可以的, 但为了保证正确的调用析构做了这样的改变). 给超出最大下标的数组元素赋值可以扩展数组的长度, 给数组赋上空的列表 () 就把数组的长度减为 0 .&lt;/p&gt;&#xD;
&lt;p&gt;@whatever = (); $#whatever = $[ - 1;&lt;/p&gt;&#xD;
&lt;p&gt;如果在数值型上下文里计算数组的值, 会得到数组的长度. (并不适用于列表, 会返回最后一个值, 象 C 的逗号操作符) 以下的等式是成立的:&lt;/p&gt;&#xD;
&lt;p&gt;scalar(@whatever) == $#whatever - $[ + 1;&lt;/p&gt;&#xD;
&lt;p&gt;Perl 第 5 版改变了 $[ 的语意: 不设置 $[ 的文件不用担心别的文件会否改变自己的 $[ 的值. (换句话说, 不赞成使用 $[) 所以一般可以认为&lt;/p&gt;&#xD;
&lt;p&gt;scalar(@whatever) == $#whatever + 1;&lt;/p&gt;&#xD;
&lt;p&gt;有些程序员选择显式的转换:&lt;/p&gt;&#xD;
&lt;p&gt;$element_count = scalar(@whatever);&lt;/p&gt;&#xD;
&lt;p&gt;如果在数值型上下文里计算哈希表的值, 如果哈希表里有key/value对, 会得到一字符串, 其中包含了该哈希表占据的空间和已经分配的空间, 用 '/' 分开. 这可以检查一下 Perl 的散列算法是否有效. 比如, 在哈希表里存放了 10,000 个元素, 而在数值型上下文里计算 %HASH 得到 ``1/16'', 那情况就太浪费空间了.&lt;/p&gt;&#xD;
&lt;p&gt;数值型的值的表示&lt;br /&gt;&#xD;
数字用习惯的浮点数或整数表示法:&lt;/p&gt;&#xD;
&lt;p&gt;12345 12345.67 .23E-10 0xffff # 16 进制 0377 # 8 进制 4_294_967_296 # 用下划线容易阅读&lt;/p&gt;&#xD;
&lt;p&gt;字符串一般用单引号或双引号括住. 引号的作用和 shell 里类似: 双引号字符串中可以有反斜杠和变量替换; 单引号字符串不行(除了 ``\''' 和 ``\\''). 一般的 Unix 反斜杠替换规则同样用来表示换行符, 制表符...等等. 见列表qq.&lt;/p&gt;&#xD;
&lt;p&gt;换行符可以直接嵌入在字符串中. 但如果忘记了结尾的引号, 直到 Perl 找到另外一行有引号的行前不会报出任何错误. 字符串中的变量替换限制于数值型, 数组和数组的部分. (即以$ 或 @ 打头的标识符, 后跟一个可选的括起来的下标) 下面的代码打印出 "The price is $100."&lt;/p&gt;&#xD;
&lt;p&gt;$Price = '$100'; # not interpreted print &amp;amp;amp;quot;The price is $Price.\n&amp;amp;amp;quot;; # interpreted&lt;/p&gt;&#xD;
&lt;p&gt;和在某些 shell 下一样, 可以用花括号把标识符括住, 以区别于其他后随的字母. 实际上, 花括号中的标识符一定是个字符串, 就象一个哈希表的下标. 早先的例子&lt;/p&gt;&#xD;
&lt;p&gt;$days{'Feb'}&lt;/p&gt;&#xD;
&lt;p&gt;可以写成&lt;/p&gt;&#xD;
&lt;p&gt;$days{Feb}&lt;/p&gt;&#xD;
&lt;p&gt;引号是会被自动加上, 而下标中复杂的部分会被解释为表达式.&lt;/p&gt;&#xD;
&lt;p&gt;要注意, 单引号字符串要和前面的词用空白隔开, 因为单引号本身是可以组成标识符. (参看Packages).&lt;/p&gt;&#xD;
&lt;p&gt;有两个特别的字符串是 __LINE__ 和 __FILE__, 分别代表程序执行点的当前行号和文件名. 它们只能用做分隔记号; 不能被转换成字符串. 此外, __END__ 可以用于在脚本的真正结束位置前标记逻辑结束位置, 在此后的所有文字都被忽略, 但可以通过 DATA 文件句柄读出. (DATA 文件句柄只能从主脚本读取, 不能从required包含的文件或计算的字符串读取) 控制字符 ^D 和 ^Z 是 __END__ 的同义字. (在模块里是 __DATA__ 的同义字; 关于 __DATA__ 的详细说明, 参看SelfLoader)&lt;/p&gt;&#xD;
&lt;p&gt;在语法上没有其他解释的词都被看作一个引起来的字符串. 称为``净词''. 和文件句柄和标号一样, 全是小写字母的净词可能会和将来的保留字冲突, 如果使用 -w 选项, Perl 会对这些词发出警告. 有些人会完全不使用净词. 如果用&lt;/p&gt;&#xD;
&lt;p&gt;use strict 'subs';&lt;/p&gt;&#xD;
&lt;p&gt;那么所有不能被解释为子过程调用的净词都会产生一条编译时刻错误. 严格检查一直到闭合块的结尾为止. 内部块用以下方法可以撤消严格检查 no strict 'subs' .&lt;/p&gt;&#xD;
&lt;p&gt;如果把数组的所有元素连接到一起形成一个双引号字符串, 以变量 $" ( $LIST_SEPARATOR )指定的字符做为分隔符(默认为空格).&lt;/p&gt;&#xD;
&lt;p&gt;$temp = join($&amp;amp;amp;quot;,@ARGV); system &amp;amp;amp;quot;echo $temp&amp;amp;amp;quot;; system &amp;amp;amp;quot;echo @ARGV&amp;amp;amp;quot;;&lt;/p&gt;&#xD;
&lt;p&gt;在搜索模式(也要做替换)中模糊是很糟糕的: 到底 /$foo[bar]/ 是解释为 /${foo}[bar]/ ([bar]/ 是正则表达式字符类) 还是解释成 /${foo[bar]}/ ([bar]/ 是数组下标)? 如果 @foo 不存在, 那么明显是个字符类. 如果 @foo 存在, Perl 要猜测 [bar] 是什么, 一般结果是正确的. 但如果猜错了, 或者你可以用花括号来指示正确的解释方法.&lt;/p&gt;&#xD;
&lt;p&gt;面向行的引用是建立在 shell 的 ``here-doc'' 语法上. 在 &amp;lt;&amp;lt; 后面指定一个结束引用的字符串, 当前行的所有后随行直到结束串都是引用的内容. 结束字符串可以是一个标识符(一个词), 或引起来的一段文字. 如果是引起来的文字, 引的方式决定了对文字的处理, 象普通的引用. &amp;lt;&amp;lt; 和标识符之间不能够有空白. 如果有空白, 引用到第一个空白行为止. 结束字符串必须单独出现在一行, 前后不能有空白.&lt;/p&gt;&#xD;
&lt;p&gt;print &amp;lt;&amp;lt;EOF; # same as above&lt;br /&gt;&#xD;
The price is $Price.&lt;br /&gt;&#xD;
EOF&lt;br /&gt;&#xD;
print &amp;lt;&amp;lt;``EOF''; # same as above&lt;br /&gt;&#xD;
The price is $Price.&lt;br /&gt;&#xD;
EOF&lt;br /&gt;&#xD;
print &amp;lt;&amp;lt;`EOC`; # execute commands&lt;br /&gt;&#xD;
echo hi there&lt;br /&gt;&#xD;
echo lo there&lt;br /&gt;&#xD;
EOC&lt;br /&gt;&#xD;
print &amp;lt;&amp;lt;``foo'', &amp;lt;&amp;lt;``bar''; # you can stack them&lt;br /&gt;&#xD;
I said foo.&lt;br /&gt;&#xD;
foo&lt;br /&gt;&#xD;
I said bar.&lt;br /&gt;&#xD;
bar&lt;br /&gt;&#xD;
myfunc(&amp;lt;&amp;lt;``THIS'', 23, &amp;lt;&amp;lt;'THAT'');&lt;br /&gt;&#xD;
Here's a line&lt;br /&gt;&#xD;
or two.&lt;br /&gt;&#xD;
THIS&lt;br /&gt;&#xD;
and here another.&lt;br /&gt;&#xD;
THAT&lt;/p&gt;&#xD;
&lt;p&gt;要记得结束的分号, 下面的代码是错误的&lt;/p&gt;&#xD;
&lt;p&gt;print &amp;lt;&amp;lt;ABC&lt;br /&gt;&#xD;
179231&lt;br /&gt;&#xD;
ABC&lt;br /&gt;&#xD;
+ 20;&lt;/p&gt;&#xD;
&lt;p&gt;列表值的表示&lt;br /&gt;&#xD;
列表值用多个用逗号分隔的单独值表示(并用括号括起来):&lt;/p&gt;&#xD;
&lt;p&gt;(LIST)&lt;/p&gt;&#xD;
&lt;p&gt;在非列表的上下文里, 列表的值是最后一个元素的值. 例如,&lt;/p&gt;&#xD;
&lt;p&gt;@foo = ('cc', '-E', $bar);&lt;/p&gt;&#xD;
&lt;p&gt;把整个列表的值赋给数组foo, 而&lt;/p&gt;&#xD;
&lt;p&gt;$foo = ('cc', '-E', $bar);&lt;/p&gt;&#xD;
&lt;p&gt;把变量bar的值赋给变量foo. 注意在数值型的上下文里数组的值是数组的长度; 下面的赋值把 $foo 的值设为 3:&lt;/p&gt;&#xD;
&lt;p&gt;@foo = ('cc', '-E', $bar); $foo = @foo; # $foo gets 3&lt;/p&gt;&#xD;
&lt;p&gt;列表的结束括号前可以有一个逗号:&lt;/p&gt;&#xD;
&lt;p&gt;@foo = ( 1, 2, 3, );&lt;/p&gt;&#xD;
&lt;p&gt;列表会把子列表自动展开. 当列表被求值时, 其中的每个元素都在列表上下文里被展开, 最后的结果形成一张大的列表. 数组在列表里不再独立存在. 下面的列表&lt;/p&gt;&#xD;
&lt;p&gt;(@foo,@bar,&amp;amp;amp;amp;SomeSub) 包含了 @foo 中的所有元素, 后面是 @bar 的所有元素, 再后面是子过程 SomeSub 在列表上下文里被调用时返回的所有元素. 要使用不展开列表的引用, 参看 perlref&lt;/p&gt;&#xD;
&lt;p&gt;空列表用 () 表示. 在列表中展开一个空列表是不产生任何变化. 因此 ((),(),()) 等同于 (). 类似的, 在列表中展开一个空数组也不产生任何变化.&lt;/p&gt;&#xD;
&lt;p&gt;可以把列表当作数组, 用下标去访问它的值. 但必须用括号括起列表以避免产生混乱. 例如:&lt;/p&gt;&#xD;
&lt;p&gt;# Stat 返回列表值 $time = (stat($file))[8]; # 语法错误 $time = stat($file)[8]; # 漏了括号 # Find a hex digit. $hexdigit = ('a','b','c','d','e','f')[$digit-10]; # A &amp;amp;amp;quot;reverse comma operator&amp;amp;amp;quot;. return (pop(@foo),pop(@foo))[0];&lt;/p&gt;&#xD;
&lt;p&gt;Lists may be assigned to if and only if each element of the list is legal to assign to: 只有当可以对列表中的每个元素赋值, 才可以对列表赋值.&lt;/p&gt;&#xD;
&lt;p&gt;($a, $b, $c) = (1, 2, 3); ($map{'red'}, $map{'blue'}, $map{'green'}) = (0x00f, 0x0f0, 0xf00);&lt;/p&gt;&#xD;
&lt;p&gt;在数值型上下文里, 列表的赋值操作的返回值是等号右边的表达式的值.&lt;/p&gt;&#xD;
&lt;p&gt;$x = (($foo,$bar) = (3,2,1)); # $x = 3, 不是 2 $x = (($foo,$bar) = f()); # $x 等于 f() 的返回值&lt;/p&gt;&#xD;
&lt;p&gt;当在布尔型的上下文里进行列表赋值操作时, 检查返回值是有意义的. 大部分列表函数结束的时候返回空列表, 即数值 0, 布尔值 FALSE.&lt;/p&gt;&#xD;
&lt;p&gt;待赋值列表的最后一个元素可以是哈希表:&lt;/p&gt;&#xD;
&lt;p&gt;($a, $b, @rest) = split; local($a, $b, %rest) = @_;&lt;/p&gt;&#xD;
&lt;p&gt;实际上, 赋值的时候可以把哈希表放在列表的任何位置, 但列表中第一个出现的哈希表会取去所有的值, 后面的元素都得到一个空值. 这个特点在 local() 或 my() 里可能会有用.&lt;/p&gt;&#xD;
&lt;p&gt;哈希表的元素是一对对的数值, 即键和值的对应.&lt;/p&gt;&#xD;
&lt;p&gt;# same as map assignment above %map = ('red',0x00f,'blue',0x0f0,'green',0xf00);&lt;/p&gt;&#xD;
&lt;p&gt;列表和数组之间通常是可以互相转换的, 但不适用于哈希表. 列表中的元素可以象数组一样用下标去访问, 但不能用键去访问列表元素.&lt;/p&gt;&#xD;
&lt;p&gt;在哈希表的键和值之间使用 =&amp;gt; 操作符会更加明白. =&amp;gt; 操作符是逗号的同意词, 但兼有引起左操作数的功能, 特别适用于哈希表的初始化.&lt;/p&gt;&#xD;
&lt;p&gt;%map = ( red =&amp;amp;amp;gt; 0x00f, blue =&amp;amp;amp;gt; 0x0f0, green =&amp;amp;amp;gt; 0xf00, );&lt;/p&gt;&#xD;
&lt;p&gt;或者是初始化哈希表的引用, 当作记录使用.&lt;/p&gt;&#xD;
&lt;p&gt;$rec = { witch =&amp;amp;amp;gt; 'Mable the Merciless', cat =&amp;amp;amp;gt; 'Fluffy the Ferocious', date =&amp;amp;amp;gt; '10/31/1776', };&lt;/p&gt;&#xD;
&lt;p&gt;或是用于按名调用的复杂函数:&lt;/p&gt;&#xD;
&lt;p&gt;$field = $query-&amp;amp;amp;gt;radio_group( name =&amp;amp;amp;gt; 'group_name', values =&amp;amp;amp;gt; ['eenie','meenie','minie'], default =&amp;amp;amp;gt; 'meenie', linebreak =&amp;amp;amp;gt; 'true', labels =&amp;amp;amp;gt; \%labels );&lt;/p&gt;&#xD;
&lt;p&gt;要记住哈希表的初始化顺序不等于数据的存放顺序. 参看 sort 中有关对输出进行排序的例子&lt;/p&gt;&#xD;
&lt;p&gt;Typeglobs 和 文件句柄&lt;br /&gt;&#xD;
Perl 用一个叫 typeglob 的内部类型来保存一条整份符号表表项. typeglob 的类型前缀是 *, 代表任意的类型. 它原来是给函数传递数组和哈希表引用的方法, 不过现在有了真正的引用, 就很少用到了.&lt;/p&gt;&#xD;
&lt;p&gt;有一个地方还会用到 typeglobs, 就是传递或存放文件句柄的时候. 要保存一个文件句柄, 可以这样做:&lt;/p&gt;&#xD;
&lt;p&gt;$fh = *STDOUT;&lt;/p&gt;&#xD;
&lt;p&gt;或者用真正的引用:&lt;/p&gt;&#xD;
&lt;p&gt;$fh = \*STDOUT;&lt;/p&gt;&#xD;
&lt;p&gt;这也是建立局部文件句柄的方法. 例如:&lt;/p&gt;&#xD;
&lt;p&gt;sub newopen { my $path = shift; local *FH; # 不用 my! open (FH, $path) || return undef; return \*FH; } $fh = newopen('/etc/passwd');&lt;/p&gt;&#xD;
&lt;p&gt;欲知更多有关 typeglobs 的信息, 参看 perlref , perlsub , 和 ``Symbols Tables'' . 欲知其他生成文件句柄的方法, 参看 open .&lt;/p&gt;&#xD;
&lt;div&gt;&lt;br /&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/span&gt;&#xD;
&lt;style type="text/css" isprelink="true"&gt;@import url(http://www.cnblogs.com/Load.ashx?type=style&amp;file=SyntaxHighlighter.css);&lt;/style&gt;&lt;style type="text/css"&gt;@import url(/css/cuteeditor.css);&lt;/style&gt;&lt;img src="http://www.cnblogs.com/cosiray/aggbug/2299167.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cosiray/archive/2011/12/23/2299167.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cosiray/archive/2011/12/21/2295795.html</id><title type="text">常用的PHP数据库操作方法（MYSQL版）</title><summary type="text">一、数据库操作1. 连接MYSQL数据mysql_connect()e.g.$db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD) or die(‘Unable to connect, please check connection paremeters’);2. 选择数据库mysql_select_db()连接上数据库后，PHP默认选择的数据库未必是我们后面操作中需要的数据库，为确保数据库选择正确，一般在数据库连接语句后面还要加上数据库选择语句。e.g.mysql_select_db(MYSQL_DB, $db) or die(</summary><published>2011-12-21T06:30:00Z</published><updated>2011-12-21T06:30:00Z</updated><author><name>酷赛瑞</name><uri>http://www.cnblogs.com/cosiray/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cosiray/archive/2011/12/21/2295795.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cosiray/archive/2011/12/21/2295795.html"/><content type="html">&lt;p&gt;&lt;strong&gt;一、数据库操作&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1. 连接MYSQL数据&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a  title="Posts tagged with mysql" href="http://blog.igevin.info/archives/tag/mysql" rel="tag"&gt;&lt;font color="#000000"&gt;mysql&lt;/font&gt;&lt;/a&gt;_connect()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;e.g.&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;$db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD) or die(&amp;#8216;Unable to connect, please check connection paremeters&amp;#8217;);&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span id="more-990"&gt;&amp;nbsp;&lt;/span&gt;2. 选择数据库&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;mysql_select_db()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;连接上数据库后，PHP默认选择的数据库未必是我们后面操作中需要的数据库，为确保数据库选择正确，一般在数据库连接语句后面还要加上数据库选择语句。&lt;/p&gt;&#xD;
&lt;p&gt;e.g.&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;mysql_select_db(MYSQL_DB, $db) or die(mysql_error($db));&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3. 执行SQL语句&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;mysql_query()&lt;/p&gt;&#xD;
&lt;p&gt;该函数将SQL语句发送到当前活动的数据库并执行语句，返回结果。&lt;/p&gt;&#xD;
&lt;p&gt;e.g.&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;$query = &amp;#8220;SELECT * FROM $table&amp;#8221;&lt;/p&gt;&#xD;
&lt;p&gt;$result = mysql_query($query, $db) or die(mysql_error($db));&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;4. 关闭数据库&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;mysql_close()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;该函数用于关闭不需要继续活跃的数据库，但该方法不是必须的，一般PHP会自动关闭不继续活跃的数据库。&lt;/p&gt;&#xD;
&lt;p&gt;e.g.&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;mysql_close($db);&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;5. 释放SQL结果&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;mysql_free_result()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;该函数用于释放mysql_query()执行结果占用的内存，该函数很少被调用，除非result很大，占用太多内存；一般在PHP脚本执行结束之后很自动释放占用的内存。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;二、SQL执行结果操作&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1. 返回执行结果中的一行&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;mysql_fetch_row()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;返回执行结果的当前行的数值数组，执行这个函数后，结果指向下一行。&lt;/p&gt;&#xD;
&lt;p&gt;e.g.&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;$row = mysql_fetch_row($result);&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;p&gt;处理执行结果一般放在while循环中，遍历每一行&lt;/p&gt;&#xD;
&lt;p&gt;e.g.&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;while($row = mysql_fetch_row($result))&lt;br /&gt;{&amp;#8230;&amp;#8230;}&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2. mysql_fetch_row()的替代方法&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;mysql_fetch_array()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;mysql_fetch_assoc()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;mysql_fetch_array()返回键值对数组，键为查询的table的列名；&lt;/p&gt;&#xD;
&lt;p&gt;mysql_fetch_assoc()返回结果时可以先排序（如果为可选参数赋值），相当于mysql_fetch_array()+MYSQL_ASSOC&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3. 执行结果的字段（列）属性&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;mysql_fetch_field()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;4. 查询数据库中的表名&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;mysql_list_tables()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;e.g.&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;$db_name = MYSQL_DB;&lt;br /&gt;$result = mysql_list_tables($db_name);&lt;br /&gt;echo &amp;#8220;数据库中包含如下表：&amp;#8221;;&lt;br /&gt;while ($row = mysql_fetch_row($result))&lt;br /&gt;{&lt;br /&gt;echo $row[0];&lt;br /&gt;}&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;5. 查询数据库的列名（字段名）&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;mysql_list_fields()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;e.g.&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;$fields = mysql_list_fields($db_name,$table);&lt;br /&gt;$columns = mysql_num_fields($fields);&lt;br /&gt;for ($i = 0; $i &amp;lt; $columns; $i++)&lt;br /&gt;echo&amp;nbsp; mysql_field_name($fields, $i);&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;三、其他函数&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1. mysql_num_rows()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;返回执行结果的行数。&lt;/p&gt;&#xD;
&lt;p&gt;e.g.&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;$num = mysql_num_rows($result);&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2. mysql_num_fields()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;返回执行结果的列数（字段数）。&lt;/p&gt;&#xD;
&lt;p&gt;e.g. $num = mysql_num_fields($result);&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.mysql_set_charset()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;设置执行结果的编码，防止在网页中显示中文时乱码。&lt;/p&gt;&#xD;
&lt;p&gt;e.g.&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;$query = &amp;#8220;select * from $table_name&amp;#8221;;&lt;br /&gt;mysql_query(&amp;#8216;set names utf8&amp;#8242;);&lt;br /&gt;$result = mysql_query($query, $db) or die(mysql_error($db));&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;注：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1. 文中大写代码为预定义的内容，如define(MYSQL_HOST,&amp;nbsp; &amp;#8216;localhost&amp;#8217;);&lt;/p&gt;&#xD;
&lt;p&gt;2. 本文仅总结了PHP操作数据库的主要函数，完整的内容请参考PHP手册的&lt;a href="http://www.php.net/manual/en/book.mysql.php"&gt;&lt;font color="#000000"&gt;相关内容&lt;/font&gt;&lt;/a&gt;。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cosiray/aggbug/2295795.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cosiray/archive/2011/12/21/2295795.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cosiray/archive/2011/12/21/2295767.html</id><title type="text">Windows 7 下如何配置PHP网站运行环境</title><summary type="text">一、Apache安装 版本解释：openssl是表示带有openssl模块，利用openssl就可以给Apache配置SSL安全链接的，也就是使用https://方式进行访问。 nossl则表示不带OpenSSL模块，无　法用于SSL安全链接，在这里我们下载带OpenSSL的。 选择版本：apache_2.2.14-win32-x86-openssl-0.9.8k.msi （此处以32位为例）下载地址：http://www.apache.org/dist/httpd/binaries/win32/ 首先我们在D盘（盘符根据实际情况自己选择）新建一个目录， 并且命名为“WAMP”其意义...</summary><published>2011-12-21T06:03:00Z</published><updated>2011-12-21T06:03:00Z</updated><author><name>酷赛瑞</name><uri>http://www.cnblogs.com/cosiray/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cosiray/archive/2011/12/21/2295767.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cosiray/archive/2011/12/21/2295767.html"/><content type="html">&lt;p&gt;&lt;strong&gt;一、Apache安装 &lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;版本解释：openssl是表示带有openssl模块，利用openssl就可以给Apache配置SSL安全链接的，也就是使用https://方式进行访问。 &lt;br /&gt;　　　　　nossl则表示不带OpenSSL模块，无　法用于SSL安全链接，在这里我们下载带OpenSSL的。 &lt;/p&gt;&#xD;
&lt;p&gt;选择版本：apache_2.2.14-win32-x86-openssl-0.9.8k.msi （此处以32位为例）&lt;br /&gt;下载地址：&lt;a href="http://www.apache.org/dist/httpd/binaries/win32/" target="_blank"&gt;http://www.apache.org/dist/httpd/binaries/win32/&lt;/a&gt; &lt;/p&gt;&#xD;
&lt;p&gt;首先我们在D盘（盘符根据实际情况自己选择）新建一个目录， 并且命名为&amp;#8220;WAMP&amp;#8221;其意义为&amp;#8220;Wdindows Apache Mysql PhpMyAdmin&amp;#8221; 之后安装的一些内容，也都将安装在该目录下。 &lt;br /&gt;&lt;br /&gt;1.安装说明： &lt;/p&gt;&#xD;
&lt;p&gt;运行apache安装程序，方法非常简单，弹安装界面后一直&amp;#8220;next&amp;#8221; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://img.win7china.com/NewsUploadFiles/20110305_102801_400_u.jpg"  alt="" /&gt;&lt;br /&gt;&lt;br /&gt;接着会出现一个界面，需要填写3个内容，分别为：Network Domain、Server Name、Administrator&amp;#8217;s Email Address 随便填写就好，不影响内容。 &lt;/p&gt;&#xD;
&lt;p&gt;在下面还有2个选项，默认选择为80端口，第二个为8080端口，根据个人需求选择，一般为默认80端口。 &lt;br /&gt;我们继续安装，选择Custom（自定义安装）-&amp;#8220;next&amp;#8221; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://img.win7china.com/NewsUploadFiles/20110305_102843_291_u.jpg"  alt="" /&gt;&lt;br /&gt;&lt;br /&gt;其中有打着红X的组件，我们单击这个组件容，选择&amp;#8220;This feature, and all subfeatures, will be installed on local hard drive.&amp;#8221;，即&amp;#8220;此部分，及下属子部分内容，全部安装在本地硬盘上&amp;#8221;。-&amp;#8220;next&amp;#8221; &lt;br /&gt;&lt;br /&gt;然后选择右下角的&amp;#8220;change &amp;#8221;改变安装路径，安装到刚才建立的目录中&amp;#8220;D:\WAMP\Apache\&amp;#8221;-&amp;#8220;next&amp;#8221; &lt;br /&gt;安装完毕后，电脑右下角会多出一个图标，双击打开，选择start或restart，能正常运行，至此安装完毕。 &lt;br /&gt;&lt;br /&gt;2.修改配置： &lt;/p&gt;&#xD;
&lt;p&gt;打开安装录下D:\WAMP\Apache\conf\httpd.conf 文件(修改配置文件时，不建议使用记事本，可能会对其造成影响，推荐使用Notepad++或其他编辑软件打开修改) &lt;br /&gt;&lt;br /&gt;打开以后Ctrl+F查找所要修改的内容 &lt;br /&gt;&lt;br /&gt;在#LoadModule vhost_alias_module modules/mod_vhost_alias.so下添加： &lt;br /&gt;LoadModule php5_module &amp;#8220;D:/WAMP/PHP/php5apache2_2.dll&amp;#8221; &lt;br /&gt;PHPIniDir &amp;#8220;D:/WAMP/PHP&amp;#8221; &lt;br /&gt;AddType application/x-httpd-php .php &lt;br /&gt;AddType application/x-httpd-php .htm &lt;br /&gt;AddType application/x-httpd-php .html &lt;br /&gt;&lt;br /&gt;DocumentRoot &amp;#8220;E:/WAMP/Apache/htdocs&amp;#8221; &lt;br /&gt;修改成(这里的路径和IIS中wwwroot目录一样，用于存放网页，自定义或不做修改默认)：DocumentRoot &amp;#8220;D:/WAMP/www&amp;#8221; &lt;br /&gt;&lt;br /&gt;修改成(自定义或不做修改默认)： &lt;br /&gt;&lt;br /&gt;DirectoryIndex index.html &lt;br /&gt;修改成：DirectoryIndex index.php default.php index.html index.htm default.html default.htm &lt;br /&gt;&lt;br /&gt;3.测试 &lt;/p&gt;&#xD;
&lt;p&gt;在D:/WAMP/www目录下 建立个index.html页面 &lt;br /&gt;在浏览器中输入 http://localhost/ &lt;br /&gt;如果能正常显示，Apache配置完毕，已经正常运行。 &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;二、MySql安装 &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;版本解释：The Essentials Package：不包含 embedded server and benchmark suite，有自动安装程序和配置向导，没有MySQL Documentation。 &lt;br /&gt;　　　　　The Complete Package：包含 embedded server and benchmark suite，有自动安装程序和配置向导，有MySQL Documentation。 &lt;br /&gt;　　　　　The Noinstall Archive：包含 embedded server and benchmark suite，没有自动安装程序和配置向导，有MySQL Documentation。 &lt;br /&gt;选择版本：mysql-essential-5.1.44-win32.msi &lt;br /&gt;下载地址：&lt;a href="http://www.mysql.com/downloads/mysql/" target="_blank"&gt;http://www.mysql.com/downloads/mysql/&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;1.安装说明： &lt;br /&gt;打开安装程序，单击&amp;#8220;next&amp;#8221; &lt;br /&gt;选择custom，组件为默认选择，我们不做改动-&amp;#8220;next&amp;#8221; &lt;br /&gt;&lt;br /&gt;路径设置为&amp;#8220;D:\WAMP\Mysql&amp;#8221;-&amp;#8220;next&amp;#8221; &lt;br /&gt;&lt;br /&gt;安装好以后点击&amp;#8220;finish&amp;#8221; &lt;br /&gt;跟着会出现一个配置向导-&amp;#8220;next&amp;#8221; &lt;br /&gt;&lt;br /&gt;选择&amp;#8220;Detailed Configuration（详细配置）&amp;#8221;-&amp;#8220;next&amp;#8221; &lt;br /&gt;&lt;br /&gt;这里有3个选项： &lt;/p&gt;&#xD;
&lt;p&gt;Developer Machine，将只用尽量少的内存； &lt;br /&gt;Server Machine，将使用中等数量内存； &lt;br /&gt;Dedicated MySQL Server Machine，这台服务器上面只跑mysql数据库，将占用全部的内存。 &lt;br /&gt;可以根据自己需求选择，这里我们选择第二种&amp;#8220;Server Machine&amp;#8221;-&amp;#8220;next&amp;#8221; &lt;br /&gt;&lt;br /&gt;选择数据库用途，同样有3个选项： &lt;/p&gt;&#xD;
&lt;p&gt;Mutltifunctional Database多功能用途，将把数据库优化成很好的innodb存储类型和高效率的myisam存储类型； &lt;br /&gt;Transactional Database Only只用于事务处理类型，最好的优化innodb，但同时也支持myisam； &lt;br /&gt;Non-Transactional Databse Only非事务处理类型，适合于简单的应用，只有不支持事务的myisam类型是被支持的。 &lt;br /&gt;一般选择第一种多功能的，同样我们也是。-&amp;#8220;next&amp;#8221; &lt;br /&gt;&lt;br /&gt;选择InnodDB的数据存放位置，一般默认就行，为了统一我填写了&amp;#8220;WAMP/MySQL Datafiles&amp;#8221;-&amp;#8220;next&amp;#8221; &lt;br /&gt;&lt;br /&gt;选择mysql允许的最大连接数，第一种是最大20个连接并发数，第二种是最大500个并发连接数，最后一种是自定义，自己可以根据需求选择，我选择第二个-&amp;#8220;next&amp;#8221; &lt;br /&gt;&lt;br /&gt;下面是选择数据库监听的端口，一般默认是3306，如果改成其他端口，以后连接数据库的时候都要记住修改的端口，否则不能连接mysql数据库，比较麻烦，这里不做修改，用mysq的默认端口：3306-&amp;#8220;next&amp;#8221; &lt;br /&gt;&lt;br /&gt;这一步设置mysql的默认编码，我们选择第三个，并在Character Set菜单中，选择&amp;#8220;gbk&amp;#8221;编码-&amp;#8220;next&amp;#8221; &lt;br /&gt;(注：如果要用原来数据库的数据，最好能确定原来数据库用的是什么编码，如果这里设置的编码和原来数据库数据的编码不一致，在使用的时候可能会出现乱码。) &lt;br /&gt;&lt;br /&gt;这一步是是否要把mysql设置成windows的，一般选择设成服务，这样以后就可以通过服务中启动和关闭mysql数据库。下面的复选框也勾选上，这样，在cmd模式下，不必非到mysql的bin目录下执行命令。也就是把上下2个勾都打上，中间默认-&amp;#8220;next&amp;#8221; &lt;br /&gt;&lt;br /&gt;这一步是设置mysql的超级用户密码，这个超级用户非常重要，对mysql拥有全部的权限，请设置好并牢记超级用户的密码，下面有个复选框是选择是否允许远程机器用root用户连接到你的mysql服务器上面，如果有这个需求，也请勾选。这里我们使用默认选择，在New root password和Confirm中输入密码。&amp;#8220;next&amp;#8221; &lt;br /&gt;&lt;br /&gt;点击&amp;#8220;execute&amp;#8221;进行配置，稍微等待一会，圆点上的勾全部打上，就代表配置完毕。 &lt;br /&gt;&lt;br /&gt;2.修改配置： &lt;/p&gt;&#xD;
&lt;p&gt;打开D:\WAMP\MySQL\my.ini &lt;br /&gt;设置datadir为D:/WAMP/MySQL/data/或你所要存放数据位置的目录即可。 &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;三、PHP安装 &lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;版本解释：VC9 专门为IIS定值的脚本，使用Visual Studio 2008编译器编译，支持最新的微软组建，从而提高效率。 &lt;br /&gt;　　　　　VC6 是为了其他WEB服务软件提供的脚本 如 Apache。 &lt;br /&gt;　　　　　Thread Safe 现成安全，之星时会进行线程 安全检查，以防止有心要求就启动新线程(Thread)的CGI执行方式而耗尽系统资源。 &lt;br /&gt;　　　　　Non Thread Safe是非线程安全，在执行时不进行线程(Thread)安全检查 &lt;br /&gt;选择版本：PHP5.3(5.3.1)中VC6 x86 Thread Safe下 ZIP下载 &lt;/p&gt;&#xD;
&lt;p&gt;下载地址：&lt;a href="http://windows.php.net/download/" target="_blank"&gt;http://windows.php.net/download/&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;1.安装说明 &lt;br /&gt;由于我们下载的的是ZIP压缩包，只需要将文件解压到&amp;#8220;D:\WAMP\PHP&amp;#8221;目录下即可 &lt;br /&gt;&lt;br /&gt;2.修改配置 &lt;br /&gt;将E:\WAMP\PHP\php.ini-development 文件修改成php.ini &lt;br /&gt;打开php.ini &lt;br /&gt;&lt;br /&gt;; extension_dir = &amp;#8220;ext&amp;#8221; &lt;br /&gt;修改成：extension_dir = &amp;#8220;E:\WAMP\PHP\ext&amp;#8221; &lt;br /&gt;&lt;br /&gt;将947行下，这些文件前面的&amp;#8220;;&amp;#8221;去除 &lt;br /&gt;extension=php_curl.dll &lt;br /&gt;extension=php_gd2.dll &lt;br /&gt;extension=php_mbstring.dll &lt;br /&gt;extension=php_mysql.dll &lt;br /&gt;extension=php_mysqli.dll &lt;br /&gt;extension=php_pdo_mysql.dll &lt;br /&gt;extension=php_xmlrpc.dll &lt;br /&gt;&lt;br /&gt;;date.timezone = &lt;br /&gt;修改成(很多网站没提到这里要修改，默认为美国时间，如果不修改会报错)：date.timezone = Asia/Shanghai &lt;br /&gt;&lt;br /&gt;3.测试 &lt;/p&gt;&#xD;
&lt;p&gt;重启Apache(修改过配置文件 必须重启Apache才会生效) &lt;br /&gt;新建个index.php 页面，代码中输入，保存文件放到&amp;#8220;D:\WMAP\www\&amp;#8221;目录下 &lt;br /&gt;打开浏览器输入：&lt;a href="http://localhost/index.php" target="_blank"&gt;http://localhost/index.php&lt;/a&gt; 如果能正常显示，说明PHP配置完毕，可以查看该页面的PHP信息是否正确。 &lt;br /&gt;(注：在改文件中输入函数可输出大量的有关PHP当前状态的信息，如PHP版本，服务器信息和环境等。) &lt;br /&gt;(注：) &lt;br /&gt;&lt;br /&gt;接着我们测试下，是否能连接到Mysql &lt;br /&gt;再新建个link.php，下代码中输入 &lt;br /&gt;$link=mysql_connect(&amp;#8220;127.0.0.1&amp;#8243;,&amp;#8221;root&amp;#8221;,&amp;#8221;Mysql安装时填写的密码&amp;#8221;); &lt;br /&gt;if(!$link) echo &amp;#8220;Mysql数据库连接失败!&amp;#8221;; &lt;br /&gt;else echo &amp;#8220;Mysql数据库连接成功!&amp;#8221;; &lt;br /&gt;mysql_close(); &lt;br /&gt;?＞ &lt;br /&gt;也保存文件放到&amp;#8220;D:\WMAP\www\&amp;#8221;目录下 &lt;br /&gt;打开浏览器输入：&lt;a href="http://localhost/link.php" target="_blank"&gt;http://localhost/link.php&lt;/a&gt; 查看 &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;四、PhpMyAdmin安装 &lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;版本解释：phpMyAdmin-3.2.5 &lt;br /&gt;选择版本：phpMyAdmin-3.2.5-all-languages.zip &lt;br /&gt;下载地址：&lt;a href="http://www.phpmyadmin.net/home_page/downloads.php" target="_blank"&gt;http://www.phpmyadmin.net/home_page/downloads.php&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;1.安装说明 &lt;br /&gt;解压到D:\WAMP\phpMyAdmin &lt;br /&gt;&lt;br /&gt;2.修改配置 &lt;br /&gt;打开D:\WAMP\phpMyAdmin\libraries\config.default.php &lt;br /&gt;&lt;br /&gt;$cfg['PmaAbsoluteUri'] = &amp;#8221;; &lt;br /&gt;修改成(填写访问phpMyAdmin的绝对URL)：$cfg['PmaAbsoluteUri'] = &amp;#8216;http://localhost/PHPMyadmin/&amp;#8217;;&lt;br /&gt;&lt;br /&gt;$cfg['Servers'][$i]['host'] = &amp;#8216;localhost&amp;#8217;; &lt;br /&gt;修改成(填写服务器地址，通常默认，不需要修改)：$cfg['Servers'][$i]['host'] = &amp;#8216;localhost&amp;#8217;; &lt;br /&gt;&lt;br /&gt;$cfg['Servers'][$i]['user'] = &amp;#8216;root&amp;#8217;; &lt;br /&gt;修改成(填写Mysql用户名，这里我们默认)：$cfg['Servers'][$i]['user'] = &amp;#8216;root&amp;#8217;; &lt;br /&gt;&lt;br /&gt;$cfg['Servers'][$i]['password'] = &amp;#8221;; &lt;br /&gt;修改成(填写Mysql密码)：$cfg['Servers'][$i]['password'] = &amp;#8216;Mysql PWD; &lt;br /&gt;&lt;br /&gt;$cfg['Servers'][$i]['auth_type'] = &amp;#8216;cookie&amp;#8217;; &lt;br /&gt;修改成(设置认证方法，安全因素考虑，填写成cookie)：$cfg['Servers'][$i]['auth_type'] = &amp;#8216;cookie&amp;#8217;; &lt;br /&gt;&lt;br /&gt;$cfg['blowfish_secret'] = &amp;#8221;; &lt;br /&gt;修改成(设置短语密码，如果上面设置成cookie，那这里不能留空，不然登陆会提示错误)：$cfg['blowfish_secret'] = &amp;#8216;cookie&amp;#8217;; &lt;br /&gt;&lt;br /&gt;3.测试 &lt;br /&gt;打开&lt;a href="http://www.saayaa.com/" target="_blank"&gt;浏览器&lt;/a&gt;输入：http://localhost/phpmyadmin/ 访问和登陆 &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;五、结尾 &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;至此Windows7下的PHP环境搭建完毕，大家尽情的使用吧。 &lt;/p&gt;&lt;img src="http://www.cnblogs.com/cosiray/aggbug/2295767.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cosiray/archive/2011/12/21/2295767.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cosiray/archive/2011/12/21/2295495.html</id><title type="text">Tomcat建立多个应用(Web Server)、多个主机、多个站点的方法</title><summary type="text">当你使用Tomcat作为Web Server的时候，是不是会想过这样的一个问题：如何利用Tomcat建立多个Web应用 呢？要实现这一点是很简单的,也有多种方法.(以下说明使用%tomcat_home%代表Tomcat安装目录).一.首先介绍一下Tomcat及server.xmlTomcat服务器是由一系列的可配置的组件构成,tomcat的组件可以在%tomcat_home%/conf/server.xml文件中进行配置,每个Tomcat组件和server.xml文件的一种配置元素对应.主要分为4类:1.顶层类元素:包括和,他们位于整个配置文件的顶层.元素代表整个Catalina Servle</summary><published>2011-12-21T02:21:00Z</published><updated>2011-12-21T02:21:00Z</updated><author><name>酷赛瑞</name><uri>http://www.cnblogs.com/cosiray/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cosiray/archive/2011/12/21/2295495.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cosiray/archive/2011/12/21/2295495.html"/><content type="html">&lt;p&gt;当你使用Tomcat作为Web Server的时候，是不是会想过这样的一个问题：如何利用Tomcat建立多个Web应用 呢？&lt;br /&gt;要实现这一点是很简单的,也有多种方法.(以下说明使用%tomcat_home%代表Tomcat安装目录).&lt;/p&gt;&#xD;
&lt;p&gt;一.首先介绍一下Tomcat及server.xml&lt;/p&gt;&#xD;
&lt;p&gt;Tomcat服务器是由一系列的可配置的组件构成,tomcat的组件可以在%tomcat_home%/conf/server.xml文件中进行配置,每个Tomcat组件和server.xml文件的一种配置元素对应.&lt;br /&gt;主要分为4类:&lt;br /&gt;1.顶层类元素:包括和,他们位于整个配置文件的顶层.&lt;br /&gt;元素代表整个Catalina Servlet 容器,由org.apache.catalin.Server接口定义.包含一个或多个元素.&lt;br /&gt;元素由org.apache.catalin.Service 接口定义.包含一个元素,及一个或多个元素.多个元素共享一个元素.&lt;br /&gt;2.连接器类元素&lt;br /&gt;连接器类代表了介于客户与服务之间的通信接口,负责将客户的请求发送给服务器,并将服务器的响应结果传递给客户.&lt;br /&gt;元素由org.apache.catalin.Connector 接口定义.代表了与客户程序实际交互的组件,它负责接收客户请求,以及向客户返回响应结果.&lt;br /&gt;3.容器类元素&lt;br /&gt;容器类元素代表处理客户请求并生成响应的组件.包括 和.&lt;br /&gt;元素由org.apache.catalin.Engine 接口定义.每个只能包含一个元素,元素处理在同一个中的所有元素收到的客户请求.&lt;br /&gt;元素由org.apache.catalin.Host 接口定义.一个元素中可以包含多个元素.每个元素定义了一个虚拟主机,她可以包含一个或多个Web 应用.&lt;br /&gt;元素由org.apache.catalin.Context 接口定义.代表了运行在虚拟主机上的一个Web 应用.一个元素可以包含多个元素&lt;br /&gt;4.嵌套类元素&lt;br /&gt;嵌套类元素代表了可以加到容器中的组件,如 和.&lt;/p&gt;&#xD;
&lt;p&gt;关于server.xml的更多信息,可以参考Tomcat的文档:/webapps/tomcat-docs/config/index.html&lt;/p&gt;&#xD;
&lt;p&gt;样例:&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;Server&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;lt;Service name="Catalina"&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="8080" redirectPort="8443" maxSpareThreads="75" maxThreads="150" minSpareThreads="25"/&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;Connector port="8009" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="8443"/&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;Engine defaultHost="localhost" name="Catalina"&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;Host appBase="webapps" name="localhost"&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_log." suffix=".txt" timestamp="true"/&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/Host&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;Logger className="org.apache.catalina.logger.FileLogger" prefix="catalina_log." suffix=".txt" timestamp="true"/&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;Realm className="org.apache.catalina.realm.UserDatabaseRealm"/&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/Engine&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;lt;/Service&amp;gt; &lt;br /&gt;&amp;lt;/Server&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;二.建立多个Web应用方法:&lt;/p&gt;&#xD;
&lt;p&gt;在这之前,我已经将默认8080更改为80了.&lt;/p&gt;&#xD;
&lt;p&gt;1.通过配置多个元素(这是最为普遍的方法)&lt;br /&gt;在下配置多个元素&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;Context path="webapps" docBase="C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\ROOT" debug="0" reloadable="true"&amp;gt;&amp;lt;/Context&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Context path="webapps2" docBase="C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps2\ROOT" debug="0" reloadable="true"&amp;gt;&amp;lt;/Context&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;然后通过 主机名:端口/应用名 访问,如: &lt;a href="http://localhost/app1"&gt;http://localhost/app1&lt;/a&gt; 或 &lt;a href="http://localhost/app2"&gt;http://localhost/app2&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;2.通过配置多个元素&lt;br /&gt;在下配置多个元素&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;Host appBase="webapps" name="xok.la"&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;Alias&amp;gt;www.xok.la&amp;lt;/Alias&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;Context path="" docBase="C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\ROOT" debug="0" reloadable="true"&amp;gt;&amp;lt;/Context&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/Host&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;Host appBase="webapps2" name="xok.cc"&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;Alias&amp;gt;www.xok.cc&amp;lt;/Alias&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;Context path="" docBase="C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps2\ROOT" debug="0" reloadable="true"&amp;gt;&amp;lt;/Context&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/Host&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;然后通过 主机名:端口 访问,如: &lt;a href="http://xok.la/"&gt;http://xok.la/&lt;/a&gt; 或 &lt;a href="http://xok.cc/"&gt;http://xok.cc/&lt;/a&gt;&lt;br /&gt;需要注意的是这样需要机器连接到局域网上.&lt;/p&gt;&#xD;
&lt;p&gt;3.通过配置多个元素(多端口 多应用)&lt;br /&gt;在下配置多个元素&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;Service name="Catalina"&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="80" redirectPort="8453" maxSpareThreads="75" maxThreads="150" minSpareThreads="25"/&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;Connector port="8019" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="8453"/&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;Engine defaultHost="localhost" name="Catalina"&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;Host appBase="webapps" name="localhost"&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Context path="" docBase="C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\ROOT" debug="0" reloadable="true"&amp;gt;&amp;lt;/Context&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/Host&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;Realm className="org.apache.catalina.realm.UserDatabaseRealm"/&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/Engine&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/Service&amp;gt; &lt;br /&gt;&amp;lt;Service name="Catalina2"&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="90" redirectPort="9443" maxSpareThreads="75" maxThreads="150" minSpareThreads="25"/&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;Connector port="9009" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="9443"/&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;Engine defaultHost="localhost" name="Catalina"&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;Host appBase="webapps" name="localhost"&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Context path="" docBase="C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps2\ROOT" debug="0" reloadable="true"&amp;gt;&amp;lt;/Context&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/Host&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;Realm className="org.apache.catalina.realm.UserDatabaseRealm"/&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/Engine&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/Service&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;第2个应用只是在默认端口第1位数字上加1&lt;br /&gt;定义了两个Service分别是Catalina和Catalina2,侦听的端口分别是80和90&lt;br /&gt;然后通过 主机名:端口 访问,如: &lt;a href="http://localhost/"&gt;http://localhost/&lt;/a&gt; 或 &lt;a href="http://localhost:90/"&gt;http://localhost:90/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;本文来自: E点废墟(&lt;a href="http://www.xok.la/"&gt;http://www.xok.la/&lt;/a&gt;) 详细出处参考：&lt;a href="http://xok.la/2008/11/tomcat_create_web_server_host.html"&gt;http://xok.la/2008/11/tomcat_create_web_server_host.html&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cosiray/aggbug/2295495.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cosiray/archive/2011/12/21/2295495.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cosiray/archive/2011/12/17/2290906.html</id><title type="text">CentOS上搭建Nginx + Mono 运行 asp.net</title><summary type="text">安装步骤：一、获取开源相关程序：1、利用CentOS Linux系统自带的yum命令安装、升级所需的程序库：sudo -sLANG=Cyum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel bison pkgconfig glib2-devel gettext mak</summary><published>2011-12-17T01:56:00Z</published><updated>2011-12-17T01:56:00Z</updated><author><name>酷赛瑞</name><uri>http://www.cnblogs.com/cosiray/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cosiray/archive/2011/12/17/2290906.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cosiray/archive/2011/12/17/2290906.html"/><content type="html">&lt;p&gt;&lt;strong&gt;安装步骤：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;一、获取开源相关程序：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1、利用CentOS Linux系统自带的yum命令安装、升级所需的程序库：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;pre&gt;sudo -s&lt;br /&gt;LANG=C&lt;br /&gt;yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel bison pkgconfig glib2-devel gettext make&lt;/pre&gt;&#xD;
&lt;div &gt;&lt;span &gt;&lt;a onclick="copyCnblogsCode(this)" href="http://www.cnblogs.com/cosiray/admin/javascript:void(0);"&gt;&lt;font color="#0066aa"&gt;复制代码&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;2、下载程序源码包：&lt;/p&gt;&#xD;
&lt;p&gt;Nginx安装包：下载地址：&lt;a href="http://nginx.org/en/download.html"&gt;&lt;font color="#0066aa"&gt;http://nginx.org/en/download.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;pre&gt;mkdir -p /down&lt;br /&gt;cd /down&lt;br /&gt;wget http:&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;nginx.org/download/nginx-1.1.11.tar.gz&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;div &gt;&lt;span &gt;&lt;a onclick="copyCnblogsCode(this)" href="http://www.cnblogs.com/cosiray/admin/javascript:void(0);"&gt;&lt;font color="#0066aa"&gt;复制代码&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;a href="http://nginx.org/en/download.html"&gt;&lt;br /&gt;&lt;font color="#0066aa"&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Mono下载:官网：&lt;a href="http://download.mono-project.com/sources/mono/"&gt;&lt;font color="#0066aa"&gt;http://download.mono-project.com/sources/mono/&lt;/font&gt;&lt;/a&gt;(请下载最新版)&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;pre&gt;wget http:&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;download.mono-project.com/sources/mono/mono-2.10.7.tar.bz2&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&#xD;
&lt;p&gt;libgdiplus下载:&lt;a href="http://download.mono-project.com/sources/libgdiplus/"&gt;&lt;font color="#0066aa"&gt;http://download.mono-project.com/sources/libgdiplus/&lt;/font&gt;&lt;/a&gt;(请下载最新版)&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;pre&gt;wget http:&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.tar.bz2&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&#xD;
&lt;p&gt;xsp下载:&lt;a href="http://download.mono-project.com/sources/xsp/"&gt;&lt;font color="#0066aa"&gt;http://download.mono-project.com/sources/xsp/&lt;/font&gt;&lt;/a&gt;(请下载最新版)&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;pre&gt;wget http:&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;download.mono-project.com/sources/xsp/xsp-2.10.2.tar.bz2&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&#xD;
&lt;p&gt;pcre下载（Nginx所需的pcre库）：&lt;a href="http://www.cnblogs.com/cosiray/admin/ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/"&gt;&lt;font color="#0066aa"&gt;ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/&lt;/font&gt;&lt;/a&gt;（请下最新版）&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;pre&gt;wget ftp:&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.21.tar.gz&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;二、安装编译Nginx：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1、安装安装Nginx所需的pcre库：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;pre&gt;cd /down&lt;br /&gt;tar zxvf pcre-&lt;span style="color: #800080"&gt;8.21&lt;/span&gt;.tar.gz&lt;br /&gt;cd pcre-&lt;span style="color: #800080"&gt;8.21&lt;/span&gt;/&lt;br /&gt;./configure&lt;br /&gt;make &amp;amp;&amp;amp; make install&lt;br /&gt;cd ../&lt;/pre&gt;&#xD;
&lt;div &gt;&lt;span &gt;&lt;a onclick="copyCnblogsCode(this)" href="http://www.cnblogs.com/cosiray/admin/javascript:void(0);"&gt;&lt;font color="#0066aa"&gt;复制代码&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;2、创建www用户和组&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;pre&gt;/usr/sbin/groupadd www&lt;br /&gt;/usr/sbin/useradd -g www www&lt;br /&gt;mkdir -p /data0/web&lt;br /&gt;chmod +w /data0/web&lt;br /&gt;chown -R www:www /data0/web&lt;/pre&gt;&#xD;
&lt;div &gt;&lt;span &gt;&lt;a onclick="copyCnblogsCode(this)" href="http://www.cnblogs.com/cosiray/admin/javascript:void(0);"&gt;&lt;font color="#0066aa"&gt;复制代码&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;3、安装Nginx&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;pre&gt;tar zxvf nginx-&lt;span style="color: #800080"&gt;1.1&lt;/span&gt;.&lt;span style="color: #800080"&gt;11&lt;/span&gt;.tar.gz&lt;br /&gt;cd nginx-&lt;span style="color: #800080"&gt;1.1&lt;/span&gt;.&lt;span style="color: #800080"&gt;11&lt;/span&gt;/&lt;br /&gt;./configure --user=www --group=www --prefix=/opt/nginx --with-http_stub_status_module --with-http_ssl_module&lt;br /&gt;make &amp;amp;&amp;amp; make install&lt;br /&gt;cd ../&lt;/pre&gt;&#xD;
&lt;div &gt;&lt;span &gt;&lt;a onclick="copyCnblogsCode(this)" href="http://www.cnblogs.com/cosiray/admin/javascript:void(0);"&gt;&lt;font color="#0066aa"&gt;复制代码&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;4、开放80端口：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;pre&gt;iptables -IINPUT -p tcp --dport &lt;span style="color: #800080"&gt;80&lt;/span&gt; -j ACCEPT&lt;/pre&gt;&lt;pre&gt;启动nginx&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;/opt/nginx/sbin/nginx&lt;/pre&gt;&#xD;
&lt;div &gt;&lt;span &gt;&lt;a onclick="copyCnblogsCode(this)" href="http://www.cnblogs.com/cosiray/admin/javascript:void(0);"&gt;&lt;font color="#0066aa"&gt;复制代码&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;在浏览器上输入访问地址 http://192.168.1.1(根据个人本机地址页定)，正常会看到默认nginx页面&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;三、安装编译Mono&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1、安装libgdiplus:&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;pre&gt;cd /down&lt;br /&gt;&lt;br /&gt;tar -jxvf libgdiplus-&lt;span style="color: #800080"&gt;2.10&lt;/span&gt;.tar.bz2&lt;br /&gt;cd libgdiplus-&lt;span style="color: #800080"&gt;2.10&lt;/span&gt;&lt;br /&gt;./configure --prefix=/opt/mono &lt;br /&gt;make &amp;amp;&amp;amp; make install&lt;br /&gt;echo &lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;/opt/mono/lib&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt; &amp;gt; /etc/ld.so.conf.d/mono.conf&lt;br /&gt;ldconfig &lt;/pre&gt;&#xD;
&lt;div &gt;&lt;span &gt;&lt;a onclick="copyCnblogsCode(this)" href="http://www.cnblogs.com/cosiray/admin/javascript:void(0);"&gt;&lt;font color="#0066aa"&gt;复制代码&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;2、安装Mono:&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;pre&gt;tar &amp;#8211;jxvf mono-&lt;span style="color: #800080"&gt;2.10&lt;/span&gt;.&lt;span style="color: #800080"&gt;7&lt;/span&gt;.tar.bz2&lt;br /&gt;cd mono-&lt;span style="color: #800080"&gt;2.10&lt;/span&gt;.&lt;span style="color: #800080"&gt;7&lt;/span&gt;&lt;br /&gt;./configure --prefix=/opt/mono&lt;br /&gt;make &amp;amp;&amp;amp; make install //此处时间较长&lt;br /&gt;&lt;br /&gt;echo export PKG_CONFIG_PATH=/opt/mono/lib/pkgconfig:$PKG_CONFIG_PATH&amp;gt;&amp;gt;~/.bash_profile&lt;br /&gt;echo export LD_LIBRARY_PATH=/opt/mono/lib:$LD_LIBRARY_PATH&amp;gt;&amp;gt;~/.bash_profile&lt;br /&gt;echo export PATH=/opt/mono/bin:$PATH&amp;gt;&amp;gt;~/.bash_profile&lt;br /&gt;source ~/.bash_profile&lt;/pre&gt;&#xD;
&lt;div &gt;&lt;span &gt;&lt;a onclick="copyCnblogsCode(this)" href="http://www.cnblogs.com/cosiray/admin/javascript:void(0);"&gt;&lt;font color="#0066aa"&gt;复制代码&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;输入 mono -V 如有mono版本信息,则安装成功.&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;3、安装XSP:&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;pre&gt;cd /down&lt;br /&gt;tar &amp;#8211;jxvf xsp-&lt;span style="color: #800080"&gt;2.10&lt;/span&gt;.&lt;span style="color: #800080"&gt;2&lt;/span&gt;.tar.bz2&lt;br /&gt;./configure --prefix=/opt/mono&lt;br /&gt;make &amp;amp;&amp;amp; make install&lt;/pre&gt;&#xD;
&lt;div &gt;&lt;span &gt;&lt;a onclick="copyCnblogsCode(this)" href="http://www.cnblogs.com/cosiray/admin/javascript:void(0);"&gt;&lt;font color="#0066aa"&gt;复制代码&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;四、配置Nginx&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;pre&gt;vi /opt/nginx/conf/nginx.conf&lt;/pre&gt;&lt;/div&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;pre&gt;server {&lt;br /&gt;         listen   &lt;span style="color: #800080"&gt;80&lt;/span&gt;;&lt;br /&gt;         server_name  localhost;&lt;br /&gt;         location / {&lt;br /&gt;                 root /data0/web;&lt;br /&gt;                 index index.html index.htm;&lt;br /&gt;                 fastcgi_index Default.aspx;&lt;br /&gt;                 fastcgi_pass &lt;span style="color: #800080"&gt;127.0&lt;/span&gt;.&lt;span style="color: #800080"&gt;0.1&lt;/span&gt;:&lt;span style="color: #800080"&gt;9000&lt;/span&gt;;&lt;br /&gt;                 include fastcgi_params;&lt;br /&gt;         }&lt;br /&gt; }&lt;/pre&gt;&#xD;
&lt;div &gt;&lt;span &gt;&lt;a onclick="copyCnblogsCode(this)" href="http://www.cnblogs.com/cosiray/admin/javascript:void(0);"&gt;&lt;font color="#0066aa"&gt;复制代码&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;五、配置fastcgi_params增加下面两行：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;pre&gt;vi /opt/nginx/conf/fastcgi_params&lt;/pre&gt;&lt;pre&gt;fastcgi_param  PATH_INFO          &lt;span style="color: #800000"&gt;""&lt;/span&gt;;&lt;br /&gt;fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;&lt;/pre&gt;&#xD;
&lt;div &gt;&lt;span &gt;&lt;a onclick="copyCnblogsCode(this)" href="http://www.cnblogs.com/cosiray/admin/javascript:void(0);"&gt;&lt;font color="#0066aa"&gt;复制代码&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;六、启动：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1、重启nginx:&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;pre&gt;/opt/nginx/sbin/nginx -s reload&lt;/pre&gt;&lt;/div&gt;&#xD;
&lt;p&gt;2、启动 fastcgi_mono服务器&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;pre&gt;fastcgi-mono-server2 /applications=/:/data0/web /socket=tcp:&lt;span style="color: #800080"&gt;127.0&lt;/span&gt;.&lt;span style="color: #800080"&gt;0.1&lt;/span&gt;:&lt;span style="color: #800080"&gt;9000 &amp;amp;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;七、测试：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;新建一个asp.net web项目上传至 /data0/web目录下，测试运行。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cosiray/aggbug/2290906.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cosiray/archive/2011/12/17/2290906.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cosiray/archive/2011/12/16/2290402.html</id><title type="text">CentOS Apache+Tomcat 整合配置（两种办法）</title><summary type="text">整合篇 方法一 #wgethttp://archive.apache.org/dist/t ... s-1.2.30-src.tar.gz #tar zxvf tomcat-* #cd tomcat-*/native #./configure --with-apxs=/usr/local/apache/bin/apxs #make &amp;amp;&amp;amp; make install 到apache的modules下面看看有没有mod_jk.so模块 配置apache支持jk模块 #vim /usr/local/apache/conf/httpd.conf 添加 index.jsp Director</summary><published>2011-12-16T08:39:00Z</published><updated>2011-12-16T08:39:00Z</updated><author><name>酷赛瑞</name><uri>http://www.cnblogs.com/cosiray/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cosiray/archive/2011/12/16/2290402.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cosiray/archive/2011/12/16/2290402.html"/><content type="html">&lt;div&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;整合篇 方法一&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;#wget&lt;/span&gt;&amp;nbsp;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;a href="http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/source/tomcat-connectors-1.2.30-src.tar.gz" target="_blank" style="margin: 0px; padding: 0px; word-wrap: break-word; color: #336699; text-decoration: underline;"&gt;http://archive.apache.org/dist/t ... s-1.2.30-src.tar.gz&lt;/a&gt;&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;#tar zxvf tomcat-*&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;#cd tomcat-*/native&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;#./configure --with-apxs=/usr/local/apache/bin/apxs&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;#make &amp;amp;&amp;amp; make install&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;到apache的modules下面看看有没有mod_jk.so模块&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt; &lt;p style="margin: 0px; padding: 0px; word-wrap: break-word; border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;" align="left"&gt;配置apache支持jk模块&lt;/p&gt; &lt;p style="margin: 0px; padding: 0px; word-wrap: break-word; border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;" align="left"&gt;#vim /usr/local/apache/conf/httpd.conf&lt;/p&gt; &lt;p style="margin: 0px; padding: 0px; word-wrap: break-word; border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;" align="left"&gt;添加 index.jsp&amp;nbsp; &amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px; padding: 0px; word-wrap: break-word; border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;" align="left"&gt;DirectoryIndex index.jsp index.html&lt;/p&gt; &lt;p style="margin: 0px; padding: 0px; word-wrap: break-word; border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;" align="left"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; LoadModule&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;jk_module&amp;nbsp; &amp;nbsp; modules/mod_jk.so&amp;#8230;&lt;/p&gt; &lt;p style="margin: 0px; padding: 0px; word-wrap: break-word; border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;" align="left"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; Include conf/extra/mod_jk.conf&lt;/p&gt; &lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;#vim /usr/local/apache/conf/extra/mod_jk.conf&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkWorkersFile conf/extra/workers.properties&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkLogFile&amp;nbsp; &amp;nbsp;logs/mod_jk.log&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkShmFile&amp;nbsp; &amp;nbsp;logs/jk-runtime-status&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkLogLevel info&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkRequestLogFormat "%w %V %T"&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;#Sample JkMounts.&amp;nbsp; &amp;nbsp;Replace these with the paths you would&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;#like to mount from your JSP server.&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;#syntax: JkMount ${URL_DIR}/*.jsp worker_name&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkMount&amp;nbsp; &amp;nbsp;/images/avatar/*&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;worker1&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkMount&amp;nbsp; &amp;nbsp;/*.jsp worker1&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkMount /*.page worker1&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkMount /*.cic worker1&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkMount /func/* worker1&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkMount&amp;nbsp; &amp;nbsp;/assets/*&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; worker1&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkMount&amp;nbsp; &amp;nbsp;/remote/*&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; worker1&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkMount&amp;nbsp; &amp;nbsp;/services/*&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;worker1&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkMount&amp;nbsp; &amp;nbsp;/homebase/*&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;worker1&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkMount /skin/*&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;worker1&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkMount /error/*&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;worker1&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkMount /lib/*&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; worker1&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkMount /protected/*&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; worker1&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkMount /rounded/*&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; worker1&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkMount /FormOverLogin*&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; worker1&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkMount /fckeditor/editor/filemanager/connectors/*&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; worker1&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;JkMount /upload/image/*&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; worker1&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;#vim /usr/local/apache/conf/extra/workers.properties&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;worker.list=worker1&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;worker.worker1.port=8009&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;worker.worker1.host=localhost&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;worker.worker1.type=ajp13&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;worker.woker1.lbfactor=1&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;修改tomcat跟apache知道让web指向同一个目录&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;#vim /usr/src/tomcat/conf/server.xml&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;Host name="localhost"&amp;nbsp; &amp;nbsp;appBase="webapps"&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; unpackWARs="true" autoDeploy="true"&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; xmlValidation="false" xmlNamespaceAware="false"&amp;gt;&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;Context&amp;nbsp; &amp;nbsp; path="/"&amp;nbsp; &amp;nbsp; docBase="/usr/local/apache/htdocs"&amp;nbsp; &amp;nbsp; debug="0"&amp;nbsp; &amp;nbsp;workDir="/tmp"&amp;nbsp; &amp;nbsp; reloadable="false"/&amp;gt;&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;#/usr/local/apache/bin/apachectl restart&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;# /usr/local/tomcat/bin/shutdown.sh&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;#/usr/local/tomcat/bin/startup.sh&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;测试页面&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;#vim /usr/local/apache/htdocs/index.jsp&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;out.print("jsp页面测试");&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;%&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;访问 localhost&lt;/span&gt;&amp;nbsp;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;完毕!&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;整合篇，方法二。&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;在 /usr/local/apache/conf/httpd.conf&amp;nbsp;&amp;nbsp;末尾加入 ：&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &amp;lt;Proxy balancer://localCluster&amp;gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;BalancerMember ajp://localhost:8009&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &amp;lt;/Proxy&amp;gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; RewriteEngine On&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; ProxyPreserveHost On&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; RewriteRule ^/$ balancer://localCluster/ [P,L,NC]&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; RewriteRule ^/(.*)$ balancer://localCluster/$1 [P,L,NC]&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;修改tomcat跟apache知道让web指向同一个目录&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;#vim /usr/local/tomcat/conf/server.xml&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;Host name="localhost"&amp;nbsp; &amp;nbsp;appBase="/usr/local/apache/htdocs"&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; unpackWARs="true" autoDeploy="true"&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; xmlValidation="false" xmlNamespaceAware="false"&amp;gt;&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;Context&amp;nbsp; &amp;nbsp; path="/"&amp;nbsp; &amp;nbsp; docBase="."&amp;nbsp; &amp;nbsp; debug="0"&amp;nbsp; &amp;nbsp;workDir="/tmp"&amp;nbsp; &amp;nbsp; reloadable="false"/&amp;gt;&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;新建测试页&lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &lt;/span&gt;&lt;span style="border-collapse: collapse; color: #444444; font-family: Tahoma,Helvetica,SimSun,sans-serif,Hei; font-size: 14px; line-height: 21px;"&gt;vi&amp;nbsp;&amp;nbsp;/usr/local/apache/htdocs/index.jsp&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &amp;lt;html&amp;gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &amp;lt;body&amp;gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &amp;lt;h1&amp;gt;JSP Test Page&amp;lt;/h1&amp;gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &amp;lt;%=new java.util.Date()&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; %&amp;gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &amp;lt;/body&amp;gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; &amp;lt;/html&amp;gt;&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; 重启apache和tomcat，&lt;br style="margin: 0px; padding: 0px; word-wrap: break-word;" /&gt; 然后直接访问&amp;nbsp;&lt;a href="http://localhost/" target="_blank" style="margin: 0px; padding: 0px; word-wrap: break-word; color: #336699; text-decoration: underline;"&gt;http://localhost&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/cosiray/aggbug/2290402.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cosiray/archive/2011/12/16/2290402.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cosiray/archive/2011/12/16/2290398.html</id><title type="text">卸载CentOS 5.4自带的OpenJDK，配置新的Java环境</title><summary type="text">本文CentOS版本为5.4 final，使用图形界面与命令结合的操作方式 由于CentOS 5.4在默认情况下，会安装OpenOffice之类的软件，而这些软件需要Java支持，因此系统会默认安装一个JDK环境，如果需要使用特定的Java环境，最好将这些默认安装的JDK卸载或者彻底删除。 在安装完成CentOS 5.4之后，直接在终端中输入“java -version”，系统会显示当前的jdk版本号“java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5”，可以看到jdk使用的是openjdk1.6版本的。 如果此时，直接在centOS的“应用程序--添加/删除软件--</summary><published>2011-12-16T08:38:00Z</published><updated>2011-12-16T08:38:00Z</updated><author><name>酷赛瑞</name><uri>http://www.cnblogs.com/cosiray/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cosiray/archive/2011/12/16/2290398.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cosiray/archive/2011/12/16/2290398.html"/><content type="html">&lt;div&gt;&lt;p&gt;本文CentOS版本为5.4 final，使用图形界面与命令结合的操作方式&lt;/p&gt; &lt;p&gt;由于CentOS 5.4在默认情况下，会安装OpenOffice之类的软件，而这些软件需要Java支持，因此系统会默认安装一个JDK环境，如果需要使用特定的Java环境，最好将这些默认安装的JDK卸载或者彻底删除。&lt;/p&gt; &lt;p&gt;在安装完成CentOS 5.4之后，直接在终端中输入&amp;#8220;java -version&amp;#8221;，系统会显示当前的jdk版本号&amp;#8220;java-&lt;span&gt;1.6.0-openjdk-1.6.0.0-1.7.b09.el5&lt;/span&gt;&amp;#8221;，可以看到jdk使用的是openjdk1.6版本的。&lt;/p&gt; &lt;p&gt;如果此时，直接在centOS的&amp;#8220;应用程序--添加/删除软件--基本系统--java&amp;#8221;中，删除java，与之相关的openoffice等软件，也会自动随之删除，因此，在进行原有的jdk删除之前，最好先安装配置好新的JDK及相应的环境。&lt;/p&gt; &lt;p&gt;首先，在Sun（现在属于Oracle）的网站下载相应的JDK版本，这里使用的是目前最新的JDK6.0_update21版本，在下载时，建议 下载-rpm的安装文件，将下载完成的文件放在指定位置，这里直接放在/usr下。默认下载的JDK文件名较长，可以根据需要修改文件名，这里修改为 &amp;#8220;jdk-6u21.bin&amp;#8221;。&lt;/p&gt; &lt;p&gt;其次，在jdk所在目录中打开终端，给当前用户赋予执行权限，&amp;#8220;chmod +x jdk-6u21.bin&amp;#8221;，或者直接在图形界面下右击文件，在弹出菜单中依次选择&amp;#8220;属性&amp;#8221;--&amp;#8220;权限&amp;#8221;，选择&amp;#8220;以程序执行文件&amp;#8221;复选框，&amp;#8220;确定&amp;#8221;按钮，完成执行权限的赋予。&lt;/p&gt; &lt;p&gt;然后，在jdk所在目录中打开终端，在终端中输入&amp;#8220;./jdk-6u21.bin&amp;#8221;执行解压及安装操作。此时，在&amp;#8220;/usr&amp;#8221;目录下，新增一个&amp;#8220;/java&amp;#8221;目录，另外，会有一些以&amp;#8220;sun&amp;#8221;开头的rpm文件，这些文件不用理会。&lt;/p&gt; &lt;p&gt;接下来，设置Java的环境变量。&lt;/p&gt; &lt;ul&gt;&lt;li&gt;用文本编辑器打开/etc/profile（说明：根目录下的/etc/目录，其中的profile文件）&lt;/li&gt;&lt;li&gt;在profile文件末尾加入如下字符串&lt;br /&gt;&amp;nbsp;&amp;nbsp;JAVA_HOME=/usr/java/jdk1.6.0_21&lt;br /&gt;&amp;nbsp;&amp;nbsp;PATH=$JAVA_HOME/bin:$PATH&lt;br /&gt;&amp;nbsp;&amp;nbsp;CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar&lt;br /&gt;&amp;nbsp;&amp;nbsp;export JAVA_HOME&lt;br /&gt;&amp;nbsp;&amp;nbsp;export PATH&lt;br /&gt;&amp;nbsp;&amp;nbsp;export CLASSPATH&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;至此，新的JDK环境安装配置完成。&lt;/p&gt; &lt;p&gt;接下来，删除原有的jdk环境。&lt;/p&gt; &lt;p&gt;首先，在终端中输入&amp;#8220;&lt;span&gt;rpm&amp;nbsp;-qa|grep&amp;nbsp;gcj&lt;/span&gt;&amp;#8221;，查看gcj的版本号，在这里得到的结果是：&lt;/p&gt; &lt;p&gt;java-1.4.2-gcj-compat-1.4.2.0-40jpp.115&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; libgcj-4.1.2-48.el5&lt;/p&gt; &lt;p&gt;其次，卸载系统自带jdk。在终端中输入&amp;#8220;&lt;span&gt;yum&amp;nbsp;-y&amp;nbsp;remove&amp;nbsp;java&amp;nbsp;java-1.4.2-gcj-compat-1.4.2.0-40jpp.115&lt;/span&gt;&amp;#8221;，然后等待，等待系统卸载完自带的jdk。最终在终端中显示&amp;#8220;&lt;span style="font-family: Courier New;"&gt;Complete!&lt;/span&gt;&amp;#8221;，卸载完成。&lt;/p&gt; &lt;p&gt;至此，关于CentOS的JDK配置基本完成，重启系统。&lt;/p&gt; &lt;p&gt;在终端中输入&amp;#8220;java -version&amp;#8221;，系统显示：&lt;/p&gt; &lt;p&gt;java version "1.6.0_21"&lt;br /&gt;Java(TM) SE Runtime Environment (build 1.6.0_21-b06)&lt;br /&gt;Java HotSpot(TM) Client VM (build 17.0-b16, mixed mode, sharing)&lt;/p&gt; &lt;p&gt;JDK安装成功！&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/cosiray/aggbug/2290398.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cosiray/archive/2011/12/16/2290398.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cosiray/archive/2011/12/16/2290254.html</id><title type="text">【经验】CentOS 5.2 下用Yum安装Apache+PHP+MySQL环境</title><summary type="text">CentOS 5.2 下用Yum安装Apache+PHP+MySQL环境 Fedora 8下用Yum安装Apache+PHP+MySQL环境 fedora8 用yum来管理安装Apache+PHP+Mysql的基本安装。 1. 安装Apahce, PHP, Mysql, 以及php连接mysql库组件。 yum -y install httpd php mysql mysql-server php-mysql centos安装php插件就是yum install php-* yum install php-gd 安装图形支持 也可以通过光驱iso安装mount /dev/cdrom /mnt挂</summary><published>2011-12-16T07:17:00Z</published><updated>2011-12-16T07:17:00Z</updated><author><name>酷赛瑞</name><uri>http://www.cnblogs.com/cosiray/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cosiray/archive/2011/12/16/2290254.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cosiray/archive/2011/12/16/2290254.html"/><content type="html">&lt;div id="app-share-content"&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;CentOS 5.2 下用Yum安装Apache+PHP+MySQL环境 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;Fedora 8下用Yum安装Apache+PHP+MySQL环境 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;fedora8 用yum来管理安装Apache+PHP+Mysql的基本安装。 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;1. 安装Apahce, PHP, Mysql, 以及php连接mysql库组件。 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;yum -y install httpd php mysql mysql-server php-mysql &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;centos安装php插件就是yum install php-* &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;yum install php-gd 安装图形支持 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;也可以通过光驱iso安装&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;mount /dev/cdrom /mnt挂载光驱到mnt&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;rpm -ivh /mnt/centos/httpd ****.rpm 安装ISO里的包&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;测试环境&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;rpm -qa |grep mysql&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;rpm -qa |grep httpd&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;rpm -qa |grep php&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;2. 配置开机启动服务 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;/sbin/chkconfig httpd on&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [设置apache服务器httpd服务开机启动]&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;/sbin/chkconfig --add mysqld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [在服务清单中添加mysql服务]&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;/sbin/chkconfig mysqld on&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [设置mysql服务开机启动]&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;/sbin/service httpd start&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [启动httpd服务,与开机启动无关]&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;/sbin/service mysqld start&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [启动mysql服务,与开机无关]&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;3.设置mysql数据库root帐号密码。 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;mysqladmin -u root password 'newpassword'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [引号内填密码]&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;4. 让mysql数据库更安全 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;mysql -u root -p &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;mysql&amp;gt; DROP DATABASE test;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [删除test数据库]&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;mysql&amp;gt; DELETE FROM mysql.user WHERE user = '';&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [删除匿名帐户]&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;mysql&amp;gt; FLUSH PRIVILEGES;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [重载权限]&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;5. 按照以上的安装方式, 配置出来的默认站点目录为/var/www/html/ &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;新建一个php脚本: &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;6. 新建一个数据库，添加一个数据库用户，设置用户权限。写个php脚本测试一下数据库连接吧。 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;mysql&amp;gt; CREATE DATABASE my_db; &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;mysql&amp;gt; GRANT ALL PRIVILEGES ON my_db.* TO 'user'@'localhost' IDENTIFIED BY 'password';&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;//安装apache扩展 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;yum -y install httpd-manual mod_ssl mod_perl mod_auth_mysql &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;//安装php的扩展 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;yum install php-gd &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;yum -y install php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;//安装mysql扩展 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;yum -y install mysql-connector-odbc mysql-devel libdbi-dbd-mysql &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;[root@soft bin]# mysql &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;""mysql dead but subsys locked &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;解决办法如下: &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;[root@soft mysql-4.1.19]# rm -fr /var/lib/mysql/* &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;[root@soft mysql-4.1.19]# rm /var/lock/subsys/mysql &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;rm: remove regular empty file `/var/lock/subsys/mysqld'? yes &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;shell&amp;gt; killall mysqld &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;shell&amp;gt; service mysqld start &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;[root@soft mysql-4.1.19]# /etc/rc.d/init.d/mysqld status &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;mysqld (pid 5457) is running... &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;###数据库运行正常； &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;一、两个重要目录： &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;Apache有两个重要的目录：1、配置目录 /etc/httpd/conf；2、文档目录 /var/www： &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;二、两种配置模式： &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;Apache在Fedora下的两种配置方式：文本模式（终端命令行）和图形化配置。两者各有优势：图形化下配置，更容易上手，在文本模式下直接编辑httpd.conf文件，自由性更强些、更直接。&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;三、Apache服务的启动与关闭 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;Apache服务的停止、启动、关闭可以通过两种模式下进行操作：文本（终端）模式下和图形化界面。 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;四、终端下的操作 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;如果你想用Linux作为WWW服务器，我建议不要安装图形界面（即X window、KDE或GNOME桌面），很显然不安装这些程序，会显著提高系统的性能，易操作性和美丽的界面是要付出代价。我认为Linux的精髓在于命令行的丰富。Linux的命令可以完成所有任务。&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;1、Apache的启动、重启、停止服务： &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;cd /etc/init.d命令切换到 /etc/init.d目录，运行如下命令： &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;./httpd start //启动Apache服务 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;./httpd restart //重新启动Apache服务 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;./httpd stop //停止Apache服务 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;开机自动启动Apache服务 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;cd /sbin命令切换到/sbin目录,运行chkconfig命令，参数：./chkconfig --level 5 httpd on&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;./chkconfig --list可以检查一下httpd开机是否自动启动，如果5:启动，表示开机自动启动。 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;2、配置 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;cd /etc/httpd/conf命令切换到目录/etc/httpd/conf，用vi编辑器打开、编辑httpd.conf配置，在配置之前，为了防止配置出错，先备份&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;&amp;lt;?php &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;phpinfo(); &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;?&amp;gt; &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;保存为info.php放到网站目录 &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;然后输入&lt;a&gt;&lt;font color="#d2eebe"&gt;http://ip/info.php&lt;/font&gt;&lt;/a&gt;&lt;wbr&gt;&lt;/wbr&gt;看看测试环境&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;2安装Apache+php+Mysql#&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;a.用yum安装前.先是替换为中国CentOS镜像服务器!中国官方镜像网站: &lt;a&gt;&lt;font color="#d2eebe"&gt;http://centos.ustc.edu.cn/&lt;/font&gt;&lt;/a&gt;&lt;wbr&gt;&lt;/wbr&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;安装后请按照以下步骤修改CenOS-Base.repo,以后就可以方便的用yum安装软件了&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;cd /etc/yum.repos.d&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;mv CentOS-Base.repo CentOS-Base.repo.save&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;wget http://centos.ustc.edu.cn/CentOS-Base.repo.5&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;mv CentOS-Base.repo.5 CentOS-Base.repo&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;b、更新系统内核到最新. yum -y update&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;c、安装Apahce, PHP, Mysql, 以及php连接mysql库组件&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;yum -y install httpd php mysql mysql-server php-mysql&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;d、安装mysql扩展&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;yum -y install mysql-connector-odbc mysql-devel libdbi-dbd-mysql&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;或一次性粘贴安装&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;yum -y install httpd php mysql mysql-server php-mysql httpd-manual mod_ssl mod_perl mod_auth_mysql php-mcrypt php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc mysql-connector-odbc mysql-devel libdbi-dbd-mysql&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;设置mysql数据库root帐号密码&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;mysqladmin -u root password &amp;#8216;newpassword&amp;#8217; &lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;[引号内填密码]&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;f、 让mysql数据库更安全&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;mysql -u root -p [此时会要求你输入刚刚设置的密码，输入后回车即可&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;mysql&amp;gt; DROP DATABASE test; [删除test数据库]&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;mysql&amp;gt; DELETE FROM mysql.user WHERE user = &amp;#8221;; [删除匿名帐户]&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;mysql&amp;gt; FLUSH PRIVILEGES; [重载权限]&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;按照以上的安装方式, 配置出来的默认站点目录为/var/www/html/新建一个php脚本&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;&amp;lt;?php&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;phpinfo();&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;?&amp;gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;配置防火墙4&lt;wbr&gt;&lt;/wbr&gt;添加允许访问HTTP、FTP端口&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;iptables -I RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;iptables -I RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;重启iptables: service iptables restart&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;安装phpMyAdmin)&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;进入phpMyAdmin官方下载(不要最新版本，下phpMyAdmin 2.11.9.5就行了,3.1以上需php 5.2以上)，上传到你的网站目录下，然后进行配置。只需几步即可搞定。&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;I.&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;config.sample.inc.php更名为config.inc.php;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;II.&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;打开config.inc.php文件，进行以下修改:&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;// $cfg['Servers'][$i]['controluser'] = &amp;#8216;pma&amp;#8217;;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;// $cfg['Servers'][$i]['controlpass'] = &amp;#8216;pmapass&amp;#8217;;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;// $cfg['Servers'][$i]['pmadb'] = &amp;#8216;phpmyadmin&amp;#8217;;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;// $cfg['Servers'][$i]['bookmarktable'] = &amp;#8216;pma_bookmark&amp;#8217;;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;// $cfg['Servers'][$i]['relation'] = &amp;#8216;pma_relation&amp;#8217;;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;// $cfg['Servers'][$i]['table_info'] = &amp;#8216;pma_table_info&amp;#8217;;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;// $cfg['Servers'][$i]['table_coords'] = &amp;#8216;pma_table_coords&amp;#8217;;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;// $cfg['Servers'][$i]['pdf_pages'] = &amp;#8216;pma_pdf_pages&amp;#8217;;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;// $cfg['Servers'][$i]['column_info'] = &amp;#8216;pma_column_info&amp;#8217;;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;// $cfg['Servers'][$i]['history'] = &amp;#8216;pma_history&amp;#8217;;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;// $cfg['Servers'][$i]['designer_coords'] = &amp;#8216;pma_designer_coords&amp;#8217;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;去掉每行前面的//;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;II.&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;$cfg['blowfish_secret'] = &amp;#8221;; |修改为| $cfg['blowfish_secret'] = &amp;#8216;http&amp;#8217;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;V.&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;$cfg['Servers'][$i]['controluser'] = &amp;#8216;pma&amp;#8217;; |把&amp;#8217;pma&amp;#8217;修改为你的帐号|$cfg['Servers'][$i]['controlpass'] = &amp;#8216;pmapass&amp;#8217;; |把&amp;#8217;pmapass设置为你的mysql登录密码|&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;V.&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;V. $cfg['blowfish_secret'] = &amp;#8221;; | 添加短语密码例如：$cfg['blowfish_secret'] = &amp;#8216;on&lt;wbr&gt;&lt;/wbr&gt;ohot&amp;#8217;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;6、//安装php的扩展&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;yum -y install php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;7、//安装apache扩展&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;yum -y install httpd-manual mod_ssl mod_perl mod_auth_mysql&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/cosiray/aggbug/2290254.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cosiray/archive/2011/12/16/2290254.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
