在Windows中使用PHP创建受密码保护的Zip文件

时间:2014-01-02 12:57:48

标签: php windows zip password-protection

我正在用PHP创建给定文件的zip文件。以下是功能

function create_zip($file, $file_name) 
{   
    $zip = new ZipArchive();
    $zip_name = $file_name. ".zip"; // Zip name
    $zip->open($zip_name,  ZipArchive::CREATE);

    if (file_exists($file)) {
        $zip->addFromString(basename($file),  file_get_contents($file));
    } else {
        return "file does not exist";
    }
    $zip->close();

    return $zip_name;   
}

我想为Zip文件添加密码保护。我找到了以下代码来创建受密码保护的zip文件

system('zip -P password file.zip file.txt');  

但它无法正常工作。你能指导我如何在Zip文件上添加密码保护?

3 个答案:

答案 0 :(得分:3)

PHP Zip - http://php.net/manual/en/book.zip.php - 不支持受密码保护的zip文件,您需要通过命令行进行操作。

要对文件进行密码保护,您需要使用zip命令行,确保存在zip命令行程序,默认情况下不会在许多系统上安装它。

答案 1 :(得分:2)

在新的 PHP 5.6 currently in beta)中,您可以使用ZipArchive创建受密码保护的档案。您只需添加此代码ZipArchive::setPassword($password)

即可

编辑:显然只有supports decryption,还没有加密。

答案 2 :(得分:1)

我意识到这是一个老线程,但是任何人都在为Windows环境中的存档添加密码而苦苦挣扎,我使用winrar命令行和PHP中的exec来解决这个问题。

http://www.rarlab.com/下载winrar并在您的PHP脚本目录中包含WinRAR.exe,或者从exec命令中的正确目录中调用它。

exec("winrar a -p[password] [archive name] [file or folders to include]");

上例中的

winrar指的是与脚本位于同一目录中的winrar.exe。如果winrar.exe与脚本不在同一目录中,则只需包含路径:

exec("C:\Program Files\Winrar...

所以,例如: exec("winrar a -ppassword archive.zip file.txt");

将导致名为“archive.zip”的存档内部使用“file.txt”创建,密码为“password”。

有关winrar命令行的更多信息:http://acritum.com/software/manuals/winrar/