在PHP某些版本中,使用ZipArchive addFile方法添加中文文件名的文件时出错(return false),处理方式:
把文件重命名,再添加,addFile的第二个参数用原来的文件名即可,具体代码如下:
$zipFilePath = $path.uniqid().'.zip';
//压缩文件
$zip = new \ZipArchive();
// 打开一个zip文档,ZipArchive::OVERWRITE:如果存在这样的文档,则覆盖;ZipArchive::CREATE:如果不存在,则创建
$zip->open($zipFilePath, \ZipArchive::OVERWRITE | \ZipArchive::CREATE);
// 如果文件名是中文名则先转英文再添加到压缩包
$newFileName = $path.uniqid().'.csv';
rename($filePath, $newFileName);
$zip->addFile($newFileName, $fileName.'.csv');
$zip->close();
unlink($newFileName);