gpt4 book ai didi

当无法访问服务器时,PHP 的 PDO 将忽略 MySQL 的 ATTR_TIMEOUT 选项

转载 作者:IT老高 更新时间:2023-10-28 23:53:00 26 4
gpt4 key购买 nike

我正在测试无法通过输入随机 IP 尝试连接到 mysql 服务器的情况。我使用 PDO::ATTR_TIMEOUT => 1 将 PDO 的选项设置为在一秒后超时。但是,仍然需要 30 秒才能抛出异常。我猜这个超时只适用于实际的 mysql 连接时间,而不适用于运行 mysql 的服务器。

我需要更改哪些 PHP 选项才能使与 mysql 服务器的连接超时?

最佳答案

随便放

ini_set("default_socket_timeout", 2);

在您的 PDO() 连接字符串之前。

(在 Windows 上测试,在 Linux 上也应该没问题。)


为什么?

通过手册追查这个:

mysqlnd 驱动程序使用套接字进行底层连接,而要设置超时,您需要使用套接字(流)超时函数。 (引用:http://php.net/manual/en/mysqlnd.notes.php)

Using mysqlnd means using PHP streams for underlying connectivity. For mysqlnd, the PHP streams documentation (Streams) should be consulted on such details as timeout settings, not the documentation for the MySQL Client Library.


如果你想要更多的控制,那么你可以更具体地控制实际的套接字:我没有测试过这个,因为它只是 unix。要设置 mysqlnd 使用的套接字,您可以使用 ini 设置指定套接字(引用:http://php.net/manual/en/ref.pdo-mysql.connection.php)

If PDO_MYSQL is compiled against mysqlnd a default socket can be set thru the pdo_mysql.default_socket setting.

http://php.net/manual/en/ref.pdo-mysql.php#ini.pdo-mysql.default-socket关于那个设置

然后您可以使用 http://php.net/manual/en/function.stream-set-timeout.php 设置超时。

但可能更容易设置默认值,然后在完成后重置...

关于当无法访问服务器时,PHP 的 PDO 将忽略 MySQL 的 ATTR_TIMEOUT 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29493197/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com