Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2010, 09:23   #1
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию PHP скрыть url к файлу

Не знаю как это назвать правильно, по этому пишу сюда.

Вот адрес:
http://status.mail.ru/?
Если после вопросика подставить майловскую электронку, то откроется картинка статуса, т.е. онлайн Вы сейчас или нет.
Определяется программой "Агент Mail.ru" (это прога для переписки.)

Суть вопроса:
Прямого URL на GIF картинку нет, но она открывается.
Похожее, есть и на форумах, когда запрашиваешь какой-то файл. В конце мы видим (например) fileid=59845

Кто, что знает про эту методику, подскажите, т.к. я не знаю как это назвать, то не могу и в поиске найти.
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 29.01.2010, 12:00   #2
Namolem
Oo
Форумчанин
 
Аватар для Namolem
 
Регистрация: 10.10.2009
Сообщений: 350
По умолчанию

http://www.codenet.ru/webmast/php/gd/
Namolem вне форума Ответить с цитированием
Старый 29.01.2010, 12:29   #3
Gorychev
Участник клуба
 
Аватар для Gorychev
 
Регистрация: 08.03.2008
Сообщений: 1,537
По умолчанию

Не знаю насколько это правильно, но я делал так и все работает:
в базе хранил таблицу, примерно такую
1243 | /fisdf/erre.rar
1241 | /fidss/wtrw.rar
3456 | /sds/sdfs.rar
..... | ......

первый столбец - идентификаторы, второй - путь к нужному файлу
Тогда ссылка на скачку имеет такой вид:

http://exsample.com/download.php?id=1241

Понятно, что файл download.php и выполняет всю необходимую работу по преобразованию 1241 в /fidss/wtrw.rar (обычный запрос на выборку)
Если все гуд, то через функцию header перенаправляю на нужный файл

ЗЫ. защищайтесь от SQL инъекций
Gorychev вне форума Ответить с цитированием
Старый 29.01.2010, 12:58   #4
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Namolem
Проблема не с построением изображения, а с url, его не должно быть видно.


Gorychev
Если после выборки, результат пал на файл "cat.jpg" (к примеру), то в header запись такая:
header('Location: cat.jpg');
Получается, что в адресной строке просто заменяется путь и открывает указанный файл.
Или я что-то не так делаю...?
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 29.01.2010, 13:50   #5
Gorychev
Участник клуба
 
Аватар для Gorychev
 
Регистрация: 08.03.2008
Сообщений: 1,537
По умолчанию

Цитата:
Получается, что в адресной строке просто заменяется путь и открывает указанный файл.
Ну да.
Мне это было нужно, что бы мои архивы не могди скачать прямой ссылкой те у кого нет соответствующих привелегий. В файле download.php порверял, наличие доступа к архиву и соответственно разрешал скачку или нет.
Gorychev вне форума Ответить с цитированием
Старый 29.01.2010, 14:15   #6
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Хм... так как-то странно получается...

я запрашиваю файл
http://exsample.com/download.php?id=1241
далее мне открывается ссылка
http://exsample.com/files/arhive.rar

И что....? эту ссылку я могу потом дать другу или вообще разрекламировать, а если файл такой, который без привилегий нельзя скачивать?...

Просто получается, что потом в файле download.php вообще смысла нет.

Красота той системы в том, что когда запрашивают адрес
http://exsample.com/download.php?id=1241
получают скрытую ссылку, Download Master (я заметил) так и качает файл, а адресе на файл числится http://exsample.com/download.php?id=1241
а не http://exsample.com/files/arhive.rar

P.S. в том то и вопрос, как это реализовать.
Всё гениальное - просто!

Последний раз редактировалось Air; 29.01.2010 в 14:18.
Air вне форума Ответить с цитированием
Старый 29.01.2010, 14:21   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

1)mod rewrite
2)скрипт должен отдавать файл(ставим Content-Type и тд) отдавать можно из БД
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.01.2010, 14:41   #8
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Вот, примерно, кажется получилось )
Во всяком случае, имя исходного файла cat.zip, а пользователь скачает его как downfile.zip
И прямой ссылки не видно )))

По поводу картинок, по соображаю ещё, как получится, выложу код.

Код:
<?
$filename = 'cat.zip';
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT\n");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Content-type: application/zip;\n");
header("Content-Transfer-Encoding: binary");
$len = filesize($filename);
header("Content-Length: $len;\n");
$outname="downfile.zip";
header("Content-Disposition: attachment; filename=\"$outname\";\n\n");
readfile($filename);
?>
Спасибо Вам:
Пепел Феникса
Gorychev

Благодарю за участие
Namolem
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 29.01.2010, 15:59   #9
Namolem
Oo
Форумчанин
 
Аватар для Namolem
 
Регистрация: 10.10.2009
Сообщений: 350
По умолчанию

вставка в HTML. Минусы - многостраничный адрес файла
Код:
<html>
<body><?php
$file = "7ec8ef109754.gif";
if($fp = fopen($file,"rb"))
{
   $picture = fread($fp,filesize($file));
   fclose($fp);
   // base64 encode the binary data, then break it
   // into chunks according to RFC 2045 semantics
   $base64 = chunk_split(base64_encode($picture));
   $tag = '<img '.
          'src="data:image/gif;base64,' . $base64 .
          '" />';
   echo $tag;
}
?>
</body>
</html>
файл-картинка. Плюсы - можно хранить изображения в виде строки в php скрипте
Код:
<?php
header('Content-type: image/gif');
$file = "7ec8ef109754.gif";
if($fp = fopen($file,"rb"))
{
   $picture = fread($fp,filesize($file));
   fclose($fp);
   // base64 encode the binary data, then break it
   // into chunks according to RFC 2045 semantics
   $base64 = chunk_split(base64_encode($picture));
	echo base64_decode($base64);  
}
?>
</body>
</html>

Последний раз редактировалось Namolem; 29.01.2010 в 16:15.
Namolem вне форума Ответить с цитированием
Старый 30.01.2010, 10:21   #10
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Namolem
Благодарю!

В первом варианте data-код лежит на странице (у пользователя), при загрузке он займёт какое-то время.... это неизбежно наверно в любом случае.

Второй код, в точности каким он мне казался )))
off:
Хм... если все сайты будут использовать защищённый доступ к файлу, люди начнут всё это ломать

P.S.
header('Content-type: image/gif');
Выделенное пришлось удалить, выдавал ошибку... странно конфиг Apache наверно не корректный.
Изображения
Тип файла: jpg 1 вариант.jpg (71.1 Кб, 171 просмотров)
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
URL кодировка reyn90 Помощь студентам 0 13.06.2009 06:43
Запретить доступ к файлу на сервере php/настройки Lime PHP 15 31.05.2009 22:22
URL в RichEdit Shouldercannon Общие вопросы Delphi 9 09.10.2008 17:32
Combobox1 = URL russian-stalker Общие вопросы Delphi 3 07.09.2008 13:03
Url open Pavel_aress Общие вопросы Delphi 12 01.08.2007 20:40