安装 XAMPP 进行方便集成开发

原文转自:http://www.ibm.com/developerworks/cn/linux/l-xampp/

Nils-Erik Frantzell ([email protected])计算机科学系,UC Santa Cruz

2004 年 11 月 30 日

诸如 Apache Friends 中的 XAMPP 之类的开放源码软件简化了开源项目的开发,方式是通过简化在稳定和标准化环境中应用程序的编写和分发。传统情况下,AMPP -- Apache、MySQL、PHP 和 Perl -- 都是以单独产品的形式进行安装和配置。将它们集成到中间件软件中的承诺使得开源项目的开发相对于 J2EE™ 应用程序的开发来说更具竞争力,至少对于底层的应用程序来说是如此。在本文中,您将学习如何在 Mandrake Linux™ 10.0 上安装、配置和备份 XAMPP,以及如何配置和管理 XAMPP,以及如何在 XAMPP 环境中安装自己的应用程序。

J2EE(Java 2 Enterprise Edition™)的出现极大地改变了软件领域,它提供了一个集成的中间件软件,可以极大地简化编写和部署 Java™ 应用程序的任务。一时之间,开源社区因为缺少类似的集成架构而被远远地抛到了后面。

最近以来,随着在 Apache Friends 中出现 XAMPP 这种集成的开放源码软件,这种情况开始逐渐地发生变化。虽然这些工具与 J2EE 相比还非常简单,甚至是微不足道,但是不管怎样,这对于通往全面的系统集成之路来说,都迈出了重要一步。 PHP 5.0 (它使得 PHP 成为完全面向对象的)是这种趋势正在加速发展的一个良好的风向标。

本文的重点是介绍集成的开放源码软件之一:Apache Friends 中的 XAMPP。

XAMPP 简介

XAMPP 是一个功能全面的 AMPP (Apache、MySQL、PHP、Perl)软件包,这是 Linux 平台上可以使用的几种非商业 AMPP 中间件之一。采用这种紧密的集成,XAMPP 可以运行任何程序:从个人主页到功能全面的产品站点(虽然这仅仅用于开发目的;出于安全考虑,XAMPP 还不适于用在产品服务器上)。

XAMPP 实际上在以下几个方面大放光彩:

  • 易于安装和设置。
  • 包含很多有用的软件包,可以简化诸如生成流量报告和加速 PHP 内容之类的任务。
  • 已经在 SUSE、Red Hat、Mandrake、Debian Linux 发行版以及 Windows® 和 Solaris 上进行了完整的测试。

对于本文来说,我们将在 Mandrake Linux 10.0 上安装 XAMPP。现在我们首先看看 XAMPP 中提供的缺省软件包。

基本的软件包

基本的软件包包括系统、编程和服务器软件:

  • Apache,著名的 Web 服务器
  • MySQL,一种杰出、免费的开源数据库
  • PHP,一种编程语言(在撰写本文时版本为 4.3.8 和 5.0.1)
  • Perl,一种编程语言
  • ProFTPD,一个 FTP 服务器
  • OpenSSL,可以支持安全套接字层

图形软件包

XAMPP 包括以下与图形有关的软件包:

  • GD,“Graphics Draw”库
  • libpng,官方的 PNG 参考实现库
  • libjpeg,官方的 JPEG 参考实现库
  • ncurses,字符图形库

数据库软件包

如果没有以下的数据库软件包,怎么还能叫集成软件呢?

  • gdbm,标准的 UNIX® dbm 库的 GNU 实现
  • SQLite,一个相当小的、无需任何配置的 SQL 数据库引擎
  • FreeTDS,一个数据库,让 UNIX 和 Linux 程序可以访问 Microsoft® SQL 和 Sybase 数据库

XML 软件包

为了开发 XML 程序,XAMPP 应该包含以下软件包:

  • expat,一个 XML 解析器库
  • Salbotron,一个 XML 工具包
  • libxml,一个 XML C 解析器和 GNOME 工具包

PHP 软件包

