代码之家  ›  专栏  ›  技术社区  ›  YakovL Anatol Belski

php curl在过时(缓存?)以及前后更新的结果

  •  1
  • YakovL Anatol Belski  · 技术社区  · 6 年前

    好吧,这是一个很糟糕的问题,因为缺乏再现性,但我真的需要一些建议,所以请容忍我。

    我有一个简单的PHP脚本,用于将静态CORS禁用页代理到脚本。页面是一个“PubHTML”版本的谷歌电子表格(“文件发布到Web”选项),内容不时地改变。下面是脚本(一个简单的版本):

    // allow CORS to grab data via js
    header("Access-Control-Allow-Origin: *");
    
    $pageUrl = 'https://docs.google.com/spreadsheets/....../pubhtml';
    
    // get the page
    $curl_session = curl_init($pageUrl);
    curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true);
    $proxiedRequestResponse = curl_exec($curl_session);
    if($proxiedRequestResponse === false) {
        $request_error = curl_error($curl_session);
        //# deal with errors, use $request_error
    }
    curl_close($curl_session);
    
    // send the result
    print $proxiedRequestResponse;
    

    蛮基本的,对吧?(简化的是我检查 $_GET 我有几页,但肯定不能混淆)

    现在的问题是,在某种程度上,我注意到有时代理响应过时的数据。不仅如此,有时它还提供最新的数据和 之后 (过了一段时间)再回复过时的数据!(显示数据的状态 老的 之前已经展示过的那个)

    我确信电子表格中的数据没有被颠倒过来。我已经看到最新的页面,并打开了它的版本,它显示了过时的数据;我试着刷新它,只是有时候它使它更新了。

    我试着给这个URL添加一个时间戳查询:

    $pageUrl = '.....'.'?noCacheTimestamp='.date('mdYHis');
    

    还添加了

    curl_setopt($curl_session, CURLOPT_FRESH_CONNECT, TRUE);
    

    但仍然以任意顺序获取最新或过时的数据。

    这真的很奇怪,所以任何关于为什么会发生这种情况或如何修复(或调试)这种情况的指针都是非常受欢迎的。

    0 回复  |  直到 6 年前