PHP pg_connect()在MacOS索诺马升级后在PHP-FPM中不返回

oewdyzsn  于 6个月前  发布在  PHP
关注(0)|答案(1)|浏览(46)

我已经浪费了很多时间在这一点上,我被难住了。任何人都有一些见解或工作周围?提前感谢您的关注...
我的PHP/PostgreSQL/NGINX应用程序已经在MacOS上使用通过Homebrew安装的PHP-FPM运行多年。将MacOS从13.x升级到索诺马14.1后,它不再从pg_connect()返回。我也在2台机器上复制了这一点。
PHP、NGINX或PostgreSQL配置没有更改。只有MacOS升级。PostgreSQL使用psql和不同的--host参数通过相同的接口访问正确连接。
我用pg_connect()创建了一个测试脚本,尝试了多种排列,发现:

<?php
# The following line does not return and the request stops
$db = pg_connect("host=dbserver port=5432 dbname=appdb user=appuser");
echo "success!"
?>

字符串

  • 当调用测试脚本时,pg_connect和pg_pconnect都死了或者没有从NGINX/PHP-FPM返回(NGINX返回“Bad Gateway”)。
  • 当从命令行调用测试脚本(php-ftest.php)时,这两种方法都可以工作
  • 从连接字符串中删除“host=xxx”参数对这两种情况都有效,并且它能够连接到本地postgresql(虽然不是我需要的)。
  • 变体“host=ip”、“host=127.0.0.1”、“host=dnsname”、“host=localhost”都失效或不返回。(FPM)
  • 我在Postgres、NGINX或PHP日志中找不到任何有用的错误,但在php-fpm.log中,我收到了数千条这样的消息:

:[pool www] child 82817在开始后0.000208秒后在信号9(SIGKILL)时退出
MacOS现在会阻止连接,直到设置为允许吗?
版本:MacOS 14.1.1,PHP 8.2.13还8.3.0,PostgreSQL 15.5服务器,还16.1. libpq 16.1,nginx/1.25.3,Homebrew 4.1.21; Apple Mac M1

ff29svar

ff29svar1#

我遇到了完全相同的问题,只是使用PDO而不是pg_connect。
感谢您发布关于从pg_connect语句中删除host:localhost的说明。一旦我从PDO语句中删除了它:
不工作:

$dbh = new PDO("pgsql:host=localhost;dbname=test", $user, $pass);

字符串
作品:

$dbh = new PDO("pgsql:dbname=test", $user, $pass);


Postgres连接又工作了。真的很奇怪。这是我的堆栈,如果它对其他人有用的话:
MacOS索诺马14.1.2(23B92),Postgresql@16(Homebrew),email protected(https://stackoverflow.com/cdn-cgi/l/email-protection)(Homebrew),libpq 16.1(Homebrew)

相关问题