PHP fopen包含不需要的内容
当然,在思考了几个小时后,对我的问题的第一个评论会让我立即解决它 问题是,尽管我在页面顶部的函数中包含了这段代码,但只有在$\u POST数组中设置了某个标志时,我才调用它。直到PHP文件结束,我才检查标志。我在功能开始前移动了支票,它成功了 原问题如下:PHP fopen包含不需要的内容,php,filestream,fopen,output-buffering,Php,Filestream,Fopen,Output Buffering,当然,在思考了几个小时后,对我的问题的第一个评论会让我立即解决它 问题是,尽管我在页面顶部的函数中包含了这段代码,但只有在$\u POST数组中设置了某个标志时,我才调用它。直到PHP文件结束,我才检查标志。我在功能开始前移动了支票,它成功了 原问题如下: 我试图在PHP中使用fopen()函数来输出CSV文件,尽管它包含我想要的数据,但它也包含了页面的整个HTML结构,以及内联样式表,然后才是我真正想要输出的内容 我使用的代码(来自)几乎没有变化。我对PHP流式处理和输出非常不熟悉,因此我希
我试图在PHP中使用fopen()函数来输出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文档非常稀少,所以我可能缺少一些东西。问题似乎是,在尝试从同一个PHP文件、CSV文件和一些html内容输出的同时。你必须把它们分开,有两个不同的URL 我猜你的PHP代码被你所说的html代码(和css内联)所包围 你要做的是:
- 有一个只输出CSV内容的PHP脚本(它只包含您向我们展示的代码,当然还有开头的PHP标记)
- 还有另一个PHP脚本,它生成html代码,并提供到上一个脚本的链接(例如)
这个脚本需要是它自己的单独文件,直接调用,而不是将它内联到另一个脚本中。我知道您有其他数据库连接,因此必须首先设置。您必须从标准页面中提取这些内容,并将其包含在此页面中。当然,在思考了几个小时后,对我的问题的第一个评论会让我立即解决它
问题是,尽管我在页面顶部的函数中包含了这段代码,但只有在$\u POST数组中设置了某个标志时,我才调用它。直到PHP文件结束,我才检查标志。我在函数之前移动了该检查,结果它成功了。如何内联?你能告诉我们这段代码是如何包含在你的其他代码中的吗?信不信由你,你的问题实际上解决了这个问题:)问题是,尽管我在页面顶部将这段代码包含在它自己的函数中,但只有在$\u POST数组中设置了某个标志时,我才调用它。直到PHP文件结束,我才检查标志。我在功能开始前移动了支票,它成功了。谢谢!我试图避免这样做,因为我在一个很难使用多个脚本的平台上工作。谢天谢地,我找到了一种方法,可以在一个文件中完成这一切。我编辑了我的问题来解释我做了什么,如果你感兴趣的话。