PHP使用密码即时创建Zip

时间:2014-10-01 06:35:46

标签: php zip password-protection on-the-fly

尝试使用密码即时生成Zip文件

<?php
$fileRequest = 'cooking-book';

// Prepare File
$file = tempnam("tmp", "zip");
$zip = new ZipArchive();
$zip->open($file, ZipArchive::OVERWRITE);

// Stuff with content
$getFile = file_get_contents('http://otherserver.com/getfile.php?sq='.$fileRequest);
$zip->addFromString('cooking-book.txt', $getFile);

// Close and send to users
$zip->close();
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$fileRequest.'.zip"');
readfile($file);
unlink($file);
?>

现在它工作正常(从其他服务器下载文件到内存,压缩,然后发送给用户)。

如何在zip上设置密码? (exec()shell_exec()不能使用)代码中的位置必须是什么?

谢谢。

2 个答案:

答案 0 :(得分:1)

现在是未来,现在你可以做到:(PHP7.x功能)

ZipArchive :: setEncryptionName - 设置由其名称定义的条目的加密方法 http://php.net/manual/de/ziparchive.setencryptionname.php

// Challenge 3
function mapWith(array, callback) {
    var newArray = [];

    // Recall that forEach does not return anything, so you don't
    // want your return statement here. Instead, wrap the orignal
    // callback so that you can take each result and put it into
    // your "newArray" variable.
    forEach(array, function(element) {
       // Push the result of original callback into the new array:
       newArray.push(callback(element))
    });

    // Make sure to return this mapped array.
    return newArray;
}

答案 1 :(得分:-4)

如果您使用的是PHP 5.6,则可以使用ZipArchive::setPassword为当前活动的存档添加密码。

您可以这样使用它:

$zip->setPassword("YourPasswordHere");

我会在$zip->close();

之前添加它