Bug #76342 [Opn->Csd]: file_get_contents waits twice specified timeout
| From: | nikic@php.net | 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