powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / сохранить файл на клиенте
7 сообщений из 7, страница 1 из 1
сохранить файл на клиенте
    #38428499
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача: есть запрос к серверу с PHP, который принимая параметры запроса делает сложные вычисления. Результат вычислений надо частично отдать обратно в виде странички (ну там ошибки, и чего ишо), а основной результат чтобы отдавался клиенту в виде файла csv, xls, xml, etc.

Вопрос: может ли сервер сохранить как-то и что-то в файл на клиентской машине? Я так понимаю нет.

Вариант - отдать сначала страничку, а файл сгенерить и положить во временную или какую ещё папку на сервере и дать клиенту на него ссылку - не проходит. Нет способа узнать "скачал" его клиент и сколько его ещё хранить надо... а надо, если не скачал - удалить файл сразу по закрытию странички в браузере. То есть "хранить" нельзя (ЗПД).

Какие ещё решения могут быть?
...
Рейтинг: 0 / 0
сохранить файл на клиенте
    #38428546
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Генерить файл "на лету" по запросу от клиента.
...
Рейтинг: 0 / 0
сохранить файл на клиенте
    #38429098
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkle,

Как описать ссылку? Скажем я указал href="/mainPage/file.xls" и генерю этот вариант файла, но в процессе генерации возникает ситуация "облома" и мне надо выдать полноценную диагностику... и?

Я как раз и хотел отдавать страничку в браузер с обломами, а файл сохранять куда-то в песочницу браузера. И вот если "всё хорошо", чтобы браузер мог его записать как рабочий файл на машину клиента тем же js. В этом случае, на сервере НЕ собирается мусор ненужных файлов, файл если не нужен клиенту - пропадает из песочницы по факту закрытия страницы, а если нужен - сохраняется браузером уже без обращения к серверу... как-то так хотелось.

Мож знает кто как это сделать, или низзя?

Как вариант: загрузить содержимое файла в скрытый textarea и оттуда выгонять в файл через js... но, в таком случае всякая "чухня" в содержимом может легко нарушить структуру страницы, это раз (можно обойти). Да и непонятно как потом явяскриптом сохранить содержимое на клиенте...
...
Рейтинг: 0 / 0
сохранить файл на клиенте
    #38429104
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109Скажем я указал href="/mainPage/file.xls" и генерю этот вариант файла, но в процессе генерации возникает ситуация "облома" и мне надо выдать полноценную диагностику... и?

Я как раз и хотел отдавать страничку в браузер с обломами, а файл сохранять куда-то в песочницу браузера.Если нет ошибок - отдаете файл. Или отдаете страничку с отчетом в случае "облома". Сам файл при этом формировать не нужно. А на страничке с отчетом об ошибках даете ссылку на скачивание этого же файла, но без формирования html-отчета в случае "облома". Например, так: href="/mainPage/file.xls?mode=noReport".
...
Рейтинг: 0 / 0
сохранить файл на клиенте
    #38429111
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вдогонку...

Однако, давайте рассмотрим случай, когда для формирования файла (или отчета об ошибках) требуется произвести много ресурсоемких вычислений и повторно их делать нет резона.

В таком случае делаете папку временных файлов и определяете что файл должен храниться не более какого-то времени. Скажем, один час. Или десять минут. Это уж по ситуации выбрать. И указываете это время (или "файл доступен для скачивания до ЧЧ часов ММ минут") на страничке с отчетом. Все файлы возрастом старше одного часа (или десяти минут) удаляете из папки сразу при запуске скрипта. Если на момент удаления файл скачивается, то физическое удаление файла будет выполнено позже - файловая система не позволит немедленно удалить занятый файл. Таким образом, "лишние" файлы на сервере будут находится, но в каком-то небольшом количестве.

Имя временного файла придется каким-то образом привязать к пользователю. Например, добавить к нему идентификатор сессии пользователя. Если файлов на одного пользователя может быть несколько, то к сессии еще добавить какое-то случайное число как идентификатор файла. В ссылке на скачивание файла указываете этот идентификатор.

При отдаче файла берете этот идентификатор из GET, добавляете к нему ID сессии, проверяете наличие файла. По результатам проверки выдаете либо сообщение об ошибке (прошло много времени и файл уже удален), либо отдаете этот файл и удаляете его. Впрочем, если хотите, можете и не удалять - вдруг пользователь оказался "шляпой", нажал отмену вместо сохранения и решил скачать заново...
...
Рейтинг: 0 / 0
сохранить файл на клиенте
    #38429179
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkle,

ну вот что-то похожее и у меня нарисовалось. Получается сохранить в "песочнице" браузера и вытащить на локаль клиента скриптом "по требованию" - никак, так?

Просто уже не помню описание стандарта, а лезть копать заново - лениво.
...
Рейтинг: 0 / 0
сохранить файл на клиенте
    #38429292
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109Получается сохранить в "песочнице" браузера и вытащить на локаль клиента скриптом "по требованию" - никак, так?Сохранить в песочнице скорее всего можно, а насчет вытащить и сохранить локально - сомневаюсь. Да и с кроссбраузерностью наверняка будет все непросто. Спросите в профильном форуме , там люди более сведущи в этих делах.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / сохранить файл на клиенте
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]