2011-09-15 50 views
24

我想連接到我的數據庫(遠程服務器),其中安裝了PostgreSQL。我的PHP代碼嘗試使用pg_connect()連接到數據庫,但出現以下錯誤消息: - 「致命錯誤:調用第82行/var/www/website/functions.php中的未定義函數pg_connect()」。致命錯誤:調用未定義的函數pg_connect()

線82簡單地說就是:

$db = pg_connect($conn_string); 
where $conn_string = "host=".$hostname." port=5432 dbname=".$dbname." user=".$db_user." password=".$db_password."" 

(所有早期定義的變量)

我檢查過很多論壇和唯一的解決辦法是建議定位包含一行php.ini文件 - 擴展= pgsql.so(對於UNIX)和extension = php_pgsql.dll(對於Windows)。

此聲明應該被評論,解決方案是取消註釋。我已經嘗試過,但仍然沒有改變這種情況。遠程服務器的版本比安裝的PostgreSQL v9.0.4晚。 然後,我將PostgreSQL v8.4.8安裝到我的筆記本電腦上,並使用MAMP在本地運行網站。起初,阿帕奇因爲某種奇怪的原因墜毀了,我修復了這個問題,但我又一次遇到了與之前相同的錯誤,即致命錯誤:調用未定義的函數pg_connect()...

我也跑了phpinfo()和它表明php版本支持PostgreSQL模塊。我花了整整一天的時間搜索解決方案,但一直沒有成功。這是我開發一個網站的第一個項目,我沒有任何智慧。任何有點幫助將不勝感激。

的phpinfo()給了我一個巨大的在終端上的東西,但有關PostgreSQL的房源清單如下: -

pdo_pgsql 

PDO Driver for PostgreSQL => enabled 
PostgreSQL(libpq) Version => 9.0.4 
Module version => 1.0.2 
Revision => $Id: pdo_pgsql.c 306939 2011-01-01 02:19:59Z felipe $ 

pgsql 

PostgreSQL Support => enabled 
PostgreSQL(libpq) Version => 9.0.4 
Multibyte character support => enabled 
SSL support => enabled 
Active Persistent Links => 0 
Active Links => 0 

Directive => Local Value => Master Value 
pgsql.allow_persistent => On => On 
pgsql.auto_reset_persistent => Off => Off 
pgsql.ignore_notice => Off => Off 
pgsql.log_notice => Off => Off 
pgsql.max_links => Unlimited => Unlimited 
pgsql.max_persistent => Unlimited => Unlimited 

我每次編輯我做了,因爲它是在每一個提到後重新啓動MAMP我已閱讀到目前爲止。我相信重置Apache和PHP。

'pqsql.so'(這是Windows中'php_pqsql.dll'的UNIX等效物)存在於'extension'目錄中。我也將'pqsql.so'文件複製粘貼到Apache/bin目錄,但它沒有給我任何改變。

我沒有在命令行中主要運行php。我只是很好奇,看看我在上面的回覆中提到的phpinfo()會給我提供與pgsql相關的東西。

我仍在處理您提到的工具,並會盡快回復我收到的任何結果。

感謝, ^ h

+1

什麼是'phpinfo()'顯示完全與PostreSQL有關?您是否重新啓動了中間的Web服務器? –

+1

+1用於運行phpinfo()。毫無疑問,這將顯示pgsql擴展未加載。您可能需要在php.ini中指定擴展名的完整路徑,然後重新啓動apache。 – Brendan

回答

6

編輯。我剛剛注意到你提到了MAMP。我的建議是針對Windows的,但如果您知道使用哪些相應的工具可能會有用。

您可以嘗試

  • 你有沒有重新啓動PHP和Apache,因爲你的php.ini的編輯?

  • 是否在您的php \ ext目錄中找到php_pgsql.dll?

  • 您是否將php作爲模塊運行?如果是這樣,請嘗試複製php_pgsql。dll 文件在Apache \ bin目錄中。

  • 您是否在命令行中運行PHP,並使用標誌指定 不同的php.ini文件?

  • 您可以嘗試使用諸如Sysinternals的Filemon之類的工具來查看在運行PHP時試圖訪問的文件是什麼 。

  • 您可以嘗試使用Dependency Walker之類的工具來查看postgreSQL DLL的依賴關係,以防缺少依賴關係。快速搜索爲Unix提供了ldd

+1

在我的情況下,將php_pgsql.dll複製到apache/bin中修復它! – Davincho

37

您需要安裝php-pgsql軟件包或任何它被稱爲您的平臺。順便說一句,我不認爲你說過。

在Ubuntu和Debian:

sudo apt-get install php5-pgsql 
+0

我正在運行Mac OS X Lion。我會盡力解決你的問題並儘快回覆。謝謝。 – hrshd

