国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

七牛上傳文件出現 invalid mutilpart format的解決辦法

2024-08-27 23:59:42
字體:
來源:轉載
供稿:網友

七牛是一個不錯的平臺了,我們現在有很多的站長會把一些資源放到七牛上去了,但在使用過程中有時會碰到上傳文件出現 invalid mutilpart format錯誤了,下面我們來看問題解決辦法.

今天用umeditor編輯文章上傳圖片的時候發現一直卡在”loading…”,打開控制臺發現出現了500錯誤,進一步調試發現是七牛上傳報錯了.

整個上傳流程是:瀏覽器=》業務服務器=》七牛服務器.

在上傳方法斷點調試發現$_FILES數組正常,所以排除了瀏覽器到業務服務器上傳問題,繼續調試,通過查看七牛SDK源碼發現在 http.php的第119行附近有這樣的代碼:

  1. $options = array
  2.  
  3.       CURLOPT_USERAGENT => $req->UA, 
  4.  
  5.       CURLOPT_RETURNTRANSFER => true, 
  6.  
  7.       CURLOPT_SSL_VERIFYPEER => false, 
  8.  
  9.       CURLOPT_SSL_VERIFYHOST => false, 
  10.  
  11.       CURLOPT_HEADER => true, 
  12.  
  13.       CURLOPT_NOBODY => false, 
  14.  
  15.       CURLOPT_CUSTOMREQUEST => 'POST'
  16.  
  17.       CURLOPT_URL => $url['path'], 
  18.       //Vevb.com 
  19.       CURLOPT_SAFE_UPLOAD => false 
  20.  
  21. ); 

請注意最后那個:CURLOPT_SAFE_UPLOAD => false,這里應該是跟上傳有關的設置,很有可能是這里的問題,果然,GOOGLE發現PHP的CURL上傳文件跟PHP版本的關系很大.

傳統上,PHP的cURL支持通過在數組數據中,使用“@+文件全路徑”的語法附加文件,供cURL讀取上傳,這與命令行直接調用cURL程序的語法是一致的:

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

但PHP從5.5開始引入了新的CURLFile類用來指向文件,CURLFile類也可以詳細定義MIME類型、文件名等可能出現在multipart/form-data數據中的附加信息,PHP推薦使用CURLFile替代舊的@語法:

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

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.  
  3.     curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true); 
  4.  
  5. else { 
  6.  
  7.     if (defined('CURLOPT_SAFE_UPLOAD')) { 
  8.  
  9.         curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); 
  10.  
  11.     } 
  12.  

經過這些設置之后,上傳就可以正常了.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 察隅县| 济源市| 泰宁县| 沙田区| 鄱阳县| 阿拉善左旗| 四子王旗| 平邑县| 宁乡县| 门源| 阳西县| 无极县| 临江市| 榆社县| 方山县| 昆山市| 安化县| 稻城县| 大竹县| 马山县| 尉氏县| 千阳县| 吴川市| 花莲市| 洛宁县| 年辖:市辖区| 新郑市| 留坝县| 斗六市| 鸡西市| 成武县| 宜丰县| 百色市| 卫辉市| 台东市| 巫溪县| 崇明县| 波密县| 林周县| 水城县| 临洮县|