Jump to content

Unable to zip more than one file at a time


kristo5747

Recommended Posts

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.**

You probably just need to put a space between the filenames.  Right now your $ZIPResult variable is going to hold all the filenames squished up together in one long string without any spaces separating them.

 

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

You probably just need to put a space between the filenames.  Right now your $ZIPResult variable is going to hold all the filenames squished up together in one long string without any spaces separating them.

 

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

 

:-[  That was it . I can now ZIP multiple files. Thanks a million!

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.