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

我正在使用Windows 7,PHP 5.3.5和WAMP服务器。 我有两个PHP文件:trigger.php和background.php。
我想运行background.php作为后台进程。 我必须从trigger.php中调用这个文件。 为了完成这个我用下面的方法。 我在trigger.php中包含以下代码,使background.php在后台进行处理。

$handle = popen('start /b C:\wamp\bin\php\php5.3.5\php.exe C:\wamp\www\email3.php','r'); 

在background.php我有follwing代码连接到数据库。

 $conn_string = "host=localhost port=5432 dbname=tagbase user=postgres password=postgres"; 

现在,parsing这条线正在得到follwing错误:

致命错误:调用第3行C:\ wamp \ www \ background.php中的未定义函数pg_connect()调用堆栈:0.0002 322792 1. {main}()C:\ wamp \ www \ background.php:0

通过在互联网上search,我发现了一些解决scheme,并按照以下php.ini中的build议进行了更改,

 uncommented, extension=php_pdo_pgsql.dll, uncommented, extension=php_pgsql.dll, uncommented, extension_dir = "c:/wamp/bin/php/php5.3.5/ext/", 

我也有c:/wamp/bin/php/php5.3.5/ext/文件夹中的php_pdo_pgsql.dll和php_pgsql.dll文件。

任何build议表示赞赏。

Apache 2.2.X配置

将下一行添加到Apache 2.2.x httpd.conf配置中:

 LoadFile "C:/Program Files/PostgreSQL/{version}/bin/libpq.dll" 

上一行必须在下一行之前输入。

Loadmodulee php5_module "c:/wamp/bin/php/php5.2.11/php5apache2_2.dll"

PHP 5.2.X配置

在php.ini配置文件中启用以下两行。 通过“启用”我的意思是,删除尾随; (分号)。 通过这些,你不注释行。

 extension=php_pdo_pgsql.dll extension=php_pgsql.dll 

重新启动WAMP

在index.php中加入这个测试

 echo extension_loaded('pgsql') ? 'yes':'no'; 

(来源: http : //www.plaatsoft.nl/wamp-postgresql-integration/ )

如果我们安装WAMP服务器,我们将得到两个php.ini文件。 一个在C:\ wamp \ bin \ php \ php5.3.5,另一个在C:\ wamp \ bin \ apache \ Apache2.2.17 \ bin中。

如果我们从浏览器执行一个php文件,那么将会引用C:\ wamp \ bin \ apache \ Apache2.2.17 \ bin中的php.ini文件。 如果我们从命令行执行一个php文件,那么C:\ wamp \ bin \ php \ php5.3.5中的php.ini文件将被引用。

在PHP-> PHP扩展中启用/禁用dll,所有更改将保存在C:\ wamp \ bin \ apache \ Apache2.2.17 \ bin \ php.ini文件中。 但是C:\ wamp \ bin \ php \ php5.3.5 \ php.ini文件保持不变。

对于我的问题,我做了以下更改

 uncommented, extension=php_pdo_pgsql.dll, uncommented, extension=php_pgsql.dll, uncommented, extension_dir = "c:/wamp/bin/php/php5.3.5/ext/", 

在C:\ wamp \ bin \ php \ php5.3.5 \ php.ini文件中。 现在它的工作很好。 🙂

在我的情况下使用Apache / 2.4.10 PHP版本5.4.32 PostgeSQL 9.3我把libpq.dll从PHP目录添加到Apache httpd.conf中,因为Apache拒绝从PostgreSQL 9.3的libpq.dll开始