【问题标题】:file_get_contents speed-upfile_get_contents 加速
【发布时间】:2012-06-17 07:34:30
【问题描述】:

我正在通过抓取页面 URL 并在页面标题中查找 <link> 标记来构建 rss 提要发现服务。问题是某些 URL 需要很长时间才能为页面源提供服务,因此我的代码经常卡在 file_get_contents($url)

有没有办法通过预定义的超时来执行此操作,例如,如果 10 秒后仍然没有提供内容,那么只需删除该 URL 并移至下一个?

我正在考虑使用maxLen 参数来仅获取源的一部分(<head>..</head>),但我不确定在达到接收到的字节后这是否真的会停止,仍然需要整页加载。另一个问题是我不知道在此处设置什么值,因为每个页面在 head 标记中都有不同的内容,因此大小会有所不同。

【问题讨论】:

    标签: html timeout file-get-contents


    【解决方案1】:

    我刚刚读到这个,所以现在这只是理论......但是..

    这是函数定义,注意资源上下文部分:

    string file_get_contents ( string $filename [, bool $use_include_path = false [, **resource $context** [, int $offset = -1 [, int $maxlen ]]]] )
    

    如果您指定 stream_context_create() 函数的结果并在其选项数组中传递 it 超时值,它可能会起作用。

    $context = stream_context_create($opts);
    

    或者您可以创建流并直接设置它的超时时间:

    http://www.php.net/manual/en/function.stream-set-timeout.php
    

    希望你能取得一些成功。

    【讨论】:

      【解决方案2】:

      使用“上下文”参数。您可以使用“stream_context_create”函数创建流上下文,并在 http 上下文中指定所需的超时时间。

      $context = stream_context_create(array(
          'http' => array(
              'timeout' => YOUR_TIMEOUT,
          )
      ));
      $content = file_get_contents(SOME_FILE, false, $context);
      

      更多信息: Herealso here.

      【讨论】:

        猜你喜欢
        • 2012-11-20
        • 2012-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-14
        • 2016-08-29
        • 1970-01-01
        相关资源
        最近更新 更多