Текущий архив: 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.52 MB
Время: 0.057 c