Windows 上安裝 Apache 與 PHP

雖然現在有很多整合了 Apache + PHP 的安裝包,安裝起來也的確很方便,但我還是比較習慣一項一項個別安裝。

檔案準備

這邊選擇了 VC11 編譯的 x86 版本,VC11 只能安裝在 Windows Vista Service Pack 2 (含)以上的作業系統,如果你使用 Windows XP 可以選擇 Apache (VC10) 及 PHP (VC9) 的版本。

安裝 Visual C++ 可轉散發套件

根據選擇的 Apache 及 PHP 編譯版本,安裝相對應的 Visual C++ 可轉散發套件。

  • VC9 : Visual C++ 2008
  • VC10 : Visual C++ 2010
  • VC11 : Visual C++ 2012

安裝 Apache

解壓縮 Apache

解壓縮下載回來的 Apache,其中 Apache24 資料夾 (24 代表 2.4.x 版) 為 Apache 根目錄,將該目錄重新命名為 Apache 並放在 C:\Program Files (x86)\Apache。

設定 Apache

用文字編輯器開啟位於Apache根目錄\conf\httpd.conf的設定檔,httpd.conf 有很多設定,用搜尋的方式找到要更改的設定。

# Apache 根目錄
ServerRoot "C:/Program Files (x86)/Apache"

# 監聽 port
Listen 80

# 伺服器用來識別自己,如果沒有網域名稱可以使用 IP
ServerName 網域名稱或IP:80

# DocumentRoot : 網站根目錄
# <Directory "目錄"></Directory> : 目錄設定
# 正式環境中建議將 Options 的 Indexes 移除,避免列出網站的目錄及檔案
DocumentRoot "C:/Program Files (x86)/Apache/htdocs"
<Directory "C:/Program Files (x86)/Apache/htdocs">
    Options FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

# 錯誤記錄檔的路徑,預設會將所有記錄寫入到同一個檔案,時間久了檔案會變很大
# 調用 rotatelogs.exe 將記錄檔以天為單位做分割
# 路徑若有空格用8.3檔名處理
ErrorLog "|bin/rotatelogs.exe C:/Progra~2/Apache/logs/error_%Y%m%d.log 86400"

# 網站存取記錄檔的路徑,預設會將所有記錄寫入到同一個檔案,時間久了檔案會變很大
# 調用 rotatelogs.exe 將記錄檔以天為單位來分割
# 路徑若有空格用8.3檔名處理
# 預設有 common 及 combined 兩種格式,這邊使用 combined 記錄較詳細的資訊
# httpd.conf 中 CustomLog 有兩列,其中一列未生效,請確保只有一列生效
CustomLog "|bin/rotatelogs.exe C:/Progra~2/Apache/logs/access_%Y%m%d.log 86400" combined

# ScriptAlias : CGI script 路徑
# <Directory "CGI script 路徑"></Directory> : CGI script 路徑設定
ScriptAlias /cgi-bin/ "C:/Program Files (x86)/Apache/cgi-bin/"
<Directory "C:/Program Files (x86)/Apache/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

安裝 PHP

解壓縮 PHP

將下載回來的 PHP 解壓縮到 C:\Program Files (x86)\PHP。

建立 php.ini

複製 PHP根目錄\php.ini-production 成為 php.ini。

正式環境用 php.ini-production,開發環境可以用 php.ini-development。

設定 PHP

用文字編輯器開啟位於PHP根目錄\php.ini的設定檔。

# Extension 路徑
extension_dir = "C:\Program Files (x86)\PHP\ext"

# 錯誤記錄檔路徑
error_log = "C:\Windows\Temp\php_errors.log"

# 檔案上傳暫存路徑
upload_tmp_dir = "C:\Windows\Temp"

# Session 存放路徑
session.save_path = "C:\Windows\Temp"

# 限制 PHP 的存取目錄範圍,若對這個範圍之外操作檔案將被禁止
open_basedir = "根目錄"

# 時區
# 其它時區參考 http://php.net/manual/en/timezones.php
date.timezone = "Asia/Taipei"

載入 PHP 模組到 Apache

用文字編輯器開啟位於Apache根目錄\conf\httpd.conf的 Apache 設定檔。

# 載入 PHP 模組,在 Dynamic Shared Object (DSO) Support 區段加入
# php5apache2_x.dll 視使用的 PHP 版本而有所不同
LoadModule php5_module "C:/Program Files (x86)/PHP/php5apache2_4.dll"

# 在 <IfModule mime_module>...</IfModule> 加入
AddHandler application/x-httpd-php .php

# 設定 php.ini 的路徑
PHPIniDir "C:/Program Files (x86)/PHP"

# 增加預設檔案,多個項目用空白分隔
DirectoryIndex 加入 index.php

啟動 Apache

一切都設定好之後就可以啟動 Apache 來測試。

  1. 開啟命令提示字元。

  2. 切換到 Apache根目錄\Apache\bin。

  3. 輸入 httpd 來啟動 Apache。

  4. 將以下內容存成 info.php,並放到網站根目錄。

    <?php
    phpinfo();
    ?>
    
  5. 開啟 http://127.0.0.1/http://127.0.0.1/info.php 測試 Apache 及 PHP 是否正常運作。

  6. 在命令提示字元視窗按下 Ctrl + C 停止 Apache。

安裝 Apache 為服務

每次開機都要手動啟動很不方便,可以將 Apache 安裝成服務,讓它開機時自動執行。

  1. 開啟命令提示字元。

  2. 切換到 Apache根目錄\Apache\bin。

  3. 輸入 httpd -k install -n "Apache 2.4"

    • -k install: 安裝服務
    • -n "服務名稱": 服務的名稱
  4. 開啟控制台 > 系統管理工具 > 服務,啟動 Apache 服務。

適用環境

本文章適用於 Windows 7, Windows 8, Windows Server 2008, Windows Server 2012。

Reference

Apache Core Features
http://httpd.apache.org/docs/2.4/mod/core.html
Description of core php.ini directives (PHP Manual)
http://php.net/manual/en/ini.core.php
Microsoft Windows 下的 Apache 2.x
http://www.php.net/manual/zh/install.windows.apache2.php
手動安裝(非 *.msi 封裝)Apache 2.4.2 於 Windows 成功紀要
http://www.phpbb-tw.net/phpbb/viewtopic.php?t=54580