Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> автоматическое удаление файла сразу после аплоада, проблема малого опыта и неглубких знаний 
V
    Опции темы
rol
Дата 17.12.2006, 03:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 24.2.2005

Репутация: нет
Всего: нет



Перерыл фак, но че-то не соображу никак...

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

Я вижу 2 пути.

1-й. После аплоада файл остается во временной папке сервера и странице с формой аплоада отправляется переменная  временным именем и адресом файла, с которого флешка его собсно и грузит. 
При этом я не понимаю как передать данные странице с формой аплоада (это нужно без перезагрузки страницы). Натолкните где искать.... не уверен, что браузеру будет доступна папка с временными файлами сервера....

2-й. После аплоада файл перемещается в нужную мне папку на сервере, откуда он грузится во флешку на странице.  Затем после загрузки, файл на сервере должен умереть, команду я могу дать только из флешки. Вопрос - как передать команду скрипту на сервере (с адресом файла) при этом не должна перегружаться страница с флешкой, и никакие новые окна открываться не должны, из самой флешки я могу запустить любой javascript на странице.  (тоесть мне совсем не  понятно как запустить скрипт на сервере без отражения его работы в браузере пользователя)


PM MAIL   Вверх
Blaga
Дата 17.12.2006, 05:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЛамМер++
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 15.11.2005
Где: г. Иркутск

Репутация: 2
Всего: 4



Всмысле тебе нужно удалить файл который во временной папке? Тогда тебе нужна функция 
Код

unlink($_FILES['имя_поля_загрузки']['tmp_name']);



--------------------

http://displayart.ru - Обои.
http://a2themes.ru - Сайт о движках DLE, phpBB3, WordPress.
PM MAIL ICQ   Вверх
Alex13
Дата 17.12.2006, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 30.12.2005
Где: Новосибирск

Репутация: нет
Всего: 1



rol, во флеш существует что-нибудь вроде AJAX? если да, то можно выполнить запрос вроде del_img.php?img=path2image.
На худой конец, можно создать на страничке iframe размерами 0х0 из которого потом и выполнить запрос.

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


--------------------
Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий.
Антисоциальный блог.
PM WWW ICQ Jabber   Вверх
rol
Дата 17.12.2006, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 24.2.2005

Репутация: нет
Всего: нет



Blaga: Не, из временной папки файл удалится сам, мне нужно успеть до этого момента загрузить этот файл во флешку на странице, но вроде как это не получится, так как временный файл удаляется сразу после аплоада, если он не перемещен куда я хочу, поправте, если я не прав....

С анлинком проблема - файл не удаляется вроде бы, если он используется, в моем случае у меня не получилось, сразу после загрузки флешка дает команду на удаление файла на сервере, но он не удаляется, так как используется флешкой. Хотя я не понимаю почему - файл загружен, обращение к нему из браузера завершено.... По идее должно все удалиться...
Из флешки вызываю переход в файл и методом гет передаю путь к файлу.
Код

http://mysite.ru/del_file.php?n='http://mysite.ru/photos/file.jpg'


Может ошибка в скрипте на сервере?
Код

<? PHP
if(isset($n)) {
if(file_exists($n)){ unlink($n);}else{echo 'Файл не найден';};
};
?>


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

Alex13 : насчет ифрейма мысль,  спасибо, попробую, главное чтоб не было перегрузки страницы.
smile А вот с аяксом пока не знаком, пока не было необходимости smile

А флеш-сила smile http://virtualdress.ru

PM MAIL   Вверх
rol
Дата 17.12.2006, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 24.2.2005

Репутация: нет
Всего: нет



Хм, скрипт на сервере ругался на абсолютный путь в переменной.
Если передавать относительный, то проблем не возникает, осталось только в ифрейме все это оформить.

Другой вопрос - как запустить этот скрипт уделения файла, если пользователь закрыл окно с флешкой во процессе загрузки файла с сервера (а не при аплоаде)?

Кажется где-то читал про событие, но вроде бы оно относится к аплоуду....

Подскажите неучу smile
PM MAIL   Вверх
Alex13
Дата 18.12.2006, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 30.12.2005
Где: Новосибирск

Репутация: нет
Всего: 1



можно отсылать запрос на удаление сразу после начала, а в скрипте вставить задержку пропорциональную размеру файла, чтобы тот успел загрузиться.

Или можно просто не заморачиваться со всеми этими удалениями, а просто раз в сутки с помощью Cron'а запускать скрипт, который быдет удалять из кеша все картинки разом.


--------------------
Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий.
Антисоциальный блог.
PM WWW ICQ Jabber   Вверх
rol
Дата 18.12.2006, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 24.2.2005

Репутация: нет
Всего: нет



Alex13, спасибо за наводку на ифрейм, все получилось, причем универсально. smile
Ифрейму меняем src javascript'ом  на ссылку на скрипт удаления, и гетом к нему цепляем имя убиваемого файла.

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

И от крона никуда не деться, но это уже не критично. 
Задержка удаления может критично отразиться на работе сервака, не хочется его перегружать, количество обращений может быть большим), да и пропорциональность размеру файла в этом случае не совсем корректна, скорость загрузки-то у всех разная...
 все-таки лучший выход - обработка событий в больших временных интервалах на стороне клиента, а остальное уже в разряд ошибок и убивать по крону, это поможет экономить место на сервере smile )





PM MAIL   Вверх
rol
Дата 19.12.2006, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 24.2.2005

Репутация: нет
Всего: нет



УРА! Все получилось. smile

Итак, описываю процесс.

