То, что я хочу сделать, – вызов класса для экспорта данных mysql в excel из другого класса. Ниже приведен код, который я использовал (я пропустил код для открытия соединения):
//This is the class for calling the `ExportToExcel` class Class SampleClass { public static function mainFunction() { ExportToExcel::exportToExcel(); } } Class ExportToExcel { public static function exportToExcel() { $DB = DB::Open(); //Open the database $csv_terminated = "\n"; $csv_separator = ","; $csv_enclosed = '"'; $csv_escaped = "\\"; $sql_query = "The Query goes here..."; $result = $DB->qry($sql_query, 2, TRUE); //Run the query $fields_cnt = 0; $schema_insert = ''; while ($finfo = mysqli_fetch_field($result)) { $fields_cnt++; $l = $csv_enclosed . str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, stripslashes($finfo->name)) . $csv_enclosed; $schema_insert .= $l; $schema_insert .= $csv_separator; } $out = trim(substr($schema_insert, 0, -1)); $out .= $csv_terminated; while ($row = mysqli_fetch_array($result)) { $schema_insert = ''; for ($j = 0; $j < $fields_cnt; $j++) { if ($row[$j] == '0' || $row[$j] != '') { if ($csv_enclosed == '') $schema_insert .= $row[$j]; else { $schema_insert .= $csv_enclosed . str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, $row[$j]) . $csv_enclosed; } } else $schema_insert .= ''; if ($j < $fields_cnt - 1) $schema_insert .= $csv_separator; } $out .= $schema_insert; $out .= $csv_terminated; } header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); //--> WARNING header("Content-Length: " . strlen($out)); //--> WARNING header("Content-type: text/x-csv"); //--> WARNING header("Content-Disposition: attachment; filename=somefile.csv"); //--> WARNING echo $out; exit; } }
Но он возвращает ошибку:
Warning: Cannot modify header information - headers already sent by (output started at 'files' on line XX
Когда я запускаю код напрямую без каких-либо классов и функций, он работает. Я попытался проверить список заголовков с помощью var_dump(headers_list())
и у меня есть:
array(5) { [0]=> string(23) "X-Powered-By: PHP/5.4.4" [1]=> string(38) "Expires: Thu, 19 Nov 1981 08:52:00 GMT" [2]=> string(77) "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0" [3]=> string(16) "Pragma: no-cache" [4]=> string(23) "Content-type: text/html" }
Я попытался удалить заголовок, используя header_remove();
но это было то же самое. Как решить проблему? Благодаря…