首頁 > Windows, 伺服器安裝與設定 > [Server] 在 Windows 上安裝 PHP 5.2 開發環境

[Server] 在 Windows 上安裝 PHP 5.2 開發環境

2007年10月2日 jaceju

本文主要介紹如何在 Windows XP 上建置 Apache 2 + PHP5 + MySQL 5 的開發環境,以供有興趣的朋友參考。

雖然坊間已經有一些不錯用的整合套件 (像 XAMPP ) ,不過我個人偏好掌握住開發環境的底層設定。當然如果不想花太多時間在開發環境上的朋友,我建議直接使用整合套件即可。

下載

Apache 2.0

現在已經沒辦法直接在 http://httpd.apache.org/download.cgi 找到 Windows 的 binary 安裝檔了,改從這裡抓:

http://archive.apache.org/dist/httpd/binaries/win32/

我們要的是 apache_2.0.xx-win32-x86-no_ssl.msi (抓最新的就對了) 。

PHP 5.2

我們需要的是沒有安裝檔的 PHP 5.2.x zip package ,可以從以下的網址下載:

http://www.php.net/downloads.php

請下載 php-5.2.x-Win32.zip 。

MySQL 5.0

同樣這裡也是用沒有安裝檔的 zip package ,可以從以下的網址下載:

http://dev.mysql.com/downloads/mysql/5.0.html#win32

http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-noinstall-5.0.45-win32.zip/from/pick#mirrors (以 5.0.45 為例)

Xdebug

這是開發 PHP 時很好用的除錯工具,可以從以下的網址下載:

http://pecl4win.php.net/ext.php/php_xdebug.dll (別在意 PHP 實際的版本,只要抓對應 5_2 版的即可)

安排目錄結構

和之前一樣,我打算把相關的程式放在 D:\Appserv 底下,而檔案庫則放在 D:\Repository 底下。以下是我所規劃的目錄結構:

D:
|
|- Appserv (伺服器相關程式)
|  |
|  |- Apache2 ( Apache 的主要程式檔)
|  |
|  |- php ( PHP 的主要程式檔)
|  |
|  |- mysql ( MySQL 的主要程式檔及資料檔)
|
|- WEB
|  |
|  |- wwwroot (預設網站的主要根目錄)
|
|- Temp
   |
   |- php (讓 PHP 存放暫存檔案的地方)
   |
   |- upload (上傳檔案的暫存位置)
   |
   |- session ( Session 檔的暫存位置)
   |
   |- xdebug ( Xdebug 分析檔的存放位置)

這裡我會把預設網站的根目錄放在 D:\WEB\wwwroot ,各位可以依自己的喜好決定它的位置。

註:放在 D: (或其他非 C: 分割區) 的好處是不用擔心重灌後,資料及相關設定會消失。

安裝 Apache 2.0

這邊基本上可以參考我的「在 Windows 上使用 Trac on Apache – 安裝與設定篇」裡的安裝方式,節錄如下:

第一次安裝

首先執行 apache_2.0.61-win32-x86-no_ssl.msi ,大部份的都是直接選「 Next 」。不過特別注意安裝位置,這裡我會把它安裝在 D:\Appserv\Apache2 下,方法如下:

  1. 安裝到 Setup Type 時選 Custom ,並按 Next 。

  2. 把 Apache HTTP Server 2.0.xx 的 Install to 改到 D:\Appserv ,這樣下方 Apache Runtime 的 Install to 會自動變成 D:\Appserv\Apache2 。

至於其他選項就按照當時情況自行決定囉。

這裡我假設各位已經不使用 IIS 了,所以後面的說明將會以 Port 80 為主。

接著把 D:\Appserv\Apache2\bin 加入系統變數 PATH 裡,這樣方便到時候直接使用指令來控制 Apache 。

至於 Apache 的設定部份,我們在完成安裝 PHP 後再一起修改。

重灌系統後的安裝

假設我們的 D:\Appserv\Apache2 底下已經 Apache 的程式檔,只是重灌後使得系統設定消失。這樣的話,我們要先把D:\Appserv\Apache2\bin 加入系統變數 PATH 裡,接著再用以下方式重新建立服務 (粗體字部份) :

C:\>apache -k install -D Apache2

最後用:

C:\>apache -k start

來啟動服務。

安裝 MySQL 5.0

