Конечно, после нескольких часов размышлений над этой проблемой, первый комментарий на мой вопрос побудил меня немедленно ее решить.
Проблема заключалась в том, что, хотя я включал этот код в его собственную функцию в верхней частистраницу, я вызывал ее, только если в массиве $ _POST был установлен определенный флаг.Я не проверял флаг до конца файла PHP.Я перенес эту проверку перед функцией, и она сработала.
Оригинальный вопрос ниже:
Я пытаюсь использовать функцию fopen () в PHP для вывода CSVфайл, и хотя он содержит данные, которые я хочу, он также содержит всю структуру HTML страницы, а также встроенные таблицы стилей до содержимого, которое я на самом деле хочу вывести.
Я использую этот код(с здесь ) практически без изменений.Я очень незнаком с потоковой передачей и выводом PHP, поэтому я начал с того, что, как я надеюсь, было прочной основой:
$fileName = 'somefile.csv';
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header('Content-Description: File Transfer');
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename={$fileName}");
header("Expires: 0");
header("Pragma: public");
$fh = @fopen( 'php://output', 'w' );
global $wpdb;
$query = "SELECT * FROM `{$wpdb->prefix}my_table`";
$results = $wpdb->get_results( $query, ARRAY_A );
$headerDisplayed = false;
foreach ( $results as $data ) {
// Add a header row if it hasn't been added yet
if ( !$headerDisplayed ) {
// Use the keys from $data as the titles
fputcsv($fh, array_keys($data));
$headerDisplayed = true;
}
// Put the data into the stream
fputcsv($fh, $data);
}
// Close the file
fclose($fh);
// Make sure nothing else is sent, our file is done
exit;
Я предполагаю, что этот пример должен был быть включен в свой собственный внешний файл PHP,но из-за ограничений, с которыми я имею дело, я пытаюсь включить это вместо этого.Я немного поработал с буферизацией вывода без каких-либо положительных результатов, но документация по PHP на них довольно скудная, так что, возможно, мне чего-то не хватает.