it-swarm.cn

致命错误:调用未定义函数pg_connect()

我正在尝试连接到安装了PostgreSQL的数据库(远程服务器)。我的PHP代码正尝试使用pg_connect()连接到数据库,但出现错误消息:-“致命错误:在/ var/www/website/functions中调用未定义的函数pg_connect()。第82行的php”。

82行只是:

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

(之前定义的所有变量)

我检查了很多论坛,建议的唯一解决方案是找到包含一行的php.ini文件:-extension = pgsql.so(对于UNIX)和extension = php_pgsql.dll(对于Windows)。

应该声明此语句,而解决方案是取消注释。我已经尝试过了,但是仍然没有改变这种情况。远程服务器的版本高于PostgreSQL v9.0.4。然后,我在笔记本电脑上安装了PostgreSQL v8.4.8,并使用MAMP在本地运行了该网站。最初,Apache由于某种奇怪的原因而崩溃,我修复了该问题,但最终还是遇到了与之前相同的错误,即致命错误:调用未定义函数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中是UNIX等效于“ php_pqsql.dll”的)。我也将“ pqsql.so”文件复制粘贴到了Apache/bin目录中,但是没有任何改变。

我主要不是在命令行中运行php。我只是很想知道phpinfo()能给我什么与我在上面的回复中提到的pgsql相关的信息。

我仍在使用您提到的工具,一旦得到任何结果,我会尽快答复。

谢谢,H

31
hrshd

您需要安装php-pgsql软件包或平台所需要的任何软件包。我不认为您是这样说的。

在Ubuntu和Debian上:

Sudo apt-get install php5-pgsql
45
Scott Marlowe

易于安装ubuntu:

赶紧跑:

Sudo apt-get install php5-pgsql

然后

Sudo service Apache2 restart //restart Apache

要么

通过删除;取消注释php.ini中的以下内容

;extension=php_pgsql.dll

然后重启Apache

14
Angelin Nadar

致命错误:调用未定义的函数pg_connect()...

在Archlinux中安装Lampp或xampp时出现此错误,

解决方法是编辑php.ini,它位于/opt/lampp/etc/php.ini中

然后找到这行并取消注释

extension="pgsql.so"

然后使用xampp重新启动服务器Apache并进行测试...

8
davidleosam

编辑。我刚刚注意到您提到MAMP。我的建议是针对Windows的,但是如果您知道要使用什么相应的工具,它可能会很有用。

尝试的事情

  • 自编辑php.ini以来,您是否已重新启动PHP和Apache?

  • 在您的php\ext目录中找到php_pgsql.dll吗?

  • 您是否将php作为模块运行?如果是这样,请尝试将php_pgsql.dll文件复制到Apache\bin目录中。

  • 您是否从命令行运行PHP,并且带有指定其他php.ini文件的标志?

  • 您可以尝试使用Sysinternals的Filemon之类的工具来查看运行PHP时试图访问哪些文件。

  • 如果缺少依赖项,您可以尝试使用诸如Dependency Walker之类的工具查看postgreSQL DLL的依赖项。对于Unix,出现了快速搜索 ldd

6
JRL
  1. 将'PHPIniDir“ C:/ php”'添加到httpd.conf文件中。(前提是您已将PHP保存在C:中,或者指定了保存PHP的位置。 )
  2. Php.ini文件中的'extension = php_pgsql.dll'之后取消注释
  3. 在php.ini目录中取消注释'; extension_dir =“ ext”'
5
Chetan

我在win7中有相同的症状。我得到了这个脚本:

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

当我通过Apache( http://localhost/phpinfo.php )执行phpinfo.php脚本时,我得到了错误消息:调用未定义的函数pg_connect( )在...

当我从命令行(php phpinfo.php)执行same脚本时,我得到了预期的消息:PHP警告:pg_connect():无法连接到PostgreSQL服务器:“ blah”后缺少“ =”

在这两种情况下,都使用了预期的php.ini:

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

但是在基于Apache的执行情况下,phpinfo中的pgsql部分完全丢失了,并且在基于命令行的执行中存在。

解决的办法是我在Apache httpd.conf中添加了以下行:

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

似乎出于某种原因,当Apache运行php脚本时,该文件不会自动加载,但是如果我从命令行运行php脚本,则会加载该文件。

希望对您有所帮助。

2
Csongor Halmai

对于Centos 6.10上的php 5.4,我们在php.ini中包含以下几行

extension=/opt/remi/php54/root/usr/lib64/php/modules/pdo.so
extension=/opt/remi/php54/root/usr/lib64/php/modules/pgsql.so
extension=/opt/remi/php54/root/usr/lib64/php/modules/pdo_pgsql.so

有用。

1
Alf Newman

我在OSX上也遇到了这个问题。解决方案是取消注释extension = pgsql.so中的php.ini.default,并删除.default后缀,因为文件php.ini不存在。

如果您使用的是XAMPP,则php.ini文件位于/ XAMPP/xampfiles/etc

1
user9548

安装所需的软件包。如果您使用yum:

yum search pgsql

然后查看结果,找到类似“ php-pgsql”之类的东西。复制名称,然后:

yum install *paste the name of the package here*
0
Maya SC

extension=php_pgsql.dll配置文件中取消对php.ini的注释确实可以,但是,您可能还必须重新启动XAMPP服务器才能使其正常运行。我必须这样做。

0
Adim Victor

在Gentoo上,在/etc/portage/make.conf中使用USE标志postgres并重新出现“ emerge php”

0
kemals

对于使用PHP 5.6遇到此问题的人,可以使用以下命令:

yum install php56w-pgsql

有关PHP 5.6的更多软件包名称的列表,请打开以下链接并向下滚动至软件包:

CentOS/RHEL 7.0上的PHP 5.6和6.6通过Yum

0
SPRBRN

我遇到此错误,最终与PHP的extension_dir的加载方式有关。

如果在打印出phpinfo()时发现在PDO标头下PDO驱动程序设置为无值,则可能要检查您是否已成功加载扩展目录,如本文中所述:

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

0
quetzaluz

解决方案与以下事实有关:您的文件包含您的php配置。即php.ini通过添加“;”取消注释了负责充当php和postgres之间的中间人的扩展名。在语句“ extension = pdo_pgsql”前面

快速修复

  1. 在您喜欢的编辑器中打开php.ini文件。 (原子????)
  2. 搜索“动态扩展”部分下的“ extension = pdo_pgsql”行。 (一个简单的ctrl + f)将使您快速到达那里。
  3. 去除 ”;”在“; extension = pdo_pgsql”行的前面。
  4. 重新启动服务器。
  5. 去修复更多的错误,例如摇滚明星。 ????
0
Geeky64

您必须按照以下步骤操作:

打开php配置文件,该文件位于以下目录中

C: \ xampp \ php \ php.ini

在该文件中搜索扩展名部分,然后取消注释以下行

extension = php_pdo_pgsql.dll  
extension = php_pgsql.dll

然后重启你的Apache

0
Cristian Marques