Дано: страница с флешкой, в которую нужно грузить фото пользователя, при этом фото должно на сервере после загрузки во флешку удаляться.
Форма аплоада файла сделана во флешке(для красоты) и на отдельной странице, вызываемой из главного окна.

Задача - чтоб усе работало.

Сделал.

1. Аплоад и загрузка во флешку.
Ну, вызов окна ява-скриптом и загрузка формы аплоада думаю всем понятна, если что, спрашивайте отдельно. 
Тонкость - чтоб не передавать имя файла, для переименовки его на сервере в нужное мне для загрузки его во флешку, я на сервере называю файл его размером в байтах и сохраняю в заданную заранее папку (вероятность совпадений размеров файлов разных пользователей очень мала, тем более что файлы удаляются). Размер файла, так же известный мне на клиентской стороне я передаю в виде переменной в основную флешку и она грузит нужный файл с сервера. Затем по команде флешки вызывается ява-скрипт на главной странице, который присваивает ифрейму, заданному с нулевыми размерами на главной странице адрес скрипта удаления файла на сервере, с прицепленным к адресу методом ГЕТ переменной с именем файла, который нужно удалить.

таким образом цепочка замкнулась, все прекрасно работает.

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

а. Собственно если пользователь не дождется аплоада файла на сервер.
 В этом случае файл и не сохранится на сервере, а флешка аплоада обрабатывает все стандартные в этих случаях события типа cancelи прочие... ничего делать тут не нужно.

б. Если пользователь закрывает окно с формой аплоада до его автоматического закрытия (которое выполняется при получении флешкой аплоада команды онКомплит с сервера. Из практики - существует значительная временная пауза, пропорциональная размеру файла между реальным аплоадом файла и событием его окончания, получаемое флешкой от сервера(событие onComplite во флешке), вот эту паузу и обрабатываем).
Обрабатываем это событие просто  -  в страницу аплоада встраиваем ифрейм, из флешки, по достижении прогрессбаром 100%, тоесть после реального аплоада, шлем переменную с именем файла в javascript страницы аплоада. По событию onUnload  тега BODY страницы аплоада, в случае насильственного закрытия этого окна после реального аплоада файла но до получения команды с сервера, ифрейму присваиваем адрес скрипта удаления файла и к нему ГЕТом цепляем имя файла.
Таким образом, если пользователь не дождется закрытия этого окна, а следовательно начала загрузки файла в основную флешку на главной странице, файл не загрузится во флешку и удалится с сервера.

в. Если пользователь дождался аплоада и начала загрузки файла в основную флешку, но не дождался окончания этой загрузки, по аналогии с вышеописанным событием удаляем файл с сервера, по событию onUnload уже главной страницы. Тоесть также встраиваем ифрейм и ему назначаем адрес скрипта удаления файла с именем файла в хвосте.



Вот собсно и все... smile 
Описал логику, может кому и пригодится, если нужна будет кому-то помощь, пишите на мыло, редко здесь бываю...




PM MAIL   Вверх
rol
Дата 20.12.2006, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 24.2.2005

Репутация: нет
Всего: нет



UPD  оказалось, что все работает корректно только на шустром компьютере,  на 2-х гигарцовом не успевает отработаться скрипт передачи в ифрейм ссылки на удаляющий серверный скрипт по принудительному закрытию окна. Так что выход- только удаление по крону неудаленных корректно файлов.



PM MAIL   Вверх
Alex13
Дата 21.12.2006, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 30.12.2005
Где: Новосибирск

Репутация: нет
Всего: 1



rol, и еще зависит от толщины канала.


--------------------
Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий.
Антисоциальный блог.
PM WWW ICQ Jabber   Вверх
rol
Дата 21.12.2006, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 24.2.2005

Репутация: нет
Всего: нет



Да, даже на adsl 1 мегабит не работает, так как у этой технологии исходящая скорость как раз ниже входящей в несколько раз... smile
 
Кстати, заметил такую вещь - флешка в форме аплоада не дает закрыться окну даже принудительно, оно просто подвисает до события onComplete, но при этом ни на какие скрипты страница не реагирует smile
PM MAIL   Вверх
rol
Дата 21.12.2006, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 24.2.2005

Репутация: нет
Всего: нет



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

Вот только остается вопрос ресурсоемкости такого скрипта... и как-то замороченно это.... но попробую smile


PM MAIL   Вверх
Eugene_Bond
Дата 22.12.2006, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 3.9.2006

Репутация: 1
Всего: 4



а зачем флешке дергать жабаскрипт, который будет в ифрейме дергать сервер с параметрами, если флешка сама может дернуть сервер с теми же параметрами?
PM MAIL   Вверх
rol
Дата 22.12.2006, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 24.2.2005

Репутация: нет
Всего: нет



А как? Можно пример на AS?
Если использовать getURL то открывается окно, от чего как раз и нужно уйти, с этого-то все и началось....
Возможно я просто не знаю другого способа... подскажите, если не сложно, и еще, как в этом случае с помощью флеша отследить закрытие окна и удалить в этом случае файл с сервера?smile

Это сообщение отредактировал(а) rol - 22.12.2006, 14:27
PM MAIL   Вверх
Alex13
Дата 22.12.2006, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 30.12.2005
Где: Новосибирск

Репутация: нет
Всего: 1



rol, это мысль. В родительском окне вы пытаетесь достучаться до дочернего с флешкой, а как только не получится, отсылаете запрос на удаление картинки. Правда, при этом может быть глюк, если родительское окно закрыть, но тут уже ничего не поделаешь...

Да, а вы не могли бы объяснить, зачем вообще все эти ухищрения нужны? Может мы сможем придумать кардинальное решение?


--------------------
Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий.
Антисоциальный блог.
PM WWW ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1328 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.