4

我在这里只看到一个问题,但它没有回答我的问题。我正在运行一个典型的 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。我也在研究外壳访问。

4

2 回答 2

6

为脚本提供 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 命令正在运行,他们可能会在该命令行上看到您的密码。

于 2012-12-23T18:35:00.027 回答
6

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

于 2016-03-01T15:29:04.990 回答