2009-09-23 3 views
1

Я собираюсь создать систему размещения изображений на PHP. Я задавался вопросом, как я должен скрыть свои изображения от пользователей, чтобы их можно было получить только через специальный URL-адрес.Каков наилучший способ скрыть файл на сервере?

Мне нужно обсудить все методы, которые включают htaccess.

+0

Вопрос, вероятно, должен быть изменен на что-то, связанное с маскировкой пути файла и/или предотвращением прямой ссылки на изображение. – racerror

ответ

1

я предпочел бы, чтобы вместо того, чтобы процесс PHP отправить ресурсы сервера файлов и свиней на долгое время его отправку содержания .. создать скрипт, который копирует перейдите в каталог со случайным именем, а затем просто отправьте этот файл пользователю и еще один скрипт очистит этот каталог после заданных интервалов .. если время создания старше 30 минут .. удалить .. таким образом u минимизировать u просто нужно процесс apache для отправки файла вместо процесса apache + php.

+0

действительно я думаю о регрессе в первом решении. но не могли бы вы объяснить свою идею больше, чтобы понять ... – assaqqaf

+0

ok, так, например, у вас есть ур изображения, хранящиеся в/images /, есть изображение, которое пользователь хочет скачать, скажем, его имя x.jpg. поэтому его путь - /images/x.jpg. ссылка на скачивание будет выглядеть примерно так: download.php? fileid = whateverid (вы можете переписать этот мод, если хотите). download.php копирует изображение в /downloads/2342342asdfas.jpg (случайное имя) и перенаправляет пользователя к этому URL. то u будет иметь другой скрипт, выполняемый cron, который может удалять файлы, созданные больше, чем X минут назад. Таким образом, вы сохраняете нагрузку на сервере до минимума и сохраняете анонимные пути изображения ur. –

+0

хорошая идея, но как насчет производительности ??? – assaqqaf

3

Вы пишете небольшой скрипт php, который читает файл изображения и отправляет его клиенту. Сценарий PHP может проверять его параметры и файлы cookie, а изображение сохраняется где-то вне корня документа.

3

Просто не храните изображения в корневом каталоге веб-сайта. Используйте php-файл для управления доступом. Если вы хотите, чтобы показать файл, сделать что-то вроде:

<?php 
header('Content-type: image/jpeg'); 
$f = file_get_contents('path/to/image.jpg'); 
print $f; 
?> 
8

Поместите файлы вне относительного корня и использовать сценарий, как showimage.php, чтобы захватить файл из-за пределов вебсервера и поток вниз к пользователь. Код будет выглядеть примерно так:

$len = filesize($filename); 
header("Content-type: image/jpeg"); 
header("Content-Length: $len"); 
header("Content-Disposition: inline; filename=\"$new_filename\""); 
readfile($filename); 

Кроме того, поскольку вы используете скрипт, вы можете выполнить аутентификацию/авторизацию в скрипте. Это позволяет установить правило modRewrite, такие как:

RewriteRule ^images/(.*)$ /showimage.php?file=$1 

так, что ваши файлы изображений могут быть rendred как:

www.domain.com/images/somefile.jpg 

вместо:

www.domain.come/showimage.php?file=somefile.jpg 
+0

tanx, i ike ваш путь. но это то, что весь атрибут заголовка или другого может улучшить процесс. – assaqqaf

+0

Хороший вызов с использованием htaccess. +1 – cwallenpoole

+0

@assaqqaf Как насчет процесса, который вы хотели бы улучшить? –

0

Поместите их в директорию в один конец от вашего корня документа. Затем используйте файл .htaccess, чтобы захватить их:

RewriteBase/
RewriteRule ^(.+?)\.jpg$ ../imgs/$1.jpg 
-1

Я думаю, что лучшим способом было бы зашифровать его.

Смежные вопросы