所以,我创建了一个带密码的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
,而不需要其他文件夹。我该怎么办?
答案 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::open
和ZipArchive::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。