I have a php script that backup my table in .sql format and I want to save the file in gzip format using PHP. How can I do that.
3 Answers
You can also use a filter. From the manual page:
<?php $params = array('level' => 6, 'window' => 15, 'memory' => 9); $original_text = "You SQL queries here..."; $fp = fopen('yourfile.sql.gz', 'w'); stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_WRITE, $params); fwrite($fp, $original_text); fclose($fp); ?> Comments
Use the Zlib functions.
Read the documentation for details
An example taken straight from the linked page:
<?php $filename = tempnam('/tmp', 'zlibtest') . '.gz'; $s = "Only a test, test, test, test, test, test, test, test!\n"; /***** WRITING THE FILE *****/ // open file for writing with maximum compression $zp = gzopen($filename, "w9"); // write string to file gzwrite($zp, $s); // close file gzclose($zp); /***** READING IT *****/ // open file for reading $zp = gzopen($filename, "r"); // read 3 char echo gzread($zp, 3); // output until end of the file and close it. gzpassthru($zp); gzclose($zp); /***** ANOTHER WAY TO READ (and print) IT *****/ // open file and print content (the 2nd time). if (readgzfile($filename) != strlen($s)) { echo "Error with zlib functions!"; } ?> Hope that helps.
Comments
Here is another solution which basically picks up Carlos Lima idea:
<?php ob_start(); /* start buffering */ echo "your cvs or sql output!"; $content = ob_get_contents(); /* get the buffer */ ob_end_clean(); $content = gzencode($content, 9); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header("Content-Description: Download SQL Export"); header('Content-Disposition: attachment; filename=test.txt.gz'); echo $content; die(); ?>