在PHP5.5之前的版本呈础,curl上傳文件的方法是使用 @+文件絕對路徑
將post數(shù)組傳遞給 **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已經(jīng)移除了 @+文件絕對路徑 這種上傳文件的方法。
CURLFile類 的使用方法
curl_setopt($curl, CURLOPT_POSTFIELDS, ['name'=> new CURLFile('文件絕對路徑','文件類型(image/jpeg)'),]);
下面是自己寫的一個curl發(fā)送請求方法习劫,可附加附件
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;
}
//發(fā)送post數(shù)據(jù)
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);
}