2009-02-17 2 views
0

Я пытаюсь отобразить изображение с использованием PHP-скрипта. В принципе, php-скрипт передается по полному пути к изображению, а затем отображает это изображение в браузере. Я проверил, чтобы убедиться, что изображение существует, оно читается правильно и т. Д. Однако в браузере я просто вижу окно с поврежденным изображением (например, маленький красный крест в IE), если я туда поеду.Отображение изображений с использованием PHP не работает

Мой сценарий посылает эти заголовки:

<?php 
header('Last-Modified: ' . gmdate('D, d M Y H:i:s T', filemtime($file))); 
header('Content-Type: '.$mime); 
header('Content-Length: '.filesize($file)."\n\n"); 
header('Etag: '.md5($file)); 
echo $file; 
die; 

$file содержит что-то вроде '/var/www/htdocs/images/file.jpg', который работает. $mime является 'image/jpeg'.

Я также пробовал эхо file_get_contents($file), но это тоже не сработало.

В чем проблема, какие-либо мысли?

+1

Причина - это плохой вопрос. –

+1

Дополнительное пространство или контент до Miguel

+0

Спасибо, Мигель. Я не смог загрузить изображения из файла read из-за наличия содержимого до ' jarmerson

ответ

1

Я нашел ответ, у меня было несколько лишних пробелов после тега ?>, из-за чего заголовок не работал. grrrrrrr

+1

Я часто делал эту ошибку также .. haha ​​ – roa3

+0

Вот почему я в последнее время прекратил использовать конечный PHP-тег ... –

+0

Обычно люди не включают конечный тег PHP, за исключением того, что после него есть HTML, а также в стандартах кодирования Zend. Это может создать множество ошибок в отношении заголовков и вывода. – Jrgns

2

Стремление к простоте ...

<?php 
header('Content-type:' . mime_content_type($file)); 
readfile($file); 

должен функционировать, как и ожидалось.

+0

не работает :(показывает то же изображение с поврежденным изображением :(набрав URL-адрес изображения прямо в браузере, и если я набираю echo readfile ($ file) и опускаю заголовок, я вижу всю массу тарабарщины, которая составляет изображение –

+2

Не нужно вводить echo readfile(), поскольку readfile() записывает непосредственно в выходной буфер. Добавление эха будет только загрязнять изображение, отражая количество возвращенных байтов. – Matt

3
<?php 
$filename = basename($file); 
$file_extension = strtolower(substr(strrchr($filename,"."),1)); 
switch($file_extension) 
    { 
    case "gif": 
     $ctype="image/gif"; 
     break; 
    case "png": 
     $ctype="image/png"; 
     break; 
    case "jpeg": 
    case "jpg": 
     $ctype="image/jpeg"; 
     break; 
    default: 
    } 
ob_clean(); // add this before header 
header('Content-type: ' . $ctype); 
readFile($file); 
?> 

Некоторое время дополнительное пространство может быть произведено в любой другой file.So эти лишние пробелы могут быть удалены с помощью вызова ob_clean() перед заголовком() вызывается.

+0

Настоящая история bro, ob_clean() спаси мою жизнь, спасибо! – Ryosaku

+0

* ob_clean(); * Это должен быть принятый ответ. спасибо – Kareem