這裡是參考我的「在 Windows 上安裝測試用的 MySQL 伺服器」裡的安裝方式,節錄如下:

  1. 將下載回來的 mysql-noinstall-5.0.xx-win32.zip 解壓縮到 D:\Appserv 下,然後把 mysql-5.0.xx-win32 這個資料夾名稱改為 mysql 。

  2. 複製 D:\Appserv\mysql\my-medium.ini (或其他) 為 my.ini ,並放到 D:\Appserv 底下。

    然後找到 my.ini 裡的:

    /tmp/mysql.sock

    改為:

    D:/Temp/mysql.sock

    註:在 [client] 和 [mysqld] 區段裡各有一個,都要改。

    Temp 路徑請自行決定。

  3. 然後在 [mysqld] 下一行加入:

    basedir = D:\Appserv\mysql

    以設定 MySQL 的執行路徑。

  4. 把 D:\Appserv\mysql\bin 加到 PATH 系統變數裡。

  5. 接著在 DOS 命令列下執行:

    C:\>mysqld-nt --install MySQL --defaults-file=D:\Appserv\my.ini

    –defaults-file 的用意是強制指定 my.ini 的位置,否則就需要把 my.ini 放到 C:\Windows 底下 (個人不建議) 。

  6. 然後再執行:

    C:\>NET START MYSQL

    或用服務管理員來啟動 MySQL

  7. 如果要移除服務,就用:

    C:\>mysqld-nt --remove

這樣就能完成 MySQL 的安裝了。

註:這裡不再採用預設字集為 big5 的安裝方式。

安裝 PHP 5.2

安裝程式部份

  1. 將下載回來的 php-5.2.x-Win32.zip 解壓縮到 D:\Appserv\php 底下。

  2. 將下載回來的 php_xdebug.dll 複製到 D:\Appserv\php\ext 底下。

  3. 把 D:\Appserv\php 和 D:\Appserv\php\ext 加在系統變數 PATH 的最前面,如下:

    D:\Appserv\php;D:\Appserv\php\ext;%SystemRoot%....

    這是為了讓我們能在 DOS 模式下直接執行 php.exe ,而且也不用把 libmysql.dll 這些 DLL 檔放到 C:\Windows\system32 底下。

  4. 把 D:\Appserv\php\php.ini-recommended 複製成 php.ini ,然後將它放到 D:\Appserv 底下。

  5. 將以下內容存成 IniFilePath.reg ,然後執行:

    Windows Registry Editor Version 5.00
     
    [HKEY_LOCAL_MACHINE\SOFTWARE\PHP]
    "IniFilePath"="D:\\Appserv\\"

    這會讓 PHP.exe 在執行時,知道要到哪裡去找 php.ini 。請參考:變更 Windows 平台上的 PHP.INI 位置

修改 php.ini

因為我們要建立開發環境,所以像錯誤訊息、 Xdebug 等相關偵錯用的機制都要打開,請修改以下的設定 (粗體字即修改後的值) :

display_errors = On
display_startup_errors = On
track_errors = On
error_log = "D:/Temp/php/error.log" (要記得拿掉前面的分號註解)

另外一些上傳的設定也要一起修改:

post_max_size = 100M (這裡請自行決定大小)
upload_max_filesize = 50M (通常會比 post_max_size 小)

接下來是相關的路徑:

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 加入系統變數 PATH 裡,所以 php 會自動去找。

然後是常會用到的延伸套件的部份 (把前面的分號註解去掉即可) :

extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_pdo.dll ( Zend Framework 建議使用 PDO)
extension=php_pdo_mysql.dll
extension=php_pdo_sqlite.dll

其他套件則視狀況加入。

最後我們要把 Xdebug 加入,也就是在 php.ini 的最後加入以下設定:

[Xdebug]
zend_extension_ts=php_xdebug.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\conf\httpd.conf 來讓 PHP 變成 Apache 的模組。

把以下設定加到 httpd.conf 的最後面:

LoadModule php5_module D:/Appserv/php/php5apache2.dll
AddType application/x-httpd-php .php

或是分別放在 LoadModule 及 AddType 區段 (用搜尋即可找到) 。

然後修改 DirectoryIndex ,加入粗體字部份:

DirectoryIndex index.html index.html.var index.htm index.php

這樣 Apache 2 就會以 Module 模式來執行 PHP 了。

其他設定

接著有些設定要修改,首先是加入 mod_rewrite 模組 (去掉井字號註解即可) :

