原文:http://www.jaceju.net/blog/archives/703/php
前陣子把部份測試主機環境升級到 PHP 5.3 來跑一些專案,整體上沒什麼狀況,因此我就決定讓公司的工做環境所有都轉移到 PHP 5.3 上了。html
本文主要介紹如何在 Windows XP 上建置 Apache 2.2 + PHP 5.3 + MySQL 5.1 的開發環境,以供有興趣的朋友參考。mysql
下載
Apache 2.2
Apache 2.2 能夠在如下網址下載,因為我們多數網站都須要 SSL 支援,因此請記得抓取包含 OpenSSL 的版本。sql
http://httpd.apache.org/download.cgi (Win32 Binary including OpenSSL)apache
註:Apache 2.2 特點概觀。windows
PHP 5.3
若是要讓 PHP 5.3 做為 Apache 2.2 的 module 來執行,那麼記得我們要抓取的是 VC6 x86 Thread Safe 的版本。session
而因為我們是要手動安裝,因此須要下載的是沒有安裝檔的 PHP 5.3 zip package ,可從如下網址找到:app
http://windows.php.net/download/ (VC6 x86 Thread Safe)curl
MySQL 5.1
MySQL 因為我們也要手動安裝,因此同樣也是用沒有安裝程式的 zip package ,能夠從如下的網址下載:ide
http://dev.mysql.com/downloads/mysql/5.1.html#win32 (Without installer)
Xdebug 2.0
這是開發 PHP 時很好用的除錯工具,能夠從如下的網址下載:
http://www.xdebug.org/download.php (Windows binaries: 5.3 VC6 (32 bit))
註:不要下載到 Xdebug 2.0.4 版,這個版本會沒辦法被 PHP 載入。
安排目錄結構並設定環境變數
和以前一樣,我打算把相關的程式放在 D:\AppServ 底下,如下是我所規劃的目錄結構:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
D: | |- AppServ (伺服器相關程式) | | | |- Apache2.2 ( Apache 的主要程式檔) | | | |- php ( PHP 的主要程式檔) | | | |- mysql ( MySQL 的主要程式檔) | | | |- data ( MySQL 資料檔) | |- WEB | | | |- wwwroot (預設網站的主要根目錄) | |- Temp | |- php (讓 PHP 存放暫存檔案的地方) | |- upload (上傳檔案的暫存位置) | |- session ( Session 檔的暫存位置) | |- xdebug ( Xdebug 分析檔的存放位置) |
這裡我會把預設網站的根目錄放在 D:\WEB\wwwroot ,各位能夠依本身的喜愛決定它的位置。
接著把 Apache 、 PHP 及 MySQL 的執行檔所在路徑預先加入系統變數 PATH 裡,這樣方便到時候直接使用指令來設定服務,以下:
1
|
D:\AppServ\Apache2.2\bin;D:\AppServ\php;D:\AppServ\mysql\bin;%SystemRoot%.... |
註:放在 D: (或其餘非 C: 分割區) 的好處是不用擔心重灌後,資料及相關設定會消失。
安裝 Apache 2.2
第一次安裝
首先執行 apache_2.2.xx-win32-x86-openssl-0.9.xx.msi ,大部份的都是直接選「 Next 」。不過特別注意安裝位置,這裡我會把它安裝在 D:\AppServ\Apache2.2 下,方法以下:
-
安裝到 Setup Type 時選 Custom ,並按 Next 。
-
把 Apache HTTP Server 2.2.xx 的 Install to 改到 D:\AppServ ,這樣下方 Apache Runtime 的 Install to 會自動變成 D:\AppServ\Apache2.2 。
至於其餘選項就按照當時情況自行決定囉。
註:這裡我假設各位已經不使用 IIS 了,因此後面的說明將會以 Port 80 為主。
至於 Apache 的設定部份,我們在完成安裝 PHP 後再一塊兒修改。
重灌系統後的安裝
假設我們的 D:\AppServ\Apache2.2 底下已經 Apache 的程式檔,只是重灌後使得系統設定消失。這樣的話,我們要先把D:\AppServ\Apache2.2\bin 加入系統變數 PATH 裡,接著再用如下方式從新創建服務 (粗體字部份) :
1
|
C:\>httpd -k install -D Apache2.2 |
最後用:
1
|
C:\>httpd -k start |
來啟動服務。
安裝 MySQL 5.1
MySQL 安裝的步驟也很簡單:
-
將下載回來的 mysql-noinstall-5.1.xx-win32.zip 解壓縮到 D:\AppServ 下,然後把 mysql-5.1.xx-win32 這個資料夾名稱改為 mysql 。
-
把 mysql/data 這個資料夾往上搬到 AppServ 資料夾下,這樣到時候更新 MySQL 版本時,就不用擔心會不當心覆蓋到資料庫。
-
複製 D:\AppServ\mysql\my-medium.ini (或其餘) 為 my.ini 。
註:寫這篇文章的時候, MySQL 最新的版本是 5.1.38 ,然後我用 –defaults-file 指定外部的 my.ini ,但卻一直無法讓 MySQL 啟動;所以我就放棄用外部 my.ini 了,直接讓 MySQL 抓取安裝目錄下的 my.ini 。
然後找到 my.ini 裡的:
1
/tmp/mysql.sock
改為:
1
D:/Temp/mysql.sock
註:在 [client] 和 [mysqld] 區段裡各有一個,都要改。
Temp 路徑請自行決定。
-
然後在 [mysqld] 下一行加入:
1 2
basedir = "d:/AppServ/mysql" datadir = "d:/AppServ/data"
以設定 MySQL 的執行路徑及資料庫存放路徑。
註: MySQL 在 Win32 的新版本彷佛在解析路徑上會有問題,因此磁碟機代號必定要小寫,而路徑分隔符號要用「 / 」。
-
接著在 DOS 命令列下執行:
1
C:\>mysqld --install
註: MySQL 5.1.21 以後的版本就沒有 mysqld-nt 這支程式了。
-
然後再執行:
1
C:\>NET START MYSQL
或用服務管理員來啟動 MySQL
-
若是要移除服務,就用:
1
C:\>mysqld --remove
這樣就能完成 MySQL 的安裝了。
安裝 PHP 5.3
安裝程式部份
-
將下載回來的 php-5.3.x-Win32.zip 解壓縮到 D:\AppServ\php 底下。
-
將下載回來的 php_xdebug-2.0.x-5.3-vc6.dll 複製到 D:\AppServ\php\ext 底下。
-
把 D:\AppServ\php\php.ini-development 複製成 php.ini ,然後將它放到 D:\AppServ 底下。
-
將如下內容存成 IniFilePath.reg ,然後執行:
1 2 3
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\PHP] "IniFilePath"="D:\\AppServ\\"
這會讓 PHP.exe 在執行時,知道要到哪裡去找 php.ini 。
-
若是透過 IniFilePath.reg 無法成功讓 Command Line 模式取得 D:\AppServ\php.ini 時,那麼就要改用 PHPRC 這個系統環境變數。 PHPRC 指的是 PHP Runtime Configuration ,也就是 PHP 執行時期的配置。作法是在系統環境變數中,加入 PHPRC 這個變數,其值為 D:\AppServ 就能夠了。
修改 php.ini
因為我們要創建開發環境,因此像錯誤訊息、 Xdebug 等相關偵錯用的機制都要打開,請修改如下的設定:
1
|
error_log = "D:/Temp/php/error.log" (要記得拿掉前面的分號註解) |
PHP 5 以後須要預先設定 timezone ,否則程式會一直出現警告。請找到 date.timezone ,並修改以下:
1
|
date.timezone = Asia/Taipei |
另一些上傳的設定也要一塊兒修改:
1 2 |
post_max_size = 100M (這裡請自行決定大小) upload_max_filesize = 50M (一般會比 post_max_size 小) |
接下來是相關的路徑:
1 2 3 4 |
upload_tmp_dir = "D:\Temp\php\upload" (上傳暫存路徑) include_path = ".;D:\AppServ\php\pear" (加入 PEAR 的引用路徑) session.save_path = "D:\Temp\php\session" ( Session 暫存路徑) extension_dir = "D:\AppServ\php\ext" (extension 載入路徑) |
然後是常會用到的延伸套件的部份 (把前面的分號註解去掉便可) :
1 2 3 4 5 6 7 8 9 |
extension=php_curl.dll extension=php_gd2.dll extension=php_mbstring.dll extension=php_mysql.dll extension=php_mysqli.dll extension=php_pdo_mysql.dll ( Zend Framework 建議使用 PDO) extension=php_pdo_sqlite.dll extension=php_sqlite.dll extension=php_sqlite3.dll |
其餘套件則視狀況加入。
最後我們要把 Xdebug 加入,也就是在 php.ini 的最後加入如下設定:
1 2 3 4 5 6 7 |
[Xdebug] zend_extension="D:\AppServ\php\ext\php_xdebug-2.0.x-5.3-vc6.dll" xdebug.profiler_enable=on ;xdebug.show_exception_trace=on xdebug.show_local_vars=on xdebug.trace_output_dir="D:/TEMP/php/xdebug" xdebug.profiler_output_dir="D:/TEMP/php/xdebug" |
修改 httpd.conf
讓 Apache 認識 PHP
上面雖然安裝好了 PHP ,可是 Apache 還不認得 PHP 長什麼樣子,如下我們要修改 D:\AppServ\Apache2.2\conf\httpd.conf 來讓 PHP 變成 Apache 的模組。
把如下設定加到 httpd.conf 的最後面:
1 2 |
LoadModule php5_module D:/AppServ/php/php5apache2_2.dll AddType application/x-httpd-php .php |
或是分別放在 LoadModule 及 AddType 區段 (用搜尋便可找到) 。
然後修改 DirectoryIndex ,加入粗體字部份:
1
|
DirectoryIndex index.html index.htm index.php |
這樣 Apache 2 就會以 Module 模式來執行 PHP 了。
若是 Apache 找不到 php.ini ,那麼能夠再加入如下指令:
1
|
PHPIniDir "D:/AppServ/php" |
其餘設定
接著有些設定要修改,首先是加入 mod_rewrite 模組 (去掉井字號註解便可) :
1
|
LoadModule rewrite_module modules/mod_rewrite.so |
然後修改預設網站的根目錄,也就是把:
1
|
D:/AppServ/Apache2.2/htdocs |
所有改爲:
1
|
D:/WEB/wwwroot |
最後要啟用 .htaccess ,找到:
1 2 3 4 |
<Directory /> Options FollowSymLinks AllowOverride None </Directory> |
把 None 改爲 All 。
而 <Directory "D:/WEB/wwwroot"> 區段裡的 AllowOverride None 的 None 也改爲 All 。
測試
測試前請先從新開機,讓全部的設定能生效。
測試有沒有安裝成功的方式很簡單,只要在 D:\WEB\wwwroot 下創建一個 index.php 檔,然後寫入如下內容:
1 2 |
<?php phpinfo(); |
然後用瀏覽器查看 http://localhost/ ,若是有顯示 PHP 的相關設定資訊就算成功了。
當然我們也能透過 phpinfo() 查看相關 PHP 套件是否是有安裝成功,若是沒有的話,請看下面的常見問題。
常見問題
-
問:為什麼改了 php.ini 或 httpd.conf 後,畫面重整後還是沒有任何改變?
答:因為要從新啟動 Apache 服務。
-
問:為什麼從新啟動了 Apache 服務,有些 PHP 的套件還是沒有載入?
答:Apache 彷佛會快取系統變數 PATH (猜測),因此要從新開機才能讓 Apache 知道 PATH 路徑,並正確載入這些套件。
-
問:為什麼 PHP 的路徑要加在 PATH 的最前面?
答:Apache/PHP 會以 PATH 的先後順序來尋找相關檔案,因此這樣會避免掉一些檔案版本衝突的問題。
-
問:為什麼不在 httpd.conf 裡加入「PHPIniDir "D:/AppServ/"」來指定 php.ini 的位置?
答:當然也能夠採用這樣的方式來指定 php.ini 的位置,只是這裡我為了在 DOS 模式下也能夠使用 D:\AppServ\php.ini ,因此才會利用 Registry 的方式。否則我們也能夠在每次執行 DOS 底下的 PHP 時,使用如下指令:
1
C:\> php -c d:\AppServ\ test.php