为了开发 PHP 程序,XAMPP 应该包括以下软件包:

  • PEAR,PHP 库
  • 一个 pdf 类,可以使用 PHP 生成动态的 PDF 文档
  • TURCK MMCache,一个 PHP 性能增强器

其他软件包

最后,XAMPP 中包含了以下软件包来展示自己的强大功能:

  • zlib,一个压缩库
  • mod_perl,在 Apache 中嵌入了一个永久的 Perl 解释器
  • gettext,一个工具集,可以帮助 GNU 软件包生成多语言的消息
  • mcrypt,一个加密程序
  • Ming,一个 Flash (SWF) 输出库
  • Freetype2,一个软件前端引擎
  • IMAP C-Client,一个邮件编程 API

现在让我们讨论一下安装 XAMPP 的问题。

 

点击查看原始尺寸


回页首


安装并作为守护进程运行

要安装 XAMPP,请从 Apache Friends Web 站点上下载最新的二进制文件(请参阅 参考资料 中的链接)。使用下面的命令将其解开到 /opt 目录中:

tar xvfz xampp-linux-1.4.7.tar.gz -C /opt

就是这样!XAMPP 现在已经被安装到 /opt/lampp 目录中了。之前安装在 /opt 目录中的内容都已经被覆盖了。如果您正在运行一个旧版本的 XAMPP,并且不想再次下载整个软件包,Apache Friends 中还提供了一个升级包来下载需要的软件包。

现在所有的软件都已经安装好了,让我们启动新的守护进程。将当前的工作目录切换到 /opt/lampp ( cd /opt/lampp)并输入下面的命令:

./lampp start

您应该会看到下面的结果:

Starting XAMPP for Linux 1.4.7...
XAMPP: Starting Apache with SSL (and PHP5)...
XAMPP: Starting MySQL...
XAMPP: Starting ProFTPD...
XAMPP for Linux started.

XAMPP 现在就启动并运行了。最好的验证方法是打开一个浏览器并在地址栏中输入 localhost,并按回车键。此时浏览器会被重定向到 XAMPP 的 welcome 页面。


图 1. XAMPP welcome 页面
点击查看原始尺寸

点击左边导航栏中的 Status 链接,就可以看到必需的服务已经正确启动了。如果所有的服务都运行正常,您就会看到下面的页面:


图 2. Service status 页面
点击查看原始尺寸

恭喜!您现在已经安装和设置好了一个完整的 AMPP 开发环境了。现在让我们安装一个简单的应用程序来展示一下如何使用这种环境。

 

点击查看原始尺寸


回页首


安装一个简单的应用程序

要利用 XAMPP 的基本特性,您需要一个简单的应用程序。最好的应用程序是一个在后端使用数据库的程序;并使用一个相当简单的数据库,其中包含了一个精心设计的表。

测试数据库包含一个只有一列的表。让我们按照测试程序的(计算机)传统,设计在我们的表中存放一条记录 “Hello World!”。我们将使用一个 Perl 和 一个 PHP 脚本来访问这个数据库。这两个脚本都可以访问这个数据库,从中检索这行记录,并将其输出到屏幕上。

工具

我们的数据库将使用 phpMyAdmin 来创建和管理,这是使用 PHP 编写的一个杰出的基于 Web 的 MySQL 管理工具。它有一个非常友好的用户界面,可以允许您处理各种复杂的任务,包括创建/删除/修改数据库和表,以及导出数据、管理关键字和处理 SQL 文件。phpMyAdmin 是一个杰出的工具,因为:

  • 它可以帮助初学者熟悉 MySQL,而不用使用命令行接口来处理这些任务。
  • 它允许高级用户更快更容易地执行简单的任务和例行的任务。
  • 当您希望为某些用户授权访问数据库而不想让他们完全访问 shell 时,对于这种情况非常有用。

创建数据库

要在 phpMyAdmin 中创建一个数据库,请遵循下面的步骤:

  1. 转换到 XAMPP 的 start 页面 (localhost)。
  2. 在左边导航栏的 Tools 下面选择 phpMyAdmin
  3. 在 phpMyAdmin 主页的 Create New Database 域中,输入 hello_world,并点击 Create

