我将文件存储在MySQL的LONGBLOB字段中。当我使用PHP检索文件时,它在文件的开头有一个额外的空间。我在MySQL Workbench查看器中检查了我的blob数据,额外的空间不在原始数据中。我下载的每个文件都有一个额外的空间。 $ file ['file']变量中不存在该空间,我已将其写入日志并进行检查。它被添加到PHP和浏览器之间的切换中。
这是PHP:
<?php
include("log.php");
$log = new log;
$dbserver='localhost';
$dbid='xxxx';
$dbpw='xxxx';
$dbname='xxxx';
$mydb=mysqli_connect($dbserver,$dbid,$dbpw);
mysqli_set_charset($mydb,'utf8');
mysqli_select_db($mydb, $dbname) or die($log->log("Unable to select database"));
$q = "SELECT * FROM files WHERE id=$fileID";
$r = mysqli_query($mydb, $q) or die ($log->log(mysqli_error($mydb) . $q));
$file = mysqli_fetch_array($r, MYSQLI_ASSOC);
header("Content-Type: {$file['fileType']}");
header("Content-Disposition: filename=\"{$file['fileName']}\"", true);
header("Content-Length: {$file['fileSize']}");
echo trim($file['file']);
?>
我见过其他人在PHP页面或UTF-8编码的BOM上识别出额外的空格,但我在页面上找不到这样的内容。 我使用的是Notepad ++和UTF-8,没有BOM。我也尝试使用vim通过终端在服务器上创建一个新文件而不做任何更改。 修剪也没有帮助。 我已经使用Notepad ++来“显示所有字符”,希望在某个地方找到额外的东西,并且似乎没有任何额外的字符隐藏在我的文件中。 PHP open carat是文件的第一个字符,而结尾克拉是文件的最后一个字符 还有什么可以吗?
谢谢, Bernn
答案 0 :(得分:1)
我很抱歉,但问题出在我的日志课上,我没有告诉你。 我删除了包含,现在空的空间消失了。 它在该文件中的PHP close标记之后有一个尾随空格。 我很感激努力。 谢谢, Bernn
答案 1 :(得分:0)
UTF8 doesn't use a BOM,所以你永远不必添加一个。但是,您要添加带换行符的标题,如果您查看PHP的the header() documentation,则不应该这样做。
答案 2 :(得分:0)
尝试在结尾处取出结束标记(&#34;?&gt;&#34;)。此结束标记不是必需的,如果您在&#34;&gt;&#34;之后有换行符。然后该换行符将被发送到浏览器。
有关PHP关闭标记的其他信息,请参阅Why would one omit the close tag?。