我有邮政编码查询服务,我担心任何可能的超时或服务器停机。
如果我在初始请求的20-25之后没有得到任何HTTP响应,我想用JSON回复,表示它失败了:
({ success:0 })
答案 0 :(得分:6)
您可以使用stream_context_create()为file_get_contents()
设置超时(以及许多其他选项)。有关选项列表,请参阅here。
手册中的修改示例:
<?php
$opts = array(
'http'=>array(
'timeout' => 25,
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"Cookie: foo=bar\r\n"
)
);
$context = stream_context_create($opts);
/* Sends an http request to www.example.com
with additional headers shown above */
$contents = file_get_contents("http://example.com", false, $context);
?>
如果这对您有用,我认为没有人反对使用cURL。
答案 1 :(得分:1)
您的标题和问题文字提出了两个不同的问题。 cURL和file_get_contents都可以使用具有特定返回的超时。
如果您使用cURL,则可以使用curl_setopt($ch, CURLOPT_TIMEOUT, 25) //for 25s
设置超时。
要设置file_get_contents的超时,您必须将其包含在context中。
$opts = array(
'http'=>array(
'method'=>"GET",
'timeout'=>"25",
'header'=>"Accept-language: en\r\n" .
"Cookie: foo=bar\r\n"
)
);
$context = stream_context_create($opts);
// Open the file using the HTTP headers set above
$file = file_get_contents('http://www.example.com/', false, $context);
但请注意,与cURL不同,file_get_contents具有默认超时(可在default_socket_timeout选项中找到)。
cURL和file_get_contents都会在失败的传输中返回FALSE
,因此很容易发现故障。
答案 2 :(得分:0)
cURL具有更多功能,在您的情况下它可能更有用。
你可以使用这个
curl_setopt($ch, CURLOPT_TIMEOUT, 40); //enter the number of seconds you want to wait