XAMPP啟用PostgreSQL功能
XAMPP是一套以Apache、PHP、MySQL組成的開發用套裝伺服器,但它並沒有內建PostgreSQL,在設定PostgreSQL的連線上也不是這麼直覺。
最近在架設開發環境的期間遇到了XAMPP無法順利啟用PostgreSQL連線的問題。經過一番研究,總算找出了解法。這篇就是介紹如何在XAMPP中啟用PostgreSQL的方法。
作業系統說明
我目前使用的作業系統是Windows 7 企業版,64位元。這篇的問題主要都是發生在Windows之中,Linux使用者應該不太容易遇到這個問題喔。
XAMPP與PostgreSQL的安裝
XAMPP使用的是XAMPP Portable 1.8.1。
必須特別註明的是,儘管這是Portable可攜版本,但是目錄必須為「xampp」並放置在磁碟分割的根目錄下,例如「C:\xampp」或「D:\xampp」。我因為想嘗試不同版本而將資料夾命名為「xampp 1.8.1」之類的名詞,xampp就無法順利啟動。
PostgreSQL使用的是9.2.2版。網路上討論這個問題時通常看到的是8.x版本,所以我想版本應該不是問題。
XAMPP的部份
剛安裝好XAMPP與PostgreSQL的時候,XAMPP裡面的PHP是無法順利連上PostgreSQL的,因為它預設並沒有打開pg_sql模組。
設定php.ini
php.ini是PHP的主要設定檔,它位於以下路徑:
[xampp]\php\php.ini
請以任意的文字編輯器開啟,並找到以下兩個PostgreSQL模組的選項:(兩者位於不同行,但很相近)
;extension=php_pdo_pgsql.dll
;extension=php_pgsql.dll
開啟模組的方法就是移除前面的註解符號「;」,修改之後如下:
extension=php_pdo_pgsql.dll
extension=php_pgsql.dll
修改完成,請重新啟動Apache。
用XAMPP Control Panel來啟動XAMPP
最近幾版的XAMPP都有一個方便的控制版:XAMPP Control Panel,位於以下路徑:
[xampp]\xampp-control.exe
開啟之後就可以看到上圖的畫面。
如果要開啟Apache,點下Apache後面的「Start」按鈕就可以了。
缺少libpq.dll的問題
照理來說,照上面的步驟啟用PostgreSQL模組之後就能正常運作。但是實際上卻遇到了錯誤訊息:
無法啟動程式,因為您的電腦遺失 LIBPQ.dll。請嘗試重新安裝修正這個問題。
不僅如此,還連帶地出現以下的錯誤警告:
這個錯誤就是因為XAMPP沒有載入PostgreSQL重要的函式庫libpq.dll。
找到libpq.dll的位置
我安裝的時候,赫然發現XAMPP其實已經內建了libpq.dll。檔案位置如下:
[xampp]\php\libpq.dll
但是在Windows中就是無法自動載入,必須要手動設定才行。
在httpd-xampp.conf中載入libpq.dll
要載入libpq.dll則必須在Apache設定檔中加入LoadFile選項。
網路上大部分都建議修改Apache的主要設定檔httpd.conf。但是httpd.conf很長、也有一定結構,我找了幾個地方塞進LoadFile,開啟Apache時都會發生錯誤,如上圖。
後來我發現XAMPP也在他們自己的設定檔httpd-xampp.conf使用了LoadFile,我們也可以在此設定載入libpq.dll。httpd-xampp.conf的檔案位置如下:
找到這一行設定:
LoadFile "/xampp/php/php5ts.dll"
在前面插入載入libpq.dlll的設定:
LoadFile "/xampp/php/libpq.dll"
LoadFile "/xampp/php/php5ts.dll"
設定完的httpd-xampp.conf就如上圖。
這樣再開啟就不會出錯了。
檢測PHP是否啟用了PostgreSQL的功能
phpinfo()
要知道PHP到底有沒有啟用PostgreSQL,最簡單的方式就是來看phpinfo()的訊息。XAMPP內建一個網頁專門顯示phpinfo()資訊,開啟Apache之後請開啟以下網址:
搜尋看看「pg_sql」,應該可以看到模組的相關資訊,那就表示順利啟用。
用函式檢測是否有啟用PostgreSQL
另一個方法就是檢查PostgreSQL的函式能不能使用,能夠使用就表示PostgreSQL模組有順利啟用。PHP檢查函式的語法如下:
$postgresql_is_enable = function_exists("pg_connect");
我們就能透過$postggresql_is_enable來得知PostgreSQL是否有順利啟用。
結語:PostgreSQL真是小眾
作為知名的開發環境,XAMPP在支援PostgreSQL上卻是意外地薄弱。這個問題在網路上查詢的結果,有不少人都是叫你關掉pg_sql就好,實在是令人為PostgreSQL的小眾難過。
比起流行的MySQL,我仍然覺得PostgreSQL才是大型系統應該要使用的資料庫。不光是可以用於商業行為的BSD授權(MySQL商業使用要付費的啊,希望大家要有授權的觀念),transaction功能與豐富的資料型態也都是讓人愛不釋手。
在此還是呼籲一下PostgreSQL的重要性,希望大家多多重視這個重量級的資料庫吧!
libp"Q".dll =)
回覆刪除To 1樓匿名,
回覆刪除已修正。
作者已經移除這則留言。
回覆刪除完全同意PostgreSQL的重要性!
回覆刪除順便感謝此篇教學文~
To 馬韶均,
回覆刪除不客氣