Re: stream_set_timeout() stream_get_meta_data() etc...
| From: | Al | Date: | Tue, 08 Feb 2005 22:46:21 +0000 |
| Subject: | Re: stream_set_timeout() stream_get_meta_data() etc... | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-208302@lists.php.net to get a copy of this message | ||
Richard Lynch wrote:
Al wrote:How do I test the results of stream_set_timeout(). I've tried everything I can think of and nothing shows, no error reports, nothing.How can I detect that a remote server is hung up on transmitting a http page and gracefully handle it? The connect is made OK, all I want to do is to make certain that I receive the data stream in a given amount of time. For example, if the remote server is incredibly slow or hangs in the middle of transmitting the data.That's exactly what stream_set_timeout does, *IF* more than 2 seconds goes by with *NO* data coming through.
If you want to put a cap on the total time spent, regardless of the file size, then do more like:I tried something like this earlier, at your suggestion. Problem was that if the server stalls in the middle of a chunk, it just hangs.e.g.// >> $status= stream_get_meta_data($fp); $start = time(); while (!feof($fp)){ $data = fread($fp, 10000); //10K chunks, change to suit if (time() - $start > 10){$fp= fopen("http://www.anything.com/foo.html, 'rb'); if(!fp) {do something different} stream_set_timeout($fp, 2);die("That's too slow!");} }
That was my thread. I didn't find a solution then and am back to it. I seems as if stream_set_timeout() ought to be the right function; but, I can't find a way to use it.Please review this exact same issue in the archives from the past week or two.if($status[timed_out] {do something};$status[timed_out] never shows anything but 0. I've tried it with a 4mb file and the timeout = 1sec. error reporting shows nothing. It's as if socket connections don't trigger timeout errors, including the max_execution_time. I've spent some time poking around the php manual and Googling and can't find anything appropriate. One ref I found said there is no way to do this. Anyone have a suggestion?