2011-12-22 7 views
0

Я написал очень простую веб-форму, которая позволяет моему пользователю просматривать текстовые файлы из своего интернет-браузера.Невозможно заархивировать несколько файлов за один раз

Иногда введенные критерии поиска возвращают более одного файла. Поэтому я хочу реализовать функцию, при которой текстовые файлы, возвращаемые поиском, сжимаются в 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.

+0

Вы уверены, что используете соответствующие флаги и синтаксис с помощью утилиты zip-файла? Возможно, вы указали несколько файлов неправильно. http://linux.about.com/od/commands/l/blcmdl1_zip.htm – user978122

+0

Вы отправили содержимое $ ZIPresult в виде обычного текста, чтобы убедиться, что оно заполнено правильно? – Maxpm

+0

Я уверен, что использую правильные флаги, но дважды проверю; здесь «-9» для опции «сжимать лучше». – Chris

ответ

1

Здесь есть ряд проблем (безопасность для одного, поскольку кажется, что вы не дезинфицируете свои входы БД), но я думаю, что проблема связана с переменной $ ZIPresult. Он не появляется (если я что-то не хватает), что у вас есть пробелы между именами файлов, поэтому вызов shell_exec пытается заархивировать файл «file1.extfile2.extfile3.ext». Посмотрите, что произойдет, если вы измените эту строку:

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

(Red face) Вот и все: теперь я могу ZIP-файлы. Бесконечно благодарен. Принято и проголосовано. – Chris

Смежные вопросы