北京SEO

七牛上传文件出现 invalid mutilpart format的解决办法

2019/10/10/17:45:06  阅读:1674  来源:谷歌SEO算法  标签: SEO

七牛是一个不错的平台了,我们现在有很多的站长会把一些资源放到七牛上去了,但在使用过程中有时会碰到上传文件出现 invalid mutilpart format错误了,下面我们来看问题解决办法.

今天用umeditor编辑文章上传图片的时候发现一直卡在”loading…”,打开控制台发现出现了500错误,进一步调试发现是七牛上传报错了.

整个上传流程是:浏览器=》业务服务器=》七牛服务器.

在上传方法断点调试发现$_FILES数组正常,所以排除了浏览器到业务服务器上传问题,继续调试,通过查看七牛SDK源码发现在 http.php的第119行附近有这样的代码:

  1. $options=array(
  2. CURLOPT_USERAGENT=>$req->UA,
  3. CURLOPT_RETURNTRANSFER=>true,
  4. CURLOPT_SSL_VERIFYPEER=>false,
  5. CURLOPT_SSL_VERIFYHOST=>false,
  6. CURLOPT_HEADER=>true,
  7. CURLOPT_NOBODY=>false,
  8. CURLOPT_CUSTOMREQUEST=>'POST',
  9. CURLOPT_URL=>$url['path'],
  10. //phpfensi.com
  11. CURLOPT_SAFE_UPLOAD=>false
  12. );

请注意最后那个:CURLOPT_SAFE_UPLOAD => false,这里应该是跟上传有关的设置,很有可能是这里的问题,果然,GOOGLE发现PHP的CURL上传文件跟PHP版本的关系很大.

传统上,PHP的cURL支持通过在数组数据中,使用“@+文件全路径”的语法附加文件,供cURL读取上传,这与命令行直接调用cURL程序的语法是一致的:

  1. <ahref="/tags.php/curl_setopt/"target="_blank">curl_setopt</a>(ch,CURLOPT_POSTFIELDS,array(
  2. 'file'=>
  3. '@'.realpath('image.png'
  4. ),
  5. ));

但PHP从5.5开始引入了新的CURLFile类用来指向文件,CURLFile类也可以详细定义MIME类型、文件名等可能出现在multipart/form-data数据中的附加信息,PHP推荐使用CURLFile替代旧的@语法:

  1. curl_setopt(ch,CURLOPT_POSTFIELDS,[
  2. 'file'=>newCURLFile(realpath('image.png')),
  3. ]);

PHP 5.5另外引入了CURL_SAFE_UPLOAD选项,可以强制PHP的cURL模块拒绝旧的@语法,仅接受CURLFile式的文件,5.5的默认值为false,5.6的默认值为true.

但是坑的一点在于:@语法在5.5就已经被打了deprecated,在5.6中就直接被删除了,会产生 ErorException: The usage of the @filename API for file uploading is deprecated. Please use the CURLFile class instead.

对于PHP 5.6+而言,手动设置CURL_SAFE_UPLOAD为false是毫无意义的,根本不是字面意义理解的“设置成false,就能开启旧的unsafe的方式”——旧的方式已经作为废弃语法彻底不存在了,PHP 5.6+ == CURLFile only,不要有任何的幻想.

我的部署环境是5.4(仅@语法)与服务器不同,所以必须写出带有环境判断的代码,从可靠的角度,推荐指定CURL_SAFE_UPLOAD的值,明确告知php是容忍还是禁止旧的@语法.

注意在低版本PHP中CURLOPT_SAFE_UPLOAD常量本身可能不存在,需要判断:

  1. if(class_exists('\CURLFile')){
  2. curl_setopt($ch,CURLOPT_SAFE_UPLOAD,true);
  3. }else{
  4. if(defined('CURLOPT_SAFE_UPLOAD')){
  5. curl_setopt($ch,CURLOPT_SAFE_UPLOAD,false);
  6. }
  7. }

经过这些设置之后,上传就可以正常了.

广告内容

七牛上传文件出现 invalid mutilpart format的解决办法 七牛上传文件出现 invalid mutilpart format的解决办法 七牛上传文件出现 invalid mutilpart format的解决办法

相关阅读

热门评论

Seven 绯闻SEO Seven 绯闻SEO

绯闻SEO,一个专注中小企业网站优化的SEO爱好者

总篇数179

精选文章

RMAN中catalog和nocatalog区别介绍 小技巧:为Linux下的文件分配多个权限 zimbra8.5.1安装第三方签名ssl证书的步骤 解决mysql不能远程连接数据库方法 windows服务器mysql增量备份批处理数据库 mysql中slow query log慢日志查询分析 JavaScript跨域问题总结 Linux下负载均衡软件LVS配置(VS/DR)教程 mysql中权限参数说明 MYSQL(错误1053)无法正常启动

SEO最新算法