繁体   English   中英

php postgresql永久连接始终关闭

[英]php postgresql persistent connections always close

我在一台服务器上有一个Apache / PHP应用程序,而另一台服务器上有一个PostgreSQL数据库。 它们被配置为通过SSL连接。 一切正常,除了$db->setAttribute(PDO::ATTR_PERSISTENT, true); 该脚本中的TCP连接始终处于关闭状态。 PHP.INI具有pgsql.allow_persistent = On pgsql.auto_reset_persistent = Off pgsql.max_persistent = 30pgsql.max_links = 30 使用sudo netstat -nap可以看到两个服务器之间没有已建立的连接。 我还需要做什么来保持连接打开? 每个请求的新连接开销为10-12毫秒。

我发现此说明是在php手册页之一中找到的一种公平方法:

如果希望使用持久连接,则必须在传递给PDO构造函数的驱动程序选项数组中设置PDO :: ATTR_PERSISTENT。 如果在实例化对象后使用PDO :: setAttribute()设置此属性,则驱动程序将不使用持久连接。

那就是我做错的地方。 我正在使用这个:

$host = explode('.',$_SERVER['SERVER_NAME']);
$db = new PDO($host[0]);
$db->setAttribute(PDO::ATTR_PERSISTENT, true);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

当我应该这样做时:

$host = explode('.', $_SERVER['SERVER_NAME']);
$db = new PDO($host[0],null,null,array(PDO::ATTR_PERSISTENT=>true,
      PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,
      PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC));

DSN位于pdo.ini文件中。 幸运的是,空用户名和密码将被忽略,否则也不起作用。 现在, new PDO只需0.02 ms而不是10 ms。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM