LINUX.ORG.RU

Apache загрузка файлов через perl скрипт


0

0

всем здравствуйте.
есть сервер apache 1.3 на сервере перл скрипт принимает файл через html форму и сохраняет его на диск.
загрузка файла может длиться несколько минут но на сервере стоит ограничение на время работы скрипта 30 секунд.
вопрос:
если файл не успеет загрузиться за 30 секунд загрузка обрывается или нет? и если обрывается как это можно исправить не меняя настройки сервера?

★★★★★

если не успеет загрузиться - закачка обрывается и в temp каталоге останется мусор.

как это можно исправить не меняя настройки сервера?


никак. в httpd.conf пропиши для своего vhost больший таймаут.

dreamer ★★★★★
()
Ответ на: комментарий от dreamer

а если скрип загрузки сделать через fastCGI? просто в fastcgi ещё не разбирался как там обстоят дела с таймаутом? или может есть другие варианты?
доступ к самому серверу у меня есть просто хочется решить это проблему не меняя таймаут иначе его придётся ставить минимум пару часов.

TDrive ★★★★★
() автор топика

нет, закачака на этот timeaut влиять не будет, но все же лучше написать чтобы работалов режиме CGI

вот все что требуется:

==========================

$UPLOAD_FH = $form->param($key);

open (IMG, «>$newfilename»); binmode IMG; print IMG while (<$UPLOAD_FH>); close (IMG); chmod 0644, $newfilename;

==========================

http://www.x0.org.ua/blog/user/1/view/44 http://unixforum.org.ua/index.php?topic=23928.15

anonymous
()
Ответ на: комментарий от anonymous

2anonymous немного не понял вас, у меня и есть cgi скрипт на перле.
вот кусок кода как выполняется закачка:

my $file=param('file');
open (FILE,«> адрес нового файла»);
syswrite(FILE,$_,1024) while (read($file, $_, 1024));
close (FILE);

кстате ещё 2 вопроса:
1)binmode нужен чтобы символы \n не заменялись на \r\n при использовании print и то только если сервер на ОС Виндовс. в моём случае без использования print и темболее на freeBSD он ненужен я прав?
2) зачем нужна команда chmod 0644, $newfilename; если сервер итак по умолчанию создаёт файлы с правами rw для себя (www) и r для всех остальных?


TDrive ★★★★★
() автор топика

таймаут никак не влияет на закачку
очень легко объяснить:
при сабмите формы на сервере не происходит запуска принимающего скрипта!
сначала весь файл заливается - только потом запускается ваш скрипт

ЗЫ пишите на чем угодно принимающий скрипт
хоть на пхп

puchuu
()
Ответ на: комментарий от puchuu

возможно так и работает но тогда возникает другой вопрос
где апач хранит http запрос до передачи его скрипту? ведь не в оперативке же.
да и если вдуматься например передаётся файл в 4 Гбайта намного логичнее его по кусочкам (например по 1024байта) постепенно передавать скрипту на обработку чем сначало гдето сохранять на диске а уже потом запускать скрипт.
??

TDrive ★★★★★
() автор топика
Ответ на: комментарий от TDrive

1)binmode нужен чтобы символы \n не заменялись на \r\n при использовании print и то только если сервер на ОС Виндовс. в моём случае без использования print и темболее на freeBSD он ненужен я прав?

Нет, вы не правы. Там еще юникодный маркер может сожраться вроде. И кто его знает где ваш скрипт будет работатьь через 2-3 года?

2) зачем нужна команда chmod 0644, $newfilename; если сервер итак по умолчанию создаёт файлы с правами rw для себя (www) и r для всех остальных?

Это сегодня так на вашем лично хостинге, а завтра может быть и по другому(часть 0640 делают). Поэтому явно надо ставить.

roller ★★★
()
Ответ на: комментарий от TDrive

> где апач хранит http запрос до передачи его скрипту?

В случае CGI - нигде не хранит, а именно в пайпе и передает, похапешников не слушай, они не люди.

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

Похапешники и Сысоев с тобой не согласны. Я правда тоже, но по другим причинам: в 99.9999999% случаев нет смысла запускать скрипт на таком раннем этапе, ибо ресурсы будет жрать, а результат один - файл на винте или отказ в аплоаде. Вот если бы ты хотел на лету считать контрольные суммы, или что-то перепаковывать - да, имеет смысл работать с CGI, все остальное лучше поручить самому вебсерверу.

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

simple_best_world_web_master
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.