php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #76342 file_get_contents waits twice specified timeout
Submitted: 2018-05-15 12:07 UTC Modified: -
Votes:4
Avg. Score:3.8 ± 0.8
Reproduced:4 of 4 (100.0%)
Same Version:2 (50.0%)
Same OS:3 (75.0%)
From: hadrien dot sibboni at tagpay dot fr Assigned:
Status: Open Package: Streams related
PHP Version: Irrelevant OS: Debian 7, Windows
Private report: No CVE-ID: None
View Add Comment Developer Edit
Anyone can comment on a bug. Have a simpler test case? Does it work for you on a different platform? Let us know!
Just going to say 'Me too!'? Don't clutter the database with that please — but make sure to vote on the bug!
Your email address:
MUST BE VALID
Solve the problem:
26 - 22 = ?
Subscribe to this entry?

 
 [2018-05-15 12:07 UTC] 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.

Patches

Add a Patch

Pull Requests

Add a Pull Request

 
PHP Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Mon Jul 15 22:01:26 2019 UTC