• 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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 备注

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


    • 补充

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

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

  • 相关阅读:
    MySQL 8 常用的数据类型
    SpringBoot使用JSP
    你还不知道吗?新一代隐私保护技术已被应用到笔记本电脑中!
    Windows下安装Redis服务
    全网最新~使用Shell脚本搭建双机高可用的Lustre集群
    Higress 全新 Wasm 运行时,性能大幅提升
    当两项目上线时间接近,测试人员如何保障产品质量更好?
    LCR 012.寻找数组的中心下标
    Netsh命令修复DNS无法上网问题
    Pod控制器
  • 原文地址:https://blog.csdn.net/u011415782/article/details/126164580