Bug #76342 [Opn->Csd]: file_get_contents waits twice specified timeout

From: Date: Tue, 17 Sep 2019 13:44:15 +0000
Subject: Bug #76342 [Opn->Csd]: file_get_contents waits twice specified timeout
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-222782@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=76342&edit=1 ID: 76342 Updated by: nikic@php.net Reported by: hadrien dot sibboni at tagpay dot fr Summary: file_get_contents waits twice specified timeout -Status: Open +Status: Closed Type: Bug Package: Streams related Operating System: Debian 7, Windows PHP Version: Irrelevant Block user comment: N Private report: N New Comment: Automatic comment on behalf of calvet.thomas@gmail.com Revision: http://git.php.net/?p=php-src.git;a=commit;h=e691a98c1fa332e35088cb01cbb8f4f8ee4b3711 Log: Fix #76342: file_get_contents waits twice specified timeout Previous Comments: ------------------------------------------------------------------------ [2019-07-29 22:43:29] calvet dot thomas at gmail dot com The following pull request has been associated: Patch Name: Fix #76342: file_get_contents waits twice specified timeout On GitHub: https://github.com/php/php-src/pull/4486 Patch: https://github.com/php/php-src/pull/4486.patch ------------------------------------------------------------------------ [2018-05-15 12:07:31] hadrien dot sibboni at tagpay dot fr Description: ------------ Hello, I am using file_get_contents to get a url on a web server (apache 2.4). I am using a stream context to specify the timeout. 1) The script will wait as much as twice the timeout specified. 2) If it gets an anwser between the specified timeout and twice this timeout, although it waited for the answer, it will still fail with a warning. This was done on php versions : 7.2.3/Windows, 7.2.4/Debian 9.4 5.6.23/Debian 7.11 Test script: --------------- client code : <?php $timeout = 4; $context_options = array ( 'http' => array ( 'timeout' => $timeout, 'method' => 'GET', ), ); $context = stream_context_create($context_options); $start = microtime(true); $content = file_get_contents('http://localhost/test.php', false, $context) . PHP_EOL; $end = microtime(true); echo 'content: ' . $content; echo 'duration: ' . ($end - $start); server code: <?php sleep(10); exit(); Expected result: ---------------- The script should only wait the timeout specified in the stream context. Actual result: -------------- If the sleepTime > 2*timeout : in given code : 10 > 2*4 Output is : PHP Warning: file_get_contents(http://localhost/test.php): failed to open stream: HTTP request failed! in /path/testFile.php on line 17 content: duration: 8.0089149475098 If timeout < sleepTime < 2*timeout : will wait ~sleepTime, and still fail. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=76342&edit=1

« previous php.bugs (#222782) next »