Java Solaris 加入Sun中国技术社区 我的社区 注册说明

BigAdmin 系统管理门户网站
Feature Article
BigAdmin 专题文章:适用于 Solaris 10 操作系统和 Solaris Express 的 SAMP(Solaris、Apache 2、MySQL 5 和 PHP 5)设置 打印版打印版

适用于 Solaris 10 操作系统和 Solaris Express 的 SAMP(Solaris、Apache 2、MySQL 5 和 PHP 5)设置

Neal Pollack,2006 年 10 月

可以在 Internet 上找到许多说明如何将 Solaris 10 操作系统用于 SAMP 服务器(Solaris、Apache 2、MySQL 和 PHP)的文档和博客。但是,其中许多文章只适用于早期版本的软件包,或者不包括比较流行的 PHP 语言。还有一些文章缺少有助于您了解此过程的详细信息或示例。

在开始之前,应该明确 Solaris 10 操作系统或 Solaris Express 安装实际上包括 Apache 2.0.x 和 MySQL 4。Solaris 10 操作系统的随附 CD 中还包括 PHP 4。但此时 Solaris 操作系统未捆绑 PHP 5 或 MySQL 5。

本文档向技术用户介绍如何生成他们自己的 PHP5 最新副本,以及如何将其与 Blastwave 提供的 MySQL5 和随附在 Solaris 操作系统中的 Apache2 版本进行集成。但是,如果用户不希望编译任何软件,而愿意使用这些软件包经过 Sun 优化后的高性能的内部版本,请在 http://cooltools.sunsource.net/coolstack/index.html 和/或 http://sunfreeware.com/coolstack.html 中检出 Sun 的“可随时运行”的 Cool Stack 软件包。

可以在 BigAdmin 门户的社区提交中找到有关使用上述软件包配置 SAMP 服务器的早期文章。但是,该文章缺少重要细节,并且使用的是较旧的 Apache 1.3。Mel Lester 的文章(也在 BigAdmin 门户中进行了引用)写得非常精彩,提供了很多详细信息,几乎完全能满足读者的需求。唯一不足的是,Lester 的文章使用了与 Solaris 10 操作系统捆绑的 MySQL 4 版本,而不是我们希望的最新 MySQL 版本 5.x。

许多用户希望重新生成软件的主要原因是为了获取最新版本的软件包,其中可能包括性能增强功能、错误和安全性修复,以及可为各种 PHP Web 应用程序提供所需功能的编译时选项。

在本练习中,安装过程将使用以下软件:

  • 随 Solaris 安装一起提供的 Apache
  • Blastwave.org 提供的 MySQL 5(使用 pkg-get 进行安装)
  • php.net 提供的最新 PHP 5(下载并编译)

我们将在 32 位模式下主要使用 GNU 工具链生成软件。

下面的过程会将这三个应用程序集成在一起,以便您可以使用 Solaris 10 操作系统、Apache、PHP 5 和 MySQL 5 Web 应用程序。

步骤如下:

1. 安装 Solaris 10 操作系统、Solaris Express/Nevada 或 OpenSolaris。

2. 确保您的系统处于联网状态,以便它可以连接到 Internet 并使用静态 IP 地址。如果您需要有关网络配置的帮助信息,请查看此文档:System Administration Guide: IP Services(系统管理指南:IP 服务)

3. 我们希望从 Blastwave.org 安装 MySQL 5。打开 Web 浏览器,转至 Blastwave.org 逐步指南,然后执行步骤 1 至步骤 7。此过程非常简单,现在您可以使用 pkg-get 命令通过网络安装软件包(如 MySQL 5)了。

4. 现在可以安装 MySQL 5 软件包。在控制台或 xterm 窗口中,以超级用户身份进行登录并发出以下命令:

# /opt/csw/bin/pkg-get -i mysql5 mysql5client mysql5devel mysql5rt
# /opt/csw/bin/pkg-get -i mysql5test

注:安装 mysql5devel 软件包非常重要,否则在稍后生成 PHP 5 时会遇到问题。

5. 现在来设置 MySQL 5。

Blastwave.org 提供了一个指南:请转至 http://www.blastwave.org/packages.php/mysql5,并单击标有 "View news and info about the software package"(查看有关软件包的新闻和信息)的灰色按钮。我们在此再次提出这些准则,并展开讨论。(感谢 Blastwave 慷慨地与我们共享他们的工作成果。)

A. 创建配置文件 /opt/csw/mysql5/my.cnf,如下所示:将 /opt/csw/mysql5/share/mysql/ 中的某个 my-*.cnf 文件复制到 /opt/csw/mysql5/my.cnf,并根据您的环境进行适当的更改,如启用 InnoDB。请注意,/opt/csw/mysql5/varmy.cnf 以前所在的位置。如果您不确定要复制哪个文件,请使用 my-small.cnf

B. 在下一步初始化数据库之前,设置 MySQL 用户和组非常重要。此操作由 Blastwave 软件包安装脚本完成。但是,如果您要从源生成 MySQL,则需要按如下方式创建 MySQL 用户和组:

# groupadd mysql
# useradd -c "MySQL Server" -d /dev/null -g mysql -s /bin/false mysql 

C. 初始化 MySQL 数据库并指定权限:

cd /opt/csw/mysql5
./bin/mysql_install_db
chown -R mysql:mysql ./var

注意:如果您跳过上面的 chown 步骤,MySQL 将不会启动。

D. 启动 MySQL 5。如果只尝试启动服务器并查看上述步骤是否正确执行,可发出以下命令:

# cd /opt/csw/mysql5 ; /opt/csw/mysql5/bin/mysqld_safe &

然后,可以使用 ps 命令查看服务器是否启动,并使用 kill 命令和 PID 将其停止。

注意:在继续操作之前,请确保中止上述过程,否则当您在后续步骤中启用 SMF 服务器时,MySQL 将无法正确启动。

应运行以下命令:

# pkill mysql

现在,要确保 MySQL 在重新引导后启动,请继续阅读下文。

注: Solaris Express、Nevada 和 Solaris 10 更新的最新内部版本使用 SMF 来启动守护进程(如 mysql)。下面的过程可能会有所不同。如果您的 Solaris 版本使用 SMF,则可使用下面所示的 svcadm 命令来启动/停止 MySQL 5。

旧的 RC 文件方法:

 # /etc/init.d/cswmysql5 start

新的 SMF 方法:

如果在使用 SMF(而不是 RC 文件)的 Solaris 版本上安装 MySQL 5 软件包,您会发现软件包安装了 MySQL 5 的 SMF 清单,并且您可以通过以下命令查看服务状态:

# svcs -a | grep mysql
disabled 13:36:01 svc:/network/cswmysql5:default
要确保 MySQL 5 服务器启动(并且在重新引导时也能启动),请发出以下命令:

# svcadm enable svc:/network/cswmysql5:default

可使用以下命令再次进行验证:

# svcs -a | grep mysql
online 15:12:43 svc:/network/cswmysql5:default

可以使用命令 # svcadm disable svc:/network/cswmysql5:default 停止服务器,即使经过重新引导,该服务器仍保持停止状态,直到您发出 svcadm enable 命令为止。

E. 请记得为 MySQL 超级用户设置口令!

此口令应与 Solaris 超级用户口令相同!要执行此操作,请启动服务器,然后发出以下命令:

设置本地口令:

# /opt/csw/mysql5/bin/mysqladmin -u root password 'new-password'
	
# /opt/csw/mysql5/bin/mysqladmin -u root -h <YOUR-HostName-Here> \
password 'new-password'

