/*****
* @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~