+1

這是我缺失的組件。謝謝! 我發現在開放的Apache日誌文件,該解決方案:在問題 /var/log/apache/error.log 行說:缺少函數pg_connect() – anon58192932

+6

感謝。這對我在Ubuntu的工作,但我也不得不重新啓動'sudo服務apache2重啓'的Apache。我希望能幫助別人。 – snapfractalpop

13
Easy install for ubuntu: 

Just run, 
> sudo apt-get install php5-pgsql 
then 
> sudo service apache2 restart //restart apache 

Uncomment the following in php.ini by removing the ";" 

;extension=php_pgsql.dll 

then 
restart apache 
+0

我確定對於Debian/Ubuntu我們不需要重新啓動apache2。 –

+0

在我的情況下,仍然需要取消註釋以下行:extension = php_pdo_pgsql.dll –

+0

我沒有評論該行,但我不知道我必須重新啓動Apache。我在Windows上使用XAMPP,爲了使其工作,我必須重新啓動Apache服務器。感謝您的解決方案。 – Fearnbuster

0

我遇到了這個錯誤,它最終被涉及到PHP的extension_dir中是如何加載。

如果在打印出的phpinfo(),你會發現PDO標題下PDO驅動設置爲沒有價值,你可能要檢查是否已成功加載您的擴展目錄在這篇文章中詳細介紹:

https://stackoverflow.com/a/14786808/2578505

0

在Gentoo,在/etc/portage/make.conf使用USE標誌的Postgres和重新出現 「出現PHP」

1

我也有這個問題上OSX。該解決方案取消extension = pgsql.sophp.ini.default的註釋並刪除.default後綴,因爲文件php.ini不存在。

如果您使用XAMPP,php.ini文件位於/ XAMPP/xampfiles /等

0

對於那些你們誰擁有這個問題,PHP 5.6,可以使用下面的命令:

yum install php56w-pgsql 

爲PHP 5.6的多包名稱的列表,打開下面的鏈接,然後向下滾動到包:

PHP 5.6 on CentOS/RHEL 7.0 and 6.6 via Yum

5
  1. 收藏「的PHPIniDir‘C:/ PHP的’」。到httpd.conf文件(提供 你有你的PHP保存在C:要不給PHP在哪裏 的保存位置)
  2. 取消註釋以下「延伸= php_pgsql.dll」在 php.ini文件
  3. 取消註釋 ';下extension_dir = 「EXT」' 在php.ini 目錄
+0

請不要添加「謝謝」作爲答案。一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你將能夠[投票問題和答案](http://stackoverflow.com/help/privileges/vote- )你發現有幫助。 – Bono

+1

但我試圖通過添加一個額外的步驟已經存在的以前的解決方案 – Chetan

+0

啊好吧。你會考慮改進你的答案,因爲對我來說還不清楚是否有一個額外的步驟;) – Bono

0

安裝所需要的程序包。 如果你用yum:

yum search pgsql 

然後看看結果和發現任何東西像「的php-pgsql的」或類似的東西。複製名稱然後:

yum install *paste the name of the package here* 
-1

在windows操作系統找到這個在php.ini「php_pgsql.dll」並刪除「;」在擴展那麼這就是:) Cheeers!

1

我在win7中有相同的症狀。我得到這個腳本:

<?php 
    phpinfo(); 
    pg_connect("blah"); 

當我執行通過Apache(http://localhost/phpinfo.php)的phpinfo.php的劇本,然後我得到的錯誤消息:...

調用未定義的函數pg_connect()當我在命令行(PHP phpinfo.php的)執行相同腳本,然後我得到了預期的消息: PHP的警告:pg_connect():無法連接到PostgreSQL服務器:缺少「=」「胡說」後

在兩種情況下,使用所期望的php.ini:

Loaded Configuration File C:\Program Files (x86)\php\php.ini 

但pgsql的部分被完全從的phpinfo在基於Apache的執行的情況下,丟失的,這是存在於基於命令行執行。

的解決方案是我添加下面一行到Apache的httpd.conf:

LoadFile "C:/Program Files (x86)/php/libpq.dll" 

看來,由於某種原因,這個文件沒有自動加載時運行Apache的PHP腳本,但它被加載,如果我從命令行運行php腳本。

我希望它有幫助。

5

致命錯誤:調用未定義的函數pg_connect()...

我已經當我安裝LAMPP或XAMPP的Archlinux這個錯誤,

的解決方案是修改php.ini中,它是位於/opt/lampp/etc/php.ini

然後找到這一行並取消

延長= 「pgsql.so」

然後重新啓動服務器Apache與XAMPP和測試...

好運

+0

嘗試使用XAMPP我在這個地方做了一個西班牙語教程:http://www.inforticx.com/lampp.html – davidleosam

相關問題