Я уже некоторое время пытаюсь решить небольшую проблему, но, похоже, я не могу.
Я написал HTML-страницу, которая вызывает Perl CGI-скрипт при отправке формы.Этот CGI выполняет определенное количество задач на стороне сервера, и я заставил скрипт распечатать шаги этих задач в iframe на странице HTML.Дело в том, что , если клиент закрывает свой браузер или просто уходит со страницы, CGI-скрипт прерывается на стороне сервера.
HTML-код:
<form action="/path/to/script.cgi" method="post" enctype="multipart/form-data" target="processing">
<p>File to analyse: <input type="file" name="filename" size="50"/></p>
<p><input type="submit" name="Submit" value="Analyse" /></p>
</form></font></p>
<p style="margin-left: 20"><font face="Arial" size="2" color="#000000">Analysing the file may take a while</font></p>
<iframe name="processing" width="70%" height="300">
</iframe>
CGI-скрипт:
my $query = new CGI;
print $query->header(-type => 'text/plain');
function1();
function2_takesLongTime($parameter);
function3();
Итак, допустим, что «function1» просто подготавливает некоторые вещи для анализа файлов (создание папок и т. Д.).«function2» - большая функция (может длиться 15 минут).Это Perl-программа, и в ней много «отпечатков», которые из-за «text / plain» заголовка CGI перенаправляются в iframe html-страницы (без использования буферизации $ | в программе).httpd настроен так, что тайм-аут намного дольше 15 минут, поэтому он не приходит оттуда.«function3» - очистка.
Если клиент остается на html-странице, скрипт CGI работает отлично.если клиент остановлен (например, пользователь закрывает окно), функции 1 и 2 выполняются на стороне сервера, но после этого сценарий, по-видимому, прерывается, поскольку очистка не производится.
Я попытался запустить«function2» как независимая программа с системной командой или создающая библиотеку perl и вызывающая основную функцию этой библиотеки, все равно завершается тем же путем.Я подумал, что независимо от того, останется клиент на странице или нет, серверный скрипт все равно будет работать.Это из-за заголовка «text / plain» скрипта CGI, который не может быть возвращен клиенту, что скрипт прерван?
Если кто-нибудь может мне помочь с этим, я был бы оченьпризнательна.