PHP curl 上传文件版本兼容问题
[摘要:做微疑开辟挪用微疑接心上传文件时,总是返回 {"errcode":41005,"errmsg":"media data missing hint: [mQbr_a0173ure1]"} 上传文件没有存正在。 弄了半天,末了是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 curl 上传文件版本兼容问题的更多相关文章
- php各个版本curl上传文件的兼容实现
// 以POST方式提交数据 public function post_data($url, $param, $is_file = false, $return_array = true) { ... ...
- php curl上传文件$_FILES为空问题
php使用curl上传文件,代码如下: 发送的代码(完全是官方的示例) <?php /* http://localhost/upload.php:print_r($_POST);print_r( ...
- PHP如何通过CURL上传文件
PHP使用CURL上传文件只需发送一个POST请求就可以了,在请求中设置某个字段为需要上传的文件全路径,并且以“@”开头,然后使用CURL把该变量以POST方式发送到服务器,在服务端即可以从超级全局变 ...
- linux使用curl上传文件并且同时携带其它传递参数
一般使用linux原生态的命令curl上传文件时命令如下 假如要上传文件是myfile.txt curl -F "file_name=@myfile.txt" -X POST &q ...
- curl 上传文件
1)在 php 5.5.0 之前,如果使用 @+文件路径的文件上传文件,具体看这里:http://www.cnblogs.com/tujia/p/5938463.html 2)php 5.5.0 之后 ...
- PHP 5.6 如何使用 CURL 上传文件
以前我们通过 PHP 的 cURL 上传文件是,是使用“@+文件全路径”的来实现的: curl_setopt(ch, CURLOPT_POSTFIELDS, array( 'file' => ' ...
- PHP 5.5以上 使用 CURL 上传文件
PHP 5.5以上 使用 CURL 上传文件的代码: curl_setopt(ch, CURLOPT_POSTFIELDS, [ 'file' => new CURLFile(realpath( ...
- 使用curl 上传文件,multipart/form-data
使用curl 上传文件,multipart/form-data 1. 不使用-F,curl内置multipart/form-data功能: 2. 文件内容与真实数据无关,用abc代替数据,依然可以上传 ...
- win中使用curl上传文件报错
今天晚上复现“WordPress插件Easy WP SMTP反序列化漏洞”时,需要使用curl上传文件,我又用的windows环境,一直出错 curl: (26) couldn't open file ...
随机推荐
- 天云CloudStack 改进版
整体风格 创建区域
- CSS外边距合并的几种情况
CSS外边距合并的几种情况 外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距.合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者. 外边距在CSS1中就有 The width ...
- [C++] const and char*
const and char* NOTICE: char *str = "hello"; the value of str is the address of the fi ...
- SUSE Linux--zypper程序包管理(实战命令总结)
(1)zypper ar iso:/?iso=/media/SOFTWARE/openSUSE-11.4-DVD-i586.iso DVDISO 新添加本地iso文件为安装源,名称和别名均为DVDIS ...
- BS4爬虫实例应用-CISP
爬取目前在官网可查询的CISP证书编号以及有效期并入库 也算是暴力破解,burp使用grep功能呢也可以实现. 下面是python的代码 #coding=utf-8 import requests i ...
- /etc/profile、~/.bash_profile等几个文件的执行过程
/etc/profile.~/.bash_profile等几个文件的执行过程 摘自:http://blog.chinaunix.net/uid-14735472-id-3190130.html 分类 ...
- 查看并解除Oracle锁
当某个数据库用户在数据库中插入.更新.删除一个表的数据,或者增加一个表的主键时或者表的索引时, 常常会出现ora-00054:resource busy and acquire with nowait ...
- 利用crosstool-ng自动化编译交叉编译环境(转)
原文地址:http://www.bootc.net/archives/2012/05/26/how-to-build-a-cross-compiler-for-your-raspberry-pi/ A ...
- .NET开源MSSQL、Redis监控产品Opserver之安全配置
简介 Opserver是Stack Overflow的开源监控解决方案,由Stack Exchange发布,基于.NET框架构建.开源地址:https://github.com/opserver/Op ...
- javascript 如何创建只能执行一次的事件。
document.getElementById("myelement").addEventListener("click", handler); // ha ...