无法一次压缩多个文件

时间:2011-12-22 17:57:22

标签: php

我写了一个非常简单的网页表单,允许我的用户在他们的互联网浏览器中查看文本文件。

有时,输入的搜索条件会返回多个文件。所以我想实现一个功能,将搜索返回的文本文件压缩成ZIP。

我有一个原型工作,但它只压缩第一个文件。第二个或第三个文件被忽略。

这是我的代码

<HTML><body><form name="myform" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<fieldset><label for="DBRIDs">RIDs</label><input type="text" id="DBRIDs" name="DBRIDs" >
</fieldset></form></body></HTML>
<?php
function check_search() {
 if (isset($_POST['submit'])) {if (!empty($_POST['DBRIDs'])) { $results = getFiles(); }
        }       else $errors = "Please enter something before you hit SUBMIT.";
 return Array($results, $errors);
}
function getFiles() {
 $result = null;
 $ZIPresult = null;
 if (empty($_POST['DBRIDs'])) { return null; }
 $mydir = MYDIR; 
 $dir = opendir($mydir);
 $DBRIDs = $_POST['DBRIDs'];
 $getfilename = mysql_query("select filename from search_table where rid in (" . $DBRIDs . ")") or die(mysql_error());
 while ($row = mysql_fetch_array($getfilename)) {
 $filename = $row['filename'];
 $result .= '<tr><td><a href="' . basename($mydir) . '/' . $filename . '" target="_blank">' . $filename . '</a></td></tr>';
 $ZIPresult .= basename($mydir) . '/' . $filename;
} 
if ($result) {
$result = "<table><tbody><tr><td>Search Results.</td></tr> $result</table>";
shell_exec("zip -9 SearchResult.zip ". $ZIPresult ." > /dev/null ");
} return $result;
}

指向文件的超链接生成得很好。但是ZIP文件只包含结果中列出的第一个文件。

如何让ZIP文件捕获所有返回的文件?

感谢您的意见。

PS:新的ZipArchive()库/类在我们的生产环境中不可用,所以我选择使用Unix实用程序ZIP。

1 个答案:

答案 0 :(得分:1)

这里有很多问题(安全性,因为看起来你没有清理你的数据库输入),但我猜这个问题是围绕$ ZIPresult变量。它没有出现(除非我遗漏了一些东西)你的文件名之间有空格,所以shell_exec调用试图压缩“file1.extfile2.extfile3.ext”。看看如果修改这一行会发生什么:

$ZIPresult .= basename($mydir) . '/' . $filename.' ';