Мы создаем онлайн фотоальбом. Чтобы увидеть изображения, необходимо войти в систему. Мы также пытаемся защитить файлы изображений, но мы застряли в проблеме
С помощью переменной сеанса мы проверяем, вошли ли пользователи.
$_SESSION['is_ingelogd']
Мы создаем страницу безопасности (которая проверяет, вошел ли пользователь в систему). Мы включаем эту страницу на каждую страницу, которая должна быть защищена. Но теперь мы хотим защитить изображения тоже.
Итак, мы создаем файл .htaccess, который направляет все запросы файлов в нашей фото-папке на страницу php.
Страница php должна проверить, вошел ли пользователь в систему.
Если пользователь не вошел в систему, он будет отображать текст с просьбой войти в систему.
Если пользователь вошел в систему, php-файл должен отправить запрошенный файл (изображение).
Мы используем следующий код для этого:
Файл .htaccess (в папке / fotoalbum / uploads /):
RewriteEngine On
RewriteBase /fotoalbum/
RewriteCond %{SCRIPT_FILENAME} !image\.php
RewriteCond %{REQUEST_URI} !image\.php
RewriteRule ^(.*)$ image.php [QSA,L]
Файл .php (в папке / fotoalbum /):
<?php
session_start();
if ($_SESSION['is_ingelogd'] == "1") {
$type = mime_content_type((string)$_SESSION['REQUEST_URI']);
header("Content-type: ".$type);
echo file_get_contents($_SESSION['REQUEST_URI']);
exit;
} else{
echo 'Please <a href="../login.php">login</a> to see this
file.';
}
?>
Этот код работает наполовину;
Если пользователь не вошел в систему и пытается открыть какой-либо файл из папки / fotoalbum / uploads /, php отобразит запрос на вход.
Но если пользователь вошел в систему, мы не увидим картинку.
В IE9 экран остается пустым, а в FireFox 3.6 png возвращает сообщение о том, что изображение не может быть
отображается, потому что содержит ошибки. JPG возвращает его URL, а TXT-файл возвращает ï »¿
Мы создаем эти скрипты с помощью следующих ссылок:
Спасибо за любую помощь
UPDATE:
Я сделал несколько прототипов, и возвращение mime_content_type((string)$_SESSION['REQUEST_URI']);
кажется пустым / нулевым.
Я поместил следующий код в php-файл:
<?php
$serveruri = parse_url($_SERVER['REQUEST_URI']);
$fileuri = (string)('./uploads/'.basename($serveruri['path']).PHP_EOL);
$file = strval($fileuri);
echo 'URL Is: '.$file;
echo '<br />type Is: '.mime_content_type((string)$file);
exit;
?>
Браузер показывает:
URL Is: ./uploads/test.jpg
Type Is:
Вы можете видеть, что это не соответствует типу контента.
Но когда я установил
$file = './uploads/test.jpg';
отлично возвращает:
URL Is: ./uploads/test.jpg
Type Is: image/jpeg
Есть предложения?