对包含非 ASCII 字符的文件名的处理未记录在案。此函数似乎调用了 <?php mb_convert_encoding($name,"CP850","UTF-8") ?>,因此期望 zipfile 中使用 DOS 编码,而名称使用 UTF-8 编码。如果 zipfile 使用 UTF-8 名称(Pkzip 4.5 / Winzip 11.2),则此函数将失败。使用 getFromIndex 作为解决方法。
(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL zip >= 1.1.0)
ZipArchive::getFromName — 使用名称返回条目内容
使用其名称返回条目内容。
name
条目的名称
len
要从条目中读取的长度。如果为 0
,则读取整个条目。
flags
用于查找条目的标志。以下值可以进行按位或运算。
成功时返回条目的内容,失败时返回 false
。
示例 #1 获取文件内容
<?php
$zip = new ZipArchive;
if ($zip->open('test1.zip') === TRUE) {
echo $zip->getFromName('testfromfile.php');
$zip->close();
} else {
echo 'failed';
}
?>
示例 #2 从 zip 条目转换图像
<?php
$z = new ZipArchive();
if ($z->open(dirname(__FILE__) . '/test_im.zip')) {
$im_string = $z->getFromName("pear_item.gif");
$im = imagecreatefromstring($im_string);
imagepng($im, 'b.png');
}
?>
对包含非 ASCII 字符的文件名的处理未记录在案。此函数似乎调用了 <?php mb_convert_encoding($name,"CP850","UTF-8") ?>,因此期望 zipfile 中使用 DOS 编码,而名称使用 UTF-8 编码。如果 zipfile 使用 UTF-8 名称(Pkzip 4.5 / Winzip 11.2),则此函数将失败。使用 getFromIndex 作为解决方法。
当向方法传递包含相对路径(在 ZIP 存档内)的显式字符串时,例如 'path/to/file.php/',请确保使用单引号 (') 而不是双引号 (")。双引号会导致 FALSE(至少在 Windows 机器上)并且不会提供任何进一步的提示说明出了什么问题。
此外,请确保 ZIP 文件中使用的路径分隔符是反斜杠或正斜杠,因为这也会产生差异。
我希望我在您使用这个(迄今为止)未提及的“特性”时为您省去了头痛烦恼 :)