Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 一次无法压缩多个文件_Php - Fatal编程技术网

Php 一次无法压缩多个文件

Php 一次无法压缩多个文件,php,Php,我编写了一个非常简单的web表单,允许我的用户从他们的Internet浏览器中查看文本文件 有时,输入的搜索条件会返回多个文件。因此,我想实现一个功能,将搜索返回的文本文件压缩成ZIP文件 我有一个原型工作,但它只压缩第一个文件。忽略第二个或第三个文件 这是我的密码 <HTML><body><form name="myform" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">

我编写了一个非常简单的web表单,允许我的用户从他们的Internet浏览器中查看文本文件

有时,输入的搜索条件会返回多个文件。因此,我想实现一个功能,将搜索返回的文本文件压缩成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;
}

这里有很多问题(比如安全性,因为您似乎没有清理数据库输入),但我想问题是围绕$ZIPresult变量。文件名之间似乎没有空格(除非我遗漏了什么),因此shell_exec调用试图压缩“file1.extfile2.extfile3.ext”。查看如果修改此行会发生什么情况:

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

你确定你在zip文件实用程序中使用了适当的标志和语法吗?可能您错误地指定了多个文件。您是否已将$ZIPresult内容输出为纯文本以确保其填充正确?我非常确定我使用了正确的标志,但我将再次检查;这里“-9”代表“压缩得更好”选项。@Maxpm:不,我没有试过,但我会的。这是一个很好的方法来检查我的这部分代码是否有效。(红脸)就是这样:我现在可以压缩多个文件了。非常感谢。接受并投票通过。