将 ZipArchive 与 PHP 8 和临时文件结合使用

问题描述 投票:0回答:2

PHP 8 改变了 ZIP 存档的“打开”方式,值得注意的是:

不推荐使用空文件作为 ZipArchive。 Libzip 1.6.0 不再接受空文件作为有效的 zip 存档。

在下面的测试代码中,打开名为

$backupzip
的 ZIP 文件没有错误,但打开 ZIP 文件名
$invoicezip
失败并出现错误:

已弃用:ZipArchive::open():使用空文件,因为 ZipArchive 在第 12 行已弃用

<?php
declare(strict_types=1);
ini_set('display_errors','1');ini_set('display_startup_errors','1');error_reporting(E_ALL);
    
define('BACKUPDIR','E:\Database_Backups\\');
$backupfile = BACKUPDIR . date('Ymd') . '.zip';
$temp_file  = tempnam(sys_get_temp_dir(),'AW');

$backupzip  = new ZipArchive();
$invoicezip = new ZipArchive();

$backupzip->open($backupfile,ZipArchive::CREATE);  // <<<--- this works
$invoicezip->open($temp_file,ZipArchive::CREATE);  // <<<--- this fails
php ziparchive php-8
2个回答
15
投票

失败的原因是使用

tempnam
函数实际上创建了一个零字节文件,这就是
ZipArchive::CREATE
所抱怨的。

解决方案是在尝试使用之前

unlink
创建的临时文件。在问题的示例中,我只是在
tempnam
之后立即添加了
unlink($temp_file);
前几行现在看起来像这样:

$temp_file = tempnam(sys_get_temp_dir(),'AW');



0
投票

© www.soinside.com 2019 - 2024. All rights reserved.