2015-04-02 25 views
2

我將文件存儲在MySQL中的LONGBLOB字段中。當我使用PHP檢索文件時,它在文件的開頭有一個額外的空間。我在MySQL Workbench查看器中檢查了我的blob數據,額外的空間不在原始數據中。我下載的每個文件在開始時都有一個額外的空間。該空間不存在於$ file ['file']變量中,我已將它寫入日誌並進行檢查。它被添加到PHP和瀏覽器之間的交接處。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']); 
?> 

我看到其他人識別UTF-8編碼的PHP頁面或BOM上多餘的空格,但我能找到一點也不像我的網頁上。 我使用記事本++和UTF-8不帶BOM。我也嘗試通過終端在服務器上使用vim創建一個新文件,而且沒有任何改變。 修剪也沒有幫助。 我用記事本++來「顯示所有字符」,希望能夠在某處找到額外的東西,並且看起來沒有隱藏在我的文件中的任何額外字符。 PHP開放克拉是文件的第一個字符,並且關閉克拉是文件的最後一個字符。
還有什麼?

感謝, Bernn

+0

它可能與\ n有關嗎? – motto 2015-04-02 15:41:21

+0

嘗試刪除\ n ....沒有幫助。 – Bernn 2015-04-02 16:54:09

回答

1

我很抱歉,但問題出在我沒有告訴你的日誌類中。 我刪除了包含,現在空的空間消失了。 它在該文件中的PHP關閉標記之後有一個尾部空格。 我很欣賞這種努力。 謝謝, Bernn

+0

你發現它的好處 - 你可以明天接受你自己的答案,或者如果你不認爲SO的未來訪客會從找到答案和相關答案中受益,那麼你可以刪除你的問題。 – 2015-04-02 21:50:46

0

UTF8 doesn't use a BOM,所以你不應該添加一個。但是,您正在添加帶有換行符的標頭,如果您查看PHP的the header() documentation,則不應該這樣做。

+0

好吧,我已經從頭文件中取出了換行符,但結果沒有改變。 – Bernn 2015-04-02 16:29:30

+0

值得更新你的問題。 – 2015-04-02 16:44:24

+0

我覺得自己像一個白癡,但不知道如何編輯帖子。 – Bernn 2015-04-02 16:55:02

0

嘗試取出結束標籤(「?>」)。這個結束標記是沒有必要的,如果你在「>」後有一個換行符,那麼這個換行符將被髮送到瀏覽器。

有關PHP關閉標記的其他信息,請參見Why would one omit the close tag?