PHP文件下载在文件开头添加了额外的空格

时间:2015-04-02 15:37:49

标签: php mysql

我将文件存储在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

3 个答案:

答案 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?