Mysql的Blob到xls使用PHP,而不是在服务器上的文件?

我试图从MySQL中提取一个BLOB,并将其发送给请求者,而不保存在服务器上。 我已经得到它与PDF文件,但我们的一些客户需要xls文件。 获取xls文件时,下载的文件是垃圾。 在HxD中,它看起来像在文件的前面添加了额外的11个字节。

这是我的代码,无论是工作还是不工作:

function blob_download_xls() { $mysqli = openMySQLconnetion(); $sql = "SELECT * FROM Uploads;"; $results = $mysqli->query($sql); $row = $results->fetch_assoc(); $bytes = $row['filedata']; header('Content-type: application/vnd.ms-excel'); header('Content-Disposition: attachment; filename="report.xls"'); print $bytes; } function blob_download_pdf() { $mysqli = openMySQLconnetion(); $sql = "SELECT * FROM Uploads;"; $results = $mysqli->query($sql); $row = $results->fetch_assoc(); $bytes = $row['filedata']; header("Content-type: application/pdf"); header('Content-Disposition: inline; filename="report.pdf"'); print $bytes; } 

任何想法我做错了什么?

我用一个新帐户问了这个问题,却没有意识到我已经在这里有一个帐户。 我已经解决了这个问题,这很愚蠢。

当写我的function.php,我把一个结束标记'?>'在文件的末尾。 在这个标签是一个0d0a的换行符,然后9个20的9个空格。 我删除了结束标记,现在它完美的工作。

处理这个问题的正确方法是在服务器有机会输出任何可能成功执行PHP代码的HTML之前,在打印字节后立即执行die()

 function blob_download_xls() { $mysqli = openMySQLconnetion(); $sql = "SELECT * FROM Uploads;"; $results = $mysqli->query($sql); $row = $results->fetch_assoc(); $bytes = $row['filedata']; header('Content-type: application/vnd.ms-excel'); header('Content-Disposition: attachment; filename="report.xls"'); print $bytes; die(); } 
Interesting Posts