PHP在2秒后停止脚本file_get_contents()

时间:2013-04-29 12:04:02

标签: php

好的,我有一个PHP脚本,使用file_get_contents()加载另一个页面。

另一个页面需要大约30秒才能加载(脚本的类型),而我需要的只是file_get_contents()才能启动此脚本。

问题是,file_get_contents()将在整个30秒内保持加载状态。停止此操作的唯一方法是关闭选项卡(关闭选项卡时,它调用的脚本仍会运行)。

那么,我怎样才能得到它,以便{2}在2秒之后关闭?

提前致谢

3 个答案:

答案 0 :(得分:3)

无法回答您的问题,但我建议您使用cURL代替file_get_contents

示例:

function get_url_contents($url) {
    $crl = curl_init();

    curl_setopt($crl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)');
    curl_setopt($crl, CURLOPT_URL, $url);
    curl_setopt($crl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($crl, CURLOPT_CONNECTTIMEOUT, 5);

    $ret = curl_exec($crl);
    curl_close($crl);
    return $ret;
}

您的问题可能来自超时:default_socket_timeout

但这似乎没有逻辑,因为2秒真的很少,我无法解释自己为什么有人会把它改成2秒。默认值为60秒。

答案 1 :(得分:1)

manual page我们可以看到file_get_contents()接受了名为$context的第三个参数,我们可以微调我们的选项。根据那里的一些链接,我们到达HTTP context options,其中timeout似乎是我们的人:

  

超时浮动

Read timeout in seconds, specified by a float (e.g. 10.5).

By default the default_socket_timeout setting is used.

因此,您可以提供上下文或更改default_socket_timeout(第一个选项看起来不太容易破坏其他内容)。

免责声明:我还没有测试过。

答案 2 :(得分:0)

您可以在file_get_contents函数调用之前使用set_time_limit(2)