php7 curl 上传图片,PHP cURL上传图片

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

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

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 上传图片,如有侵权,请您及时联系!

总结:之所以处理curl图片上传时踩了很多的坑,究竟其根本还是对Http协议不了解,对底层的知识点掌握的不牢固;对apache和php交互还不是很好;发奋图强研读RFC2616,这些知识点也是web开发工程师必备之一。

自己写的函数

/**

* 上传文件

*

* @param string $url 访问链接

* @param mixed $params POST的提交数据

* @param string $timeout 超时时间

*

* @return json

*/

public function upload($url, $param, $timeout) {

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url); // 设置访问链接

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // 是否返回信息

curl_setopt($ch, CURLOPT_HEADER, 'Content-type: application/json'); // 设置返回信息数据格式 application/json

curl_setopt($ch, CURLOPT_POST, TRUE); // 设置post方式提交

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param)); // POST提交数据

$keyName = array_keys($_FILES);

$curlFile = new \CURLFile($_FILES[$keyName[0]]['tmp_name'], $_FILES[$keyName[0]]['type'], $_FILES[$keyName[0]]['name']);

curl_setopt($ch, CURLOPT_POSTFIELDS, [$keyName[0] => $curlFile]); // POST提交文件

curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); // 超时时间

$result = curl_exec($ch);

$err_no = curl_errno($ch); // 获取错误编号,0为正常

curl_close($ch);

if ($err_no) {

return '请求失败,错误码:' . $err_no;

} elseif (is_null(json_decode($result))) {

return '请求返回异常:' . $result;

}

return $result;

}

参考文献:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值