Подтвердить что ты не робот

Вывести изображение в PHP

У меня есть изображение $file (например, ../image.jpg)

который имеет тип mime $type

Как я могу вывести его в браузер?

4b9b3361

Ответ 1

$file = '../image.jpg';
$type = 'image/jpeg';
header('Content-Type:'.$type);
header('Content-Length: ' . filesize($file));
readfile($file);

Ответ 2

Если у вас есть возможность самостоятельно настроить свой веб-сервер, такие инструменты, как mod_xsendfile (для Apache), значительно лучше, чем чтение и печать файл в PHP. Ваш PHP-код будет выглядеть так:

header("Content-type: $type");
header("X-Sendfile: $file"); # make sure $file is the full path, not relative
exit();

mod_xsendfile подбирает заголовок X-Sendfile и отправляет файл самому браузеру. Это может существенно повлиять на производительность, особенно для больших файлов. Большинство предлагаемых решений считывают весь файл в память и затем распечатывают его. Это нормально для 20-килобайтного файла изображения, но если у вас есть 200-мегабайтный TIFF файл, вы обязательно получите проблемы.

Ответ 3

$file = '../image.jpg';

if (file_exists($file))
{
    $size = getimagesize($file);

    $fp = fopen($file, 'rb');

    if ($size and $fp)
    {
        // Optional never cache
    //  header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
    //  header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
    //  header('Pragma: no-cache');

        // Optional cache if not changed
    //  header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($file)).' GMT');

        // Optional send not modified
    //  if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) and 
    //      filemtime($file) == strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']))
    //  {
    //      header('HTTP/1.1 304 Not Modified');
    //  }

        header('Content-Type: '.$size['mime']);
        header('Content-Length: '.filesize($file));

        fpassthru($fp);

        exit;
    }
}

http://php.net/manual/en/function.fpassthru.php

Ответ 4

header('Content-type: image/jpeg');
readfile($image);

Ответ 5

Попробуйте следующее:

<?php
  header("Content-type: image/jpeg");
  readfile("/path/to/image.jpg");
  exit(0);
?>

Ответ 6

Для следующего парня или девушки, которая столкнулась с этой проблемой, вот что сработало для меня:

ob_start();
header('Content-Type: '.$mimetype);
ob_end_clean();
$fp = fopen($fullyQualifiedFilepath, 'rb');
fpassthru($fp);
exit;

Вам нужно все это, и только это. Если ваш mimetype варьируется, взгляните на PHP mime_content_type ($ filepath)

Ответ 7

<?php

header("Content-Type: $type");
readfile($file);

Это короткая версия. Есть несколько дополнительных вещей, которые вы можете сделать, чтобы сделать все лучше, но это сработает для вас.

Ответ 8

Вы можете использовать header для отправки правильного типа содержимого:

header('Content-Type: ' . $type);

И readfile для вывода содержимого изображения:

readfile($file);


И возможно (возможно, не обязательно, но на всякий случай) вам также придется отправить заголовок Content-Length:

header('Content-Length: ' . filesize($file));


Примечание. Убедитесь, что вы не выводите ничего, кроме данных изображения (например, без пробела) или оно больше не будет действительным изображением.

Ответ 9

Вы можете использовать finfo (PHP 5.3+), чтобы получить правильный тип MIME.

$filePath = 'YOUR_FILE.XYZ';
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$contentType = finfo_file($finfo, $filePath);
finfo_close($finfo);

header('Content-Type: ' . $contentType);
readfile($filePath);

PS: вам не нужно указывать Content-Length, Apache сделает это за вас.

Ответ 10

    $file = '../image.jpg';
    $type = 'image/jpeg';
    header('Content-Type:'.$type);
    header('Content-Length: ' . filesize($file));
    $img = file_get_contents($file);
    echo $img;

Это работает для меня! Я тестировал его на воспламенителе кода. если я использую readfile, изображение не будет отображаться. Иногда отображается только jpg, иногда только большой файл. Но после того, как я изменил его на "file_get_contents", я получаю вкус и работает! это экранизация экрана: Снимок экрана "безопасное изображение" из базы данных

Ответ 11

(Расширение на принятый ответ...)

Я нуждался в:

  1. журнал просмотра изображений jpg и анимированных gif, и,
  2. убедитесь, что изображения никогда не кэшируются (поэтому каждое представление регистрируется), и,
  3. также сохраните исходные расширения файлов.

Я сделал это, создав "вторичный" файл .htaccess в .htaccess в которой находятся изображения.
Файл содержит только одну строку:

AddHandler application/x-httpd-lsphp .jpg .jpeg .gif

В эту же папку я поместил два "оригинальных" файла изображений (назовем их orig.jpg и orig.gif), а также два варианта [упрощенного] сценария ниже (сохраненные как myimage.jpg и myimage.gif)...

<?php 
  error_reporting(0); //hide errors (displaying one would break the image)

  //get user IP and the pseudo-image URL
  if(isset($_SERVER['REMOTE_ADDR'])) {$ip =$_SERVER['REMOTE_ADDR'];}else{$ip= '(unknown)';}
  if(isset($_SERVER['REQUEST_URI'])) {$url=$_SERVER['REQUEST_URI'];}else{$url='(unknown)';}

  //log the visit
  require_once('connect.php');            //file with db connection info
  $conn = new mysqli($servername, $username, $password, $dbname);
  if (!$conn->connect_error) {         //if connected then save mySQL record
   $conn->query("INSERT INTO imageclicks (image, ip) VALUES ('$url', '$ip');");
     $conn->close();  //(datetime is auto-added to table with default of 'now')
  } 

  //display the image
  $imgfile='orig.jpg';                             // or 'orig.gif'
  header('Content-Type: image/jpeg');              // or 'image/gif'
  header('Content-Length: '.filesize($imgfile));
  header('Cache-Control: no-cache');
  readfile($imgfile);
?>

Изображения отображаются (или анимируются) обычным образом и могут вызываться любым обычным способом для изображений (например, <img>) и сохраняют запись IP-адреса посетителя, хотя и невидимы для пользователя.

Ответ 12

<?php $data=file_get_contents(".../image.jpg" );header("Content-type: image/png"); echo $data; ?>

Первым шагом является получение изображения из определенного места, а затем сохранение его в переменной, для этого мы используем функцию functio file_get_contents() с пунктом назначения в качестве параметра. Далее мы устанавливаем тип содержимого выходной страницы как тип изображения, используя файл заголовка. Наконец мы печатаем полученный файл, используя echo.