我正在尝试连接到安装了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相关的内容,我在上面的回复中提到过。
我仍在研究您提到的工具,并会在得到任何结果后立即作出回应。
谢谢, ħ
答案 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)
答案 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”语句之前
快速修复
答案 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的更多软件包名称的列表,请打开以下链接并向下滚动到软件包:
答案 14 :(得分:0)
在Gentoo上,在/etc/portage/make.conf中使用USE标志postgres并重新出现&#34; emerge php&#34;
答案 15 :(得分:0)
我遇到了这个错误,最终与PHP的extension_dir加载方式有关。
如果在打印出phpinfo()后发现PDO标题下 PDO驱动程序设置为无值,您可能需要检查是否已成功加载扩展目录详见本文:
答案 16 :(得分:-1)
在Windows操作系统中,在php.ini“php_pgsql.dll”中找到它并删除“;”在扩展中那就是它了:) Cheeers!