现在您必须在数据库中创建一个表,并指定该表中应该包含哪些字段(字段与列类似)。让我们将自己的表称为“hello_table”,并让它只包含一个字段,其中保存记录“Hello world!”。在 Name 文本域中输入 hello_table,并在 Fields 文本域中输入 1。输入完之后,点击 Go

现在应该执行创建数据库的最后一个步骤了:为列选择一个名字和一个数据类型定义。让我们选中“hello”并将其命名为“hello_column”;并在 Field 文本域中输入 hello_column

由于我们要在列中存储字符串“Hello World!”,因此其类型必须是 char,长度为 12 (字符串 "Hello World!" 的长度)。缺省类型 varchar 就足够了。在 Type 后面的 Length/Values 文本域中,输入 12,表示最大长度是 12 个字符。不用关心该页面中其他域的设置,继续点击 Save

如果一切正常,您应该会看到下面的界面:


图 3. Hello World 数据库摘要
点击查看原始尺寸

现在让我们插入记录 "Hello World!"。点击 Insert 标签,并在 Value 文本域中输入 "Hello World!"。 Function 下拉列表在这个例子中可以保留不变。点击 Go,将 "Hello World!" 记录插入数据库中。

要确认记录已经成功插入数据库,请点击 Browse 标签。现在会显示 "hello world"。

脚本

现在后端软件已经启动并运行了,应该处理脚本部分了。我们将使用两个脚本,一个使用 Perl 编写,另外一个使用 PHP 编写。对于每个脚本来说,惟一的要求就是一个数据库连接、数据库访问权限以及在屏幕上输出检索到的行。


清单 1. 简单的数据库连接,以及在 PHP 中使用 PEAR::DB 进行检索

				

require_once 'DB.php'; // must be included in any script that uses PEAR::DB
// it is a huge security risk to store your database connection information
// in the same file as your code. We have done it here solely for the purpose
// of this example. Please store your database connection information in another
// file that is not in your document root directory and adequately protected.
// database connection information
$db_host = "localhost"; // hostname of the database server
$db_user = "root"; // database user's username
$db_pass = ""; // database user's password, nothing by default
$db_name = "hello_world"; // the name of the database to connect to
$db_type = "mysql"; // the type of database server.
// your data source name string. This contains the connection
// information for your database.
$dsn = "$db_type://$db_user:$db_pass@$db_host/$db_name";
// creates a database connection object or a database error
// object based on the success of the database connection.
$db = DB::connect($dsn, TRUE);
// if an error was encountered, the script exits with an error message
if (DB::isError($db)) {
die($db->getMessage());
}
// SQL query that you wish to use to query the database
$sql = "SELECT * FROM hello_table";
// query the database, store result in $result
$result = $db->query($sql);
// exits with an error message if the query was unsuccessful
if(DB::isError($result)){
die($result->getMessage());
}
// fetch rows from the database until no more rows exist.
// output the "hello_column" field of each row to the screen.
// once no more rows exist, exit with an error message.
while($row = $result->fetchRow(DB_FETCHMODE_OBJECT)){
if(DB::isError($row)){
die($row->getMessage());
}
print("<H1>$row->hello_column</H1>");
$result->free();
}
$db->disconnect(); //disconnect from the database

 

这两个脚本都会连接到数据库上,并检索一行数据,并将该行输出到屏幕上。PHP 的数据库访问是使用 PEAR::DB 完成的,这是一个方便的数据库抽象层,不管数据库是如何实现的,它都可以使用相同的数据库访问代码。不幸的是,XAMPP 中并没有包含一个用于 Perl 的数据库抽象层。

存放脚本

因此,现在我们已经做好了所需的一切。数据库已经启动并运行了,并且已经有了两个测试用的脚本。现在需要做的工作是将这些脚本放到正确的地方。让我们快速了解一下 XAMPP 是如何存放在硬盘上的,如 清单 2 所示。

我们现在感兴趣的目录是 /opt/lampp/htdocs/,也就是 Apache 的 Documents 目录。在 Web 站点的根目录中显示的任何 Web 页面和相关文件都位于这个目录中。由于我们现在能够看到 XAMPP 的 welcome 页面,因此这个目录中已经存在一些文件了。现在让我们快速了解一下这个目录的内容:(输入 ls /opt/lampp/htdocs):

drwxr-xr-x 2 root root 4096 Jan 24 2003 apache
-rwxr-xr-x 1 nobody root 163 Oct 31 2003 index.html
drwxr-xr-x 2 nobody root 4096 Sep 12 21:54 webalizer
drwxr-xr-x 5 root root 4096 Jun 15 06:24 xampp

正如您可以看到的一样,这个目录中早已存在一些文件了。让我们在这个目录中建立一个自己的目录 hello_world ( mkdir hello_world)来存放脚本。从现在开始,您就可以输入 localhost/hello_world 来访问 hello_world 目录中的所有文件了。现在,将这两个脚本保存到这个目录中。到此为止,所有一切都已经完成了!

测试应用程序

要测试这个应用程序,首先切换到浏览器中,输入 localhost/hello_world。您应该会看到下面的界面:


图 4. Hello World!
Service status 页面

恭喜!您已经设置好 XAMPP 上的一个应用程序了。

 

点击查看原始尺寸


回页首


增强安全性

XAMPP 的目标是一个开发环境。这种配置为程序员提供了一种对工具集没有任何限制的自由控制能力。作为自由的结果,缺省的 XAMPP 安装是非常不安全的。例如,有些操作几乎无需登录。

对于 0.9.5 以及更新版本的 XAMPP 来说,您可以运行下面的命令来增强安全性:

/opt/lampp/lampp security

此时会给出一些提示说明现有的不安全的地方,您可以选择是否修复这个问题。虽然这样可以使 XAMPP 安装更加安全,但是您仍然不应当在产品服务器中使用 XAMPP。清单 3 列出了安全性提示:


清单 3. XAMPP 中的安全性提示

				

XAMPP: Quick security check...
XAMPP: Your XAMPP pages are NOT secured by a password.
XAMPP: Do you want to set a password? [yes] yes
XAMPP: Password:
XAMPP: Password (again):
XAMPP: Password protection active. Please use 'lampp' as user name!
XAMPP: MySQL is accessable via network.
XAMPP: Normaly that's not recommended. Do you want me to turn it off? [yes] yes
XAMPP: Turned off.
XAMPP: Stopping MySQL...
XAMPP: Starting MySQL...
XAMPP: The MySQL/phpMyAdmin user pma has no password set!!!
XAMPP: Do you want to set a password? [yes] yes
XAMPP: Password:
XAMPP: Password (again):
XAMPP: Setting new MySQL pma password.
XAMPP: Setting phpMyAdmin's pma password to the new one.
XAMPP: MySQL has no root passwort set!!!
XAMPP: Do you want to set a password? [yes] yes
XAMPP: Write the password somewhere down to make sure you won't forget it!!!
XAMPP: Password:
XAMPP: Password (again):
XAMPP: Setting new MySQL root password.
XAMPP: Setting phpMyAdmin's root password to the new one.
XAMPP: The FTP password is still set to 'lampp'.
XAMPP: Do you want to change the password? [yes] yes
XAMPP: Password:
XAMPP: Password (again):
XAMPP: Reload ProFTPD...
XAMPP: Done.


点击查看原始尺寸


回页首


执行备份

因此,假设您的 XAMPP 安装已经启动并运行了几周了,并向其中输入了很多数据,那么您就应该防范出现硬盘崩溃的风险。您需要做哪些备份工作呢?

使用 XAMPP 非常简单。将工作目录切换到 /opt/lampp ( cd /opt/lampp) 中,并输入下面的命令:

./lampp backup

如果您已经设置了 MySQL 的 root 密码,那么在这个命令后面就要添加上 root 用户的密码。您应该会看到下面的内容:

