PHP CURL 上传图片

在PHP5.5之前的版本,curl上传文件的方法是使用 @+文件绝对路径
将post数组传递给 **CURLOPT_POSTFIELDS **

curl_setopt(ch, CURLOPT_POSTFIELDS, array('file'=> '@'.realpath('file.png')));

在5.5版本之后引入了 CURLFile类
http://php.net/manual/zh/curlfile.construct.php
另外也引入了 CURL_SAFE_UPLOAD 选项,可以强制PHP的cURL模块拒绝旧的@语法,仅接受CURLFile式的文件。5.5的默认值为false,5.6的默认值为true。并且5.6已经移除了 @+文件绝对路径 这种上传文件的方法。
CURLFile类 的使用方法

curl_setopt($curl, CURLOPT_POSTFIELDS, ['name'=> new CURLFile('文件绝对路径','文件类型(image/jpeg)'),]);

下面是自己写的一个curl发送请求方法,可附加附件

public function Https_request( $url ,  $data = null, $cookie =null, $file =null) {
  $curl= curl_init ();
  curl_setopt ( $curl, CURLOPT_URL, $url);
  curl_setopt ( $curl
, CURLOPT_SSL_VERIFYPEER, FALSE );

    
curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, FALSE );

//携带cookie文件
if(! empty($cookie)){
  curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie); //读取cookie
}

 //携带头
if(!empty($header)){
  curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
}

//上传文件
if(!empty($file)){
  $file_obj=new CURLFile($file['realpath'],$file['type']);
  $data["{$file['name']}"]=$file_obj;
}

 //发送post数据
if(! empty( $data) && !isset($file_obj)) {
  curl_setopt ( $curl, CURLOPT_POST, 1 );
  curl_setopt ( $curl, CURLOPT_POSTFIELDS, http_build_query($data) );
}elseif(!empty($data)){
  curl_setopt ( $curl, CURLOPT_POST, 1 );
  curl_setopt ( $curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 );
$output= curl_exec ( $curl);

if(empty($output)) return false;
curl_close ( $curl);
return is_null(json_decode($output))?$output:json_decode($output,true);
}

你可能感兴趣的:(PHP CURL 上传图片)