这是我的设置:
$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 我在本地测试,不存在反病毒。
答案 0 :(得分:9)
PDO::ATTR_TIMEOUT
和default_socket_timeout
INI设置是您可以从PHP更改的唯一值,但TCP连接可能会受到很多因素的影响。
在客户端,防火墙或操作系统本身也可能会应用超时限制 在传输过程中,任何中间对等体(您的路由器,ISP)也可以根据各种规则丢弃连接。
但最重要的是(即你的情况更可能),连接涉及两方,PostgreSQL服务器也有自己的超时设置 - tcp_keepalives_idle
,tcp_keepalives_interval
,tcp_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.