(如果鉴于下面第 I 部分的步骤 5 中的安全性讨论而禁用了网络访问,则前面的命令行将会失败并且不再需要。

有关详细说明,请参见 MySQL 5 documentation(MySQL 5 文档)

F. 可选:此操作需要一段时间。您可以使用以下命令运行 MySQL 守护进程的测试套件:

# cd /opt/csw/mysql5/mysql-test
# ./mysql-test-run

G. 检查安装:

# ./bin/mysql -p

系统将提示您输入 MySQL 超级用户的口令。您应该会看到 mysql 提示符。请尝试执行诸如 STATUS 之类的命令,以查看服务器是否响应。然后,尝试从 mysql 提示符运行测试查询:

show databases;

将返回 mysqltest 数据库。

quit

注:可以通过创建和编辑 /opt/csw/mysql5/etc/mysql5rc/etc/opt/csw/mysql5rc 替代启动选项。

mysql5rc 的模板位于 /opt/csw/mysql5/share/mysql 中。如果为系统创建 rc 文件,则必须使用此模板。例如:

  1. # mkdir -p /etc/opt/csw
    我使用以下权限:chown root:bin /etc/opt/cswchmod 0755 /etc/opt/csw
  2. # cp /opt/csw/mysql5/share/mysql/mysql5rc /etc/opt/csw/
    如果没有可用的 mysql5rc 文件,守护进程将使用缺省文件启动。如果这是您的第一个实验系统,则无需执行此步骤;这是一个可选步骤。

H. 参考文档:

I. 本文档不涉及 MySQL 安全性方面的内容。但下面提供了一些需要考虑的基本步骤:

  • 确保 MySQL 超级用户具有一个口令集,且此口令集与主机系统的超级用户口令不同。
  • 确保仅 MySQL 用户具有数据库目录的读取和写入访问权限。
  • 如果在 Web 服务器上将 MySQL 用于 PHP(这样在 PHP/Apache 和 MySQL 之间仅需 localhost 连接),请将 skip-networking 行添加到 /opt/csw/mysql5/my.cnf 配置文件的 [mysqld] 部分。这样一来,所有连到 MySQL 服务器守护进程的 TCP/IP 远程连接都会被禁用。
  • 禁用 LOAD DATA LOCAL INFILE 命令,此命令可能允许从本地文件(尤其在发生新的 SQL 注入式攻击时)进行未经授权的读取。向 my.cnf 文件的 [mysqld] 部分添加 set-variable=local-infile=0
  • 删除 users 表中的匿名用户帐户。

上述步骤只是一些基本措施,但可以在安装后明显提高安全性。请在常用的 Internet 搜索引擎中输入 "Securing MySQL",以查看 Web 上有关 MySQL 安全性的文章。

6. 现在我们已经完成 MySQL 5 的安装和测试。接下来将生成 PHP 5。经过 Mel Lester 的许可,我们将从 Mel Lester 的 Web 站点借用部分内容。由于我们使用不同的选项和路径,因此需要修改某些 PHP 配置。

特别是,我们将在编译前更改 PHP 5 的配置,以使用 /opt/csw/mysql5 中 Blastwave MySQL 5 的路径,同时还添加一些其他选项。此过程还会验证您是否安装了生成 PHP 5 所需的 GNU 工具。

A. 以超级用户身份登录到全局区域,并确保 /opt/csw/bin/usr/sfw/bin 位于 $PATH 中,如下所示:

global# echo $PATH
  /opt/csw/bin:/usr/sfw/bin:/usr/sbin:/usr/bin:/usr/openwin/bin: \
  /usr/dt/bin:/usr/ccs/bin

现在我们来讨论一下。首先,您可能不希望修改超级用户.profile,也不希望垃圾信息将 / 目录弄乱。对于 Solaris 10 操作系统、Solaris Express 或 OpenSolaris,建议您创建目录 /root,并在 /etc/password 中创建使用 bashksh shell 的其他超级用户帐户,然后指向作为主目录的 /root。然而,这是您和 Google 之间的选择和话题。无论您的决定是什么,请确保路径包含上述组成部分。然后继续操作。

B. 使用 Blastwave.org 的 pkg-get 命令(已在上面的步骤 3 中安装)安装 GNU autoconfautomakegsed 软件包。下面的软件版本应该比较类似或更新一些。

global# pkg-get -i autoconf
...
global# which autoconf && autoconf --version | head -2
/opt/csw/bin/autoconf
autoconf (GNU Autoconf) 2.59
Written by David J. MacKenzie and Akim Demaille.

global# pkg-get -i automake
...
global# which automake && automake --version | head -2
/opt/csw/bin/automake
automake (GNU automake) 1.8.3
Written by Tom Tromey <tromey@redhat.com>.

global# pkg-get -i gsed
...
global# which gsed && gsed --version | head -2
/opt/csw/bin/gsed
GNU sed version 4.1.4
Copyright (C) 2003 Free Software Foundation, Inc.

C. 验证安装 PHP 所需的其他开源软件的可用性。(如果需要,可以查看 PHP 手册中的 Solaris specific installation tips(Solaris 具体安装提示)部分。)以下软件的版本应该比较类似或更新一些:

global# which gcc && gcc --version | head -2
/usr/sfw/bin/gcc
gcc (GCC) 3.4.3 (csl-sol210-3_4-branch+sol_rpath)
Copyright (C) 2004 Free Software Foundation, Inc.

global# which gmake && gmake --version | head -2
/usr/sfw/bin/gmake
GNU Make 3.80
Copyright (C) 2002 Free Software Foundation, Inc.

global# which flex && flex --version | head -2
/usr/sfw/bin/flex
flex version 2.5.4

global# which bison && bison --version | head -2
/usr/sfw/bin/bison
bison (GNU Bison) 1.875
Written by Robert Corbett and Richard Stallman.

global# which gm4 && gm4 --version | head -2
/opt/csw/bin/gm4
GNU M4 1.4.3
Written by Rene' Seindal.

global# which perl && perl -v | head -2
/opt/csw/bin/perl

This is perl, v5.8.7, built for sun4-solaris-thread-multi

global# which gunzip && gunzip -V | head -2
/usr/bin/gunzip
gunzip 1.3.3-patch.1
(2002-03-08)

global# which gtar && gtar --version | head -2
/usr/sfw/bin/gtar
tar (GNU tar) 1.14
Copyright (C) 2004 Free Software Foundation, Inc.

D. 通过从源生成 libxml2 来测试开源工具。

xmlsoft 下载最新版本。

此时,我们在此处找到了压缩源的以下版本:

# wget ftp://xmlsoft.org/libxml2/libxml2-2.6.26.tar.gz

选择执行以下步骤所在的目录:

global# gunzip -cd libxml2-2.6.26.tar.gz | gtar xvpf -
global# cd libxml2-2.6.26
global# ./configure
...
global# gmake
...
global# gmake install
...

现在您已生成并安装了 libxml2 软件,并会发现该软件位于 /usr/local 中。

注: 已验证该 Solaris Nevada build 42 和更高版本具有已更新的 libxml2 软件包,因此不需要执行此步骤。如果运行 Solaris Nevada build 42 或更高版本(包括源自 build 42 或更高版本的 OpenSolaris 内部版本),则可跳过生成 libxml2 的步骤(6D 部分),并将下面 6F 部分的部分 PHP5 配置行从:

--with-libxml-dir=/usr/local

更改为:

--with-libxml-dir=/usr 

E. 如果文件 /etc/apache2/httpd.conf 不存在,请使用以下命令:

global#cp /etc/apache2/httpd.conf-example /etc/apache2/httpd.conf

使用您喜欢的文本编辑器编辑 /etc/apache2/httpd.conf

  • 如果需要,将 ServerName(缺省为 127.0.0.1)设置为主机名。
  • ServerAdmin 设置为有效的电子邮件地址。

F. 从 www.php.net 下载并编译最新生产版本的 PHP。再次选择您自己的目录(如 /src/build 或其他任何目录)。关于代码编写,可以在 http://www.php.net/downloads.php#v5 上找到。我们选择下载使用 gzip 压缩的版本,以便可以使用以下命令继续操作:

global# gunzip -cd php-5.1.6.tar.gz | gtar xvpf -
...
global# cd php-5.1.6

这是我们与原始 Web 页的不同之处。原始 Web 页使用的是较旧的 MySQL 4(可在 /usr/sfw 中找到),而我们使用的是位于 /opt/csw/mysql5 中的最新 MySQL 5。因此我们所选择的配置选项现在为:

 global# ./configure --with-apxs2=/usr/apache2/bin/apxs --enable-dbase \
 --with-libxml-dir=/usr/local --with-config-file-path=/etc/apache2 \
 --with-mysql=shared,/opt/csw/mysql5 \
 --with-mysqli=shared,/opt/csw/mysql5/bin/mysql_config \
 --with-xpm-dir=/usr --with-gd --with-tiff-dir=/usr --with-bz2=/usr/lib \
 --with-jpeg-dir=/usr --with-png-dir=/usr --with-zlib --enable-mbstring \
 --enable-calendar--enable-bcmath --enable-ftp --enable-exif

对于简单的服务器设置,上述配置选项足以满足要求。还有许多其他选项,供用户进行选择和存档。通过输入 command# ./configure --help 或查看 PHP 站点 Appendix F. Configure options(附录 F. 配置选项)中的核心配置选项,可以查看其中部分选项。

注:如果您尝试启用 openssl,则必须重新编译 Apache 和 MySQL,以具有相同版本的 openssl 库,否则从 PHP 到 MySQL 的连接将会失败。如果要将 Cookie 用于会话,则通过将 mcrypt 库添加到系统并使用 PHP 编译选项 --with-mycrpt,您可能会发现性能得到了提高。

小窍门:如果您对其他用户所使用的 config 选项感兴趣,尝试将 phpinfo() 输入常用的 Internet 搜索引擎即可。 :-)

现在我们开始生成过程:

 ...
 global# gmake
 ...
 global# gmake install

 ...
 Installing PHP SAPI module: apache2handler
 /var/apache2/build/instdso.sh SH_LIBTOOL='/var/apache2/build/libtool' libphp5.la 
/usr/apache2/libexec
 /var/apache2/build/libtool --mode=install cp libphp5.la /usr/apache2/libexec/
 cp .libs/libphp5.so /usr/apache2/libexec/libphp5.so
 chmod +x /usr/apache2/libexec/libphp5.so
 cp .libs/libphp5.lai /usr/apache2/libexec/libphp5.la
 libtool: install: warning: remember to run 'libtool --finish /build/php-5.1.2/libs'
 chmod 755 /usr/apache2/libexec/libphp5.so
 [activating module 'php5' in /etc/apache2/httpd.conf]
 Installing PHP CLI binary: /usr/local/bin/
 Installing PHP CLI man page:/usr/local/man/man1/
 Installing build environment: /usr/local/lib/php/build/
 Installing header files: /usr/local/include/php/
 Installing helper programs: /usr/local/bin/
  program: phpize
  program: php-config
 Installing man pages: /usr/local/man/man1/
  page: phpize.1
  page: php-config.1
 Installing PEAR environment:/usr/local/lib/php/
 [PEAR] Archive_Tar - installed: 1.3.1
 [PEAR] Console_Getopt - installed: 1.2
 pear/PEAR can optionally use package "pear/XML_RPC" (version >= 1.4.0)
 [PEAR] PEAR - installed: 1.4.6
 Wrote PEAR system config file at: /usr/local/etc/pear.conf
 You may want to add: /usr/local/lib/php to your php.ini include_path
 Installing PDO headers: /usr/local/include/php/ext/pdo/
 #

G. 将文件 php.ini-distphp-5.1.6 源目录复制到 Apache 的 config 目录:

global# cp php.ini-dist  /etc/apache2/php.ini

如果要在多个区域中设置 Apache Web 服务器,您可能具有以下示例路径(或要使用的任何区域):

global# cp php.ini-dist /zones/zone0/root/etc/apache2/php.ini

接下来,我们将编辑配置文件并测试整个堆栈。

H. 编辑配置文件。

编辑 /etc/apache2/php.ini 文件以设置 PHP 选项。

使用 PHP 5,将不再自动加载 MySQL 界面模块。

您需要明确加载此模块以及所需的任何其他扩展模块。要执行此操作,请编辑 php.ini 文件并添加以下两行:

1. 验证生成 PHP 5 时是否创建了所需的模块:

# ls -l /usr/local/lib/php/extensions/no-debug-non-zts-20050922/  
total 1088
-rwxr-xr-x1 root root103144 Aug 29 21:48 mysql.so
-rwxr-xr-x1 root root429948 Aug 29 21:48 mysqli.so

查找 php.ini 中以下列内容开头的行:

; Directory in which the loadable extensions (modules) reside.
extension_dir =

将该行编辑为以下内容:

extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20050922/"

如果您已将 PHP 5 安装到其他位置,请根据需要调整此行。

