使用PHP的CurlFile上传文件时,如果上传文件为中文名,接收端是接收不到文件的,curl 的CURLOPT_POSTFIELDS 返回false (原因是 curl_file_create函数读取windows本地中文文件名失败);
curl_file_create函数在使用的时候,windows默认编码是gbk,所以读取windows系统上中文文件会失败,转换文件名的编码格式再读取,第三个参数传原文件名,不然接收者接收到的gbk 编码的文件名,就会显示乱码。
此时需要对文件进行转码
if (strtoupper(substr(PHP_OS,0,3))=='WIN') {
$realPath= iconv('utf-8', 'gbk', $realPath); //处理中文名文件
}
我的代码:
if(file_exists($readfile)){ // 检测文件是否存在 if (strtoupper(substr(PHP_OS,0,3)) == 'WIN') { $realPath= iconv('utf-8', 'gbk', realpath($readfile)); //windows系统处理中文名文件 }else{ $realPath= realpath($readfile); } $postData['sc_file'] = new \CurlFile($realPath); $postData['save_sc_path'] = config('admin.upload_path').'instruction/'.$data['filename']; }
问题解决。
更多精彩内容:各种AI课程、技能课程、黑科技软件、网站小程序源码、副业小项目、PPT模板等精品素材、电商课程、推广引流课程等,尽在 天边资源网 。