下面的代码将停留在real_connect()
100%。set_time_limit
并default_socket_timeout
与MYSQLI_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);
问题:
real_connect
使用主机地址www.baidu.com
和端口号时,为什么PHP进程卡住了80
?MYSQLI_OPT_CONNECT_TIMEOUT
和其他超时设置不起作用?有两个超时设置。一个是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] 删除。
我来说两句