Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с Net:FTP через Web мнтерфейс 
V
    Опции темы
qweasd
  Дата 2.9.2010, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте!

Есть сайт в нем пользователь указывает указывает файл который хочет загрузить на ftp сервак - далее этот файл копируется на другой комп и уже с него заливается на FTP сервак. Все это реализовано и работает. НО! при загрузке файла веб страница подвисает на время выполнения загрузки файла - и соответственно если файл большой то на долго. Вопрос: как сделать так чтобы на веб странице отобразило время загрузки на сервер, а процесс загрузки не зависел от отображения веб страницы??
PM MAIL   Вверх
Jimy
Дата 2.9.2010, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

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

Смотрите в сторону Ajax.

Цитата

как сделать так чтобы на веб странице отобразило время загрузки на сервер?

С помощью JavaScript можно создать/изменить любой элемент DOM страницы, и соответственно можно в любом месте страницы отобразить любую нужную информацию. 
Есть библиотеки облегчающие работу с моделью DOM, например, jQuery (в ней также есть Ajax методы).
На мой взгляд гораздо интересней вопрос не "как отобразить время загрузки на сервер", а "как спрогнозировать примерное время загрузки на сервер". ;-)
PM   Вверх
qweasd
Дата 2.9.2010, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а на Perl это возможно?
PM MAIL   Вверх
Jimy
Дата 2.9.2010, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



что именно?

Заданные вопросы относятся к клиентской части функционала и к Perl отношение имеют весьма косвенное. Если я конечно правильно понял суть вопросов.

Это сообщение отредактировал(а) Jimy - 2.9.2010, 12:04
PM   Вверх
qweasd
Дата 2.9.2010, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ну почему же косвенные!?
на счет: 
Цитата

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

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

Это сообщение отредактировал(а) qweasd - 2.9.2010, 12:09
PM MAIL   Вверх
Jimy
Дата 2.9.2010, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Когда Вы написали "процесс загрузки", то не уточнили о какой именно загрузке идет речь.
Я решил что самым медленным звеном является загрузка по HTTP поэтому про нее и писал.

Цитата

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

Операционная система какая?
PM   Вверх
qweasd
Дата 2.9.2010, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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


Бывалый
*


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

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



Код

open(TEMP, "./other.pl |");


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

Это сообщение отредактировал(а) Jimy - 2.9.2010, 14:25
PM   Вверх
dva300
Дата 2.9.2010, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

Заданные вопросы относятся к клиентской части функционала


согласен. 
если вы грузите 100Мб то задействовано ваше клиентское приложение - perl тут не причем.
 
если же всеже речь идеть о этапе копирования файла на другой сервер - pipe & fork и не плодим лишних программ. 
--------------------
Участник движения Культура Вождения
PM   Вверх
qweasd
Дата 2.9.2010, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(dva300 @ 2.9.2010,  15:20)
...
если же всеже речь идеть о этапе копирования файла на другой сервер - pipe & fork и не плодим лишних программ.

вы не могли-бы продемонстрировать на примере

"В Unix функция fork создает новый процесс, который является копией текущего. " - зачем мне заново выполнять весь скрипт?

Это сообщение отредактировал(а) qweasd - 2.9.2010, 15:56
PM MAIL   Вверх
dva300
Дата 2.9.2010, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

"В Unix функция fork создает новый процесс, который является копией текущего. " - зачем мне заново выполнять весь скрипт? 


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

pipe в данном случае вам даст возможность читать информацию из дочернего процесса.

конструкция вида 
Цитата

open(TEMP, "./other.pl |");


в какой-то степени тоже самое за исключением того что вам нужно две программы вместо одной.
дакой вариант хорощ например когда вы вызываете какую-либо системную утилиту а не программируете логику дочернего процесса.

какой пример вам нужен ? 
--------------------
Участник движения Культура Вождения
PM   Вверх
infarch
Дата 3.9.2010, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


Шустрый
*


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

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



сделал вот так:
Код


sub load_to_ftp{
    my $filename = $_[0];
    
    my $pid = fork();
    if ($pid) {
        # parent
        return ((stat($filename))[7]/80000/60 + 1); #minutes 
    } elsif ($pid == 0) {
        # child
        $ftp = Net::FTP->new("127.0.0.1", Debug => 0)
          or die "Cannot connect to FTP-server: $@";
    
        $ftp->login("user","pass")
          or die "Cannot login ", $ftp->message;
    
        $ftp->cwd("/upload")
          or die "Cannot change working directory ", $ftp->message;
        
        $ftp->put($filename)
            or die "put failed ", $ftp->message;
    
        $ftp->quit;
        exit(0);
    } else {
        die "couldn’t fork: $!\n";
    }
}


работает. Но есть два но:
1. файл грузится но постоянно не докачивается(докачиваются полностью только маленькие файлы)
2. после нажатия на странице кнопки аплоад - на странице отображает время для загрузки и (чего не должно быть) отображается, что ожидается ответ от 127.0.0.1.
PM MAIL   Вверх
dva300
Дата 3.9.2010, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

1. файл грузится но постоянно не докачивается(докачиваются полностью только маленькие файлы)

размер ? 

Цитата

2. после нажатия на странице кнопки аплоад - на странице отображает время для загрузки и (чего не должно быть) отображается, что ожидается ответ от 127.0.0.1. 

что за время ? ...не совсем понял
вопрос конечно сейчас задам совсем тупенький но зачем вы скриптом лезете на FTP сервер который расположен на этой же машине ? 
что-то мои лыжи совсем не едут. 
--------------------
Участник движения Культура Вождения
PM   Вверх
qweasd
Дата 3.9.2010, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(dva300 @ 3.9.2010,  15:57)
Цитата

1. файл грузится но постоянно не докачивается(докачиваются полностью только маленькие файлы)

размер ? 

Цитата

2. после нажатия на странице кнопки аплоад - на странице отображает время для загрузки и (чего не должно быть) отображается, что ожидается ответ от 127.0.0.1. 

что за время ? ...не совсем понял
вопрос конечно сейчас задам совсем тупенький но зачем вы скриптом лезете на FTP сервер который расположен на этой же машине ? 
что-то мои лыжи совсем не едут.

размер разный и каждый раз не дозакачивается 10-15% от общего объема.

я имел ввиду что не должно быть отображения: что ожидается ответ от 127.0.0.1 - ну типо странице не все догрузила - такое бывает когда открываешь страницу с большим количеством картинок и до их полной загрузке отображается сообщение (ожидается ответ от 127.0.0.1(- подставить нужное smile ) )
 ну резон мне тут писать реальные адреса?! а сервак удаленный? например ftp.microsoft.com - если вам так удобнее!
PM MAIL   Вверх
qweasd
Дата 6.9.2010, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



тут главный вопрос - почему недокачивает? и как промониторить из-за чего такое происходит?
PM MAIL   Вверх
ming
Дата 6.9.2010, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



в логах веб-сервера покопаться попробуйте, возможно отыщется причина.
PM MAIL ICQ Jabber   Вверх
qweasd
Дата 7.9.2010, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



вот такое в логах:

Код

put failed Accepted data connection
Quota exceeded: 111.rar won't be saved
7164566 Kbytes used (99%) - authorized: 7168000 Kb
Rename/move failure: No such file or directory


только чёт я не пойму - на фтп никаких запретов на заливку нет
PM MAIL   Вверх
qweasd
Дата 20.10.2010, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

я имел ввиду что не должно быть отображения: что ожидается ответ от ftp.srver.com - ну типо на странице не все догрузилось - такое бывает когда открываешь страницу с большим количеством картинок и до их полной загрузке отображается сообщение(внизу слева на панеле состояния(StatusStrip))ожидается ответ от ftp.srver.com)

мне кажется что если создать 2 потока и закрыть главный(тот который и отобразил страницу в окне веббраузера) то и его выполнение должно окончиться?! Я сделал вот так:
 
Код

   my $pid = fork();
    if ($pid) {
        # parent
        .... 
       exit(0);
    } elsif ($pid == 0) {
        # child
        ..... work .... work - выполнение этой части может доходить до полутора часов
    }

Может я что то не так делаю???

Это сообщение отредактировал(а) qweasd - 20.10.2010, 11:15
PM MAIL   Вверх
qweasd
Дата 28.10.2010, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ПАМАГИТЕ пожалуйста
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

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


 




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


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

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