Forum Webscript.Ru
Программирование => Perl => Тема начата: sickboy от 19 Октября 2006, 14:09:23
-
Помогите разобраться с upload\'ом файлов.
код
use CGI;
use CGI::Simple;
$q = new CGI;
$u = new CGI::Simple;
$file_name = $q->param (\'uploaded_file\');
$fh = $u->upload($file_name);
open FH, ">$path/$file_name" or die "";
binmode FH;
print FH $buffer while read( $fh, $buffer, 4096 );
print $buffer;
close FH;
print $upload->cgi_error();
в итоге получаю файл размеров в 0 байт. и ошибку No filehandle for \'my_file\'.
Насколько я понял, не работает:
$fh = $u->upload($file_name);
а вот почему, не знаю.
-
perldoc CGI
perldoc CGI::Simple
это разные модули, постарайтесь выбрать один из них.
-
выбрал CGI::Simple, теперь даже не получает имя файла, делаю все по описанию http://search.cpan.org/~jfreeman/Cgi-Simple-0.077/Simple.pm#upload()_The_key_file_upload_method
-
А вы читали полностью и подробно документацию?
И про DISABLE_UPLOADS тоже?
-
Да,
$CGI::Simple::POST_MAX = 1_048_576;
$CGI::Simple::DISABLE_UPLOADS = 0;
-
у меня работает.
покажите ваш код.
-
форма:
upload with CGI::Simple
скрипт
#!/usr/bin/perl
use CGI::Simple;
$query = new CGI::Simple;
$CGI::Simple::POST_MAX = 1_048_576;
$CGI::Simple::DISABLE_UPLOADS = 0;
$path = \'/home/public_html/upload\';
$filename = $query->param (\'uploaded_file\');
$fh = $query->upload($filename);
open FH, ">$path/$filename" or die "Oops $!\\n";
binmode FH;
print FH $buffer while read( $fh, $buffer, 4096 );
print $buffer;
close FH;
-
перенести POST_MAX и DISABLE_UPLOADS перед new CGI::Simple
-
вы невнимательно читали документацию:
You can enable uploads using the \'-upload\' pragma. You do this by specifying this in you
use statement:
use CGI::Simple qw(-upload);
Alternatively you can enable uploads via the $DISABLE_UPLOADS global like this:
use CGI::Simple;
$CGI::Simple::DISABLE_UPLOADS = 0;
$q = new CGI::Simple;
If you wish to set $DISABLE_UPLOADS you must do this *after* the use statement and
*before* the new constructor call as shown above.
-
Да, действительно не внимательно.
Скрипт заработал на unix хостинге, а вот на Windows пока не хочет, создает только пустой файл, причем пишет:
No filehandle for \'music.asx\'. Are uploads enabled ($DISABLE_UPLOADS = 0)? Is $POST_MAX big enough?
буду признателен за помощь.
-
с виндовс не работаю
-
С путями открываемого файла не напутал?
-
Нет, не думаю.
Более того:
например в Opera:
после загрузки на сранице получаю:
filename: d:\\full_path\\doc_root\\upload\\URL.3gp
No filehandle for \'URL.3gp\'. Are uploads enabled ($DISABLE_UPLOADS = 0)? Is $POST_MAX big enough?
при этом файл создается нулевого размера.
Через IE:
filename: d:\\full_path\\duc_root\\upload\\C:\\WINDOWS\\cmsetacl.log
ошибок нет, при этом в качестве имени файла используется полный путь с именем файла с локальной машины.
Файл не создается, даже нулевого размера.