2013-05-19 3 views
3

Моя программа загружает изображения различных размеров в поле blob базы данных MySQL с использованием PHP. Я смог успешно загрузить различные размеры до 1 МБ и выше. Моя проблема заключается в том, что когда я их показываю, я смог отображать изображения размером менее 10 КБ. Для больших изображений отображается ошибка. ..... не может быть отображен, так как содержит ошибки (в Firefox), а в Chrome он просто отображает место для изображения. Я пробовал так много трюков, и я везде гугл. Я редактировал как php.ini, так и my.ini. Моя программа - приложение для интрасети, и одновременно будет менее 50 пользователей. Это сценарий, который используется для отображения изображений:Почему некоторые изображения не отображаются

Если я удаляю заголовок ('Content-Type:'. $ Resource_type), он выгружает двоичный код на экран. Я увеличил размер пакета MySQL до 100 МБ, и проблема не устранена.

$d_id= $_GET['k'];$query="";$query_handle=0;$row="";$no_of_rows=0; 
    $query="SELECT * FROM tdoc "; 
    $query.=" WHERE ucase(trim(fsha_doc_key))='".strtoupper(trim($d_id))."' "; 
    $query_handle=mysql_query($query,$conn_handle); 
    if(!$query_handle) {$error_flag=1;echo '<br />Unable to execute query to Extract Resource CODE:FREF';} 
    if($query_handle) $no_of_rows=mysql_num_rows($query_handle); 
    if(($query_handle)&&($no_of_rows<=0)) {$error_flag=1;echo '<br />The Exact Resource: '.strip_tags($d_id).' NOT found ';} 
    if(($query_handle)&&($no_of_rows>0)){ 
     $row=mysql_fetch_assoc($query_handle); 
     $resource_type=trim($row['ftype']); 
     $resource_size=$row['fsize']; 
     $resource_h=$row['fheight']; 
     $resource_w=$row['fwidth']; 
     $d_resource=$row['fdoc']; 
     header('Content-Type: '.$resource_type); 
     header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); 
     header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); 
     header('Cache-Control: no-store, no-cache, must-revalidate'); 
     header('Cache-Control: post-check=0, pre-check=0', false); 
     header('Pragma: no-cache'); 
     header('Content-Length: '.filesize($d_resource)); 
     header('Content-height: '.$resource_h); 
     header('Content-width: '.$resource_w); 
     echo stripslashes(base64_decode($d_resource)); 
    } 

Я прочитал исключительно сообщения, касающиеся эту ошибку здесь, но никто не решить мой конкретный вопрос, потому что шахта отображения уменьшенных изображений размера, но не изображения до и выше 10kb. 10kb далеко от моего прогнозируемого среднего размера изображения, который будет загружен позже. Пожалуйста помоги.

+1

Похоже, вы можете открыть SQL-инъекцию? – John

+0

просто предложение, вы не должны сохранять целые файлы в своей базе данных, вы должны сохранить его в каталоге на своем сервере, а затем ссылаться на ссылку на файл в msql ... –

ответ

0

Если $d_resource это двоичные данные изображения

Вы должны использоваться imagejpeg или imagegif или другие функции серии, а не echo

См Output image to browser or file - PHP

0

Изменение типа от BLOB (или даже TEXT или VARCHAR?) до MEDIUMBLOB или LONGBLOB, см. storage requirements

TINYBLOB, TINYTEXT L + 1 bytes, where L < 2^8 
BLOB, TEXT L + 2 bytes, where L < 2^16 
MEDIUMBLOB, MEDIUMTEXT L + 3 bytes, where L < 2^24 
LONGBLOB, LONGTEXT L + 4 bytes, where L < 2^32 

Размер для BLOB составляет 2^16, но фактический размер меньше, так как вы base64_encode изображения (это не является обязательным, если вы используете BLOB, который хранит двоичные данные).

Также обратите внимание на комментарий Джона на ваш вопрос: вы должны добавить косые черты к $d_id, если у вас нет magic_quotes_gpc.

0

Возможно, вы попали в пределы памяти, потому что вы переносите несколько копий изображения. Один из $ row [fdoc], один в $ d_resources. И вы, вероятно, должны удалить вызов stripslashes, не делая вам никаких выгод.

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