kristo5747 Posted December 22, 2011 Share Posted December 22, 2011 I wrote a very simple web form that allows my user to view text files from within their Internet browser. I implemented a feature whereby the text files returned by the search are compressed into a ZIP. Here's my code 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 "); $fileName = 'SearchResult.zip'; header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Transfer-Encoding: binary"); header('Content-type: application/zip'); header("Content-length: " . filesize($fileName)); header('Content-Disposition: attachment; filename="' . $fileName . '"'); readfile($fileName); } return $result; } It works great If I download the ZIP file from the server using FTP (for example) but I force the download from the page header, the ZIP is corrupted. What am I missing? 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.** Quote Link to comment https://forums.phpfreaks.com/topic/253702-force-download-corrupts-zip-file/ Share on other sites More sharing options...
kicken Posted December 22, 2011 Share Posted December 22, 2011 If your going to try and have that page output a zip file for download, then you have to ensure it does not output anything else. No HTML, no extra space, nothing. The only thing it can output is the zip file. Quote Link to comment https://forums.phpfreaks.com/topic/253702-force-download-corrupts-zip-file/#findComment-1300593 Share on other sites More sharing options...
kristo5747 Posted December 22, 2011 Author Share Posted December 22, 2011 It was an encoding problem. Tried the following: ob_start(); // Starts output buffering. readfile($fileName); // "Outputs" the file. $content = ob_get_clean(); // Grabs the output and assigns it to a variable. print base64_encode($content); // Encodes and prints the content to the browser. Took care of it. Quote Link to comment https://forums.phpfreaks.com/topic/253702-force-download-corrupts-zip-file/#findComment-1300596 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.