PHP:获取字符串作为streamoutput总是额外的字母

时间:2016-06-07 14:49:48

标签: php http-headers

我尝试做什么:

  • 生成XML(Sepa-XML) - 工作!
  • 将其保存到数据库 - 工作! (我只是将整个内容写成BLOB)
  • 让用户下载文件 - 不按我想要的方式工作

我的代码:

$sql = 'SELECT ID,XML FROM table WHERE ID = ?';
//Connect here
    $result = $db->prepare($sql);
    $result->bind_param('i', $_GET['download_xml']);
    $result->execute();
    $result->bind_result($ID, $file);
    $result->fetch();
    header("Content-type: text/xml");
    header("Content-Disposition: attachment; filename=test_".$ID.".xml");       
    print($file);

它为我提供了文件,但XML-Checker告诉我<xml前面有字符。如果我在记事本中打开文件,<xml

前面没有任何字符

当我使用file_put_contents()保存数据时,它工作正常,我得到了格式良好的XML文件。

2 个答案:

答案 0 :(得分:0)

确保在打开php标记之前没有额外的字符。

下载文件时可能会出现问题,因为开头标记前面有“空格”。

 <?php ....

这看起来相同但会起作用,因为标签前面没有字符。

<?php ...

网络服务器在php输出之前发送那些额外的字符,这将破坏文件。

答案 1 :(得分:0)

问题是,该文件编码为带有BOM的UTF-8。将其更改为没有BOM的UTF-8 就可以了。