Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.18;
Скачать: CL | DM;

Вниз

Может ли Apache отдавать файл с другим именем?   Найти похожие ветки 

 
Real ©   (2008-04-06 15:11) [0]

Ситуация такая: файлообменный сервис. Файлы хранятся в одной папке, поэтому (для обеспечения уникальных имен) при закачке - они переименовываются в цифровой вид (ID объекта+Номер файла+расширение). Оригинальное имя, вместе с описанием, сохраняется в БД. Типичная ссылка на файл выглядит так: /files/102_1.avi Вопрос: как сделать так, чтобы при клике на такую ссылку, выдать сохранение не с тем файлом на который был клик, а подменить имя файла на оригинальное? Необязательное ссылка должна быть на файл - пусть ссылка будет на скрипт с параметрами ID и номера, но вот как именно сделать чтобы по виртуальному имени файла, пошла закачка файла с другим реальным именем? Судя по многочисленным сервисам (типа рапиды) это несложно, но вот как и где это хотя бы искать - не соображу.


 
Zeqfreed ©   (2008-04-06 15:26) [1]

<?php
// We"ll be outputting a PDF
header("Content-type: application/pdf");

// It will be called downloaded.pdf
header("Content-Disposition: attachment; filename="downloaded.pdf"");

// The PDF source is in original.pdf
readfile("original.pdf");
?>

http://ru2.php.net/header


 
Anatoly Podgoretsky ©   (2008-04-06 15:37) [2]

> Real  (06.04.2008 15:11:00)  [0]

В Апаче заложены хакерские методы, для этого достаточно задать несуществующую папку или файл и разрешить обработчик исключения, а там подсовывай что хочешь и пользователь будет уверен, что он скачивает текстовый файл :-)
Подробности смотри в документации на сайте Апача по администрированию сервера.


 
Real ©   (2008-04-06 15:40) [3]


> Zeqfreed ©

Спасибо, затестим! Догадывался что как-то с header связано...


 
Real ©   (2008-04-06 15:43) [4]


> В Апаче заложены хакерские методы, для этого достаточно
> задать несуществующую папку или файл и разрешить обработчик
> исключения, а там подсовывай что хочешь и пользователь будет
> уверен, что он скачивает текстовый файл :-)

Да мне не нужно подсовывать что хочешь :) Проблема с оригинальными именами назрела когда стали использовать многотомные архивы (при распаковке RAR желал видеть тома с именами что он задал для первого куска) и многие "домохозяйки" стали тупить что делать. Да и остальным неудобно: перед распаковкой, надо все тома переименовывать...


 
Anatoly Podgoretsky ©   (2008-04-06 15:48) [5]

> Real  (06.04.2008 15:43:04)  [4]

Так это не важно, что тебе лично нужно, технология заложена в сервер и даже протолкнута в RFC


 
Юрий ©   (2008-04-06 15:50) [6]

Рекомендую почитать http://habrahabr.ru/blog/php/38954.html

> [1] Zeqfreed ©   (06.04.08 15:26)

Отдавать файлы скриптом - это очень, очень плохо. Лучше использовать что-то специализированное, например nginx.


 
Real ©   (2008-04-06 15:52) [7]


> Отдавать файлы скриптом - это очень, очень плохо

Описаное средство отдает файл вэб-сервером ;)


 
Zeqfreed ©   (2008-04-06 15:52) [8]

> Юрий ©   (06.04.08 15:50) [6]

Вам несомненно нужно обратиться к постам Игоря Шевченко про овощи и надлежащее время.


 
Real ©   (2008-04-06 15:52) [9]


> Так это не важно, что тебе лично нужно, технология заложена
> в сервер и даже протолкнута в RFC

Я понял, просто уточняя о себе, а то после ваших постов я буду смотреться в ветке кибертеррористом :)


 
Юрий ©   (2008-04-06 15:54) [10]

> [8] Zeqfreed ©   (06.04.08 15:52)

Не напомните где искать? Не в курсе.


 
Юрий ©   (2008-04-06 15:56) [11]

> [7] Real ©   (06.04.08 15:52)

Да? А во время всей передачи файла скрипт не выполняется?


 
Zeqfreed ©   (2008-04-06 15:59) [12]

> Юрий ©   (06.04.08 15:54) [10]

http://www.google.ru/search?hl=ru&q=овощ+надлежащее+время+Шевченко+site%3A+delphimaster.ru


 
Юрий ©   (2008-04-06 15:59) [13]

Понятно. Знания не нужны. Умолкаю.


 
Real ©   (2008-04-06 16:06) [14]


> Да? А во время всей передачи файла скрипт не выполняется?

Насколько я понимаю нет. Очень много функций PHP - это лишь обертка для функций Apache. Думаю readfile - это тот самый случай. За линк спасибо, статья интересная (в процессе изучения). По сути, что происходит? Я запрашиваю файл. Скрипт передает апачу желание получить файл, но с дополнительным параметром: под каким именно именем его отдать. А дальше как и в стандартном случае - файл отдает апач. Может я и ошибаюсь, но мне какзалось всегда что именно так.


 
Юрий ©   (2008-04-06 16:14) [15]

