Расположение содержимого: встроенный заголовок не будет отображать встроенные изображения? - PullRequest
7 голосов
/ 14 мая 2010

Я пытаюсь показать встроенное изображение на странице. Он обслуживается контроллером codeigniter.

class Asset extends MY_Controller {

    function index( $folder, $file ) {

        $asset = "assets/$folder/$file";

        if ( !file_exists( $asset ) ) {
            show_404();
            return;
        }

        switch ( $folder ) {
        case 'css':
            header('Content-type: text/css');
            break;
        case 'js':
            header('Content-type: text/javascript');
            break;
        case 'images':
            $ext = substr( $file, strrpos($file, '.') );
            switch ( $ext ) {
            case 'jpg':
                $ext = 'jpeg';
                break;
            case 'svg':
                $ext = 'svg+xml';
                break;
            }

            header('Content-Disposition: inline');
            header('Content-type: image/'.$ext);
        }

        readfile( $asset );
    }

}

Когда я загружаю изображение в Chrome of FF, появляется окно загрузки. Я знаю, что, если браузер не может отобразить содержимое, встроенное в него, оно все равно будет принудительно загружено, но это изображения в формате PNG и GIF, которые в противном случае отображаются в браузере. В IE это не вызывает загрузку, но отображает изображение в ASCII.

Если я закомментирую весь случай изображения, то FF и Chrome отобразят ASCII, но не изображение.

Я думал, что установка типа контента позволит FF и Chrome показывать фактическое изображение, а также позволит использовать местоположение в качестве источника.

Javascript и CSS показывают, конечно, хорошо.

У кого-нибудь есть идеи, как сделать так, чтобы изображения отображались правильно?

1 Ответ

5 голосов
/ 14 мая 2010

Попробуйте удалить заголовок Content-disposition.По умолчанию они должны отображаться в любом случае.

В любом случае, вы должны делать что-то не так.Я только что проверил в Opera и IE, и они действительно отображают изображение в строке с заголовком расположения содержимого.Я использовал:

<?php
header('Content-Disposition: inline');
header('Content-type: image/png');

readfile('Untitled.png');

Используйте инструменты разработчика вашего браузера для проверки заголовка ответа.

РЕДАКТИРОВАТЬ

Возможно, эта ошибка вызываетпроблема:

<?php
echo substr( "file.ext", strrpos("file.ext", '.') );

дает ".ext", а не "ext".Заменить на strrpos () + 1.

...