Как отображать изображения в html, пока ограничивают доступ к ним? - PullRequest
0 голосов
/ 20 марта 2012

Моя проблема, когда вы используете для примера:

<img src="/img.jpg" />

src должен быть образом, и изображение должно быть доступно человеку. Я хочу иметь возможность контролировать доступ к этим изображениям (например, если пользователь вошел в систему). Если у человека нет доступа к изображению, он не может получить к нему доступ. Мой скрипт, который контролирует доступ к изображению, является php-файлом.

Я знаю, что .htaccess может ограничить доступ к ресурсам, но мне нужно подтвердить это в файле php. Есть ли способ сделать это или загрузить изображение с помощью javascript (используя ajax-запрос) и изменить источник изображения на местоположение изображения во временной папке?

Ответы [ 6 ]

5 голосов
/ 20 марта 2012

Ваш источник изображения не обязательно должен указывать на реальное изображение, и при этом это не обязательно должно быть изображение:

<img src="images.php?f=img.jpg" />

Затем вы можете написать скрипт PHP, который выполняет необходимые проверки и впоследствии вернуть изображение через скрипт

$image = basename($_GET['f']);
if (user_has_access()) {
    // You have to determine / send the appropriate MIME-type manually
    header('content-type: image/jpg');
    readfile($image);
} else {
    header('HTTP/1.1 403 Forbidden');
}
2 голосов
/ 20 марта 2012
$image = basename($_GET['image']);
if (validation()) {
    header('Content-type: image/jpeg');
    readfile($image);
} else {
    header('HTTP/1.1 403 Forbidden');
}

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

1 голос
/ 20 марта 2012

Служите вашим изображениям с помощью PHP

Вы можете ограничить доступ с помощью PHP, если PHP выводит содержимое изображения.

Используя тег src http://www.example.com, вы не используете PHP, ваш веб-сервер обслуживает изображение самостоятельно.

Чтобы вывести изображение с помощью PHP, убедитесь, что вы правильно установили переменную заголовка.

Например:

<?php

if($user->isAuthenticated())
{
    $image = imagecreatefromjpeg ($server_image_path);

    header('Content-Type: image/jpeg');

    imagejpeg($image, NULL, 75);    

    imagedestroy($image);
}
else 
{
    header('HTTP/1.1 403 Forbidden');
}
?>
1 голос
/ 20 марта 2012
<img src="/image.php?id=myImage.jpg">

И myImage.jpg:

<?php 
$imageName = $_GET['id'];
$ctype="image/jpg";
$extension = substring($imageName, strstr($imageName, '.'));

switch($extension) {
    case "gif": $ctype="image/gif"; break; 
    case "png": $ctype="image/png"; break; 
    case "jpeg": 
    case "jpg": $ctype="image/jpg"; break; 
}
if (someValidation_here) {
    header("Content-Type: $ctype");
    $handle = fopen($imageName, "rb");
    echo fread($handle, filesize($imageName));
    fclose($handle);
}
?>
0 голосов
/ 20 марта 2012

Вы можете сохранить user_login_status в вашем $ _SESSION, а в части просмотра проверить его

<?if ($_SESSION['user_status'] == 'login'){?>
  <img src="/img.jpg" />
<?}else{?>
  // some stuff instead of <img/>
<?}?>
0 голосов
/ 20 марта 2012

Вы можете сделать это с помощью PHP ... см. imagejpeg для примера ... тогда у вас есть img следующим образом:

<img src="/myfile.php" />

или используйте ваш PHP-файл, чтобы получить изображение и вывести его, используя:

header('Content-Type: image/jpg');
echo file_get_contents("yourimage.jpg");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...