curl 检测远程文件是否存在(404)

  • 场景

    在项目开发过程中,遇到一个生成七牛云压缩文件的需求
    但是发现,即便返回接口认为成功,但七牛云那边实际上是需要一点时间的
    那么就存在一个时间差,是无法访问文件链接的

    此时想到一个处理方案:循环判断是否检测到文件已生成,不然就会延时等待
    但实际测试了多种检测远程文件是否存在的代码
    运行后,都是任务 文件未生成(实际都已经可以下载了!!)

    简单的参考代码如下:

  • 代码
/**
 * php使用 curl 判断404
 * @param string $url
 * @return bool
 */
function check_url($url = ''){
    stream_context_set_default(
        array(
            'http' => array(
                'timeout' => 5,
            )
        )
    );
    $header = get_headers($url,1);
    if(strpos($header[0],'200')){
        return true;
    }
    if(strpos($header[0],'404')){
        return false;
    }
    if (strpos($header[0],'301') || strpos($header[0],'302')) {
        if(is_array($header['Location'])) {
            $redirectUrl = $header['Location'][count($header['Location'])-1];
        }else{
            $redirectUrl = $header['Location'];
        }
        return check_url($redirectUrl);
    }
}
  • 备注

当调用该方法时,发现了一个 BUG
那就是: 有时远程链接已经实际存在了,但是运行检测依然不存在
这时,我的处理方法是:
—— 将链接最后加几个随机字符,就可实时检验,达到想要的检测需要


  • 补充

在测试生成 七牛云压缩文件的时候,我注意到:
如果使用了同一个文件链接,可能会出现访问结果与实际七牛云存储的不一致

推测是某种缓存影响
处理方案:
—— 不要生成同一个链接(可以加一个随机串),而原先失效或不用的资源链接,建议记录到数据表中,及时删除,避免资源空间的浪费

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值