2009-10-16 44 views
2

我剛剛問了一個關於將大於2 MB的.PDF文件上傳到BLOBS的MySQL數據庫的問題。我不得不改變我的php.ini文件和MySQLs最大數據包設置中的一些設置。然而,解決這個問題導致我發現了一個新的問題與我的腳本。BLOB下載截斷爲1 MB腳本對於小於1 MB的文件起作用

現在,因爲我可以上傳文件到我的BLOB數據庫,所以我試圖下載該文件用於測試目的。當我打開.PDF文件時,非常沮喪,我收到以下錯誤:無法加載文檔(錯誤3)'file:///tmp/test-13.pdf'。經過進一步的調查,我發現正在下載的文件test.pdf只有1 MB,稍微小於數據庫中超過2 MB的假定大小的一半。這顯然是錯誤的原因。

下面這段代碼是我用來從數據庫下載文件的腳本部分。它位於腳本的最頂端,完美適用於小於1 MB的文件。

foreach($_REQUEST as $key => $value) 
{ 
if ($value == 'Open') 
    { 
    header(); 
    session_start(); 
    $dbh = new PDO('mysql:host='.$_SESSION['OpsDBServer'].'.ops.tns.its.psu.edu; 
      dbname='.$_SESSION['OpsDB'], $_SESSION['yoM'], $_SESSION['aMa']); 
    $id = $key; 
    $sqlDownload = "SELECT name, type, content, size FROM upload WHERE 
    id='".$id."'"; 
    $result = $dbh->query($sqlDownload); 

    $download = $result->fetchAll(); 
    $type = $download[0]['type']; 
    $size = $download[0]['size']; 
    $name = $download[0]['name']; 
    $content = $download[0]['content']; 

    header("Content-type: $type"); 
    header("Content-Disposition: inline; filename=$name"); 
    header("Content-length: $size"); 
    header("Cache-Control: maxage=1"); 
    header("Pragma: public"); 

    echo $content; 

    exit; 
    } 
} 

我在想,也許我有一些頭部聲明錯誤?我很困惑該怎麼做。我已經通過php.ini進行了搜索,並且沒有發現我認爲需要更改的設置,並且我的MySQL的最大數據包設置爲4 MB,因此需要下載2 MB。

感謝您的任何幫助。

+0

您是否仔細檢查了數據庫中* size *的設置是否正確? – 2009-10-16 19:55:24

+0

我還沒有檢查過,但我會在星期一回去工作。 – dbaugh 2009-10-17 16:30:20

回答

2

其實我固定的問題。我更改了php.ini和my.cnf中推薦的所有值,但我還需要更改PDO的設置。

我改變了: PDO :: MYSQL_ATTR_MAX_BUFFER_SIZE(整數) 最大緩衝區大小。默認爲1 MiB。

當PDO對象創建成可以工作時,必須設置它。現在一切都很好。

2

根據(http://dev.mysql.com/doc/refman/5.0/en/blob.html):

The maximum size of a BLOB or TEXT object is determined by its type, but the largest value you actually can transmit between the client and server is determined by the amount of available memory and the size of the communications buffers. You can change the message buffer size by changing the value of the max_allowed_packet variable, but you must do so for both the server and your client program.

根據(http://dev.mysql.com/doc/refman/5.0/en/server-parameters.html)爲max_allowed_pa​​cket的默認值是1048576

+0

我已經讓數據庫管理員將服務器端的max_allowed_pa​​cket的值更改爲4MB。我還需要在客戶端進行更改嗎? – dbaugh 2009-10-17 16:29:27

相關問題