Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/12: Рейтинг темы: голосов - 12, средняя оценка - 4.67
3 / 3 / 0
Регистрация: 02.01.2011
Сообщений: 149

Как отправить пользователю файл, находящийся не в корневом к

22.12.2011, 02:23. Показов 2501. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Корневой каталог у меня C:Apachehtdocs, а файл находится в папке Cocuments Как отправить пользователю данный файл?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.12.2011, 02:23
Ответы с готовыми решениями:

Отправить html-файл определённому пользователю
Здравствуйте! Вопрос такой возможно ли отправить в определённый момент времени(например в 6:00) определённому пользователь(например по...

Как прочитать файл, находящийся в интернете
Как прочитать файл в массив я знаю (благо форуму), но как это сделать если файл находится в интернете. Скачивать а потом читать не...

Как редактировать файл, находящийся в облаке OneDrive программно?
Добрый день! Подскажите пожалуйста, как можно редактировать файл, находящийся в облаке Onedrive в открытом доступе? У меня есть ссылка на...

13
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
22.12.2011, 10:29
А в чем сложность? Указываешь полный путь к файлу и отдаешь его юзеру той же функцией readfile, например.
0
3 / 3 / 0
Регистрация: 02.01.2011
Сообщений: 149
22.12.2011, 12:24  [ТС]
В том что у меня не обычный htm файл, который должен быть записан в браузер, а mp3 файл. Пользователю чначала должна быть выведена табличка о скачивании, а потом уже и отправить этот файл.
0
pl
51 / 17 / 6
Регистрация: 18.05.2007
Сообщений: 1,322
22.12.2011, 12:39
Ну так и выведи пользователю сначала табличку, потом подсунь ссылку на файл.
0
3 / 3 / 0
Регистрация: 02.01.2011
Сообщений: 149
22.12.2011, 12:51  [ТС]
В том то и дело, что сам файл лежит не в корневом каталоге. То что лежит в папке C:Apachehtdocs видно как http://server, а то что лежит в папке Cocuments с внешней стороны не видно. PHP должен отправить пользователю запрос на скчивание, а потом отправить сам файл.
0
pl
51 / 17 / 6
Регистрация: 18.05.2007
Сообщений: 1,322
22.12.2011, 13:13
No comments...
1. Копируешь файл в то место, откуда он виден с внешней стороны, даешь ссылку, после скачки удаляешь файл.
2. Выводишь файл бинарным потоком.
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
22.12.2011, 13:18
Тут возможно несколько вариантов.

1) Подключить папку Cocuments как ссылку с помощью директивы Alias. Тогда можно будет ставить прямые ссылки на эти файлы так как будто они хранятся внутри htdocs.

2) Вывести ссылки на нужные файлы из каталога Cocuments. В качестве id файла используем хеш md5. Файл обрабатывающий запрос на скачивание находит нужный файл, выдает заголовки
header("Content-type: application/octet-stream"); // или audio/mpeg
header("Content-Disposition: attachment; filename=".$friendlyFileName);
readfile($fullFileName)
Пользователь получит запрос на скачивание, выберет что сделать с файлом и закачка выполнится.

