Posted under » PHP » MySQL on 22 Nov 2016
Triggering a download
What many programmers don't realise is that you don't have to create a file, even a temporary one, in order for one to be downloaded. It's sufficient to 'mimic' a download by passing the equivalent HTTP headers followed by the data.
If we create a PHP file with the following code then when it's called a file will be downloaded which can be opened directly using Excel.
<?PHP function cleanData(&$str) { $str = preg_replace("/\t/", "\\t", $str); $str = preg_replace("/\r?\n/", "\\n", $str); if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"'; } $result = mysql_query("select * from table_g ORDER BY registered"); // filename for download $filename = "website_data_" . date('Ymd') . ".xls"; header("Content-Disposition: attachment; filename=\"$filename\""); header("Content-Type: application/vnd.ms-excel"); $flag = false; while ($row = mysql_fetch_assoc($result)) { foreach($data as $row) { if(!$flag) { // display field/column names as first row echo implode("\t", array_keys($row)) . "\r\n"; $flag = true; } // since flag is now true... we begin putting records // The array_walk() function runs each array element in a user-defined function array_walk($row, __NAMESPACE__ . '\cleanData'); echo implode("\t", array_values($row)) . "\r\n"; } exit; ?>