LoadModule rewrite_module modules/mod_rewrite.so

然後修改預設網站的根目錄,也就是把:

D:/Appserv/Apache2/htdocs

全部改成:

D:/WEB/wwwroot

最後要啟用 .htaccess ,找到:

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

把 None 改成 All 。

而 <Directory "D:/WEB/wwwroot"> 區段裡的 AllowOverride None 的 None 也改成 All 。

測試

測試前請先重新開機,讓所有的設定能生效。

測試有沒有安裝成功的方式很簡單,只要在 D:\WEB\wwwroot 下建立一個 index.php 檔,然後寫入以下內容:

<?php
phpinfo();

然後用瀏覽器查看 http://localhost/ ,如果有顯示 PHP 的相關設定資訊就算成功了。

當然我們也能透過 phpinfo() 查看相關 PHP 套件是不是有安裝成功,如果沒有的話,請看下面的常見問題。

常見問題

  1. 問:為什麼改了 php.ini 或 httpd.conf 後,畫面重整後還是沒有任何改變?

    答:因為要重新啟動 Apache 服務。

  2. 問:為什麼重新啟動了 Apache 服務,有些 PHP 的套件還是沒有載入?

    答:Apache 似乎會快取系統變數 PATH (猜想),所以要重新開機才能讓 Apache 知道 PATH 路徑,並正確載入這些套件。

  3. 問:為什麼 PHP 的路徑要加在 PATH 的最前面?

    答:Apache/PHP 會以 PATH 的先後順序來尋找相關檔案,所以這樣會避免掉一些檔案版本衝突的問題。

  4. 問:為什麼不在 httpd.conf 裡加入「PHPIniDir "D:/Appserv/"」來指定 php.ini 的位置?

    答:當然也可以採用這樣的方式來指定 php.ini 的位置,只是這裡我為了在 DOS 模式下也可以使用 D:\Appserv\php.ini ,所以才會利用 Registry 的方式。不然我們也可以在每次執行 DOS 底下的 PHP 時,使用以下指令:

    C:\> php -c d:\Appserv\ test.php
  5. 問:我用的是 Apache 2.2 ,照你的方法卻沒辦法安裝 PHP5 ?

    答: PHP 5.2 版以後有另外提供一個 php5apache2_2.dll 給 Apache 2.2 用,所以請將 LoadModule 部份改成:

    LoadModule php5_module D:/Appserv/php/php5apache2_2.dll

    如果是 PHP 5.1 以前的版本,請  Google 一下,有很多文件提到怎麼把 PHP 5.1 裝到 Apache 2.2 上。

