【问题标题】:PHP Zip() functions not working on Windows serverPHP Zip() 函数在 Windows 服务器上不起作用
【发布时间】:2014-11-03 20:14:34
【问题描述】:

我正在尝试让基本的 PHP zip 函数在 Windows 服务器上运行,但没有成功。
甚至 PHP.net 上 Zip 存档部分中的以下最简单示例也不起作用:

<?php
$zip = new ZipArchive;

if ($zip->open('D:\rootfolder\path_to_files\test.zip') === TRUE) {

if($zip->addFile('D:\rootfolder\path_to_files\newfile.txt', 'newname2.txt')) {
    echo 'worked like a charm';
} else {
    echo 'Could not add the file';
}
$zip->close();
} else {
echo 'failed';
}
?>

在上面的简单示例中,如果 zip 文件 test.zip 不存在,它会回显“失败”,但如果它确实存在,它会回显“就像一个魅力'无论要添加的文件(新文件)是否存在。 但最糟糕的是它不会创建 zip!

我认为这与权限无关,因为我可以成功使用 fwrite 和其他文件功能。

现在我没有看到任何关于 zip 构建的提及('--with-zip=/hsphere/etc) 在 php 信息页面的配置命令部分,所以我不能 100% 确定扩展是否正确,但这里有一些更详细的信息 phpinfo( ):

服务器: Windows Server 2008 R2 Standard Edition Service Pack 1
PHP: 版本 5.4.14
Zip: 是已启用且版本为 1.11.0
zlib.output_compression: 关闭
zlib.output_compression_level: -1
zlib.output_handler:没有价值

【问题讨论】:

    标签: php windows zip zlib


    【解决方案1】:

    如果你想创建一个新的 zip 文件并添加新文件,你必须设置这个参数:ZipArchive::CREATE
    所以你的例子如下:

    $zip = new ZipArchive;
    
    if ($zip->open('C:\xampp\htdocs\StackOverflow\test.zip', ZipArchive::CREATE) === TRUE) {
    
         if($zip->addFile('C:\xampp\htdocs\StackOverflow\newfile.txt', 'newname2.txt')) {
             echo 'worked like a charm';
         }else {
             echo 'Could not add the file';
         }
        $zip->close();
    }else {
        echo 'failed';
    }
    

    希望有所帮助:)

    【讨论】:

    • 成功了!非常感谢。有趣的是,PHP.net 在他们给出的示例中没有提到它作为要求:us2.php.net/manual/en/ziparchive.addfile.php,而且由于某种原因在我测试的 linux 服务器上没有必要,仅在 Windows 服务器中。但是再次感谢它现在可以工作了。
    猜你喜欢
    • 2018-01-11
    • 2011-07-15
    • 2016-05-14
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 2018-08-18
    相关资源
    最近更新 更多