如果花费太长时间,请切断file_get_contents

时间:2014-11-19 10:14:32

标签: php

我使用freeGeoIP服务来跟踪谁访问我的网站到我自己的数据库。有时需要一段时间才能检索数据。无论如何,如果花费太长时间,我可以切断数据的检索吗?

这是我的代码:

$geoIP = @file_get_contents("http://freegeoip.net/csv/{$_SERVER['REMOTE_ADDR']}");

`

2 个答案:

答案 0 :(得分:3)

您可以创建一个与其一起发送超时的上下文(参考:file_get_contents

摘录:

$opts = array('http' =>
  array(
    'method'  => 'POST',
    'header'  => "Content-Type: text/xml\r\n".
      "Authorization: Basic ".base64_encode("$https_user:$https_password")."\r\n",
    'content' => $body,
    'timeout' => 60
  )
);

$context  = stream_context_create($opts);
$url = 'https://'.$https_server;
$result = file_get_contents($url, false, $context, -1, 40000);

在你的情况下,这应该粗略地转换为(未经测试):

$opts = array('http' =>
  array(
    'method'  => 'GET',
    'header'  => "Content-Type: text/csv",
    'content' => '',
    'timeout' => 10
  )
);

$context  = stream_context_create($opts);
$url = "http://freegeoip.net/csv/{$_SERVER['REMOTE_ADDR']}";
$geoip = file_get_contents($url, false, $context, -1, 40000);

答案 1 :(得分:0)

您可以分叉程序执行:How to fork with PHP (4 different approaches)

有关PNCL函数(包括fork)的文档可以在PHP Manual

中找到