Отображение изображений с использованием PHP не работает - PullRequest
0 голосов
/ 17 февраля 2009

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

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

<?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), но это тоже не сработало.

В чем проблема, есть мысли?

Ответы [ 3 ]

4 голосов
/ 06 мая 2016
<?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);  
?>

Некоторое время может быть выделено дополнительное пространство в любом другом файле. Поэтому эти дополнительные пробелы можно удалить, вызвав ob_clean () перед вызовом header ().

2 голосов
/ 17 февраля 2009

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

2 голосов
/ 17 февраля 2009

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

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

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

...