BigAdmin System Administration Portal
專文
Print-friendly VersionPrint-friendly Version

Solaris 10 作業系統與 Solaris Express 的 SAMP (Solaris、Apache 2、MySQL 5 與 PHP 5) 設定

Neal Pollack,2006 年 10 月

網際網路上有許多文件與部落格都會說明如何針對 SAMP 伺服器 (Solaris、Apache 2、MySQL、PHP) 使用 Solaris 10 作業系統。但是,其中有許多文章僅適用於舊版的套裝軟體,或不包含常用的 PHP 語言。有些文章缺乏可讓您瞭解相關程序的詳細資訊或範例。

開始之前,我想先澄清 Solaris 10 作業系統或 Solaris Express 的安裝中確實包含 Apache 2.0.x 與 MySQL 4。Solaris 10 作業系統的 Companion CD 也包含 PHP 4。但是,目前 Solaris 作業系統並未隨附 PHP 5 或 MySQL 5。

此文將讓技術使用者瞭解如何建置自己的最新版 PHP5,並將其從 Blastwave 以及 Solaris 作業系統隨附的 Apache2 版本整合至 MySQL5。但是,若您不想編譯任何軟體,而只想使用這些套裝軟體的最佳化與高效能 Sun 建置,請至 http://cooltools.sunsource.net/coolstack/index.html 和 (或) http://sunfreeware.com/coolstack.html 參閱 Sun 的可隨時執行的 Cool Stack 套裝軟體。

有關以上述套裝軟體配置 SAMP 伺服器的早期文章,可自 BigAdmin 入口網站上的社群成員貢獻作品集取得。但是,此文章缺乏重要的詳細資訊,且使用舊版 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. 確定您的系統已連接網路而可存取網際網路,並確認所使用的是靜態 IP 位址。若您需要網路配置方面的協助,請檢視此文件:System Administration Guide: IP Services

3. 我們想從 Blastwave.org 安裝 MySQL 5。開啟 Web 瀏覽器,移至 Blastwave.org 的逐步指南,然後執行步驟 1 至 7。就是這麼簡單,此時您即可使用 pkg-get 指令透過網路安裝套裝軟體,如 MySQL 5。

4. 現在已可安裝 MySQL 5 套裝軟體。從主控台或 xterm 視窗,以 root 身份登入,然後發出下列指令:

# /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

現在,為了確保它會在重新開機後啟動,請繼續閱讀。

注意:Solaris Express、Nevada 與 Solaris 10 更新的最新建置均使用 SMF 啟動 mysql 等常駐程式。下列程序可能會變動。若您的 Solaris 版本使用的是 SMF,您會使用下列 svcadm 指令啟動/停止 MySQL 5。

舊的 RC 檔案方法:

 # /etc/init.d/cswmysql5 start

新的 SMF 方法:

若您安裝 MySQL 5 套裝軟體的 Solaris 版本所使用的是 SMF,而非 RC 檔案,您會發現套裝軟體已安裝 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 root 使用者設定密碼!

此密碼不應與您的 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'

(若您已透過下面步驟 5,第 I 部分中的安全性討論停用網路存取,前述指令行即會失敗,也不必要。)

如需相關指示,請參閱 MySQL 5 Documentation

F. 選擇性:此作業需要一些時間。您可以使用下列指令,執行 MySQL 常駐程式的測試套件。

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

G. 檢查安裝:

# ./bin/mysql -p

系統會提示您輸入 MySQL root 的密碼。您會看見 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 超級使用者已有設定的密碼,而且此密碼與主機系統 Root 密碼不同。
  • 確定只有 MySQL 使用者具有資料庫目錄的讀取與寫入存取權。
  • 若您在 Web 瀏覽器上針對 PHP 使用 MySQL (因此 PHP/Apache 與 MySQL 之間只需要 localhost 連線),請將 skip-networking 一行加入至 /opt/csw/mysql5/my.cnf 配置檔案的 [mysqld] 區段中。如此將停用所有對 MySQL 伺服器常駐程式的 TCP/IP 遠端連線。
  • 停用 LOAD DATA LOCAL INFILE 指令,此指令可允許未經授權讀取本機檔案,尤其是在發生新的資料隱碼 (SQL Injection) 攻擊時。在您的 my.cnf 檔案的 [mysqld] 區段中,加入 set-variable=local-infile=0
  • users 表格中移除匿名使用者帳號。

前述步驟其實並不深入,但足以大大提升安裝後的效能。請在您慣用的網際網路搜尋引擎中輸入「保護 MySQL」,以閱讀網路上有關 MySQL 安全性的文章。

