使用密码创建zip存档

时间:2017-09-25 10:53:01

标签: php zip

所以,我创建了一个带密码的zip文件:

function createZip($fileName,$fileText,$zipFileName,$zipPassword)
    {

       shell_exec('zip -P '.$zipPassword.' '.$zipFileName.'.zip '.$fileName);
       unlink($fileName);
       return file_exists($zipFileName.'.zip');
    }


    $filex = "/backup/home/fyewhzjp/long_location_of_a_file/temp/data/map10/data.txt";
    // $file_content = 'test';
    $archive = "/backup/home/fyewhzjp/long_location_of_a_file/temp/data/map10/archive";

    createZip($filex,$file_content,$archive,$pass);

它有效。我在网站上的archive.zip文件夹中收到/temp/data/map。但是,当我打开我的档案时,我可以看到一堆文件夹,最后是data.txt,让我们说它会是 /backup/home/fyewhzjp/long_location_of_a_file/temp/data/map10/data.txt 所以,我只需要在我的文件夹中保留data.txt,而不需要其他文件夹。我该怎么办?

3 个答案:

答案 0 :(得分:1)

如果有人会像我一样面临同样的问题,那么这就是解决方案: 只需在-jrq zip之后添加shell_exec,就像这样:

shell_exec('zip -jrq -P '.$zipPassword.' '.$zipFileName.'.zip '.$fileName);

之后,将忽略完整路径。

答案 1 :(得分:0)

除了@ Script47 ...

纯PHP(如果是针对 libzip≥1.2.0 构建的,则分别从 PHP 7.2.0 PECL zip 1.14.0 起可用)。

<?php
$zip = new ZipArchive;
$res = $zip->open('test.zip', ZipArchive::CREATE);
if ($res === TRUE) {
    // Add files
    $zip->addFromString('test.txt', 'file content goes here');
    $zip->addFile('data.txt', 'entryname.txt');

    // Set global (for each file) password
    $zip->setPassword('your_password_here');    

    // This part will set that 'data.txt' will be encrypted with your password
    $zip->setEncryptionName('data.txt', ZipArchive::EM_AES_128);   // Have to encrypt each file in zip

    $zip->close(); 
    echo 'ok';
} else {
    echo 'failed';
}
?>

答案 2 :(得分:-1)

而不是使用shell_exec为什么不使用ZipArchive类和函数ZipArchiveOpen::openZipArchive::setPassword,这似乎会让事情成为现实很容易。

<?php
$zip = new ZipArchive;
$res = $zip->open('test.zip', ZipArchive::CREATE);
if ($res === TRUE) {
    $zip->addFromString('test.txt', 'file content goes here');
    $zip->addFile('data.txt', 'entryname.txt');
    $zip->setPassword('your_password_here');
    $zip->close(); 
    echo 'ok';
} else {
    echo 'failed';
}
?>
  

注意:   此功能仅设置用于解压缩存档的密码;它不会将非密码保护的ZipArchive变成受密码保护的ZipArchive。