PHP fopen包含不需要的内容

PHP fopen包含不需要的内容,php,filestream,fopen,output-buffering,Php,Filestream,Fopen,Output Buffering,当然,在思考了几个小时后,对我的问题的第一个评论会让我立即解决它 问题是,尽管我在页面顶部的函数中包含了这段代码,但只有在$\u POST数组中设置了某个标志时,我才调用它。直到PHP文件结束,我才检查标志。我在功能开始前移动了支票,它成功了 原问题如下: 我试图在PHP中使用fopen()函数来输出CSV文件,尽管它包含我想要的数据,但它也包含了页面的整个HTML结构,以及内联样式表,然后才是我真正想要输出的内容 我使用的代码(来自)几乎没有变化。我对PHP流式处理和输出非常不熟悉,因此我希

当然,在思考了几个小时后,对我的问题的第一个评论会让我立即解决它

问题是,尽管我在页面顶部的函数中包含了这段代码,但只有在$\u POST数组中设置了某个标志时,我才调用它。直到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文件结束,我才检查标志。我在功能开始前移动了支票,它成功了。谢谢!我试图避免这样做,因为我在一个很难使用多个脚本的平台上工作。谢天谢地,我找到了一种方法,可以在一个文件中完成这一切。我编辑了我的问题来解释我做了什么,如果你感兴趣的话。