tags:

views:

33

answers:

2

Title says it all. I need a function that I can use in my script to contact another script to send it some GET data. But I need to be able to set a timeout so that it only loads for a few seconds, then continues with the rest of the script. I know I could easily use cURL to do this, but I'd like to know if there are any alternatives?

+2  A: 

You can specify a timeout for the standard file access functions (like file_get_contents()) using stream_context_create():

<?php
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'timeout' => 5
  )
);

$context = stream_context_create($opts);

$fp = fopen('http://www.example.com', 'r', false, $context);
fpassthru($fp);
fclose($fp);
?>

See the list of context options for an explanation on the timeout option.

This requires, of course, that you can access external URLs using fopen() and consorts.

Pekka
or `file_get_contents($url, false, $context)`
salathe
A: 

The nice thing about curl, is it lets you uses threads even though php doesn't support them. So you can make the call to curl_multi, give it a callback, and let the rest of the script run. This way your regular processing isn't blocked. This reduces the need for a short timeout.

Byron Whitlock