Я задавался вопросом, был ли путь к контроллеру к, вместо того, чтобы возвратить строку или представление, возвратите изображение (быть им JPG, PNG и т.д.). Например, вместо того, чтобы закончиться $this-> загрузка-> представление ('folder/special_view.php), я хотел бы сделать что-то как $this-> загрузка-> изображение ('images/gorilla.png') и иметь его поэтому, если бы мой пользователь должен был перейти к тому контроллеру, то они видели бы изображение, как будто они перешли к нормальному .png или jpeg. Я могу установить заголовки, таким образом, это ожидает другой MIME? Пример кода этого был бы фантастическим.
Это взяло бы навсегда, чтобы я объяснил, почему мне нужно это, но это включает обеспечение предварительно сделанного CMS в codeigniter, и для наличия его нужны certian вещи быть верным. Огромное спасибо!
конечно можете, используйте это вместо $ this-> load-> view ()
$filename="/path/to/file.jpg"; //<-- specify the image file
if(file_exists($filename)){
$mime = mime_content_type($filename); //<-- detect file type
header('Content-Length: '.filesize($filename)); //<-- sends filesize header
header("Content-Type: $mime"); //<-- send mime-type header
header('Content-Disposition: inline; filename="'.$filename.'";'); //<-- sends filename header
readfile($filename); //<--reads and outputs the file onto the output buffer
die(); //<--cleanup
exit; //and exit
}
Это не предназначено как «одно превосходство», но предложение pǝlɐɥʞ - это чистая реализация PHP, которую нельзя использовать повторно. Вы хотели использовать синтаксис $ this-> load-> image ('images / gorilla.png'), поэтому вот как это можно сделать.
Создайте /application/libraries/MY_Loader.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Loader Class
*
* Loads views and files
*
* @package CodeIgniter
* @subpackage Libraries
* @author Phil Sturgeon
* @category Loader
* @link http://codeigniter.com/user_guide/libraries/loader.html
*/
class MY_Loader extends CI_Loader {
function image($file_path, $mime_type_or_return = 'image/png')
{
$this->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
}
Есть несколько способов вы можете использовать это:
Базовый вывод (по умолчанию jpeg)
$this->load->image('/path/to/images/gorilla.png');
Отправить mime-тип для использования других типов изображений
$this->load->image('/path/to/images/gorilla.jpg', 'image/jpeg');
Вернуть изображение
$image = $this->load->image('/path/to/images/gorilla.php', TRUE);
Так же, как $ this-> load-> view, третий параметр значение TRUE означает, что он вернется вместо прямого вывода.
Надеюсь, это поможет: -)