【專業】Apache/PHP on Windows XP

很久以前我在 newsgroup 上問過一個很白痴的問題,大意是為什麼我的 SSI 只能在網站上看到,在硬碟端卻起不了作用?對方的回答也很妙:既然名為 SSI (server side includes) 當然就是要在 server 上才能跑啊…哈哈哈我怎麼就沒想到呢(乾笑)

順便介紹一下本站的寫法吧。我其實是對 programming 一竅不通的人,更不喜歡為了技術而技術。這是個單純的個人網站,用最陽春的 HTML+CSS 就已經綽綽有餘。因此,全站都是靜態的網頁,副檔名也一直使用最傳統的 .html。

但問題來了。隨著網站規模愈來愈大,我開始需要簡單的共用元件。至少我不想再為了每過一個年就得改一次 copyright 的時間,也不想為了一個一年三百六十四天不會變的年份去用到不需要的 javascript 了!

由於租用的是 Unix 系的主機,PHP 是最自然的選擇。但我不想把一整站的 .html 手動改成 .php(還得用我不喜歡的 mod_write 去改寫路徑,等 google 更新網址…),天啊你知道這個站有多大嗎(大叫)如果五年前有人警告過我的話,我也許會考慮所謂的 future proof URLs,但事到如今也來不及了。所幸,我們有無所不知的 google,還有無所不能的 Apache;只要經過適當的設定,.html 也能執行 PHP:

with httpd.conf and php.ini access

在 httpd.conf 的 mod_mime.c 段落中加入:

AddType application/x-httpd-php .html

在 php.ini 加入:

include_path = ".:/path/to/folder"

再 restart apache 即可。

without httpd.conf and php.ini access

在 .htaccess 中加入:

AddType application/x-httpd-php .html
php_value include_path .:/path/to/folder

即可。

以上是 server 端的做法。那麼,回到一開始的問題:要怎樣在自己的電腦上執行 server 端限定的服務呢?答案很簡單:把自己的電腦也當成 server。參考了 Dave Shea 的 Virtual Hosts for Dummies 一文,再加上 google 大神的無邊法力,昨天終於在小深上成功架起了 Apache 和 PHP。是的,Windows 也可以玩 Apache(心)由於線上文件多以 Mac 為主,XP 的部分比較零散,簡單整理一下昨天遇到的幾個狀況:

Apache 1.3/PHP 4.3 on Windows XP Home

  • 下載 Apache 安裝檔,直接執行即可。需要設定的地方,用 localhost 搪塞就可以了。
  • 接著到 apache.exe 所在的目錄,執行 NET START APACHE 手動開啟。好像只有 XP 需要這樣搞?參考文件:apache.org: Running Apache for Windows as a Service
  • 如果要玩 virtual host 的話,除了照著 Dave 的教學去改 httpd.conf 以外,還需要在 C:\WINDOWS\System32\drivers\etc 的 hosts 中加入新的設定才會有效。
  • 接著下載並安裝 PHP。installer 不知道為什麼抓不下來,我裝的是 zip package。
  • 解壓縮後,把 dll 和 sapi 這兩個目錄的檔案全部移進根目錄(如 C:\PHP),並把 php.ini 移到 C:\WINDOWS 下面!
  • 回去改 Apache 的 httpd.conf, 指定 php.ini 的路徑和基本設定。參考文件:php.net: Apache 1.3.x on Microsoft Windows
  • 如果要在 localhost 上玩 include 的話,要修改 php.ini 的 include_path
  • 如果要讓 localhost 的 .html 也能執行 PHP,修改 httpd.conf,方法同上
  • 最後,記得要 restart apache。

同理可證,如果還要在 localhost 上玩 CGI 的話,就要再去裝 Perl。不過我不行了,所以就做到這樣就好了。颱風看來是真的來了…

2007 年補充:virtual host 發生 403 error 的話,找到 httpd.conf 這一段:

<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Satisfy all
</Directory>

把 Deny from all 改成 Allow from all,restart apache 即可。

Commenting is closed for this article.

關於雙子貓 / 關於本站

沉浮網路十數年,久居台北。性疏懶無方,喜不務正業,習晝伏夜出,素胸無大志。幼博學強記而頗有文采,少周遊列國而略有見識。及年長,貪多務廣復不求甚解,遂荒於學而疏於業…

元祖‧雙子貓的世界

大搜查線 / 柳葉敏郎

站內資源

雙子貓的三分鐘熱度充分表現在其共享書籤虛擬書櫃之中。身為站長,他會不定期巡視討論區,偶爾也會檢查 pagras.net {at} gmail.com 的信件。雖然沒有太大的意義,但這年頭沒有 RSS 似乎就很遜?