【问题标题】:How to extract a ZIP file that has a password using only PHP?如何仅使用 PHP 提取具有密码的 ZIP 文件?
【发布时间】:2012-12-10 09:55:29
【问题描述】:

我在这里只看到一个问题,但它没有回答我的问题。我正在运行一个典型的 LAMP 服务器,该服务器具有最新的 PHP 5 和 MYSQL 5 以及 Redhat Linux。

我需要找到一个仅限 PHP 的解决方案,因为我的主机不允许我使用 shell。

这是我的代码,它从 vBulletin 上传中提取未加密的 ZIP 到另一个目录:

if ($_GET['add'] == TRUE){
$zip = new ZipArchive;
 $res = $zip->open($SOURCE FOLDER);
 if ($res === TRUE) {
     $zip->extractTo('$DESTINATION FOLDER/');
     $zip->close();
     echo 'File has been added to the library successfuly';
     //Add a flag to that file to indicate it has already been added to the library.
     mysql_query("UPDATE attachment SET library = 1 WHERE filedataid='$fileid'");    
 } else {
     echo 'A uncompression or file error has occured';
 }}

肯定有某种方法可以只使用 PHP 来做到这一点!谢谢。

更新:我的主机通知我服务器上安装了 gzip,但没有安装 7-Zip。我也在研究 shell 访问。

【问题讨论】:

  • 当你说shell不是一个选项时,你的意思是你不能调用system(),还是你的意思是你不能用shell登录服务器。
  • 我无法进入服务器,我目前正在向我的主机询问 system() 访问权限。
  • 好的,根据你的php是否允许调用system(),你也可以检查你的主机是否安装了unzip可执行文件。请参阅我的答案中的编辑。
  • 好的,显然我应该能够从 PHP 调用 Gzip,如果我正式请求它,我实际上可以获得 SSH 访问权限。
  • 很好,但是 gzip 不处理 .zip 格式,它处理 .gz 格式。但是如果您获得 SSH 访问权限,您应该可以自己安装 7zip。或unzip,如果尚未安装。

标签: php passwords redhat unzip


【解决方案1】:

为脚本提供 7zip 可执行文件并调用它以通过 system() 使用密码解压缩文件。

$strCommandLine = "7z e fileToUnzip.7z -pTHEPASSWORD";
system($strCommandLine);

如果您的主机安装了unzip,您可以执行类似的操作。见http://linux.about.com/od/commands/l/blcmdl1_unzip.htm

它支持带密码的-P,所以是这样的:

$strCommandLine = "unzip fileToUnzip.7z -P THEPASSWORD";
system($strCommandLine);

警告:如果有人在系统上执行 ps 并看到您的 unzip 命令正在运行,他们可能会在该命令行上看到您的密码。

【讨论】:

  • 不幸的是,我的服务器上没有安装 7-zip。但是我的主人告诉我 Gzip 是。
  • 好的,我得到的回复是:“你不能通过 SSH 安装你需要的软件,不可以。unzip 是 Linux 系统可用的基本工具。”跨度>
  • 太棒了。因此,如果 unzip 可用,并且您可以使用 system(),那么您就可以做生意了。
  • 看来我把密码开关放错地方了。试试先输入密码$strCommandLine = "unzip -P THEPASSWORD fileToUnzip.zip";
  • 尝试在最后添加-d scripts,告诉它提取到脚本目录。您可能需要指定脚本目录的完整路径。
【解决方案2】:

你可以使用这个函数 setPassword ( string $password ) http://php.net/manual/en/ziparchive.setpassword.php

【讨论】:

  • 注意:仅适用于 (PHP 5 >= 5.6.0, PHP 7, PECL zip >= 1.12.4)
猜你喜欢
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多