> [14] Real ©   (06.04.08 16:06)
> Может я и ошибаюсь, но мне какзалось всегда что именно так.

http://ru2.php.net/readfile

"readfile — Выводит файл
Читает файл и записывает его в буфер вывода."

PHP процесс будет висеть до тех пор, пока клиент не заберет весь файл.


 
Real ©   (2008-04-06 16:21) [16]


> "readfile — Выводит файл
> Читает файл и записывает его в буфер вывода."

Гм... Ок, значит я ошибался. Хорошо, а есть ли какой либо другой путь, без использования дополнительных модулей апача? То есть объяснить апачу отдать файл самому, но с другим именем? По сути нужно чтобы он просто предлежил сохранение с преодопределенным именем (чтоб в диалоге сохранения у юзера прописалось оригинальное имя) а отдавал файл как есть. Ну и хотелось бы чтобы также реагировали и различные даунлоадеры.


 
Юрий ©   (2008-04-06 16:29) [17]

> [16] Real ©   (06.04.08 16:21)
> Хорошо, а есть ли какой либо другой путь

Мне он не известен. Наиболее правильно использовать указанные серверы - nginx или lighttpd. Или ещё что-то, чего я не знаю.


 
Real ©   (2008-04-06 16:42) [18]


> Мне он не известен. Наиболее правильно использовать указанные
> серверы - nginx или lighttpd. Или ещё что-то, чего я не
> знаю.

Спасибо за совет, будем разбираться с nginx


 
Zeqfreed ©   (2008-04-06 16:44) [19]

Может быть как-то и получится исхитриться, но если сервер отдает 5 файлов в год, то это не имеет смысла.

http://httpd.apache.org/docs/2.0/mod/mod_headers.html


 
Anatoly Podgoretsky ©   (2008-04-06 17:19) [20]

> Real  (06.04.2008 15:52:09)  [9]

Террористом ты становишь, не от того используешь ли ты, что хакерское или нет, а от того для чего используешь.
Возможность в Апаче есть.


 
Anatoly Podgoretsky ©   (2008-04-06 17:20) [21]

> Real  (06.04.2008 16:06:14)  [14]

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


 
Anatoly Podgoretsky ©   (2008-04-06 17:21) [22]

> Real  (06.04.2008 16:21:16)  [16]

А вот это вряд ли, без содействия с твоей стороны.


 
homm ©   (2008-04-06 17:33) [23]

Не забудь
header("Content-type: application/pdf; charset=windows-1251");
Что-бы русскаие имена фалов отдавать.


 
Real ©   (2008-04-06 21:09) [24]


> Террористом ты становишь, не от того используешь ли ты,
> что хакерское или нет, а от того для чего используешь.
> Возможность в Апаче есть.

Я именно и обращал внимание, что мне это нужно для честных целей


> Может быть как-то и получится исхитриться, но если сервер
> отдает 5 файлов в год, то это не имеет смысла.

В том то и дело, сервер находиться в локалке, в день отдает не менее сотни гигов, а еще пару десятков гигов принимает. Поэтому установка доп. ПО - не проблема (ну правда это буду делать не я, но я буду пинать админа чтоб он сделал, поэтому нужны основания) и главное чтоб производительность не падала, а вот как в случае с ngnix - росла.


> Не ошибаешься, именно так и для этого всего лишь нужен обработчик,
>  что бы ты мог получить управление.



> http://httpd.apache.org/docs/2.0/mod/mod_headers.html

С обработчиками апача дела не имел, нельзя ли примерчик что именно нужно сделать для моей задачи?


 
Zeqfreed ©   (2008-04-06 21:23) [25]

> Real ©   (06.04.08 21:09) [24]

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


 
SPeller (work)   (2008-04-07 12:06) [26]

mod_rewrite?


 
SPeller (work)   (2008-04-07 12:32) [27]

Не, реврайт не пойдет. Если файл переименовывается, а оригинальное имя хранится в бд, то только через скрипты отдавать. Даже не представляю, как через mod_headers можно сие провернуть. Все делают скрипты в таких случаях. Просто оправляются заголовоки Content-Type: {подставляем нужный mime} и Content-Disposition: attachment; filename="нормальное имя файла", а затем контент, и всего делов. Это если сервер не жалко. Если жалко - начинаем разруливать в скрипте заголовки If-Modified-Since и Accept-Range. Если возиться со скриптами принципиально не охота, то можно посмотреть в сторону http://httpd.apache.org/docs/2.0/mod/mod_asis.html , но при этом придется модифицировать файлы при закачке - прописывать сразу нужные заголовки прямо в начало файла.



Страницы: 1 вся ветка

Текущий архив: 2008.05.18;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.024 c
2-1208420154
Igor M.
2008-04-17 12:15
2008.05.18
Gif Animation


2-1208336709
4ort
2008-04-16 13:05
2008.05.18
Уничтожение массива компонентами ...


15-1207246196
oldman
2008-04-03 22:09
2008.05.18
А "день радио" профессиональный праздник?


15-1207544272
Игорь Шевченко
2008-04-07 08:57
2008.05.18
McSimm, с днем рождения!


4-1188818913
Kns
2007-09-03 15:28
2008.05.18
Потерять фокус