2. 接下来查找 php.ini 文件的以下块:

  ;;;;;;;;;;;;;;;;;;;;;;
  ; Dynamic Extensions ;
  ;;;;;;;;;;;;;;;;;;;;;;

添加以下行:

  
extension=mysql.so

现在,将不会发生 Apache/PHP 5 无法与 MySQL 连接的问题。

3. 接下来编辑 /etc/apache2/httpd.conf 文件以加载 PHP 模块。

查找包含 php5_module 的行。LoadModule 语句右侧的路径必须指向系统上 PHP 模块的路径。此路径将是系统上 /usr/apache2相对路径。(因此,此路径实际为 /usr/apache2/libexec/libphp5.so。)上述 PHP 5 的 gmake 安装应该已经为您添加了此路径,但是请务必进行检查。

LoadModule php5_module libexec/libphp5.so

我们希望 Apache 将 Web 页文件名的 .php 扩展名解析为 PHP。请查找 /etc/apache2/httpd.conf 文件的 AddType 部分,并添加以下行:

AddType application/x-httpd-php .php

有些用户习惯在 httpd.conf 中省略以上行,而是将 application/x-httpd-php php phtml 添加到 /etc/apache2/mime.types 文件。这两种方法都可以。

I. 启动 Apache 2 并进行测试。

警告:如果您之前已通过其他 SAMP 文章、随附 CD 脚本或以手动方式激活了 Apache 1.3,则当您尝试执行以下步骤时将会发生冲突。在继续操作之前禁用 Apache 1.3 非常重要。

确保 Apache 1.3 已禁用:

 #svcs -a | grep apache
 legacy_run Sep_11lrc:/etc/rc3_d/S50apache

以上信息显示 Apache 1.3 传统的 rc 启动脚本为 /etc/rc3_d/S50apache。该脚本将在 /etc/apache/httpd.conf 中查找 Apache 的配置文件是否存在,如果缺少该文件,则不会启动 Apache 1.3。要禁用 Apache 1.3,请确保上述路径中没有文件,或者(这样做可能有点极端)将启动脚本从:

 /etc/rc3_d/S50apache

重命名为:

/etc/rc3.d/OFF-S50apache

事实上,在启动时仅执行以字母 "S" 开头的脚本。

启动 Apache 2:

# svcadm enable apache2
# svcs | grep -i apache2
online   18:07:10 svc:/network/http:apache2

如果 Apache 2 已成功启动,则您可以使用 ps 命令,并且应该看到类似以下进程的多个进程:

# ps -ef | grep http
webservd 18592 38020Sep 11 ?0:03 /usr/apache2/bin/httpd -k start
webservd 13093 38020Sep 08 ?0:07 /usr/apache2/bin/httpd -k start

如果找到大约 10 个此类进程,请不要惊慌。另外,在看到以下进程时也不要惊慌:

root 49810 Jul 17 ? 1:28 /usr/apache/bin/httpd  \
                 -f /etc/apache/httpd-standalone-ipp.conf

它只不过是网络端口 631 上 Internet 打印协议 (Internet Print Protocol, IPP) 侦听器所使用的较旧的 Apache 1.3。由于它不在端口 80 上运行,因此不会与此处的 Web 服务器配置发生冲突。

7. 接下来,我们来了解一些对于在 Apache 2 Web 服务器的 DocumentRoot 目录中进行测试非常有用的信息。请使用您所选择的文本编辑器,创建以下文件(Web 页)并将其命名为 phpinfo.php

<html>
<body>
      <p>Hello World</p>
      <?php phpinfo(); ?>
  </body>
</html> 

按照 Apache httpd.conf 文件中的定义将该文件放入 DocumentRoot 目录。如果您将 Web 浏览器指向 http://your-host-name/phpinfo.php 并且一切正常,则您应该获取有关 PHP、Apache 和 MySQL 配置的详细信息。

