最近有想把公司的用了六年的 PowerPC Xserve 換成新的 Mac mini with Snow Leopard 或新的 Intel-based Xserve,但畢竟舊的機器還在跑 Mac OS X 10.4 Tiger,而我在上面裝的是 Marc Liyanage 的 PHP Apache Module,這個 PHP 版本跟 Apple 比在雪豹裡附的 PHP 多了很多東西,其中包括下列我需要的功能:
- 可以連接 M$ SQL Server,這對於大部份的企業應用很重要
- 可連接 Oracle Server,目前雖沒用到,但難保哪天不會用到
- 可製作含有有 TrueType 字型的圖形,這在某些應用,如 Captcha 的防堵機器人留言模組是重要的功能
由於 Marc 先生到目前為止還沒有出 10.6 版的 PHP Module Package,所以為了這些需求,看來我得自己 compile 一個版本來用。在網路上找了很多資料,終於花了一天時間初步完成。以下是我 Compile 的粗略步驟:
1. 先到下列地方下載所有需要的模組
- MySQL 5.1 GA,到 http://dev.mysql.com/downloads/mysql/5.1.html 下載 x86_64 (Intel 64-bit)或者 x86_32(Intel 32-bit) 的 Mac OS X 10.5 package,請依您的系統選擇適當的 OS X Package 下載。下載後請安裝好。
- OpenSSL 0.9.8l,到 http://openssl.org/ 下載
- CURL-7.19.7.tar.gz,到 http://curl.haxx.se/download.html 下載
- gettext-0.17.tar.gz,到 http://ftp.gnu.org/pub/gnu/gettext/gettext-0.17.tar.gz 下載
- freetds-0.8.2,到 ftp://ftp.ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz 下載
- freetype-2.3.11,到 FreeType.org 下載
- jpegsrv.v6b.tar.gz,到這裡下載
- libpng,到這裡下載
- t1lib (Adobe Type 1 font rasterizer),到這裡
- libtiff-3.8.2.tar.gz,到這裡下載
- libmcrypt,到這裡下載
- PHP 5.3.1 原始檔,到這裡下載
2. 除了 PHP 5.3.1,開始一個一個 compile
在開始 Compile 之前,請先確認:
- 你有裝了最新的 XCode,沒有的話先去下載(需要是 Apple Developer Connection 的會員,可以免費成為會員)。
- 你有用過 "終端機"(Terminal)應用程式的經驗。
- 有啓用 root 使用者權限。尚未啓用的話,可以參考這篇文章。請注意,root 權限是至高無上的,當你開啓並登入為 root 時,你必須知道妳在幹嘛,要不然會很容易把系統搞掛。
有上述條件後,先建立一個檔案夾,再把這再步驟 #1 所下載的所有檔案,搬到那個檔案夾中。以我的例子來說,就是搬到 ~/Documents/unix/ 裡。
接下來大部份就是在終端機用 tar 解壓,然後下 ./configure && make && sudo make install 命令。詳細的步驟命令,可以參考 Installing AMP (Apache, MySQL, PHP) on Mac OS X 10.6 Snow Leopard 還有 Compiling PHP with OCI8/Oracle on Mac OS X Snow Leopard,但這兩篇的 compile PHP 的部份就是僅供參考了,因為這裡面的 PHP 5.3.1 的 ./configure 跟我的不一樣。
這邊要特別注意的是支援 M$ SQL Server 的 FreeTDS compile 方式,在解壓了 FreeTDS 後,在 configure 時應該是要下下面的指令:
make
sudo make install
這樣方能讓稍候的 PHP 5.3.1 compile 正確執行。
3. Oracle 的問題
根據 Compiling PHP with OCI8/Oracle on Mac OS X Snow Leopard,我們必須先去 Oracle 下載 Instant Client for Mac OS X 還有它的 SDK 檔案,把 Instant Client 的檔案移到 /usr/local/instantclient/ 中,而 SDK 檔案移到 /usr/local/instantclient/sdk 中,另外再下下面的終端機指令:
sudo ln -s libclntsh.dylib.10.1 libclntsh.dylib
sudo ln -s libclntsh.dylib libclntsh.so
export NLS_LANG="American_America.UTF8"
export DYLD_LIBRARY_PATH="/usr/local/instantclient"
這邊我就不多解釋,請看該文章的 "Oracle instant client" 部份。
4. Compile PHP 5.3.1
如果步驟 #2, #3 的部份都 OK,那接下來就可以 compile PHP 5.3.1 本體了。請先把下載下來的 PHP 用 tar 解壓,之後會有個 "php-5.3.1" 的檔案夾。在我們 ./configure 前,我們得解決 iconv compile 會出現的問題,所以請用 BBEdit 或是你熟悉的 shell text editor 打開 "php-5.3.1" 下的 "ext/iconv/ionv.c" 檔案,然後把第 185 行開始的:
#define iconv libiconv
#endif
改成:
#define iconv iconv
#endif
然後存起來。接下來我們要在終端機下:
之後應該要跑一段時間,如果中間有錯誤,那可能是先前的步驟沒有做完整,請再回去重新檢視一遍。順利的話,可以再下 make 指令進行實際的編譯。編譯可能需要點時間,請耐心等候。
如果 make 無誤,那請下下面指令:
export NLS_LANG="American_America.UTF8"
export DYLD_LIBRARY_PATH="/usr/local/instantclient"
make install
exit
5. Apache 的設定
由於 Oracle Instant Client 在 compile 時有一個缺失,我們必須讓 Apache 在執行時能正確找到 Oracle 的 dylib,必須設定在 /usr/sbin/envvars。請先打開 /usr/sbin/envvars 這個檔,然後補上:
export DYLD_LIBRARY_PATH
這樣就差不多了。最後再回到終端機,下下面的命令:
就應該可以用了。如果不能用,通常是掛在 Oracle,這時請打開 /System/Library/LaunchDaemons/org.apache.httpd.plist 這個檔,在第 7 行加入:
<dict>
<key>DYLD_LIBRARY_PATH</key>
<string>/usr/local/instantclient</string>
</dict>
所以改完之後,整個檔應該會類似:
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<true/>
<key>EnvironmentVariables</key>
<dict>
<key>DYLD_LIBRARY_PATH</key>
<string>/usr/local/instantclient</string>
</dict>
<key>Label</key>
<string>org.apache.httpd</string>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/httpd</string>
<string>-D</string>
<string>FOREGROUND</string>
</array>
<key>OnDemand</key>
<false/>
<key>SHAuthorizationRight</key>
<string>system.preferences</string>
</dict>
</plist>
將該檔存好後,再用 sudo apachectl restart 就可以了。
以上只是我自己寫給自己看得,怕哪天又要做這事有個參考之用,所以不是寫的很仔細,大家有需要的就將就看看吧。
4 則留言:
請問一下
10.6 Server 版的PHP是比較完整版的?
還是像10.6非Server版這種殘障閹割的PHP?
我沒有 mac os x 10.6 server, 不過之前用過 10.4 server, 就是閹割版的
我就想找這個解決方案、沒想到在這裡找到了啊,好久沒來逛逛,一來就有收穫了啊,感恩啊^_^
Jovi 好久不見啊~
張貼留言