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

2024-02-13

我正在测试无法通过输入随机 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(使用前将#替换为@)

当无法访问服务器时,PHP 的 PDO 会忽略 MySQL 的 ATTR_TIMEOUT 选项 的相关文章

随机推荐

  • 在 Haskell 中获取随机列表项

    After 回顾这个SO问题 https stackoverflow com questions 8416365 generate a random integer in a range in haskell我正在尝试使用随机数生成器根据返
  • PHP Symfony 服务器运行意外终止

    我开始学习 PHP Symfony2 框架 我有一台装有 Windows 7 和 Wamp manager 2 2 的 PC 其中包括 PHP 5 4 3 和 Apache 2 4 2 我按照以下步骤尝试安装和运行 Symfony2 项目
  • 在 Android 中使用 Path.arcTo() 绘制圆环时的奇怪行为

    我已经成功地从 0 到 360 度的角度开始扫动 实现了一个动画绘图环 然而 当环尾部以 360 度角与头部相遇时 所有绘图都消失了 这是我的戒指代码onDraw float startAngle 270 float sweepAngle
  • 单击图像上的工具提示

    我有一张桌子 上面有 thead 和 th s 在每个里面我都有一个形状问号 的图像 我想在单击每个帮助图像时显示帮助 工具提示 这个怎么做 请建议 我会使用一个插件 Tooltip http bassistance de jquery p
  • 如何隐藏html div

    我正在用 Ruby On Rails 开发一个小型应用程序 我想隐藏 html erb 文件中的 div 直到单击链接 最简单的方法是什么 在你的 html 文件中 a href Show Whatever a div class hidd
  • JavaScript 不显示在网页上?

    div div
  • 如何使用通配符路径规范从分支检出文件?

    我无法使用通配符签出文件 如git scm 页面 https git scm com docs gitglossary html def pathspec 来自特定的 refspec 用一个例子来描述这个问题 使用 java 和 c 文件创
  • 如何在自引用外键中使用现有查询引用所有子对象?

    我有一个代表所有者的模型 该模型自身有一个外键来表示父实体 还有另一种模型 称为具有所有者外键的资产 母公司外键的目的是模拟公司结构 以便母公司 拥有 外键为其自身或子公司的资产 Class Owner models Model paren
  • 实现自己的memcpy(大小以字节为单位?)

    我最近遇到一个面试问题 我必须实现 memcpy 根据我的经验 我已经使用过很多memcpy 所以这似乎不是一个棘手的问题 因此 我开始实现一个循环 一次从一个指针复制一个地址到另一个指针 如下所示 void memcpy void des
  • Android 11:如何/在哪里写入应在卸载后仍然存在的混合媒体文件

    我正在编写一个针对 Android 11 的特定用例相机应用程序 当我点击记录时 我想在某处创建一个新目录 名称基于时间戳等 其中包含生成的视频以及整个堆其他也在录制过程中写入的自定义 YAML JSON CSV 文件 逻辑上属于录制的 输
  • iPhone/iOS JSON解析教程[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 作为一次学习经验 我想制作一个 iPhone 应用程序 该应用程序调用 Web 服务器 Web 服务 检索 JSON 响应 并使用该响应来
  • 在 Egit (Eclipse) 中更改用户位置(主变量)

    我使用 Eclipse Indigo 和 Windows 7 以及 Eclipse 插件 egit jgit 如何更改 egit 中的用户位置 我应该这样做 因为它包含特殊字符 它不理解 egit 我想要 C git home gitcon
  • 主要在命名空间中

    为什么这个不能编译 链接器找不到main 但是为什么会这样呢 namespace somenamespace int main void return 0 3 6 1 1 程序应包含一个名为 main 的全局函数 哪个 是指定的开始 程序
  • 如何在Ubuntu上使用gem安装Rails

    错误信息 Building native extensions This could take a while ERROR Error installing rails ERROR Failed to build gem native ex
  • intellij 构建包含 gradle 依赖项的 jar 工件

    我基本上想做一些简单的事情 或者至少我认为它应该非常简单 我的目标是创建一个 Intellij gradle 项目 使用 gradle 向模块添加一些依赖项 并向其中添加一些 java 源代码 然后我只想有一个选项以某种方式将整个东西编译成
  • 如何使用包database/sql批处理sql语句

    如何使用Go的database sql包批处理sql语句 在Java中我会这样做 Create a prepared statement String sql INSERT INTO my table VALUES PreparedStat
  • Dagger 和 libgdx

    可以使用 dagger 2 和 libgdx web 吗 libgdx 项目可以在 Android 和桌面上正常构建 当我添加一个网络模块并运行时 gradlew html superDev ERROR Line 1 The type ja
  • 您可以在不使用 API 的情况下获得 MailChimp 兴趣组 ID 吗?

    使用 MailChimp API 要将成员添加到具有特定兴趣组的列表 您需要该列表的 ID 和兴趣组的 ID 要获取这两个 ID 您可以查询 API 来获取它们 或者对于列表 ID 您可以在 MailChimp 接口输出的表单代码中找到它
  • JSTL中如何获取随机数?

    我想要得到类似于 JSTL 中生成的下一个代码的内容
  • 当无法访问服务器时,PHP 的 PDO 会忽略 MySQL 的 ATTR_TIMEOUT 选项

    我正在测试无法通过输入随机 IP 尝试连接来访问 mysql 服务器的场景 我将 PDO 的选项设置为在一秒后超时PDO ATTR TIMEOUT gt 1 然而 抛出异常仍然需要30秒 我猜这个超时仅适用于实际的 mysql 连接时间 而