ID: 47629 Updated by: paj...@php.net Reported By: danielc at analysisandsolutions dot com Status: Open Bug Type: MySQLi related Operating System: Windows XP SP3 PHP Version: 5.3CVS-2009-03-12 (snap) Assigned To: pajoye New Comment:
"1) That's how PHP 5.2 does it." Not really relevant in this case. "2) That's how the other socket functions do it in 5.2 and 5.3." Then there is a bug here. "3) The timeout is from communication with another entity, not from the script itself." The max_execution_time has the highest priority and should always has it. If it is not the case in one function or another then there is a bug in this function. Previous Comments: ------------------------------------------------------------------------ [2009-06-21 00:48:41] danielc at analysisandsolutions dot com Because: 1) That's how PHP 5.2 does it. 2) That's how the other socket functions do it in 5.2 and 5.3. 3) The timeout is from communication with another entity, not from the script itself. ------------------------------------------------------------------------ [2009-06-20 20:12:24] paj...@php.net but there is no bug here. Why do you want to let the socket timeout override the main timeout? ------------------------------------------------------------------------ [2009-06-20 17:34:32] dani...@php.net Yes, the execution timeout makes sense some ways. The problem is the behavior is inconsistent between 5.2 and 5.3 and between other connection functions. ------------------------------------------------------------------------ [2009-06-20 13:19:04] paj...@php.net With: max_execution_time: 2 default_socket_timeout: 6 It is the expected behavior to have a fatal error about the maximum execution time being exceeded. max_execution_time has the highest importance. ------------------------------------------------------------------------ [2009-03-12 04:41:21] danielc at analysisandsolutions dot com Description: ------------ A fatal error is generated if a MySQLi connection attempt times out AND the default_socket_timeout ini setting is greater that the max_execution_time ini setting. This is happening in PHP 5.3, Mar 11 2009 17:04:24, VC6 thread safe snapshot build. This does not happen on timeouts when using socket_bind(). This does not happen in PHP 5.2.9-1. Reproduce code: --------------- // BOGUS MYSQL PORT NUMBER IS INTENTIONAL. echo 'PHP ' . phpversion() . "\n\n"; echo "ONE ---------------\n"; ini_set('max_execution_time', 6); ini_set('default_socket_timeout', 2); echo 'max_execution_time: ' . ini_get('max_execution_time') . "\n"; echo 'default_socket_timeout: ' . ini_get('default_socket_timeout') . "\n"; $mysqli = new mysqli('localhost', 'does', 'not', 'matter', 1); if ($mysqli->connect_error) { echo "GOOD CATCH\n\n"; } echo "TWO ---------------\n"; ini_set('max_execution_time', 2); ini_set('default_socket_timeout', 6); echo 'max_execution_time: ' . ini_get('max_execution_time') . "\n"; echo 'default_socket_timeout: ' . ini_get('default_socket_timeout') . "\n"; $mysqli = new mysqli('localhost', 'does', 'not', 'matter', 1); if ($mysqli->connect_error) { echo "GOOD CATCH\n\n"; } Expected result: ---------------- PHP 5.3.0beta2-dev ONE --------------- max_execution_time: 6 default_socket_timeout: 2 Warning: mysqli::mysqli() [mysqli.mysqli]: [2002] A connection attempt failed because the connected party did not (trying to connect via tcp://localhost:1) in ... Warning: mysqli::mysqli() [mysqli.mysqli]: (HY000/2002): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. in ... GOOD CATCH TWO --------------- max_execution_time: 2 default_socket_timeout: 6 Warning: mysqli::mysqli() [mysqli.mysqli]: [2002] A connection attempt failed because the connected party did not (trying to connect via tcp://localhost:1) in ... Warning: mysqli::mysqli() [mysqli.mysqli]: (HY000/2002): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. in ... GOOD CATCH Actual result: -------------- PHP 5.3.0beta2-dev ONE --------------- max_execution_time: 6 default_socket_timeout: 2 Warning: mysqli::mysqli() [mysqli.mysqli]: [2002] A connection attempt failed because the connected party did not (trying to connect via tcp://localhost:1) in ... Warning: mysqli::mysqli() [mysqli.mysqli]: (HY000/2002): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. in ... GOOD CATCH TWO --------------- max_execution_time: 2 default_socket_timeout: 6 Warning: mysqli::mysqli() [mysqli.mysqli]: [2002] A connection attempt failed because the connected party did not (trying to connect via tcp://localhost:1) in ... Warning: mysqli::mysqli() [mysqli.mysqli]: (HY000/2002): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. in ... Fatal error: Maximum execution time of 2 seconds exceeded in ... ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=47629&edit=1