代码冷启动,总是第一次报错,咋回事呢?后面就正常了

问题描述

我有一个图片上传api,冷启动上传第一次就报错,第二次往后就一切正常,如果停1-2小时,再使用api上传,又如此反复。

程序代码

//公共上传图片
    public function upload(Request $request)
    {
        //接受图片文件
        $file = $request->file('file');
        //图片类型
        $type =  $request->post('type');
        //检验文件
        if ($file && $file->isValid()) {
            //保存目录
            $dirPath = date('Ymd').'/'.time().mt_rand(10000000,99999999);
            //保存目录
            $publicPath = public_path().'/files/'.$dirPath;
            //图片后缀
            $extension = $file->getUploadExtension();
            //移动上传文件
            $file->move($publicPath.'.'.$extension);
            //本地路径
            $filePath = $publicPath.'.'.$extension;
            //压缩后的路径
            $thumbnailPath = $publicPath.'-thumbnail.'.$extension;
            //执行压缩图片
            $source =  $filePath;//原图片名称
            $dst_img = $thumbnailPath;//压缩后图片的名称
            $percent = 0.5;  #原图压缩,不缩放,但体积大大降低
            //实例化对象
            (new \image\imgcompress($source,$percent))->compressImg($dst_img);
            //检测图片是否违规(检查压缩图)
            $imgResult = $this->checkImage($dst_img);
            //图片正常
            if($imgResult['errcode'] == 0){
                //定义图片保存文件名
                $savePath =  time().mt_rand(10000000,99999999).uniqid().'.png';
                //将图片传到腾讯云(原图不压缩)
                $local_path  = $filePath;
                //保存文件路径
                $server_key_name = '/upload/images/'.date("Ymd").'/'.date("YmdHis",time()).$savePath;//远程服务器存储的名字
                //如果存在图片类型
                if(isset($type) && $type){
                    $server_key_name = '/upload/'.$type.'/'.date("Ymd").'/'.date("YmdHis",time()).$savePath;//远程服务器存储的名字
                }
                //引入腾讯云cos
                require './vendor/autoload.php';
                $secretId = $this->secretId; //"云 API 密钥 SecretId";
                $secretKey = $this->secretKey; //"云 API 密钥 SecretKey";改成自己的
                $region = $this->region; //设置一个默认的存储桶地域
                $cosClient = new \Qcloud\Cos\Client(
                    array(
                        'region' => $region,
                        'schema' => 'https', //协议头部,默认为http
                        'credentials'=> array(
                            'secretId'  => $secretId ,
                            'secretKey' => $secretKey)
                    )
                );
                //定义图片链接
                $image_url = '';
                //开始上传图片
                try {
                    $result = $cosClient->upload(
                        $bucket = $this->bucket, //请创建桶的时候 设置公共读写  改成自己的
                        $key = $server_key_name,
                        $body = fopen($local_path, 'rb')
                    );
                    //删除服务器图片(原图和缩略图)
                    @unlink($filePath);
                    @unlink($thumbnailPath);
                    //请求成功,返回图片存储信息
                    $data = $result->toArray();
                    //存在图片信息
                    if(isset($data['Location']) && isset($data['Key'])){
                        //上传成功
                        $image_url = 'https://'.$data['Location'];
                    }else{
                        //上传失败
                        return json(['status' => 201,'msg' => '上传错误','data' => $data]);
                    }
                } catch (\Exception $e) {
                    // 请求失败
                    $upload_msg = $e->getMessage();
                    return json($upload_msg);
                }
                //图片链接
                $json = [
                    'status' => 200,
                    'msg'    => '上传成功',
                    'data'   => [
                        'image_url' => $image_url
                    ]
                ];
                return json($json);
            }else{
                //删除服务器图片
                @unlink($filePath);
                @unlink($thumbnailPath);
                return json(['status' => $imgResult['errcode'],'msg' => $imgResult['msg']]);
            }
        }else{
            return json(['status' => 201,'msg' => '上传图片参数错误']);
        }
    }

截图报错信息里报错文件相关代码

这里粘贴截图
截图
截图
第二次正常
截图

找到系统报错提示了,为啥第二次后续一切正常呢?
截图

操作系统及workerman/webman等框架组件具体版本

这里写具体的系统环境相关信息
截图

641 5 0
5个回答

PHP甩JAVA一条街

不对, 上传图片参数错误图是错的,不能误导大家了, 我刚刚是浏览器打开的, 不是那个问题

  • PHP甩JAVA一条街 2023-02-09

    "上传图片参数错误" , 不是这个错误!!! 我刚刚打开方式不对, 具体啥原因我还不知道, 各位大佬遇到此问题没?

PHP甩JAVA一条街

截图

  • PHP甩JAVA一条街 2023-02-09

    冷启动, 或者间隔1-2小时(具体没精确, 大概隔一段时间30分钟或者1小时), 上传图片第一次绝对爆红错误

喵了个咪

程序员要会自己debug
1、有报错首先看报错信息,报错信息会告诉你为什么报错
2、如果服务端报错一般都有日志,看服务端日志,一般框架都在runtime/log下
3、没有日志或者错误信息,那就在服务端一行行return ,定位那句代码有问题

你发这么多没有一个有价值的信息,别人根本没办法给你定位,只能自己来。除非你有具体的报错信息,别人还能大概猜测出来。

  • 暂无评论
admin

你自己模拟请求option,估计就是这个请求没有写的参数到自己的业务报错,

还有小黑子,开庭,带上你的webman

darcy

做断点看一看是那一步的问题

我怀疑是上传云盘的问题

  • 暂无评论
年代过于久远,无法发表回答
🔝