Backing up databases...
Backing up configuration, log and htdocs files...
Calculating checksums...
Building final backup file...
Backup finished.
Take care of /opt/lampp/backup/xampp-backup-15-09-04.sh

要恢复以前的备份,请以 root 用户的身份运行下面的命令:

sh backupfilename

如果一切正常,您将看到下面的结果:

Checking integrity of files...
Restoring configuration, log and htdocs files...
Checking versions...
Installed: XAMPP 1.4.7
Backup from: XAMPP 1.4.7
Restoring MySQL databases...
Restoring MySQL user databases...
Backup complete. Have fun!
You may need to restart XAMPP to complete the restore.

重新启动 XAMPP ( cd /opt/lampp, ./lampp restart),恢复的数据应该可用了。

 

点击查看原始尺寸


回页首


结束语

虽然这种集成解决方案软件是否可以完全与 J2EE 竞争,尚需时日来进行验证,但是最近的发行版 PHP 5.0 (主要改进包括完全的面向对象的支持)与 MySQL 数据库的共同快速增长已经证明了它在开发人员之间越来越流行。这意味着像 XAMPP 这种开放源码中间件在低端软件市场上还是有一定的存活空间的。


参考资料

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文
  • Apache Friends 上下载 XAMPP,这是一个非盈利组织,目标是增强 Apache Web 服务器。该网站上有最新的 XAMPP 信息和发行版本。
  • PHP 简介 (developerWorks,2000 年 12 月) 可以引导您入门 PHP 脚本语言。当您阅读这篇文章时,只需在搜索域中输入“PHP”,即可查找 IBM 提供的许多丰富的 PHP 资源。
  • 更佳编程之路 系列文章 (developerWorks) 是一组优秀的系列文章,可让您更加深入地了解 Perl 语言。要想了解有关 Perl 的更多内容,请搜索 developerWorks 站点。
  • 将 PHP 应用程序连接到 Apache Derby (developerWorks,2004 年 9 月)和 使用 Apache Derby 开发 Perl 应用程序 (developerWorks,2004 年 10 月)这两篇文章是 PHP 和 Perl 开发人员必读的文章。
  • phpMyAdmin 项目 包含了很多有用的信息,并可以下载这个杰出的基于 Web 的 MySQL 管理工具。
  • Practical Unix & Internet Security (O'Reilly & Associates,1996) 是一本有关系统安全性各个方面的优秀参考书,内容涉及从用户管理到起草安全策略。
  • PHP.net 提供了一个在线的可搜索函数库,它对于查找有关 PHP 方法的详细信息和学习语言构造有很大的帮助。
  • The PHP Extension and Application Repository (PEAR) 提供了一些可以简化 PHP 编程的组件,包括非常流行的 PEAR::DB
  • 有关 MySQL 的帮助, MySQL reference manual 中包含了有关这个流行数据库各个方面的详细信息。
  • 请访问 Apache HTTP Server Project,可以找到有关 Web 的最流行 http 服务器的最新版本和信息。
  • developerWorks Linux 专区 中可以找到更多为 Linux 开发者准备的资源。
  • 从 developerWorks 的 Speed-start your Linux app 专区下载运行于 Linux 之上的 IBM 中间件产品的免费测试版本,其中包括 WebSphere® Studio Application Developer、WebSphere Application Server、DB2® Universal Database、Tivoli® Access Manager 和 Tivoli Directory Server,并可学习 how-to 文章和获得技术支持。
  • 通过参与 developerWorks blogs 来参与 developerWorks 社区的工作。
  • 在 Developer Bookstore 的 Linux 区域中购买有关 Linux 的打折书籍


关于作者

点击查看原始尺寸

Nils-Erik Frantzell 目前在位于圣克鲁斯的加州大学学习计算机科学。他的兴趣包括 Linux、Web 编程(尤其是 PHP)、网络、开源技术以及一些计算机硬件。他的业余时间用于饲养一些食肉性的鱼和欣赏电子音乐。您可以通过 [email protected] 与 Nils-Erik 联系。

你可能感兴趣的:(xampp)