我尝试使用文件фыфыфы.cs创建zip-archive下一步:
$zip = new ZipArchive;
if ($zip->open($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . '111.zip', ZIPARCHIVE::CREATE) === TRUE) {
$zip->addFile($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . 'фыфыфы.cs');
$zip->close();
echo 'ok';
} else {
echo 'error';
}
但是没有创建存档。我尝试在addFile调用后查看存档中的文件数:
die($zip->numFiles);
但我得到了0。
当我将文件重命名为zzz.cs时,存档已成功创建。怎么了?
我在电脑上使用Windows 8。
我试过了this solution,但它对我不起作用。得到了空的$ encoded_filename。
答案 0 :(得分:0)
为了解决此问题,我必须再次将$ filename编码为不同的编码CP858。
示例:强>
$filename = "фыфыфы.cs";
//encode to windows-1252 to save to the filesystem
$encoded_filename = iconv("UTF-8","Windows-1252//IGNORE",$filename);
file_put_contents($encoded_filename, "text");
//put in a zip file
$zip = new ZipArchive();
$zip->open('test.zip', ZIPARCHIVE::CREATE);
//encode as CP858 to save into zip file
$zip->addFile($encoded_filename, iconv("UTF-8", "CP858//IGNORE", $filename));
$zip->close();
您可以为您的代码实现此方法。