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

时间:2011-09-15 22:16:00

标签: php apache postgresql

我正在尝试连接到安装了PostgreSQL的数据库(远程服务器)。我的PHP代码尝试使用pg_connect()连接到数据库,但我得到错误说: - “致命错误:在第82行的/var/www/website/functions.php中调用未定义的函数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文件: - 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中'php_pqsql.dll'的UNIX等价物)出现在'extension'目录中。我还将'pqsql.so'文件复制粘贴到Apache / bin目录,但它没有给我任何改动。

我主要是在命令行中运行php。我只是很想知道phpinfo()会给我与pgsql相关的内容,我在上面的回复中提到过。

我仍在研究您提到的工具,并会在得到任何结果后立即作出回应。

谢谢, ħ

17 个答案:

答案 0 :(得分:45)

您需要安装php-pgsql软件包或其为您的平台调用的软件包。我不认为你这样说过。

在Ubuntu和Debian上:

sudo apt-get install php5-pgsql

答案 1 :(得分:14)

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 

答案 2 :(得分:7)

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

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

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

然后找到这一行并取消注释

扩展= “pgsql.so”

然后使用xampp重启服务器apache并测试...

祝你好运

答案 3 :(得分:6)

修改即可。我刚注意到你提到了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

答案 4 :(得分:5)

  1. 添加' PHPIniDir" C:/ php"'进入httpd.conf文件。(提供 你将PHP保存在C:中,或者给PHP所在的位置 保存。)
  2. 取消注释' extension = php_pgsql.dll'在 php.ini文件
  3. 取消评论&#39 ;; extension_dir ="分机"'在php.ini中 目录

答案 5 :(得分:2)

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

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

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

当我从命令行(php phpinfo.php)执行相同的脚本时,我得到了预期的消息: 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脚本,它就被加载了。

我希望它有所帮助。

答案 6 :(得分:1)

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

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

答案 7 :(得分:1)

对于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

有效。

答案 8 :(得分:0)

如果您使用ppa存储库http://ppa.launchpad.net/ondrej/php/ubuntu获得了php5.6,

然后您应使用以下命令安装软件包:

sudo apt install php5.6-pgsql

最后,如果您使用apache2,请重新启动它:

sudo service apache2 restart

答案 9 :(得分:0)

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

快速修复

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

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

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

C: \ xampp \ php \ php.ini

在该文件中搜索扩展部分并取消注释以下行

extension = php_pdo_pgsql.dll  
extension = php_pgsql.dll

并重启你的apache

答案 12 :(得分:0)

安装所需的包。 如果你使用yum:

yum search pgsql

然后查看结果并找到类似于&#39; php-pgsql&#39;或类似的东西。复制名称然后:

yum install *paste the name of the package here*

答案 13 :(得分:0)

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

yum install php56w-pgsql

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

PHP 5.6 on CentOS/RHEL 7.0 and 6.6 via Yum

答案 14 :(得分:0)

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

答案 15 :(得分:0)

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

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

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

答案 16 :(得分:-1)

在Windows操作系统中,在php.ini“php_pgsql.dll”中找到它并删除“;”在扩展中那就是它了:) Cheeers!