天天看點

php7.0 curl不能用_php7.0 出現 curl_setopt(): Disabling safe uploads is no longer supported in 報錯!...

項目換成php7.0,進行了測試,使用curl時,出現:

curl_setopt(): Disabling safe uploads is no longer supported in xxx。定位到代碼行:

[php]

view plain

copy

//5.6版本相容  if (ver_compare(phpversion(), '5.6') >= 0) {      curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);  }

所有問題都是因為 CURLOPT_SAFE_UPLOAD 這個選項。

1.檢視手冊發現,5.50添加該選項,預設值為false。5.6之後,預設值為true,這裡另其為false。

2.手冊上并未更新文檔,7.0以後,不支援禁用該選項,是以導緻了我們更新到7.0後,一直報錯!

直接不用使用該選項了,網上有個解決方案是,并沒有多大意義:

php7.0 curl不能用_php7.0 出現 curl_setopt(): Disabling safe uploads is no longer supported in 報錯!...

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

上面的解決方法不合理,又找了點資料

php5.6關于curl以@方式上傳檔案的變化及解決七牛上傳時報file

is not specified in multipart的問題

上面的文章就提到了這個問題,但是針對的是php5.6

7.0後,curl不支援設定 CURLOPT_SAFE_UPLOAD設定為false,隻能是true。但是提供了使用 CURLFile來替代的方案,可檢視手冊,手冊中有人寫到:

[php]

view plain

copy

if(is_array($postfields) == true)  {      // Check each post field      foreach($postfields as $key => $value)      {          // Convert values for keys starting with '@' prefix          if(strpos($value, '@') === 0)          {              // Get the file name              $filename = ltrim($value, '@');              // Convert the value to the new class              $postfields[$key] = new CURLFile($filename);          }      }  }  curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);

發現傳輸的post中有以 '@' 開頭的檔案,使用new CURLFile() 來轉換,然後就可以不用設定 curlopt_safe_upload為false了。這個是5.5以後才支援的。

為了相容性,可以7.0以前,設定為curlopt_safe_upload=false,7.0後,發現@,進行curlfile來轉換,就可以解決這個問題了,我們項目中的截圖如下:

php7.0 curl不能用_php7.0 出現 curl_setopt(): Disabling safe uploads is no longer supported in 報錯!...