-
Ситуация такая: файлообменный сервис. Файлы хранятся в одной папке, поэтому (для обеспечения уникальных имен) при закачке - они переименовываются в цифровой вид (ID объекта+Номер файла+расширение). Оригинальное имя, вместе с описанием, сохраняется в БД. Типичная ссылка на файл выглядит так: /files/102_1.avi Вопрос: как сделать так, чтобы при клике на такую ссылку, выдать сохранение не с тем файлом на который был клик, а подменить имя файла на оригинальное? Необязательное ссылка должна быть на файл - пусть ссылка будет на скрипт с параметрами ID и номера, но вот как именно сделать чтобы по виртуальному имени файла, пошла закачка файла с другим реальным именем? Судя по многочисленным сервисам (типа рапиды) это несложно, но вот как и где это хотя бы искать - не соображу.
-
<?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
-
> Real (06.04.2008 15:11:00) [0]
В Апаче заложены хакерские методы, для этого достаточно задать несуществующую папку или файл и разрешить обработчик исключения, а там подсовывай что хочешь и пользователь будет уверен, что он скачивает текстовый файл :-) Подробности смотри в документации на сайте Апача по администрированию сервера.
-
> Zeqfreed ©
Спасибо, затестим! Догадывался что как-то с header связано...
-
> В Апаче заложены хакерские методы, для этого достаточно > задать несуществующую папку или файл и разрешить обработчик > исключения, а там подсовывай что хочешь и пользователь будет > уверен, что он скачивает текстовый файл :-)
Да мне не нужно подсовывать что хочешь :) Проблема с оригинальными именами назрела когда стали использовать многотомные архивы (при распаковке RAR желал видеть тома с именами что он задал для первого куска) и многие "домохозяйки" стали тупить что делать. Да и остальным неудобно: перед распаковкой, надо все тома переименовывать...
-
> Real (06.04.2008 15:43:04) [4]
Так это не важно, что тебе лично нужно, технология заложена в сервер и даже протолкнута в RFC
-
Рекомендую почитать http://habrahabr.ru/blog/php/38954.html > [1] Zeqfreed © (06.04.08 15:26)
Отдавать файлы скриптом - это очень, очень плохо. Лучше использовать что-то специализированное, например nginx.
-
> Отдавать файлы скриптом - это очень, очень плохо
Описаное средство отдает файл вэб-сервером ;)
-
> Юрий © (06.04.08 15:50) [6]
Вам несомненно нужно обратиться к постам Игоря Шевченко про овощи и надлежащее время.
-
> Так это не важно, что тебе лично нужно, технология заложена > в сервер и даже протолкнута в RFC
Я понял, просто уточняя о себе, а то после ваших постов я буду смотреться в ветке кибертеррористом :)
-
> [8] Zeqfreed © (06.04.08 15:52)
Не напомните где искать? Не в курсе.
-
> [7] Real © (06.04.08 15:52)
Да? А во время всей передачи файла скрипт не выполняется?
-
-
Понятно. Знания не нужны. Умолкаю.
-
> Да? А во время всей передачи файла скрипт не выполняется?
Насколько я понимаю нет. Очень много функций PHP - это лишь обертка для функций Apache. Думаю readfile - это тот самый случай. За линк спасибо, статья интересная (в процессе изучения). По сути, что происходит? Я запрашиваю файл. Скрипт передает апачу желание получить файл, но с дополнительным параметром: под каким именно именем его отдать. А дальше как и в стандартном случае - файл отдает апач. Может я и ошибаюсь, но мне какзалось всегда что именно так.
-
> [14] Real © (06.04.08 16:06) > Может я и ошибаюсь, но мне какзалось всегда что именно так. http://ru2.php.net/readfile"readfile — Выводит файл Читает файл и записывает его в буфер вывода." PHP процесс будет висеть до тех пор, пока клиент не заберет весь файл.
-
> "readfile — Выводит файл > Читает файл и записывает его в буфер вывода."
Гм... Ок, значит я ошибался. Хорошо, а есть ли какой либо другой путь, без использования дополнительных модулей апача? То есть объяснить апачу отдать файл самому, но с другим именем? По сути нужно чтобы он просто предлежил сохранение с преодопределенным именем (чтоб в диалоге сохранения у юзера прописалось оригинальное имя) а отдавал файл как есть. Ну и хотелось бы чтобы также реагировали и различные даунлоадеры.
-
> [16] Real © (06.04.08 16:21) > Хорошо, а есть ли какой либо другой путь
Мне он не известен. Наиболее правильно использовать указанные серверы - nginx или lighttpd. Или ещё что-то, чего я не знаю.
-
> Мне он не известен. Наиболее правильно использовать указанные > серверы - nginx или lighttpd. Или ещё что-то, чего я не > знаю.
Спасибо за совет, будем разбираться с nginx
-
-
> Real (06.04.2008 15:52:09) [9]
Террористом ты становишь, не от того используешь ли ты, что хакерское или нет, а от того для чего используешь. Возможность в Апаче есть.
-
> Real (06.04.2008 16:06:14) [14]
Не ошибаешься, именно так и для этого всего лишь нужен обработчик, что бы ты мог получить управление.
-
> Real (06.04.2008 16:21:16) [16]
А вот это вряд ли, без содействия с твоей стороны.
-
Не забудь header('Content-type: application/pdf; charset=windows-1251'); Что-бы русскаие имена фалов отдавать.
-
> Террористом ты становишь, не от того используешь ли ты, > что хакерское или нет, а от того для чего используешь. > Возможность в Апаче есть.
Я именно и обращал внимание, что мне это нужно для честных целей > Может быть как-то и получится исхитриться, но если сервер > отдает 5 файлов в год, то это не имеет смысла.
В том то и дело, сервер находиться в локалке, в день отдает не менее сотни гигов, а еще пару десятков гигов принимает. Поэтому установка доп. ПО - не проблема (ну правда это буду делать не я, но я буду пинать админа чтоб он сделал, поэтому нужны основания) и главное чтоб производительность не падала, а вот как в случае с ngnix - росла. > Не ошибаешься, именно так и для этого всего лишь нужен обработчик, > что бы ты мог получить управление.
> http://httpd.apache.org/docs/2.0/mod/mod_headers.html
С обработчиками апача дела не имел, нельзя ли примерчик что именно нужно сделать для моей задачи?
-
> Real © (06.04.08 21:09) [24]
Я же говорю, что вероятно можно как-то выкрутиться с использованием этого модуля. Он позволяет подставлять содержимое заголовков из переменной окружения, не уверен, что такой вариант будет работать. Да и костыль это явный.
|