如何在PHP中创建受密码保护的存档文件?

安迪

我需要能够使用PHP创建具有密码保护的存档(zip)文件。我正在使用Laravel 5.4和PHP 7.1版本。我在这里查看了此链接以获取PHP中的ZipArchive类文档。我也在这里查看了setPassword函数。但似乎不支持创建受密码保护的存档。如果无法使用成熟的编程语言(例如PHP 7.1)创建受密码保护的存档,这将令我感到惊讶。

所以我想我一定很想念东西。有人可以指出我正确的方向吗?例如,一个示例示例或开放源代码的第三方库或扩展可以帮助您实现这一目标。

亚伯拉罕·图加洛夫(Abraham Tugalov)

容易挤柠檬(不)。
是的,不支持创建受密码保护的存档(正如您刚刚描述的那样,它们将被创建为不受保护的存档)。
但是,它仍然可以用于提取受密码保护的档案。

回到问题。
你总是可以

<?php echo system('zip -P pass file.zip file.txt'); ?>

(这将同时在Windows和我们钟爱的Linux上运行)

但是,如果它不符合您的要求,让我们继续。
我建议您使用DotNetZip(仅限Windows),您将完全从PHP动态生成AES加密的zip存档。

<?php
// origin: https://stackoverflow.com/a/670804/3684575
try
{
  $fname = "zip-generated-from-php-" . date('Y-m-d-His') . ".zip";
  $zipOutput = "c:\\temp\\" . $fname;
  $zipfact = new COM("Ionic.Zip.ZipFile");
  $zip->Name = $zipOutput;
  $dirToZip= "c:\\temp\\psh";
  # Encryption:  3 => 256-bit AES.  
  #     2 => 128-bit AES.  
  #     1 => PKZIP (Weak).  
  #     0 => None
  $zip->Encryption = 3;
  $zip->Password = "AES-Encryption-Is-Secure";
  $zip->AddDirectory($dirToZip);
  $zip->Save();
  $zip->Dispose();

  if (file_exists($zipOutput))
  {
    header('Cache-Control: no-cache, must-revalidate');
    header('Content-Type: application/x-zip'); 
    header('Content-Disposition: attachment; filename=' . $fname);
    header('Content-Length: ' . filesize($zipOutput));
    readfile($zipOutput);
    unlink($zipOutput);
  }
  else 
  {
    echo '<html>';
    echo '  <head>';
    echo '  <title>Calling DotNetZip from PHP through COM</title>';
    echo '  <link rel="stylesheet" href="basic.css"/>';
    echo '  </head>';
    echo '<body>';
    echo '<h2>Whoops!</h2>' . "<br/>\n";
    echo '<p>The file was not successfully generated.</p>';
    echo '</body>';
    echo '</html>';
  } 
}
catch (Exception $e) 
{
    echo '<html>';
    echo '  <head>';
    echo '  <title>Calling DotNetZip from PHP through COM</title>';
    echo '  <link rel="stylesheet" href="basic.css"/>';
    echo '  </head>';
    echo '<body>';
    echo '<h2>Whoops!</h2>' . "<br/>\n";
    echo '<p>The file was not successfully generated.</p>';
    echo '<p>Caught exception: ',  $e->getMessage(), '</p>', "\n";
    echo '<pre>';
    echo $e->getTraceAsString(), "\n";
    echo '</pre>';
    echo '</body>';
    echo '</html>';
}

?>

但是,这仍然是一个非常肮脏的解决方案,而更多的解决方案无法在Linux上运行。

因此,尽管PHP是一种成熟的语言,但是没有足够的方法(不包括自定义扩展名或类似的扩展名)来使用纯PHP实现如此简单的任务。
您还可以做的是,等到PHP 7.2投入生产为止(因为实现了ZipArchive :: setEncryptionName,这要感谢Pierre和Remi)。
但是,在那之前,您还可以尝试将php_zip > = 1.14.0移植到PHP <7.2,但是目前没有可用的已编译二进制文件,因此您必须自己进行编译并尝试一下是否有可能(我相信这是)。
ps我会尝试的,但是我的PC上现在没有VS2015 +。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从受密码保护的PDF文件中删除打印保护?

Java中受密码保护的zip文件

受密码保护的Excel文件

如何使用php_sdk客户端在Dropbox中创建受密码保护的共享链接

如何在OSB中访问受密码保护的Web服务?

如何在Excel 2007中从受密码保护和关闭的工作簿中获取数据

如何使用Python将文件压缩为受密码保护的存档

受密码保护的文件上传

如何刮取受密码保护的网站

如何打开WinZip密码保护的存档?

如何在Google Colab上使用Patool提取受密码保护的Rar文件

如何提取使用Python中的PKWARE SecureZip压缩的受密码保护的zip文件?(Windows 10)

在vbsript中解压缩受密码保护的文件

Mac OSX中受密码保护的文件

如何从受密码保护的RAR文件中隐藏文件夹结构?

如何提取受密码保护的.7z文件?

忽略受密码保护的Excel文件

使用C#提取受密码保护的sfx存档

检测受密码保护的单词文件

受密码保护的zip文件的安全性如何?

如何在OSX上解密受密码保护的PDF?

如何在Python 3中打开受密码保护的zip文件

宏以保存受密码保护的文件

如何在没有密码保护的情况下复制或创建新的pdf文件?

如何使用Inno Setup从FreeArc存档中提取受密码保护的文件?

创建加密(受密码保护)的zip文件

使用PHP在wamp中打开受密码保护的EXCEL

如何在Caja文件管理器中创建受密码保护的存档?

如何在 20.04 中创建受密码保护的存档