当然,经过几个小时的思考,我的问题的第一个评论让我立即解决。
问题在于,尽管我在页面顶部将自己的代码包含在自己的函数中,但只有在$ _POST数组中设置了某个标志时,我才会调用它。我直到PHP文件结束时才检查标志。我在该功能之前移动了该检查,并且它工作正常。
原始问题如下:
我试图在PHP中使用fopen()函数输出一个CSV文件,虽然它包含我想要的数据,但它还包含页面的整个HTML结构以及内联样式表,实际上想要输出。
我使用这个代码(来自here)几乎没有改变。我对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文档相当稀少,所以可能会丢失一些东西。