为什么mysqli_connect不尊重MYSQLI_OPT_CONNECT_TIMEOUT?

ljfrocky

下面的代码将停留在real_connect()100%。set_time_limitdefault_socket_timeoutMYSQLI_OPT_CONNECT_TIMEOUT已经确定,但不工作。

我在PHP 5.6和PHP 7.1上进行了测试。mysql驱动程序是mysqlnd。

set_time_limit(30);
ini_set('default_socket_timeout', 10);
$mysql = new mysqli();
$mysql->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);
$mysql->real_connect('www.baidu.com', 'root', 'xxx', 'xxx', 80);

问题:

  1. real_connect使用主机地址www.baidu.com和端口号时,为什么PHP进程卡住了80
  2. 为什么MYSQLI_OPT_CONNECT_TIMEOUT和其他超时设置不起作用?
  3. 对于这种特殊情况,是否有任何方法可以设置超时时间?
达曼

有两个超时设置。一个是MYSQLI_OPT_CONNECT_TIMEOUT,另一个是MYSQLI_OPT_READ_TIMEOUT第二个文档记录不充分,但是可以通过两种方式设置此选项。

使用mysqli::set_opt

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli();
$mysqli->set_opt(MYSQLI_OPT_READ_TIMEOUT, 3); // 3 seconds
$mysqli->connect('example.com', 'user', 'pass', 'db');
$mysqli->set_charset('utf8mb4'); // always set the charset

或使用INI配置设置。在php.ini文件中进行设置:

mysqlnd.net_read_timeout =  3

MYSQLI_OPT_READ_TIMEOUT如果未通过提供ini设置,则它只是一个默认值mysqli::set_opt,因此无论您选择哪种方式都可以使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么mysqli_connect不尊重MYSQLI_OPT_CONNECT_TIMEOUT?

Mysqli_Connect是未定义的函数

mysqli_connect不起作用

无法通过mysqli_connect存储数据

如何捕获mysqli_connect()的警告

在 mysqli_connect 中使用数组值

为什么 mysqli_connect() 必须在没有加密的情况下接收密码参数?

mysqli_connect()中的第四个参数是什么?

mysqli_connect 使用凭据作为单个变量

调用未定义功能mysqli_connect()

添加 mysqli_connect() 函数停止运行脚本

使用未定义的常量和mysqli_connect():

使用mysqli_connect从PHP进行无密码的mysql连接

调用未定义的函数 mysqli_connect() 问题

使用mysqli_connect和mysql_select_db

使用 mysqli_connect() 创建到 mysql 的远程连接

新的mysqli_connect cat查找数据库

在GLOBALS函数中使用Mysqli_connect链接安全吗?

带有mysqli_connect而不是PDO的Azure Web应用

是否可以将 mysqli_connect 对象定义为常量

为什么我不能使用mysqli_connect和PHP 7.4连接到MySQL 5.3.36共享服务器,但是在php 7.1下可以使用?

未捕获的错误:调用未定义的函数mysqli_connect()| 泊坞窗,撰写

PHP 7.4.1未捕获的错误:调用未定义函数mysqli_connect()

警告:mysqli_connect():(HY000 / 1045):用户'@'localhost'的访问被拒绝(使用密码:NO)

使用 mysqli_connect() 连接到 Cloud SQL 数据库

无法使用PHP连接到我的MySQL数据库mysqli_connect()

警告:mysqli_connect():(28000/1045):用户'mobileto'@'localhost'的访问被拒绝(使用密码:NO)

MySQL错误:mysqli_connect():(HY000 / 2002):连接被拒绝

PHP警告:mysqli_connect():(HY000 / 2002):连接被拒绝