Is there a way to have a Codeigniter controller return an image?

后端 未结 7 1300
隐瞒了意图╮
隐瞒了意图╮ 2021-02-08 01:59

I was wondering if there was a way for a controller to, instead of returning a string, or a view, return an image (be it JPG, PNG etc). For example, instead of ending with a $t

7条回答
  •  梦谈多话
    2021-02-08 02:27

    This is not intended as One-upmanship, but pǝlɐɥʞ's suggestion is a pure PHP implementation that is not all that re-usable. You wanted to use the syntax $this->load->image('images/gorilla.png') so here is how you can.

    Create /application/libraries/MY_Loader.php

    helper('file');
    
            $image_content = read_file($file_path);
    
            // Image was not found
            if($image_content === FALSE)
            {
                show_error('Image "'.$file_path.'" could not be found.');
                return FALSE;
            }
    
            // Return the image or output it?
            if($mime_type_or_return === TRUE)
            {
                return $image_content;
            }
    
            header('Content-Length: '.strlen($image_content)); // sends filesize header
            header('Content-Type: '.$mime_type_or_return); // send mime-type header
            header('Content-Disposition: inline; filename="'.basename($file_path).'";'); // sends filename header
            exit($image_content); // reads and outputs the file onto the output buffer
        }
    

    There are a few ways you can use this:

    Basic output (default is jpeg)

    $this->load->image('/path/to/images/gorilla.png');
    

    Send mime-type to use other image types

    $this->load->image('/path/to/images/gorilla.jpg', 'image/jpeg');
    

    Return the image

    $image = $this->load->image('/path/to/images/gorilla.php', TRUE);
    

    Just like $this->load->view, the 3rd parameter being set to TRUE means it will return instead of directly outputting.

    Hope this helps :-)

提交回复
热议问题