知道我在这里做错了什么吗?它一直随着“再见”而死。zip 存档中有一个 index.php 文件。
$zip = new ZipArchive;
$zip->open($source);
$test = $zip->getFromName('index.php');
if(!$test) {
die('bye bye');
} else {
die($test);
}
知道我在这里做错了什么吗?它一直随着“再见”而死。zip 存档中有一个 index.php 文件。
$zip = new ZipArchive;
$zip->open($source);
$test = $zip->getFromName('index.php');
if(!$test) {
die('bye bye');
} else {
die($test);
}
嗯,你应该做的第一件事是确保你已经打开了它,因为它也可能失败:
$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
. 你可能想检查一下,以防万一。
在 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() 按预期工作。
希望这可以帮助别人不要像我刚才那样浪费时间:(