为什么不能增加连接超时?

时间:2017-10-06 06:43:32

标签: php postgresql pdo

这是我的设置:

$DBH = new PDO(
        "pgsql:host=$host;dbname=$dbname", 
        $username, 
        $password,
        array(
            PDO::ATTR_TIMEOUT => 60,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        )
    );

20秒后超时。 但如果我设置PDO::ATTR_TIMEOUT => 5,它会在5秒后超时。

为什么无法增加连接超时? 我使用xampp 3.2.2,Database Postgresql 9.2 我在本地测试,不存在反病毒。

4 个答案:

答案 0 :(得分:9)

PDO::ATTR_TIMEOUTdefault_socket_timeout INI设置是您可以从PHP更改的唯一值,但TCP连接可能会受到很多因素的影响。

在客户端,防火墙或操作系统本身也可能会应用超时限制 在传输过程中,任何中间对等体(您的路由器,ISP)也可以根据各种规则丢弃连接。

但最重要的是(即你的情况更可能),连接涉及两方,PostgreSQL服务器也有自己的超时设置 - tcp_keepalives_idletcp_keepalives_intervaltcp_keepalives_count和{ {1}}。

参考:https://www.postgresql.org/docs/current/static/runtime-config-connection.html

究竟是什么影响了你是不可能猜到的,你可能需要改变多个设置。检查上面的每一个,你可以。

答案 1 :(得分:3)

如果你想知道为什么要计时

,请在阻止后执行PDO::errorInfo

http://php.net/manual/de/pdo.errorinfo.php

并且超时可能来自另一方为什么在20秒后数据库响应超时时脚本会等待60秒。

答案 2 :(得分:1)

在连接之前使用ini_set("default_socket_timeout", 60);

答案 3 :(得分:1)

刚刚放

ini_set("default_socket_timeout", 50);
before your PDO() connect string.