PHP Conference Japan 2024

ZipArchive::getFromName

(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL zip >= 1.1.0)

ZipArchive::getFromName使用名称返回条目内容

描述

public ZipArchive::getFromName(string $name, int $len = 0, int $flags = 0): string|false

使用其名称返回条目内容。

参数

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');
}
?>

参见

添加注释

用户贡献的注释 2 条注释

henrik dot haftmann at gmail dot com
8 年前
对包含非 ASCII 字符的文件名的处理未记录在案。此函数似乎调用了 <?php mb_convert_encoding($name,"CP850","UTF-8") ?>,因此期望 zipfile 中使用 DOS 编码,而名称使用 UTF-8 编码。如果 zipfile 使用 UTF-8 名称(Pkzip 4.5 / Winzip 11.2),则此函数将失败。使用 getFromIndex 作为解决方法。
masterboreq at gmail dot com
4 年前
当向方法传递包含相对路径(在 ZIP 存档内)的显式字符串时,例如 'path/to/file.php/',请确保使用单引号 (') 而不是双引号 (")。双引号会导致 FALSE(至少在 Windows 机器上)并且不会提供任何进一步的提示说明出了什么问题。
此外,请确保 ZIP 文件中使用的路径分隔符是反斜杠或正斜杠,因为这也会产生差异。
我希望我在您使用这个(迄今为止)未提及的“特性”时为您省去了头痛烦恼 :)
To Top