Я пытаюсь показать изображение, встроенное на странице. Это подается 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 );
}
}
Когда я загружаюсь, изображение в Chrome FF раскрывается окно загрузки. Я знаю, когда браузер не сможет отобразить содержание, встроенное, это вызовет загрузку так или иначе, но это PNG и изображения GIF, которые отображаются в браузере, прекрасном иначе. В IE это не вызывает загрузку, но это отображает изображение в ASCII.
Если я комментирую весь случай изображения это, FF и Chrome оба отображают ASCII, но не изображение.
Я думал, устанавливая тип контента, позволит FF и Chrome показывать действительный образ и также позволять местоположению использоваться в качестве src.
Шоу JavaScript и CSS, прекрасные, конечно.
Кто-либо получил какие-либо идеи, как я могу сделать шоу изображений правильно?
Попробуйте удалить заголовок 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.