Forum Moderators: coopster

Message Too Old, No Replies

Unable to zip more than one file at a time

         

kristo5747

6:01 pm on Dec 22, 2011 (gmt 0)

10+ Year Member



I wrote a very simple web form that allows my user to view text files from within their Internet browser.

Occasionally, the search criteria entered returns more than one file. So I want to implement a feature whereby the text files returned by the search are compressed into a ZIP.

I got a prototype working but it only compresses the first file. The second or third files are ignored.

Here's my code

 <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;
}


The hyperlinks pointing to the file(s) are generated just fine. The ZIP file however only contains the first file listed in the results.

How can I get the ZIP file to capture ALL the files returned?

Thanks for your input.

**PS: The new ZipArchive() library/class is not available on our production environment so I chose to use the Unix utility ZIP instead.**

kristo5747

6:29 pm on Dec 22, 2011 (gmt 0)

10+ Year Member



Resolved:

I did not have any spaces between my file names, so the shell_exec call is trying to zip "file1.extfile2.extfile3.ext".

I modified this line:

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


It worked. I can now ZIP multiple files.