|
Posted by Richard Lynch on 02/08/05 22:57
Al wrote:
> 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:
> e.g.
>> $fp= fopen("http://www.anything.com/foo.html, 'rb');
>> if(!fp) {do something different}
>>
>> stream_set_timeout($fp, 2);
>>
// >> $status= stream_get_meta_data($fp);
$start = time();
while (!feof($fp)){
$data = fread($fp, 10000); //10K chunks, change to suit
if (time() - $start > 10){
die("That's too slow!");
}
}
>>
>> 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?
Please review this exact same issue in the archives from the past week or
two.
--
Like Music?
http://l-i-e.com/artists.htm
[Back to original message]
|