PHP CURL上传文件

/*****
 * @param $path 上传到本地的文件路径
 * @param $url 请求的 url
 * @param $uid  操作人id
 * @param $position 请求发起的位置
 * @return mixed|string
 */

function upload_file_to_java($path, $url,$uid=0,$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, 1);
    //在HTTP中的“POST”操作。
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    //设定是否显示头信息
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    //在HTTP请求中包含一个”user-agent”头的字符串。
    curl_setopt($curl, CURLOPT_USERAGENT, "TEST");
    //不设置超时时间
    curl_setopt($curl, CURLOPT_TIMEOUT, 0);
    //执行
    $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~

猜你喜欢

转载自blog.csdn.net/xianhenyuan/article/details/80713248