У меня проблемы с использованием perl cgi hook.
Похоже, что после того, как я нажал кнопку "отправить", мой Perl-скрипт вызывается не так, как после загрузки файла полностью.
Это может быть связано с настройкой сервера.
Кто-нибудь сталкивался с этой проблемой раньше?
Обновление:
Причина была предустановлена: Модуль безопасности Apache
Спасибо за ваше время.
Исходный код Perl
#!/usr/bin/perl -w
use CGI::Carp 'fatalsToBrowser';
use CGI qw(:cgi);
use IO::File;
use strict;
my $hook_file = "test.txt";
my $hook_handle = new IO::File;
$hook_handle->open(">> $hook_file") or die("Failed to open $hook_file: $!");
my $hook_query = CGI->new(\&hook, $hook_handle);
#start upload:
my $query = new CGI;
sub hook{
my ($current_filename, $buffer, $bytes_read, $hook_handle) = @_;
$hook_handle->print( join(" ",times()) . " -> " . $bytes_read ."\n" );
}
print "Content-type: text/html\n\n";
1;
Для отслеживания процесса загрузки я использую tail:
touch test.txt
tail -f test.txt
Используя простую форму HTML POST, я начинаю загружать файл размером 5,5 МБ.
Вывод всегда похож:
system time / user time / cpu time -> bytes transfered
0.03 0 0 0 -> 4037
...
...
...
0.11 0.01 0 0 -> 5520894
Говоря, что загружено 5,5 МБ за 0,1 секунды.
Конфигурация сервера
Существует множество различий между конфигурациями:
use Config qw(myconfig config_sh config_vars);
print myconfig();
print config_sh();
Некоторые различия: (скажите, пожалуйста, что еще может быть интересным)
Первое значение - это рабочий сервер.
Второе значение имеет
ошибка сервера мечты.
// dreamhost uses an older version of perl:
PERL_API_VERSION='10' -> '8'
api_versionstring='5.10.0' -> '5.8.0'
// dreamhost uses ByteLoader
extensions='B ...'
extensions='B ByteLoader ...'
// dreamhost uses an older gcc version
gccversion='4.3.3' -> '4.1.2 20061115 (prerelease) (Debian 4.1.1-21)'
// dreamhost uses an older libc version
gnulibc_version='2.9' -> '2.3.6'
// the dreamhost server is using fast stdio
usefaststdio='undef' -> 'define'
CGI ( обновлено )
по совету Sinans я обновил свою версию CGI (однако это не решило мою проблему)
// dreamhost cgi version
print $query->version (); -> 3.48