Categories: Windows, 伺服器安裝與設定 Tags:
  1. mimi
    2007年10月2日14:55 | #1

    謝謝…..

  2. OneZ
    2007年10月2日15:14 | #2

    关于php.ini的位置,可以不必修改windows的注册表。在httpd.conf中,添加多一行设置就好

     PHPIniDir "D:/Appserv/"

    请参考:http://www.php.net/manual/en/install.windows.apache2.php

  3. jaceju
    2007年10月2日15:30 | #3

    To OneZ:

    在 httpd.conf 加入「 PHPIniDir "D:/Appserv/" 」當然也可以,不過只會作用在 Apache 上。

    如果透過 DOS 模式要執行 php.exe 的話,不使用 reg 就會需要在每次執行時使用 -c 這個選項。

  4. Caspar
    2007年10月3日13:21 | #4

    您好!
    請問一下,我按照您的步驟設定完之後,將apache2重新restart之後,結果apache2無法啟動,之後我點選apache2的"Test Configuration"如果出現如下的錯誤訊息,請問那邊出錯了呢?
    這line 486 即為『LoadModule php5_module D:/AppServ/php/php5apache2.dll』

    錯誤訊息
    httpd.exe: Syntax error on line 486 of D:/AppServ/Apache2/conf/httpd.cont:
    Cannot load D:/AppServ/php/php5apache2.dll into server:
    \xa7\xe4\xa4…

  5. jaceju
    2007年10月3日14:00 | #5

    To Caspar:

    先確定 php 的位置是對的,也就是 D:/Appserv/php/php5apache2.dll 是存在的。

    如果有的話,那就再試試把該語法改成:
    LoadModule php5_module D:/Appserv/php/php5apache2.dll (也就是 Appserv 的 s 小寫)

  6. jaceju
    2007年10月3日14:06 | #6

    To Caspar:

    另外請注意你的 Apache 版本,可能你抓的是 2.2 版。我這裡是用 2.0 版,這兩個版本上在安裝 PHP 上會有一些差別。

  7. Caspar
    2007年10月3日14:38 | #7

    謝謝您!
    我將Appserv 的 s 小寫,但仍一樣的!
    確實,我的Apache為2.26,請問如要以2.26執行的話
    何處的設定檔須在修改呢?感謝您^^

  8. Caspar
    2007年10月3日14:41 | #8

    板大您好!
    先前我是用這板本的apache_2.0.59-win32-x86-no_ssl.msi
    但問題仍是一樣,才改為重安裝2.26
    但問題仍是一樣,煩請賜教那裡需在修改呢?
    感盡不激

  9. jaceju
    2007年10月3日14:51 | #9

    To Caspar:

    其實在 PHP 目錄下有提供另一個 php5apache2_2.dll 來配合 Apache 2.2 版,所以你把上面的 LoadModule 部份改成:

    LoadModule php5_module D:/Appserv/php/php5apache2_2.dll

    再試試看。

  10. jaceju
    2007年10月3日14:54 | #10

    To Caspar:

    忘了提醒一點, php5apache2_2.dll 在 PHP 5.2 以後才有提供,所以請注意你的 PHP 版本。

    如果你用的是 PHP 5.1 ,就請 Google 一下,有很多文章有提到怎麼在 Apache 2.2 底下安裝 PHP 5.1 。

  11. Caspar
    2007年10月3日15:22 | #11

    To 板大:

    謝謝您!
    改成這個就可以了!
    LoadModule php5_module D:/Appserv/php/php5apache2_2.dll
    非常感謝您!^^

  12. TC
    2007年12月3日03:37 | #12

    首先,感謝板大發表這篇文章,讓初學的我有很大的幫助,我有一問題請教,MySQL 5.0.45 利用noninstall的方式安裝後,我發現帳號跟密碼不知道怎麼設定,所以進不去資料庫,而且我發現一直沒有人發問 Orz..,令我很慌張,可能是我太笨不曉得這個很基礎的問題,請板大賜教,謝謝.

  13. jaceju
    2007年12月3日09:57 | #13

    To TC:

    如果你已經把 mysql/bin 加到 PATH 裡的話,可以直接用以下指令更改 root 密碼:

    > mysqladmin -u root password "password_for_root"

    password_for_root 就改成你自己想要的密碼囉。

  14. TC
    2007年12月3日10:21 | #14

    To jaceju 板大

    我確定我的PATH是對的
    但不論我輸入 > mysqladmin -u root password "123456″ 或 > mysqladmin -u root password ’123456′
    系統都告訴我

    mysqladmin: connect to server at ‘localhost’ failed
    error: ‘Access denied for user ‘root’@'localhost’ ‘

    請問您對這樣的 error msg 有沒有什麼可能錯誤落漏設定的地方呢 ? 謝謝

  15. jaceju
    2007年12月3日11:19 | #15

    To TC:

    不行的話改這樣子試試:

    先啟動 MySQL 服務,然後在 DOS 視窗輸入以下指令:

    > mysql -u root -p

    問你密碼時直接按 Enter (因為預設是空密碼)

    然後在 mysql 提示符號裡輸入:

    mysql> SET PASSWORD FOR ‘root’@'localhost’ = PASSWORD(‘password_for_root’);

    這樣應該就可以了。

  16. TC
    2007年12月12日22:43 | #16

    謝謝,我已經可以囉,我想最主要的原因是因為在設定密碼前裝了 phpMyAdmin 導致的,我重裝就好了

  17. 2007年12月24日09:39 | #17

    To jaceju 板大

    請教php 5的設定? (appserv-win32-2.5.9.exe)
    比如說:
    php.ini
    建立temp資料夾
    extension_dir = "./"
    … 等等….
    PS:環境 phpBB2.22版,未來要轉成PHP BB3版
    謝謝大大

  18. jaceju
    2007年12月24日09:57 | #18

    To yehrussell:

    我已經很久沒用過 AppServ 了,你可以參考 AppServ 的說明手冊或 README ,裡面應該有很清楚的介紹。

  19. yehrussell
    2007年12月24日14:30 | #19

    To jaceju 板大

    感恩您喔!

目前尚未開放評論的功能。