6. 我們現在已完成 MySQL 5 的安裝與測試。接著,我們將建置 PHP 5。我們將從 Mel Lester 的網站借用某些部分,當然是在他的許可之下。我們將修改某些 PHP 配置,因為我們會使用不同的選項與路徑。

明確而言,在進行編譯以使用我們的 Blastwave MySQL 5 路徑 (在 /opt/csw/mysql5 中) 之前,我們將變更 PHP 5 的配置,並增加其他選項。此程序也會確認您是否已安裝必要的 GNU,以建置 PHP 5。

A. 以 root 身份登入全域區域,確認 /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

現在開始討論。首先,您可能不想修改 root.profile,而讓 / 目錄中堆積了許多無用的資料。針對 Solaris 10 作業系統、Solaris Express 或 OpenSolaris,我建議您建立目錄 /root,然後另外在 /etc/password 中建立另一個使用 bashksh shell 的 root 帳號,並指向 /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 一節)。下列軟體版本應較為近似或更新:

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 建置 42 與更新版本具有更新後的 libxml2 套裝軟體,而不需執行此步驟。若是執行 Solaris Nevada 建置 42 或更新版本 (包括衍生自建置 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

這是我們與原始網頁的不同之處。原始網頁使用的是 /usr/sfw 中的舊版 MySQL 4,而我們則是使用位於 /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 中的核心配置選項,以檢視其中某些選項。

注意:若您嘗試啟用 openssl,則必須重新編譯 Apache 與 MySQL 以具備相同版本的 openssl 程式庫,否則 PHP 對 MySQL 的連線將會失敗。若要在階段作業中使用 cookie,您可以將 mcrypt 程式庫增加至您的系統並使用 PHP 編譯選項 --with-mycrpt,以提升效能。

有趣的注意事項:若您很好奇他人所使用的 config 選項,只需在慣用的網際網路搜尋引擎中輸入 phpinfo() 即可。:-)

無論如何,現在就來建置:

 ...
 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-dist 從您的 php-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 將網頁檔案名稱的 .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 文章、Companion 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

若發現此類程序有十來個,也不要太驚訝。此外,也不要被下列程序給嚇著:

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

那只是網路連接埠 631 上的 Internet Print Protocol (IPP) 偵聽程式所使用的舊有 Apache 1.3。由於它不是在連接埠 80 上執行,因此在此不會與您的 Web 伺服器配置產生衝突。

7. 接著,我們將在 Apache 2 Web 伺服器的 DocumentRoot 目錄中放置實用的內容來測試看看。使用您所選擇的文字編輯器建立下列檔案 (網頁),並將其命名為 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 網頁基本上只會實際測試搭配運作的 Apache 與 PHP。雖然輸出會顯示所啟用之 MySQL 用戶端的相關資訊,但實際上並未測試 MySQL 伺服器的連線。只要安裝好 PHP/MySQL 應用程式,您有幾乎 99% 的機會 (如果您已經走到這一步) 能讓整套系統正常運作。但是,若您屬於追求完美、精準,且熱衷於各種測試的分析狂人格類型,請參考下列簡單的 PHP 網頁所將執行的作業:

  1. 嘗試從 PHP 網頁開啟對 MySQL 的連線。
  2. 選取 mysql 資料庫名稱,此為所有 MySQL 安裝後所產生的資料庫。
  3. 顯示存在於 mysql 資料庫內之表格名稱的清單。

大部分的程式碼取自於 PHP 手冊中的功能使用範例。將下方的 PHP 程式碼複製到檔案 (網頁) 中,並將其命名為 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 網頁(或使用某種類型的 HTTP 認證保護網頁所在的目錄,立即加以鎖定)。

B. 強烈建議您參閱有關保護 PHP 安全的指導,如下列其中一項:

若您沒有足夠的時間,至少也看一下建議 (且較安全) 的配置檔案 php.ini-recommended 中的 PHP 原始碼目錄。您可以將其與基礎配置檔 php.ini-dist 做比較,以瞭解在生產站點的安全與效能方面有哪些變更。

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

我希望這多少能回答您的問題,並提供實用的提示。好好享受 Solaris 作業系統的 SAMP 伺服器所帶來的便利吧。


Comments (latest comments first)

Discuss and comment on this resource in the BigAdmin Wiki

Unless otherwise licensed, code in all technical manuals herein (including articles, FAQs, samples) is provided under this License.


BigAdmin