На сайте php в описании функции readfile приведен пример использования заголовка content-type: application/force-download. Человек утверждает что это заставляет браузер всегда качать файл, а не открывать его автоматически. Не знаю работает ли это на самом деле, но может тебе будет интересно попробовать.
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
22.12.2011, 13:35
Цитата Сообщение от pl
1. Копируешь файл в то место, откуда он виден с внешней стороны, даешь ссылку, после скачки удаляешь файл.
Как определить момент когда файл можно безопасно удалять? И кто это будет делать?
0
pl
51 / 17 / 6
Регистрация: 18.05.2007
Сообщений: 1,322
22.12.2011, 13:55
Как вариант, реализовать аналог сборщика мусора, учитывая время запроса файла. Вызов сборщика может осуществлятся либо по системному таймеру, либо каждый раз при запросе скрипта.
0
3 / 3 / 0
Регистрация: 02.01.2011
Сообщений: 149
22.12.2011, 14:01  [ТС]
копирование - хорошо, но это если качает 1-3 пользователя, а если таких пользователей более 10-ти? Вы представляете что будет с винтом, с компом и вообще?
а данный код - замечательно работает. Если вы мне подскажите еще как здесь организовать возможность докачки - вообще супер будет
Цитата Сообщение от bazile
header("Content-type: application/octet-stream"); // или audio/mpeg
header("Content-Disposition: attachment; filename=".$friendlyFileName);
readfile($fullFileName)
0
3 / 3 / 0
Регистрация: 02.01.2011
Сообщений: 149
22.12.2011, 14:02  [ТС]
да, и еще, но это уже не так важно. Как можно сделать так, что бы сразу открывалось окно закачки, а не открывалось через Media Player ???
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
22.12.2011, 14:26
Цитата Сообщение от pl
Как вариант, реализовать аналог сборщика мусора, учитывая время запроса файла. Вызов сборщика может осуществлятся либо по системному таймеру, либо каждый раз при запросе скрипта.
Не думаю что будет надежно. И как правильно заметил Akula-II будет происходить замусоривание диска лишними файлами.

Цитата Сообщение от Akula-II
Если вы мне подскажите еще как здесь организовать возможность докачки - вообще супер будет
Надо будет анализировать заголовки запроса Content-Range и выдавать соответствующий кусок файла. Посмотри какие заголовки отправляеи и получает программа для скачивания, когда качает не с начала файла. Например, это FlashGet умеет показывать.

Цитата Сообщение от Akula-II
да, и еще, но это уже не так важно. Как можно сделать так, что бы сразу открывалось окно закачки, а не открывалось через Media Player ???
Я же тебе написал уже - используй Content-type: application/force-download.
Вот здесь (http://lists.nyphp.org/piperma... 05058.html) пишут что для MSIE нужно еще Content-Disposition: filename использовать вместо Content-Disposition: attachment.
0
pl
51 / 17 / 6
Регистрация: 18.05.2007
Сообщений: 1,322
22.12.2011, 14:36
Хм.. Написать реализацию кэширования запрашиваемых файлов видимо не катит (достаточно перед копированием проверять наличие файла в кэше, удаление же можно производить по дате файла, которая ставится текущей в момент копирования его в кэш).
Любой современный веб-сервер поддерживает докачку. Клиент просто указывает с какого места докачивать (посылает заголовок content-disposition или вроде того). Поэтому возни с написанием механизма выдачи стрима с конкретной позиции не будет.
Я конечно не уверен, но на мой взгляд файловый кэш с точки зрения производительности лучше чем каждый раз формировать стрим на выдачу.
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
22.12.2011, 15:25
Цитата Сообщение от pl
Я конечно не уверен, но на мой взгляд файловый кэш с точки зрения производительности лучше чем каждый раз формировать стрим на выдачу.
Полностью согласен.
Лучше использовать вариант с директивой Alias чтобы файлы были доступны по прямой ссылке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.12.2011, 15:25
Помогаю со студенческими работами здесь

Как записать данные в файл, находящийся на удаленном хосте?
Как записать данные в файл, находящийся на удаленном хосте?

Process.Start: как запустить файл, находящийся в директории программы
Еще раз здравствуйте!) Подскажите пожалуйста. Я ознакомился с Process.Start(), и у меня появился вопрос, что надо писать что бы он искал...

Как отправить письмо пользователю
Здравствуйте. Допустим в Label1.Text адрес e-mail. Как по нажатию на кнопу button1 отправить этому пользователю письмо с любым текстов...

Переписать файл находящийся в ресурсах или как работает обращение к файлам объявленных в qrc
У меня есть html файл, я хочу программно его изменять. Он объявлен в файле ресурсов. Если я внесу изменения в файле html данные изменения...

Как на VB script загружать в текстовое окно в HTML страницу текстовый файл находящийся на сервере ?
У меня сайт где много текстовой информации и чтобы каждый раз не создавать новую страницу я хотел бы поместить на HTML страничку текстовое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru