2009-10-16 2 views
2

Я только недавно спросил и решил вопрос, связанный с загрузкой файлов .PDF размером более 2 МБ в базу данных MySQL как BLOBS. Мне пришлось изменить некоторые параметры в файле php.ini и максимальном наборе пакетов MySQL. Однако, исправление этой проблемы привело меня к обнаружению новой проблемы с моим скриптом.BLOB Download Усечен с 1 Мб сценария для файлов менее 1 МБ

Теперь, поскольку я могу загружать файлы в свою базу данных BLOB, я попытался загрузить файл для целей тестирования. К моему большому разочарованию, когда я пошел открывать файл .PDF, я получил следующую ошибку: Не удалось загрузить документ (ошибка 3) 'file: ///tmp/test-13.pdf'. После дальнейшего расследования выяснилось, что загружаемый файл test.pdf был всего лишь 1 МБ, что чуть меньше половины его предполагаемого размера в базе данных чуть более 2 МБ. Это, очевидно, причина ошибки.

Следующий фрагмент кода является частью моего сценария, который я использую для загрузки файлов из базы данных. Он находится на самом верху скрипта и работает безупречно для файлов размером менее 1 МБ.

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 МБ, поэтому необходимо загрузить 2 МБ.

Спасибо за любую помощь.

+0

Вы дважды проверили, что * размер * установлен правильно в вашей базе данных? –

+0

Я еще не проверил, но когда я вернусь к работе в понедельник. – dbaugh

ответ

2

Я действительно исправили проблему. Я изменил все значения, которые были рекомендованы здесь в php.ini и my.cnf, но мне также необходимо было изменить параметр для PDO.

I изменено: 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_packet является 1048576.

+0

У меня уже был администратор базы данных, который изменил значение max_allowed_packet на стороне сервера до 4 МБ. Есть ли что-то, что мне нужно изменить на стороне клиента? – dbaugh

Смежные вопросы