天天看點

PHP CURL上傳檔案

/*****
 * @param $path 上傳到本地的檔案路徑
 * @param $url 請求的 url
 * @param $uid  操作人id
 * @param $position 請求發起的位置
 * @return mixed|string
 */

function upload_file_to_java($path, $url,$uid=,$position='') {
    //獲得檔案絕對路徑
    $new_path = realpath($path);
    //檢測檔案是否存在
    if(!file_exists($new_path)){
        $errArr = array('error_msg'=>'上傳的Excel檔案服務端不存在','操作人id'=>$uid,'上傳到本地的檔案路徑'=>$path,'擷取的上傳到本地的檔案絕對路徑'=>$new_path,'請求的url'=>$url,'請求發起的位置'=>$position,'産生錯誤的函數'=>'upload_file_to_java@'.__LINE__);
        //記錄錯誤日志
        write_to_log($errArr);
        unset($errArr);
        //傳回錯誤
        return json_encode(array('code'=>'error','message'=>'upload error'));
    }
    //初始化
    $curl = curl_init();
    //檢測請求版本
    if (class_exists('\CURLFile')) {
        curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true);
        $data = array('uploadUid' => $uid, 'file' => new \CURLFile($new_path)); //>=5.5
    } else {
        if (defined('CURLOPT_SAFE_UPLOAD')) {
            curl_setopt($curl, CURLOPT_SAFE_UPLOAD, false);
        }
        $data = array('uploadUid' => $uid, 'file' => '@' . $new_path); //<=5.5
    }
    //請求位址
    curl_setopt($curl, CURLOPT_URL, $url);
    //HTTP POST,設定這個選項為一個非零值
    curl_setopt($curl, CURLOPT_POST, );
    //在HTTP中的“POST”操作。
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    //設定是否顯示頭資訊
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, );
    //在HTTP請求中包含一個”user-agent”頭的字元串。
    curl_setopt($curl, CURLOPT_USERAGENT, "TEST");
    //不設定逾時時間
    curl_setopt($curl, CURLOPT_TIMEOUT, );
    //執行
    $result = curl_exec($curl);

    //删除檔案
    file_exists($new_path) && unlink($new_path);

    //記錄請求頭資訊【req_url 請求url、req_data 請求攜帶的資料、req_header 頭資訊、req_position 發起請求的位置】
    write_to_log(array('req_url' => $url, 'req_data' => $data, 'req_header' => curl_getinfo($curl), 'req_position' => $position), '', 'Header');

    //如果存在錯誤
    if (curl_errno($curl)) {
        //主動觸發一個異常
        $result = curl_error($curl);
    }
    //關閉資源
    curl_close($curl);

    //記錄響應資訊【req_url 請求url、req_data 請求攜帶的資料、resp_data 傳回的資料、req_position 發起請求的位置】
    write_to_log(array('req_url' => $url, 'req_data' => $data, 'resp_data' => $result, 'req_position' => $position), '', 'Resp');

    //傳回資料
    return $result;
}
           

注解:

write_to_log 是本地封裝的一個記錄 log 日志的函數。

thanks~

轉載于:https://www.cnblogs.com/xianhenyuan/p/11085287.html

php