Php 一次无法压缩多个文件
我编写了一个非常简单的web表单,允许我的用户从他们的Internet浏览器中查看文本文件 有时,输入的搜索条件会返回多个文件。因此,我想实现一个功能,将搜索返回的文本文件压缩成ZIP文件 我有一个原型工作,但它只压缩第一个文件。忽略第二个或第三个文件 这是我的密码Php 一次无法压缩多个文件,php,Php,我编写了一个非常简单的web表单,允许我的用户从他们的Internet浏览器中查看文本文件 有时,输入的搜索条件会返回多个文件。因此,我想实现一个功能,将搜索返回的文本文件压缩成ZIP文件 我有一个原型工作,但它只压缩第一个文件。忽略第二个或第三个文件 这是我的密码 <HTML><body><form name="myform" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<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;
}
这里有很多问题(比如安全性,因为您似乎没有清理数据库输入),但我想问题是围绕$ZIPresult变量。文件名之间似乎没有空格(除非我遗漏了什么),因此shell_exec调用试图压缩“file1.extfile2.extfile3.ext”。查看如果修改此行会发生什么情况:
$ZIPresult .= basename($mydir) . '/' . $filename.' ';
你确定你在zip文件实用程序中使用了适当的标志和语法吗?可能您错误地指定了多个文件。您是否已将$ZIPresult内容输出为纯文本以确保其填充正确?我非常确定我使用了正确的标志,但我将再次检查;这里“-9”代表“压缩得更好”选项。@Maxpm:不,我没有试过,但我会的。这是一个很好的方法来检查我的这部分代码是否有效。(红脸)就是这样:我现在可以压缩多个文件了。非常感谢。接受并投票通过。