PHPKonf 2020 Online

ZipArchive::getFromName

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

ZipArchive::getFromName名前を使用して、エントリの内容を返す

説明

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

名前を使用して、エントリの内容を返します。

パラメータ

name

エントリの名前。

length

エントリから読み込む長さ。0 の場合はエントリ全体を読み込みます。

flags

エントリを探す際に使用するフラグ。以下の値を OR で連結して使用します。

  • ZipArchive::FL_UNCHANGED

  • ZipArchive::FL_COMPRESSED

  • ZipArchive::FL_NOCASE

返り値

成功した場合にエントリの内容、失敗した場合に FALSE を返します。

例1 ファイルの内容の取得

<?php
$zip 
= new ZipArchive;
if (
$zip->open('test1.zip') === TRUE) {
    echo 
$zip->getFromName('testfromfile.php');
    
$zip->close();
} else {
    echo 
'失敗';
}
?>

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

参考

add a note add a note

User Contributed Notes 2 notes

up
-1
henrik dot haftmann at gmail dot com
4 years ago
The handling of file names containing non-ASCII characters is undocumented. It seems that this function calls <?php mb_convert_encoding($name,"CP850","UTF-8") ?> and therefore expects DOS encoding in the zipfile but UTF-8 encoding for the name. If the zipfile uses UTF-8 names (Pkzip 4.5 / Winzip 11.2), this function fails. Use getFromIndex instead as a workaround.
up
-2
masterboreq at gmail dot com
10 months ago
When passing to the method explicit string which contains a relative path (inside the ZIP archive), e.g. 'path/to/file.php/' please make sure you used single quotation mark (') not the double one ("). Double quotation mark produce FALSE (at least at Windows machine) giving no further hints what gone wrong.
Also, please make sure that the path delimiters used inside your ZIP file is backslash or forward slash since it's make a difference in this place too.
I hope I saved you a headache while working with this (so far) unmentioned "feature" :)
To Top