注:建议您在测试之后删除该文件,或使用 HTTP 验证对其进行保护,因为该文件透露了与站点有关的大量信息,这些信息对攻击者非常有用。

至此,您应该已经注意到,实际上述 phpinfo Web 页基本上仅测试 Apache 和 PHP 是否一起工作。尽管输出会显示与已启用的 MySQL 客户端有关的信息,但它实际上不会测试与 MySQL 服务器的连接。在绝大多数情况下,您只需安装 PHP/MySQL 应用程序,并期望它可以正常工作。但是,如果您具有超强的分析能力,喜欢仔细研究完整性、准确性,并希望对几乎所有事情进行测试,则可以参见下面提供的简单 PHP Web 页,该页将执行以下操作:

  1. 尝试打开从 PHP 页到 MySQL 的连接。
  2. 选择 mysql 数据库名称,该数据库是在执行完所有 MySQL 安装后存在的数据库。
  3. 显示 mysql 数据库中存在的表名的列表。

大部分代码都取自 PHP 手册中的函数用法示例。请将以下 PHP 代码复制到文件(Web 页)中,并为其指定类似 simple-test.php 的名称。编辑该文件并插入用于连接 MySQL 服务器的口令。将该文件放到 Web 服务器的 DocumentRoot(与之前存放 phpinfo.php 的位置相同)中。

以下为 PHP 代码:

<?php
$db_username = "root";// EDIT if needed: The username for mysql.
$db_password = "insert-yours-here"; // EDIT ME
    // Above is YOUR password used for mysql admin access.
$db_hostname = "localhost";
$db_name = "mysql";  // Install creates this admin database.

if (!mysql_connect($db_hostname, $db_username, $db_password)) {
   echo "Can't connect to MySQL Server";
   exit;
}else{
   echo "Connection to Mysql server succeeded.";
   echo "<br>";
}

// Now query the db and get the list of tables.
$result = mysql_db_query($db_name, "SHOW TABLES");

if (!$result) {
   echo "DB Error, could not list tables\n";
   echo 'MySQL Error: ' . mysql_error();
   exit;
}

echo "<p>The selected database is name is mysql</p>";
echo "<p>Here is the list of tables</p>";
while ($row = mysql_fetch_row($result)) {
   echo "Table: {$row[0]} <br>";
}

mysql_free_result($result);
?>

如果您已正确复制上述代码,并且软件配置正确,则可以将 Web 浏览器指向 http://yourserver.com/simple-test.php,您应该可以看到以下内容:

Connection to Mysql server succeeded.
The selected database is name is mysql.

Here is the list of tables

Table:columns_priv 
Table:db 
Table:func 
Table:help_category 
Table:help_keyword 
Table:help_relation 
Table:help_topic 
Table:host 
Table:proc 
Table:procs_priv 
Table:tables_priv 
Table:time_zone 
Table:time_zone_leap_second 
Table:time_zone_name 
Table:time_zone_transition 
Table:time_zone_transition_type 
Table:user 

8. 我们来查看一下 PHP 的安全性。

现在所需功能已经能够正常运行,但请注意,PHP 的缺省安装和配置文件 php.ini 中的缺省选项仅对于开发工作是安全的,而对于暴露在网络上的产品服务器并不安全。以下是严重警告:

A. 删除在上述步骤 7 中创建的 phpinfosimpletest PHP Web 页。(或者立即锁定这些 Web 页,方法是使用某种类型的 HTTP 验证保护这些页面所在的目录。)

B. 强烈建议您查看与保护 PHP 有关的教程,如以下任一教程:

如果您没有时间阅读这些教程,请至少查看一下 PHP 源代码目录中所建议的(也是较安全的)配置文件 php.ini-recommended。您可能希望将此文件与基本的启动配置文件 php.ini-dist 进行比较,以查看已对产品站点的安全性和性能进行了哪些更改。

(# diff php.ini-dist php.ini-recommended | less)

我希望本文档已经回答了一些问题并提供了有用的提示。希望您能在 Solaris 操作系统上顺利使用 SAMP 服务器!


除非另行颁发许可,否则此处所有技术手册中的代码(包括文章、常见问题解答和样例)只能在本许可下使用。