Binbo-Special - WEB制作や運営に関する楽屋話 -

サイト制作・運営やドラムの事やゲーム開発のこととか

技術資料

PHP5.4にしたらCodeIgniterのImage画面出力が出来なくなった!?

PHP5.4にしたらCodeIgniterのImage画面出力が出来なくなった!?

どうもこんにちは。
焼き鳥って、おいしいですよね。

 

そういえば最近ブログを更新していなかったのですが、ちょっと小ネタが出来たので書いてみます。

久しぶりにCodeIgniter関連です。

dynamic_outputをTRUEにしている場合(画面に直接出力)

Imageでresizeしたりcropして画面に直接出力する場合、dynarim_outputをTRUEにしますが、その場合、うまく表示されなくなります。

画像のリンク切れみたいな表示になってしまうのですが、実はちゃんとエラーが出力されており、

A PHP Error was encountered

Severity: Warning
Message:  imagejpeg(): Filename cannot be empty
Filename: libraries/Image_lib.php
Line Number: 1257

こんな感じの警告が出てしまっています。これじゃあ画像表示されないですね。

で、肝心のソースを見ていると、imagejpeg関数の第2引数に空文字を指定していて、これが原因の様です。PHP5.3までは大丈夫だったんですけどね。

class CI_Image_lib {

/* snip */

    function image_display_gd($resource) {
        header("Content-Disposition: filename={$this->source_image};");
        header("Content-Type: {$this->mime_type}");
        header('Content-Transfer-Encoding: binary');
        header('Last-Modified: '.gmdate('D, d M Y H:i:s', time()).' GMT');

        switch ($this->image_type)
        {
            case 1        :    imagegif($resource);
                break;
            case 2        :    imagejpeg($resource, '', $this->quality);
                break;
            case 3        :    imagepng($resource);
                break;
            default        :    echo 'Unable to display the image';
                break;
        }
    }

/* snip */

}

空文字じゃなくてNULLだったらOK

なんですが、system以下を直接編集するのは行儀が悪いので、

application/libraries/MY_Image_lig.php

に追記(無い人は新規作成)し、image_display_gd をオーバーライドして修正すればOKです。

class MY_Image_lib extends CI_Image_lib {

/* snip */

    function image_display_gd($resource) {
        header("Content-Disposition: filename={$this->source_image};");
        header("Content-Type: {$this->mime_type}");
        header('Content-Transfer-Encoding: binary');
        header('Last-Modified: '.gmdate('D, d M Y H:i:s', time()).' GMT');

        switch ($this->image_type)
        {
            case 1        :    imagegif($resource);
                break;
            case 2        :    imagejpeg($resource, NULL, $this->quality);
                break;
            case 3        :    imagepng($resource);
                break;
            default        :    echo 'Unable to display the image';
                break;
        }
    }

/* snip */

}

投稿日:

技術資料
,

関連記事

デモサイト(テストサイト・テスト環境)であることをわかりやすくしたい

デモサイト(テストサイト・テスト環境)であることをわかりやすくしたい

本番環境のサイトと、テスト環境・デモ環境・ステージング環境・開発環境等々、
サイト制作・公開・運用にあたって、様々な環境が存在します。

そういえばBomberBomber2をAndroidアプリにしました。

そういえばBomberBomber2をAndroidアプリにしました。

いやー、最近暑くなってきましたねー。
こんな暑いとBomberBomber2やりたくなりますよねー。

ねこたま♪ Androidアプリを公開しました。

ねこたま♪ Androidアプリを公開しました。

ちょっと風変わりなマッチ3パズルゲーム
ねこたま♪
をなんとか公開しました。

「Clicker Tower RPG」 Androidアプリを公開しました。

「Clicker Tower RPG」 Androidアプリを公開しました。

敵をタップで倒しながら塔を登っていく、シンプルなルールのロールプレイングゲーム
Clicker Tower RPG
をなんとか公開しました。

そういえばBomberBomber2をiOSアプリにしました。

そういえばBomberBomber2をiOSアプリにしました。

いやー、最近暑くなってきましたねー。
こんな暑いとBomberBomber2のiOS版をリリースしたくなりますよねー。