Конференция "Прочее" » Может ли Apache отдавать файл с другим именем?
 
  • Real © (06.04.08 15:11) [0]
    Ситуация такая: файлообменный сервис. Файлы хранятся в одной папке, поэтому (для обеспечения уникальных имен) при закачке - они переименовываются в цифровой вид (ID объекта+Номер файла+расширение). Оригинальное имя, вместе с описанием, сохраняется в БД. Типичная ссылка на файл выглядит так: /files/102_1.avi Вопрос: как сделать так, чтобы при клике на такую ссылку, выдать сохранение не с тем файлом на который был клик, а подменить имя файла на оригинальное? Необязательное ссылка должна быть на файл - пусть ссылка будет на скрипт с параметрами ID и номера, но вот как именно сделать чтобы по виртуальному имени файла, пошла закачка файла с другим реальным именем? Судя по многочисленным сервисам (типа рапиды) это несложно, но вот как и где это хотя бы искать - не соображу.
  • Zeqfreed © (06.04.08 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 © (06.04.08 15:37) [2]
    > Real  (06.04.2008 15:11:00)  [0]

    В Апаче заложены хакерские методы, для этого достаточно задать несуществующую папку или файл и разрешить обработчик исключения, а там подсовывай что хочешь и пользователь будет уверен, что он скачивает текстовый файл :-)
    Подробности смотри в документации на сайте Апача по администрированию сервера.
  • Real © (06.04.08 15:40) [3]

    > Zeqfreed ©

    Спасибо, затестим! Догадывался что как-то с header связано...
  • Real © (06.04.08 15:43) [4]

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

    Да мне не нужно подсовывать что хочешь :) Проблема с оригинальными именами назрела когда стали использовать многотомные архивы (при распаковке RAR желал видеть тома с именами что он задал для первого куска) и многие "домохозяйки" стали тупить что делать. Да и остальным неудобно: перед распаковкой, надо все тома переименовывать...
  • Anatoly Podgoretsky © (06.04.08 15:48) [5]
    > Real  (06.04.2008 15:43:04)  [4]

    Так это не важно, что тебе лично нужно, технология заложена в сервер и даже протолкнута в RFC
  • Юрий © (06.04.08 15:50) [6]
    Рекомендую почитать http://habrahabr.ru/blog/php/38954.html

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

    Отдавать файлы скриптом - это очень, очень плохо. Лучше использовать что-то специализированное, например nginx.
  • Real © (06.04.08 15:52) [7]

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

    Описаное средство отдает файл вэб-сервером ;)
  • Zeqfreed © (06.04.08 15:52) [8]
    > Юрий ©   (06.04.08 15:50) [6]

    Вам несомненно нужно обратиться к постам Игоря Шевченко про овощи и надлежащее время.
  • Real © (06.04.08 15:52) [9]

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

    Я понял, просто уточняя о себе, а то после ваших постов я буду смотреться в ветке кибертеррористом :)
  • Юрий © (06.04.08 15:54) [10]
    > [8] Zeqfreed ©   (06.04.08 15:52)

    Не напомните где искать? Не в курсе.
  • Юрий © (06.04.08 15:56) [11]
    > [7] Real ©   (06.04.08 15:52)

    Да? А во время всей передачи файла скрипт не выполняется?
  • Zeqfreed © (06.04.08 15:59) [12]
  • Юрий © (06.04.08 15:59) [13]
    Понятно. Знания не нужны. Умолкаю.
  • Real © (06.04.08 16:06) [14]

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

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

    http://ru2.php.net/readfile

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

    PHP процесс будет висеть до тех пор, пока клиент не заберет весь файл.
  • Real © (06.04.08 16:21) [16]

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

    Гм... Ок, значит я ошибался. Хорошо, а есть ли какой либо другой путь, без использования дополнительных модулей апача? То есть объяснить апачу отдать файл самому, но с другим именем? По сути нужно чтобы он просто предлежил сохранение с преодопределенным именем (чтоб в диалоге сохранения у юзера прописалось оригинальное имя) а отдавал файл как есть. Ну и хотелось бы чтобы также реагировали и различные даунлоадеры.
  • Юрий © (06.04.08 16:29) [17]
    > [16] Real ©   (06.04.08 16:21)
    > Хорошо, а есть ли какой либо другой путь

    Мне он не известен. Наиболее правильно использовать указанные серверы - nginx или lighttpd. Или ещё что-то, чего я не знаю.
  • Real © (06.04.08 16:42) [18]

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

    Спасибо за совет, будем разбираться с nginx
  • Zeqfreed © (06.04.08 16:44) [19]
    Может быть как-то и получится исхитриться, но если сервер отдает 5 файлов в год, то это не имеет смысла.

    http://httpd.apache.org/docs/2.0/mod/mod_headers.html
  • Anatoly Podgoretsky © (06.04.08 17:19) [20]
    > Real  (06.04.2008 15:52:09)  [9]

    Террористом ты становишь, не от того используешь ли ты, что хакерское или нет, а от того для чего используешь.
    Возможность в Апаче есть.
  • Anatoly Podgoretsky © (06.04.08 17:20) [21]
    > Real  (06.04.2008 16:06:14)  [14]

    Не ошибаешься, именно так и для этого всего лишь нужен обработчик, что бы ты мог получить управление.
  • Anatoly Podgoretsky © (06.04.08 17:21) [22]
    > Real  (06.04.2008 16:21:16)  [16]

    А вот это вряд ли, без содействия с твоей стороны.
  • homm © (06.04.08 17:33) [23]
    Не забудь
    header('Content-type: application/pdf; charset=windows-1251');


    Что-бы русскаие имена фалов отдавать.
  • Real © (06.04.08 21:09) [24]

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

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


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

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


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



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

    С обработчиками апача дела не имел, нельзя ли примерчик что именно нужно сделать для моей задачи?
  • Zeqfreed © (06.04.08 21:23) [25]
    > Real ©   (06.04.08 21:09) [24]

    Я же говорю, что вероятно можно как-то выкрутиться с использованием этого модуля. Он позволяет подставлять содержимое заголовков из переменной окружения, не уверен, что такой вариант будет работать. Да и костыль это явный.
 
Конференция "Прочее" » Может ли Apache отдавать файл с другим именем?
Есть новые Нет новых   [134433   +21][b:0][p:0.001]