基于tp6 curl 上传图片

1 篇文章 0 订阅

上传图片先了解下php版本和curl先。
我的版本是php7,curl估计tp6带的
先讲讲我遇到的问题(我这里是上传到第三方的,我就不细说了)
1.curl 上传文件失败
2.curl 上传有传图片但是返回错误
现在来回答上面的两个问题

第一个(curl 上传文件失败)
这是因为php版本的问题貌似5.5以上跟5.5以下的不一致。我现在讲的是php7的
这是post数据生成的时候
现在了解下函数CURLFile
CURLFile(‘图片路径’,‘Content-Type的格式’,‘文件名’)
在这里插入图片描述
这是正确的 post请求上传图片

第二个问题 curl 上传有传图片但是返回错误

这里就涉及到http协议和curl了,大家可以去了解下
注意content-type和content-Disposition
这是我修改过后的少了两个头部参数,也就是content-type和content-Disposition
这是为什么呢
因为我们在前面的
new \CURLFile()这里我们已经设置了content-type(对应第二个参数)和content-Disposition对应第三个参数)了

下面还有几个我在开发中遇到的小知识点(百度深似海,内容泛滥成灾)
curl的post请求大致分为两种 一种是数据请求,另一种是文件上传请求
第一种数据请求的几个关键点
1.http_build_query
纯数据请求最好都经过http_build_query
2.json
这种事json请求的post数据
第二种文件上传请求
因为我用的是php7的版本所以下面讲的都是php7的
第一部分是请求前的数据处理

public function up_img($url=null,$img=null){
//        $post = array('img' => '@'.$img);
        $img_name = basename($img);
        $post = array( new \CURLFile(realpath($img),'image/jpeg',$img_name));

        $headers = [
            'Host:这里我删了',
            'Connection: keep-alive',
            'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36',
            'Accept: */*',
            'X-Requested-With: XMLHttpRequest',
            'Origin: 这里我删了',
            'Cache-Control: no-cache',
            'Sec-Fetch-Site:: same-origin',
            'Sec-Fetch-Mode: cors',
            'Sec-Fetch-Dest: empty',
            'Accept-Encoding: gzip, deflate, br',
            'Accept-Language: zh-CN,zh;q=0.9',
            'Cookie:这里我删了'

        ];
        $data = [
            'url'=>$url,
            'Referer'=>'这里我删了',
            'headers'=>$headers,
            'post'=>$post
        ];

        $output     = $this->CurlGetImg($data);//GETtcurl
        var_dump($output);die();
        $this->parse($output);
    }

通用的curl请求

public function CurlGetImg($data=null)
    {
        isset($data['url']) ? $url=$data['url']:$url = '';//url
        isset($data['headers']) ? $headers=$data['headers'] : $headers = '';//头部参数
        isset($data['cookie']) ? $cookie=$data['cookie']:$cookie = '';//cookie设置
        isset($data['Referer']) ? $Referer = $data['Referer']:$Referer = '';//referer
        isset($data['text']) ? $text=true : $text = false;//需不需要正文
        isset($data['post']) ?$post =$data['post'] : $post = '';//是不是post请求
       
        $this->LocationUrlOld($data['url']);
        $info = curl_init();
        if($headers){
            curl_setopt($info, CURLOPT_HEADER, true);
            curl_setopt($info,CURLOPT_HTTPHEADER,$headers);
        }
        if($cookie){
            curl_setopt($info, CURLOPT_COOKIE,$cookie);
        }
        if($Referer){
            curl_setopt ($info, CURLOPT_REFERER, $Referer);
        }
        if($post){
            // POST数据
            curl_setopt($info, CURLOPT_POST, 1);
            // 把post的变量加上
            curl_setopt($info, CURLOPT_POSTFIELDS, $post  );
        }
        curl_setopt($info,CURLOPT_SSL_VERIFYPEER,false);//禁用后cURL将终止从服务端进行验证
        curl_setopt($info,CURLOPT_SSL_VERIFYHOST,false);//检查服务器SSL证书中是否存在一个公用名(common name)
        curl_setopt($info,CURLOPT_PROXY,'127.0.0.1:8888');//设置代理服务器(不需要的可以删掉)
        curl_setopt($info, CURLOPT_PROXYPORT, "80"); // 代理端口不需要的可以删掉)
        curl_setopt($info, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($info,CURLOPT_CONNECTTIMEOUT,3600);//响应时长
        if($text){
            curl_setopt($info, CURLOPT_NOBODY, true);// 是否不需要响应的正文,为了节省带宽及时间,在只需要响应头的情况下可以不要正文
        }
        curl_setopt($info,CURLOPT_URL,$url);
        $output = curl_exec($info);
        $b = curl_errno($info);
        curl_close($info);
        if($b>0){
            throw new \think\Exception('url请求错误'.$b, 10006);
        }

        return $output;
    }

本文为原创内容,请爬文章的珍重,营造一个良好成长环境,转载请注明出处。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用PHPcurl上传图片,可以按照以下步骤进行操作: 1. 首先,确保服务器上已经安装了curl扩展,并在PHP中启用了该扩展。 2. 创建一个curl资源,并设置必要的选项。你可以使用curl_init函数来创建资源,并使用curl_setopt函数来设置选项。 3. 设置请求的URL。使用curl_setopt函数,并将CURLOPT_URL选项设置为目标URL。 4. 设置请求的方法为POST。使用curl_setopt函数,并将CURLOPT_POST选项设置为true。 5. 设置POST的数据。根据你的需求,可以使用curl_setopt函数,并将CURLOPT_POSTFIELDS选项设置为需要发送的数据。对于上传图片,你可以将图片的路径作为POST数据。 6. 执行curl请求并获取响应。使用curl_exec函数来执行curl请求,并使用curl_getinfo函数来获取请求的相关信息。 7. 关闭curl资源。使用curl_close函数来关闭curl资源。 下面是一个示例代码,演示了如何使用curl上传图片: ```php // 图片文件路径 $imagePath = "/path/to/image.jpg"; // 创建curl资源 $curl = curl_init(); // 设置请求的URL curl_setopt($curl, CURLOPT_URL, "http://example.com/upload.php"); // 设置请求的方法为POST curl_setopt($curl, CURLOPT_POST, true); // 设置POST的数据(图片文件路径) curl_setopt($curl, CURLOPT_POSTFIELDS, [ 'upload' => new CURLFile($imagePath) ]); // 执行curl请求并获取响应 $response = curl_exec($curl); // 获取请求的相关信息 $info = curl_getinfo($curl); // 关闭curl资源 curl_close($curl); // 处理响应结果 if ($response === false) { echo "上传失败"; } else { echo "上传成功"; } ``` 在上述代码中,需要将`http://example.com/upload.php`替换为实际的上传图片的URL。另外,你也可以根据需要设置其他curl选项,例如设置请求头信息、设置超时时间等。<span class="em">1</span> #### 引用[.reference_title] - *1* [php curl 上传图片](https://download.csdn.net/download/h_hanlinglingzi/10726132)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值