2019年3月11日 星期一

【PHP】CURL 傳檔案 方法2


$url = '上傳網址';
$file_path = "檔案絕對路徑";
$fields = array('key'=>'val'); // post值


function curl_file_get_contents($url,$file_path,$fields='')
{
 $files['files[0]'] = file_get_contents($file_path);

 // curl
 $curl = curl_init();

 $boundary = uniqid();
 $delimiter = '-------------' . $boundary;

 $post_data = build_data_files($boundary, $fields, $files);

 curl_setopt_array($curl, array(
  CURLOPT_URL => $url,
  CURLOPT_SSL_VERIFYPEER => 0,
  CURLOPT_SSL_VERIFYHOST => 1,
  CURLOPT_RETURNTRANSFER => 1,
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  //CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POST => 1,
  CURLOPT_POSTFIELDS => $post_data,
  CURLOPT_HTTPHEADER => array(
   //"Authorization: Bearer $TOKEN",
   "Content-Type: multipart/form-data; boundary=" . $delimiter,
   "Content-Length: " . strlen($post_data)
  ),
  
 ));

 $response = curl_exec($curl);
 $info = curl_getinfo($curl);
 $err = curl_error($curl);
 curl_close($curl);

 return $response;
}



function build_data_files($boundary, $fields, $files){
  $data = '';
  $eol = "\r\n";

  $delimiter = '-------------' . $boundary;

  if ($fields)
  {
   foreach ($fields as $name => $content) {
     $data .= "--" . $delimiter . $eol
       . 'Content-Disposition: form-data; name="' . $name . "\"".$eol.$eol
       . $content . $eol;
   }
  }


  foreach ($files as $name => $content) {
    $data .= "--" . $delimiter . $eol
      . 'Content-Disposition: form-data; name="' . $name . '"; filename="' . $name . '"' . $eol
      //. 'Content-Type: image/png'.$eol
      . 'Content-Transfer-Encoding: binary'.$eol
      ;

    $data .= $eol;
    $data .= $content . $eol;
  }
  $data .= "--" . $delimiter . "--".$eol;


  return $data;
}

5 則留言: