Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: загрузка файла
Форумы портала PHP.SU » » Вопросы новичков » загрузка файла

Страниц (1): [1]
 

1. jonston - 31 Августа, 2012 - 17:31:20 - перейти к сообщению
Как реализована загрузка файлов на таких сервисы как вконтакте.То есть без перезагрузки и с показом превью.А конкретно как они избегают появления "мусора" если пользователь не нажал "сохранить изменения" или обновил страницу сразу после загрузки.Вопрос можен не совсем к месту, но кто знает помогите буду благодарен.
2. EuGen - 31 Августа, 2012 - 18:36:40 - перейти к сообщению
jonston
Очевидно как - то, что пользователь подтвердил, сохраняется в некотором хранилище (например, в БД) данных с флагом, что оно загружено корректно. Затем некоторый фоновый скрипт проверяет хранилище того, что "загружено до конца" и все, что не подходит под критерий - удаляет из хранилища загруженных файлов.
3. jonston - 03 Сентября, 2012 - 09:48:47 - перейти к сообщению
EuGen пишет:
jonston
Очевидно как - то, что пользователь подтвердил, сохраняется в некотором хранилище (например, в БД) данных с флагом, что оно загружено корректно. Затем некоторый фоновый скрипт проверяет хранилище того, что "загружено до конца" и все, что не подходит под критерий - удаляет из хранилища загруженных файлов.


что подразумевается под выражением "фоновый скрипт"?То есть фото грузится в папку tmp например а какой-то скрипт-робот оббегает эту папку, проверяет корректность загруженных фото и удаляет если фото загружено некорректно?
Может быть есть попроще вариант?Благодарю за помощь!
4. KingStar - 03 Сентября, 2012 - 10:07:31 - перейти к сообщению
5. jonston - 03 Сентября, 2012 - 11:01:58 - перейти к сообщению
KingStar пишет:

Что вы мне дали за ссылку?Я знаю что такое асинхронные запросы к серверу.
6. KingStar - 03 Сентября, 2012 - 11:57:39 - перейти к сообщению
ну дык в чем проблема??? загружай файлы аяксом и обрабатывай как тебе нужно
7. jonston - 03 Сентября, 2012 - 13:06:56 - перейти к сообщению
KingStar пишет:
ну дык в чем проблема??? загружай файлы аяксом и обрабатывай как тебе нужно


Дело в том что есть форма добавления товара.Загружаю через iframe фото без перезагрузки.Далее ввожу информацию о товаре и нажимаю ОПУБЛИКОВАТЬ.Допустим пользователь не опубликовав товар, закроет вкладку так и не сохранив фото , что тогда делать с мусором (фото) который уже залит на сервак?
8. Vinyl - 03 Сентября, 2012 - 13:23:25 - перейти к сообщению
А вопрос-то интересный! Хотя, по-сути, для меня бесполезный (пока). Предположим, действие происходит так:
1. Юзер выбирает файл, загружает.
2. Файл загружается в папку /tmp
3. Скрипт ждет подтверждения, добавления описания и т.д.
4. Юзер ввел инфу, нажал "Сохранить", сидит довольный.

Предположим, что юзер закрыл браузер перед п.4. По идее, как написал уважаемый EuGen:
EuGen пишет:
Затем некоторый фоновый скрипт проверяет хранилище того, что "загружено до конца" и все, что не подходит под критерий - удаляет из хранилища загруженных файлов.

Все бы хорошо, да вот помнится мне как-то я то ли музыку добавлял, то ли что-то ещё, файл поставил на загрузку и лег спать, а утром преспокойненько нажал "сохранить" и все сохранилось. Прошло как минимум 8 часов, а файл ещё был на месте (т.е. в /tmp, предположительно). Получается, что фоновый скрипт запускается раз в не менее чем восемь часов. Представляете, сколько всего можно накидать за такой период времени? И можно было бы представить, что пока открыта форма для ввода данных, аяксом из формы периодически передается флаг, который не разрешает фоновому скрипту удаление сего файла, но комп я перед сном на таймер ставлю (30 минут), чтоб с музычкой засыпать (= после чего он в гибернацию уходит. Соответственно, вариант с флагом из формы можно откинуть. А какой тогда вариант? Если просто фоновый скрипт шерстит папку (или БД), то есть процент вероятности того, что скрипт прошерстит папку именно в тот промежуток времени, когда у пользователя файл залит а кнопка "Сохранить" ещё не нажата. Все мы знаем масштабы "Вконтакте", там, наверное, в секунду по несколько файлов заливают, значит и процент вероятности попасть скриптом в этот промежуток очень даже крупный. Значит какое-то волшебство) Если честно, сейчас голова занята другим и реализацию искать ни желания ни времени нет, но тема интересна.
9. jonston - 03 Сентября, 2012 - 13:32:01 - перейти к сообщению
Vinyl пишет:
Все бы хорошо, да вот помнится мне как-то я то ли музыку добавлял, то ли что-то ещё, файл поставил на загрузку и лег спать, а утром преспокойненько нажал "сохранить" и все сохранилось. Прошло как минимум 8 часов, а файл ещё был на месте (т.е. в /tmp, предположительно). Получается, что фоновый скрипт запускается раз в не менее чем восемь часов. Представляете, сколько всего можно накидать за такой период времени? И можно было бы представить, что пока открыта форма для ввода данных, аяксом из формы периодически передается флаг, который не разрешает фоновому скрипту удаление сего файла, но комп я перед сном на таймер ставлю (30 минут), чтоб с музычкой засыпать (= после чего он в гибернацию уходит. Соответственно, вариант с флагом из формы можно откинуть. А какой тогда вариант? Если просто фоновый скрипт шерстит папку (или БД), то есть процент вероятности того, что скрипт прошерстит папку именно в тот промежуток времени, когда у пользователя файл залит а кнопка "Сохранить" ещё не нажата. Все мы знаем масштабы "Вконтакте", там, наверное, в секунду по несколько файлов заливают, значит и процент вероятности попасть скриптом в этот промежуток очень даже крупный. Значит какое-то волшебство) Если честно, сейчас голова занята другим и реализацию искать ни желания ни времени нет, но тема интересна.


Вот ты понял я вижу всю суть вопроса.Если привязать время заливки файла что бы потом скрипт сравнивал насколько давно был залит файл и удалял его если лимит времени был достигнут.Но блин вопрос производительности.Что с одного клиента будет запускаться скрипт который удаляет все tmp файлы и свои и чужие?Или создавать отдельную папку для каждого юзера?Вопрос не тривиальный.Какие еще могут быть варианты?
P.S. Я заметил что вконтакте до сих хранится залитый мною, но не опубликованный 2 часа назад файл
10. Мелкий - 03 Сентября, 2012 - 14:02:44 - перейти к сообщению
Vinyl пишет:
Получается, что фоновый скрипт запускается раз в не менее чем восемь часов.

А может удалять файлы, которым - неделя.

Vinyl пишет:
сколько всего можно накидать за такой период времени?

И что? Дисковое место дешёвое. Лимиты на количество файлов в директории нормально обходятся секционированием. Да и горизонтально масштабируется аналогично.

Vinyl пишет:
есть процент вероятности того, что скрипт прошерстит папку именно в тот промежуток времени, когда у пользователя файл залит а кнопка "Сохранить" ещё не нажата.

Ну и если пользователь не нажал-таки на эту кнопку за отведённые на это часы (или дни) - что же поделать.
Или убивать файлы, загруженные с ныне протухшей сессии только. Или вообще не удалять, а сказать, что это фича - хранение всех загруженных файлов. Вопрос только допустимого именно для вас оверхеда.
11. jonston - 03 Сентября, 2012 - 14:05:38 - перейти к сообщению
откуда запускать скрипт чистки файлов?От клиента или можно написать какой-то автоматизированный скрипт который самозапускался бы в определенное время и сам все удалял?Вообще возможна ли реализация скрипта без вмешательства клиента?
12. Vinyl - 03 Сентября, 2012 - 14:07:42 - перейти к сообщению
Мелкий пишет:
Или вообще не удалять

Скорее всего, у vk так и есть.
(Добавление)
jonston пишет:
откуда запускать скрипт чистки файлов?От клиента или можно написать какой-то автоматизированный скрипт который самозапускался бы в определенное время и сам все удалял?Вообще возможна ли реализация скрипта без вмешательства клиента

Почитайте про Cron (если не в курсе)

 

Powered by ExBB FM 1.0 RC1