【问题标题】:ZipArchive, I need to create new file and overwrite existingZipArchive,我需要创建新文件并覆盖现有文件
【发布时间】:2018-03-08 02:45:26
【问题描述】:

我正在使用 php ZipArchive,但遇到了一个简单的问题。

我需要创建新文件,如果存在同名的现有文件,我需要覆盖它。

如果我使用此代码,我的问题是这样的

if ($zip->open($packageFileName, ZipArchive::OVERWRITE) === TRUE)

它将覆盖任何具有相同名称的现有文件,但是如果具有这样名称的文件不存在,则不会发生任何事情,如果 case 返回 false 并且我在此 if 案例中使用文件填充 zip 文件,但因为如果文件是not on the disk 失败,没有文件被创建。

如果我这样做

if ($zip->open($packageFileName, ZipArchive::CREATE) === TRUE)

它将返回 true 并且文件将被创建或更新,但我不想更新文件,我需要覆盖文件。

所以我有点卡住了,我想覆盖文件,如果它不存在,我想创建它,有没有办法在一行中执行此操作,所以我不必在多行中检查文件存在,然后选择 CREATE 或 OVERWRITE,为什么没有 CREATE_OVERWRITE 常量?

【问题讨论】:

    标签: php ziparchive


    【解决方案1】:

    就像 PHP 中的错误代码一样,zip 标志也是按位相加的,这意味着您可以使用 OR (|) 将它们组合起来以执行更多操作...

    if ($zip->open($packageFileName,  (ZipArchive::CREATE | ZipArchive::OVERWRITE) ))
    

    上面会创建一个 zip 如果它不存在,否则会覆盖。所以这就是你如何处理你的CREATE_OVERWRITE

    【讨论】:

    • 在我的应用程序中,我需要压缩从浏览器上传的文件。我尝试在我的代码中同时使用 CREATE 和 OVERWRITE。但是,当文件不存在时,它不会创建新的存档文件。这是充分的证据吗?在我的应用程序中,存档中始终只有一个文件。所以我删除了存档文件(如果存在),并且只使用了 CREATE。并且由于 OVERWRITE 会忽略存档中的任何现有文件,因此它不适合在我们为用户提供可下载文件(解压缩后)的应用程序中,该文件在存档中只有一个文件
    猜你喜欢
    • 2011-06-06
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    相关资源
    最近更新 更多