【问题标题】:PHP Export MySQL to CSV - Results showing HTMLPHP 将 MySQL 导出为 CSV - 结果显示 HTML
【发布时间】:2010-11-14 21:41:43
【问题描述】:

我已经看到了一篇关于此的帖子,但它并没有真正提供解决方案(至少对我有用)...

我有一个 PHP 页面,它执行一些基本的 MySQL 查询,其结果显示在页面上。我在整个过程中使用了一些 $_GET 和 $_SESSION 变量。

在同一页面中,我还允许用户“导出为 CSV”(通过调用函数)。从导出返回的文件在底部有 CSV 结果,但还包含我的页面的 HTML(它调用该函数)。

现在,在页面顶部我有 ob_start(),在底部我有 ob_flush(),否则在页面加载时我会收到一些“无法修改标题...”错误。因此,正如我阅读的帖子中所建议的那样:

 My guess is that you've got some sort of template that generates the same HTML header and footer regardless of the page that is requested. Sometime before the exportCSV function is called, the header is generated.

 You don't show the bottom of the output, but I'll bet the footer is there too, since I suspect the flow control will continue on to that code after the function exits."

 (http://stackoverflow.com/questions/207019/why-am-i-getting-html-in-my-mysql-export-to-csv/207046)

有人对我如何防止这种情况发生有任何想法吗?如果我应该发布一些代码,请告诉我,我会...

谢谢!

编辑:

在调用导出函数之前调用 ob_end_clean() 时,它会删除 CSV 之前的任何 html。但是,在 CSV 结果之后,我仍然会收到一些 HTML 结束标记...

 fname  lname   MONTH   WeekdayCount    WeekendCount
 John   Doe 8   1   0
 John   Doe 7   3   2
 Jane   Smith   7   3   2
 </div>             
    </div>          
 </div>             

 </body>                

 </html>            

编辑:

此问题已通过在调用 CSV 导出脚本后调用 exit() 解决。

【问题讨论】:

    标签: php mysql html csv


    【解决方案1】:

    您可以在输出 csv 数据之前尝试调用 ob_end_clean(),它应该会丢弃您已经打印为 HTML 的任何输出。

    您可以在输出 csv 数据后调用 exit() 以停止打印页面的其余部分。

    这似乎不是一个特别好的方法,你能不能有一个单独的 PHP 脚本来输出默认不包含页眉和页脚的 csv?

    【讨论】:

    • 啊,没关系,我在输出 csv 后忘记调用 exit() 了。那行得通!非常感谢。我必须使用 ob_flush 和 ob_end_clean() 等是不是很糟糕?
    • 导出 CSV 的实际脚本是单独的。但我必须在我现有的 PHP 页面中调用脚本(混入 HTML)...
    • 您可以考虑将您的 PHP 脚本拆分为逻辑和表示,即在您加载并处理完所有数据并且您确切知道页面上想要什么之前不要输出任何 HTML。跨度>
    • 在调用 CSV 导出脚本后调用 exit() 解决了我的问题。
    • exit 对我有用。这是在我使用 joomla 的组件中谢谢
    【解决方案2】:

    如果没有看到您的脚本,除了说您在发送 ANY 内容后无法将 HTTP 标头发送到客户端之外,很难说出具体的问题所在。这包括空白。有时,在您打开 &lt;?php 语句之前也会有不可打印的字符。如有必要,请使用十六进制编辑器来查找这些内容。

    export.php 脚本的顶部应该类似于:

    <?php
    header('Content-Type: text/csv');
    ...
    

    是这样吗?

    【讨论】:

    • cletus,不,事实并非如此。但是我添加了它,它似乎没有做任何事情......
    【解决方案3】:

    我也面临这个问题并且已经解决了。 我的代码是:

    <html>
    <title> </title>
    <body>
           <?php
             ....Code which output MySQL to CSV
           ?>
    </body></html>
    

    以下是顶部带有 HTML 代码的 CSV 文件示例。

    <html>                      
    <head>                  
    <meta http-equiv="Content-Language" content="th">                   
    <meta http-equiv="content-Type" content="text/html; charset=window-874">                    
    <meta http-equiv="content-Type" content="text/html; charset=tis-620">                   
    
    <title> Super Man  </title>                 
    
    </head>                     
    
    <body bgcolor="#FFFFD4">                    
    
    <SQL rows resulted>
    xx5497  1/7/2015 1:03   SSFTM   SSFTVM  35  Condition2
    xx5498  1/7/2015 1:04   SSDHN   SSDHKN  13  Condition2
    xx5499  1/7/2015 1:06   SSFTM   SSFTVM  14  Condition2
    

    运行时,CSV 文件的前 12 行位于顶部。在我看来,这太疯狂了。我通过将 PHP 代码移到顶部来解决它。然后结果就OK了。只有 SQL 结果输出到 CSV 文件。

    <?php
      ....Code which output MySQL to CSV
    ?>
    
    <html>
    <title> </title>
    <body>
    
    </body></html>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-11
      • 1970-01-01
      相关资源
      最近更新 更多