Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 致命错误:调用未定义的函数pg_connect()_Php_Apache_Postgresql - Fatal编程技术网

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

Php 致命错误:调用未定义的函数pg_connect(),php,apache,postgresql,Php,Apache,Postgresql,我正在尝试连接到安装了PostgreSQL的数据库(远程服务器)。我的PHP代码试图使用pg_connect()连接到数据库,但我得到的错误是:-“致命错误:在/var/www/website/functions.PHP的第82行调用未定义的函数pg_connect() 第82行只是: $db = pg_connect($conn_string); where $conn_string = "host=".$hostname." port=5432 dbname=".$dbname." user

我正在尝试连接到安装了PostgreSQL的数据库(远程服务器)。我的PHP代码试图使用pg_connect()连接到数据库,但我得到的错误是:-“致命错误:在/var/www/website/functions.PHP的第82行调用未定义的函数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

“extension”目录中存在“pqsql.so”(它是Windows中“php_pqsql.dll”的UNIX等价物)。我还复制并粘贴了'pqsql.so'文件到Apache/bin目录,但它没有给我任何更改

我主要不是在命令行中运行php。我只是好奇地想看看phpinfo()会给我什么与我在上面的回复中提到的pgsql相关的信息

我仍在使用您提到的工具,并将在收到任何结果后立即作出回应

谢谢,
编辑。我刚注意到你提到了妈妈。我的建议适用于Windows,但如果您知道要使用哪些相应的工具,可能会很有用

尝试的事项:

  • 在编辑PHP.ini之后,您是否重新启动了PHP和Apache

  • php\u pgsql.dll是否位于php\ext目录中

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

  • 您是否从命令行运行PHP,并带有一个指定 不同的php.ini文件

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

  • 如果缺少依赖项,可以尝试使用Dependency Walker等工具查看postgreSQL DLL的依赖项。为Unix启动了快速搜索


编辑。我刚注意到你提到了妈妈。我的建议适用于Windows,但如果您知道要使用哪些相应的工具,可能会很有用

尝试的事项:

  • 在编辑PHP.ini之后,您是否重新启动了PHP和Apache

  • php\u pgsql.dll是否位于php\ext目录中

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

  • 您是否从命令行运行PHP,并带有一个指定 不同的php.ini文件

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

  • 如果缺少依赖项,可以尝试使用Dependency Walker等工具查看postgreSQL DLL的依赖项。为Unix启动了快速搜索


您需要安装php pgsql软件包或任何为您的平台调用的软件包。顺便说一句,我想你没有说过

在Ubuntu和Debian上:

sudo apt-get install php5-pgsql

您需要安装php pgsql包或为您的平台调用的任何东西。顺便说一句,我想你没有说过

在Ubuntu和Debian上:

sudo apt-get install php5-pgsql

ubuntu的简易安装:

只需运行:

sudo apt-get install php5-pgsql
然后

通过删除
,取消php.ini中的以下注释

;extension=php_pgsql.dll

然后重新启动apache轻松安装ubuntu:

只需运行:

sudo apt-get install php5-pgsql
然后

通过删除
,取消php.ini中的以下注释

;extension=php_pgsql.dll

然后重新启动apache

我遇到了这个错误,它最终与PHP的扩展目录的加载方式有关

如果在打印出phpinfo()时,您发现PDO标题下的PDO drivers设置为no值,您可能需要检查是否已成功加载扩展目录,如本文所述:


我遇到了这个错误,它最终与PHP的扩展目录的加载方式有关

如果在打印出phpinfo()时,您发现PDO标题下的PDO drivers设置为no值,您可能需要检查是否已成功加载扩展目录,如本文所述:


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

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

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


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

我在OSX上也遇到了这个问题。解决方案是在
php.ini.default
和de中取消对
扩展名=pgsql.so
的注释
yum install *paste the name of the package here*
<?php
    phpinfo();
    pg_connect("blah");
Loaded Configuration File   C:\Program Files (x86)\php\php.ini 
LoadFile "C:/Program Files (x86)/php/libpq.dll"
extension="pgsql.so"
C: \ xampp \ php \ php.ini
extension = php_pdo_pgsql.dll  
extension = php_pgsql.dll
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