1

知道我在这里做错了什么吗?它一直随着“再见”而死。zip 存档中有一个 index.php 文件。

$zip = new ZipArchive;
$zip->open($source);
$test = $zip->getFromName('index.php');
if(!$test) {
    die('bye bye');
} else {
    die($test);
}
4

2 回答 2

3

嗯,你应该做的第一件事是确保你已经打开了它,因为它也可能失败:

$zip = new ZipArchive;
$rc = $zip->open($source);
if ($rc === TRUE) {
    $test = $zip->getFromName('index.php');
    $zip->close();
    if(!$test) {
        die('bye bye');
    } else {
        die($test);
    }
} else {
    die("could not open: " . $rc);
}

除此之外,请确保您绝对确定您的文件规范是正确的。如有必要,您可以getNameIndex一次枚举一个条目,在此过程中打印出它们的名称,例如:

$zippy = new ZipArchive();
$zippy->open($source);
for ($i = 0; $i < $zippy->numFiles; $i++) {
    echo $zippy->getNameIndex($i) . '<br />';
}
$zippy->close();

假设我会浪费时间告诉你检查$source. 你可能想检查一下,以防万一。

于 2011-09-27T07:08:11.017 回答
0

在 PHP 8 中,如果您正忙于构建存档并尝试在存档中的有效文件上使用 getFromName() ,也会发生这种情况。无论我尝试什么,我都得到了错误。

例如。

1 create archive
2 ...add things
3 archive->getFromName("valid/archive/file/path/and/name")

第 3 步每次都返回 false。

然而

1 create archive
2 ...add things
A close archive
B re-open archive
3 archive->getFromName("valid/archive/file/path/and/name") 

步骤 3 现在按预期返回文件的内容。

因此,插入步骤 A 和 B 使 getFromName() 按预期工作。

希望这可以帮助别人不要像我刚才那样浪费时间:(

于 2021-12-17T11:56:41.417 回答