защита изображения в кодеигниторе

Я использую следующий код в моем контроллере:

//function to protect images from being accessed directly.
function getImage($img_id){


      //code to authenticate user goes here then...
$url = $this->data['base_url'].'system/application/images/c/thumbs/';

$filepath = $url.$img_id;

    header("Content-type: image/jpeg");
  if(file_exists($filepath)){
    echo "we are here";
        $img_handle = imagecreatefromjpeg($filepath) or die("");
    echo $img_handle;
        ImageJpeg($img_handle);
    }



    }

На мой взгляд, чтобы получить изображения, я использовал следующий код:

<img src='<?php echo base_url(); ?>index.php/Controller/getImage/obama.jpg' width="100px"> 

Теперь, даже если он входит в контроллер, он не отображает изображение. Файл Обамы находится в правильном каталоге. Понятия не имею почему.

 hakre12 июл. 2012 г., 17:54
Нет, посмотрите поближе: вы повторяете текст, но говорите браузеру, что это изображение. Это не может быть хорошо. Это похоже на то, что вы ожидаете сладостей, но получите бутылку соли.
 thejoker12 июл. 2012 г., 17:45
потому что этот сегмент кода не выполняется?
 hakre12 июл. 2012 г., 17:42
@thejkoker: объяснение того, что вы хотите - это только одна часть отладки. Сначала нужно выполнить базовую отладку. Итак, позвольте мне еще раз спросить: можете ли вы представить, почему отладка, которую вы здесь делаете, не работает?
 thejoker12 июл. 2012 г., 17:41
Да, это показывает сломанное изображение. Я попытался получить идентификатор изображения, передать его в контроллер, который, в свою очередь, возвращает изображение в представление. Сделано так, чтобы конечный пользователь не знал URL-адрес папки, в которой хранится изображение. Отладка не работает, поскольку она не может найти файл, несмотря на правильность пути к файлу.
 hakre12 июл. 2012 г., 17:36
Позвольте мне угадать: он отображает "сломан" образ. И это правильно, это то, что вы запрограммировали. Почему вы ожидаете, что это делает что-то другое? И обдумайте свои собственные вещи: почему введенная вами отладка не работает?

Ответы на вопрос(2)

что вы выводите текст в браузер, а затем изображение. Браузер попытается отобразить изображение, но оно будет повреждено.

header("Content-type: image/jpeg");
if(file_exists($filepath)){
    echo "we are here";
    $img_handle = imagecreatefromjpeg($filepath) or die("");
    echo $img_handle;
    ImageJpeg($img_handle);
}

Кроме того, если вы хотите сделатьecho Вы не можете отправитьheader говоря "эй, это изображение в формате JPEG".

что к изображению можно получить доступ через $ this-> data ['base_url']. 'system / application / images / c / thumbs / obama.jpg, вы пытались получить к нему доступ в браузере, верно?

Кроме того, избегайте печати текста перед рендерингом изображения, это может повредить изображение.

Если по-прежнему не работает, сообщите нам скриншот страницы с ошибкой, о чем она говорит.

 thejoker13 июл. 2012 г., 15:03
Я заставил его работать, однако я столкнулся со следующей проблемой: у меня есть имя файла с пробелами. Таким образом, это будет выглядеть так: obama 1.jpg, то есть obama space 1, скрипт не может с этим справиться и отображает испорченное изображение. Любая идея, как я могу настроить его так, чтобы он мог обрабатывать имена файлов с пробелами?
 13 июл. 2012 г., 18:12
Если вы передадите локальный относительный путь к & quot; file_exist () & quot; метод, то пространство не будет проблемой. Но, как я уже видел, вы используете url в качестве полного пути к изображению, поэтому вам нужно будет заменить каждый пробел на "% 20". Надеюсь, это сработает. Тем не менее, я рекомендую использовать локальный относительный путь к методу file_exist. Например & quot; file_exist (& quot; ./ system / application / images / test image with space.jpg & quot;) & quot ;, который должен работать нормально
 thejoker14 июл. 2012 г., 01:21
Попробовал это: $ filepath = $ url.file_exist ($ img_id); получена ошибка сервера, URL-адрес getImage / obama% 201.JPG

Ваш ответ на вопрос