我正在测试无法通过输入随机 IP 尝试连接来访问 mysql 服务器的场景。我将 PDO 的选项设置为在一秒后超时PDO::ATTR_TIMEOUT => 1
。然而,抛出异常仍然需要30秒。我猜这个超时仅适用于实际的 mysql 连接时间,而不适用于运行 mysql 的服务器。
我需要更改哪些 PHP 选项才能使与 mysql 服务器的连接超时?
就放
ini_set("default_socket_timeout", 2);
在 PDO() 连接字符串之前。
(在 Windows 上测试过,在 Linux 上也应该没问题。)
Why?
通过手册追查这一点:
mysqlnd 驱动程序使用套接字作为底层连接,并且要设置超时,您需要使用套接字(流)超时函数。 (参考:http://php.net/manual/en/mysqlnd.notes.php http://php.net/manual/en/mysqlnd.notes.php)
使用 mysqlnd 意味着使用 PHP 流进行底层连接。对于 mysqlnd,应查阅 PHP 流文档 (Streams) 以了解超时设置等详细信息,而不是 MySQL 客户端库的文档。
如果你想要更多的控制,那么你也许能够更具体地控制实际的套接字:我没有对此进行测试,因为它仅适用于 unix。要设置 mysqlnd 使用的套接字,您可以使用 ini 设置指定套接字(参考:http://php.net/manual/en/ref.pdo-mysql.connection.php http://php.net/manual/en/ref.pdo-mysql.connection.php)
如果 PDO_MYSQL 是针对 mysqlnd 编译的,则可以通过 pdo_mysql.default_socket 设置来设置默认套接字。
See http://php.net/manual/en/ref.pdo-mysql.php#ini.pdo-mysql.default-socket http://php.net/manual/en/ref.pdo-mysql.php#ini.pdo-mysql.default-socket关于那个设置
然后您可以使用设置超时http://php.net/manual/en/function.stream-set-timeout.php http://php.net/manual/en/function.stream-set-timeout.php
但可能更容易设置默认值,然后完成后重置......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)