8

ページにインラインで画像を表示しようとしています。これは 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 );
    }

}

FF の Chrome で画像を読み込むと、ダウンロード ウィンドウがポップアップ表示されます。ブラウザがコンテンツをインラインで表示できない場合、とにかくダウンロードが強制されることはわかっていますが、これらはブラウザに正常に表示される PNG および GIF 画像です。IE ではダウンロードを強制しませんが、画像を A​​SCII で表示します。

画像全体をコメントアウトすると、FF と Chrome の両方で ASCII が表示されますが、画像は表示されません。

コンテンツ タイプを設定すると、FF と Chrome で実際の画像を表示できるようになり、その場所を src として使用できるようになると思いました。

もちろん、javascriptとcssは問題なく表示されます。

画像を適切に表示する方法を知っている人はいますか?

4

1 に答える 1

9

Content-disposition ヘッダーを削除してみてください。デフォルトでは、とにかくインラインで表示する必要があります。

とにかく、あなたは何か間違ったことをしているはずです。Opera と IE でテストしたところ、実際に content-disposition ヘッダーとインラインで画像が表示されます。私が使用した:

<?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 に置き換えます。

于 2010-05-14T04:17:52.017 に答える