Показать изображение на основе прав доступа - PullRequest
0 голосов
/ 03 июня 2018

Я пытаюсь отобразить img_a.png или img_b.png в зависимости от уровня доступа пользователя (например, вошел в систему или нет).Конечно, контент (в данном случае img_a и img_b) не должен быть доступен для широкой публики.

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

  1. На основании пользовательских проверок я пытался добавить папку ресурсов в "open_basedir", который является неудачным вариантом, но искал самое простое решение.Все закончилось выводом предупреждения о том, что ресурс не находится в папке basedir, поскольку он явно там.

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

  3. Последней и ближайшей попыткой было вернуть изображения за пределы webroot и написать класс, который проверяет доступи обрабатывает изображение следующим образом:

    class Image {
    ...
    public function getImage() {
    ...
    header('Content-Type: '.$this->type);
    readfile($this->item);
    

, которое впоследствии отображается в исходном скрипте с помощью:

echo "<img src=".$image->getImage($file).">";

Проблема выше заключается в том, что заголовки уже отправленытак что я мог бы либо потоковое изображение или HTML-вывод страницы .php, но не оба.Есть ли у меня выход?

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

На самом деле, я думаю, что нашел решение конфликта с заголовками, который у меня был.

Отображение изображения в виде данных, таких как:

<img src="data:image/png;base64, <?=base64_encode(file_get_contents($file))?>" alt="img">

вместо подачи его в атрибуте источника с помощью readfile () PHP-скрипт, например:

<img src="image.php?<?=$file?>" alt="my_image">

, где последний вызывал конфликт заголовков, когда находился внутри html-страницы.

Обнаружил решение здесь Как отобразить изображения Base64 в HTML

0 голосов
/ 03 июня 2018

Создайте сценарий, который проверяет любой пользовательский атрибут, который вы хотите, определяет, какое изображение обслуживать, и считывает / отправляет это изображение.Используйте URL-адрес сценария в качестве атрибута <img src=..., то есть

<img src='/scripts/user_image.php'>

Примерно так будет работать для изображений PNG.Подобные функции существуют для GIF, JPG и т. Д.

<?php

    // do stuff here to determine file name of image to send
    if($_SESSION['userlevel']=="ADMIN"){
            $imageFilename="admin_image.png";
    }

    // Create Image From Existing File
    $image = imagecreatefrompng($imageFilename);
    //Set the Content Type
    header('Content-type: image/png');
    // Send Image to Browser
    imagepng($image);
    // Clear Memory
    imagedestroy($image);

    exit;

?>

ОК, согласно вашему комментарию, я думаю, что вы ссылаетесь на вещи неправильно.

Мой рабочий скрипт такой же, как и выше, только если-то закомментировано.Я просто назначаю имя файла переменной.Я назвал скрипт user_image.php.

Простой index.html файл для ссылки на изображение -

<html>
<head><title>test</title></head>
<body>

Hello World!<br />

<img src="user_image.php">

</body>
</html>

И он просто работает.Посмотрите его в действии на https://itsjustcrap.com/img или захватите источник на https://itsjustcrap.com/img/src.zip

Я оставлю это на несколько дней, но кроме изображения png и закомментированного, если-тогда,Источник точно такой же, как и в этом посте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...