Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];

Вниз

Может ли 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.042 c
2-1208321156
djaUser
2008-04-16 08:45
2008.05.18
Скачать файл с русскими буквами в имени


2-1208291529
Res
2008-04-16 00:32
2008.05.18
mx запись


2-1208426824
Вход в папку
2008-04-17 14:07
2008.05.18
вход в папку в компоненте DirectoryListBox


3-1197537619
novill
2007-12-13 12:20
2008.05.18
Поделитесь опытом. IB 7.5 Суперсервер или классический.


3-1197297073
Fregl
2007-12-10 17:31
2008.05.18
Ошибка добавления lookup поля в TADOTable





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский