PHP curl 上传文件版本兼容问题
2016-07-20 13:45
477 查看
[摘要:做微疑开辟挪用微疑接心上传文件时,总是返回 {"errcode":41005,"errmsg":"media data missing hint: [mQbr_a0173ure1]"} 上传文件没有存正在。 弄了半天,末了是PHP版本没有兼容问]
做微信开发调用微信接口上传文件时,老是返回
{"errcode":41005,"errmsg":"media data missing hint: [mQbr_a0173ure1]"}
上传文件不存在。
搞了半天,最后是PHP版本不兼容问题
上传代码
此代码在php5.6以前的版本都可以正常上传,但是PHP 5.6抛弃了@语法,只支持 CURLFile 方法上传。这种
语言设计不向后兼容我也是醉了。
5.6上传这样写
另外也可以自己设计兼容方法:
另外的另外,还可以配置一个CURL参数来解决这个问题:
curl_setopt( $ch, CURLOPT_SAFE_UPLOAD, false);
这句要放到
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);之前
该设置官方说明
TRUE to disable support for the @ prefix for uploading files in CURLOPT_POSTFIELDS,
which means that values starting with @ can be safely passed as fields. CURLFile may be used for uploads instead.
Added in PHP 5.5.0 with FALSE as the default value. PHP 5.6.0 changes the default value to TRUE.
大致意思设置为true时禁止@语法在CURLOPT_POSTFIELDS上传文件,使用CURLFile最为替代进行文件上传。
5.5版本增加该参数,PHP5.5默认是false,PHP5.6修改该默认值为true
官方参考 http://cn2.php.net/manual/en/function.curl-setopt.php
做微信开发调用微信接口上传文件时,老是返回
{"errcode":41005,"errmsg":"media data missing hint: [mQbr_a0173ure1]"}
上传文件不存在。
搞了半天,最后是PHP版本不兼容问题
上传代码
$data = array('media' => '@' . $img); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_AUTOREFERER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $info = curl_exec($ch); curl_close($ch);
此代码在php5.6以前的版本都可以正常上传,但是PHP 5.6抛弃了@语法,只支持 CURLFile 方法上传。这种
语言设计不向后兼容我也是醉了。
5.6上传这样写
$data = array('media' => new CURLFile(realpath($tmp_name)));
另外也可以自己设计兼容方法:
if(version_compare(phpversion(),'5.5.0') >= 0 && class_exists('CURLFile')){ $data['file'] = new CURLFile(realpath($tmp_name)); }else{ $data['file'] = '@'.$tmp_name; }
另外的另外,还可以配置一个CURL参数来解决这个问题:
curl_setopt( $ch, CURLOPT_SAFE_UPLOAD, false);
这句要放到
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);之前
该设置官方说明
TRUE to disable support for the @ prefix for uploading files in CURLOPT_POSTFIELDS,
which means that values starting with @ can be safely passed as fields. CURLFile may be used for uploads instead.
Added in PHP 5.5.0 with FALSE as the default value. PHP 5.6.0 changes the default value to TRUE.
大致意思设置为true时禁止@语法在CURLOPT_POSTFIELDS上传文件,使用CURLFile最为替代进行文件上传。
5.5版本增加该参数,PHP5.5默认是false,PHP5.6修改该默认值为true
官方参考 http://cn2.php.net/manual/en/function.curl-setopt.php
相关文章推荐
- [php学习七]html的head练习
- PHP JSON乱码简洁的解决办法
- PHP实现模板方法模式
- PHP实现的随机IP函数【国内IP段】
- Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
- php jsonp单引号转义
- php的内存限制值
- ThinkPHP V5.0 RC4版本发布
- 值得分享的php+ajax实时聊天室
- PHP中检测文件是否为UTF-8编码的函数
- PHP 编译(备查)
- PHP给图片添加水印
- ThinkPHP 错误: Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'
- php验证身份证号码正确性的函数
- PHP加密解密类实例代码
- php图片添加水印例子
- PHP得到当前GIT分支的代码
- 支付宝服务窗API接口开发php版本
- PHP- 数字转汉字
- PHP图像裁剪为任意大小的图像,图像不变形,不留下空白