Автор Тема: upload файлов  (Прочитано 5995 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн sickboy

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 70
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
upload файлов
« : 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);
а вот почему, не знаю.

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
upload файлов
« Ответ #1 : 19 Октября 2006, 14:15:49 »
perldoc CGI
perldoc CGI::Simple

это разные модули, постарайтесь выбрать один из них.

Оффлайн sickboy

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 70
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
upload файлов
« Ответ #2 : 19 Октября 2006, 15:03:13 »
выбрал CGI::Simple, теперь даже не получает имя файла, делаю все по описанию http://search.cpan.org/~jfreeman/Cgi-Simple-0.077/Simple.pm#upload()_The_key_file_upload_method

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
upload файлов
« Ответ #3 : 19 Октября 2006, 15:39:21 »
А вы читали полностью и подробно документацию?
И про DISABLE_UPLOADS тоже?

Оффлайн sickboy

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 70
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
upload файлов
« Ответ #4 : 19 Октября 2006, 15:47:56 »
Да,
$CGI::Simple::POST_MAX = 1_048_576;
$CGI::Simple::DISABLE_UPLOADS = 0;

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
upload файлов
« Ответ #5 : 19 Октября 2006, 15:53:23 »
у меня работает.
покажите ваш код.

Оффлайн sickboy

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 70
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
upload файлов
« Ответ #6 : 19 Октября 2006, 16:20:23 »
форма:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<
HTML>
<
HEAD>
<
TITLE>upload with CGI::Simple</TITLE>
</
HEAD>
<
BODY>

    <
FORM METHOD="POST"  ENCTYPE="multipart/form-data" ACTION="upload_simple.cgi">
        <
INPUT TYPE="file" NAME="uploaded_file" SIZE=50 MAXLENGTH=100>
        <
INPUT TYPE="submit" NAME="upload" VALUE="upload">
    </
FORM>

</
BODY>
</
HTML>


скрипт
#!/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;

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
upload файлов
« Ответ #7 : 19 Октября 2006, 16:30:09 »
перенести POST_MAX и DISABLE_UPLOADS перед new CGI::Simple

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
upload файлов
« Ответ #8 : 19 Октября 2006, 16:31:13 »
вы невнимательно читали документацию:

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.

Оффлайн sickboy

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 70
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
upload файлов
« Ответ #9 : 19 Октября 2006, 18:32:46 »
Да, действительно не внимательно.
Скрипт заработал на unix хостинге, а вот на Windows пока не хочет, создает только пустой файл, причем пишет:
No filehandle for \'music.asx\'. Are uploads enabled ($DISABLE_UPLOADS = 0)? Is $POST_MAX big enough?
буду признателен за помощь.

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
upload файлов
« Ответ #10 : 19 Октября 2006, 18:42:08 »
с виндовс не работаю

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
upload файлов
« Ответ #11 : 19 Октября 2006, 20:50:15 »
С путями открываемого файла не напутал?
The documentations is your friend

Оффлайн sickboy

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 70
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
upload файлов
« Ответ #12 : 19 Октября 2006, 23:44:53 »
Нет, не думаю.
Более того:
например в 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
ошибок нет, при этом в качестве имени файла используется полный путь с именем файла с локальной машины.
Файл не создается, даже нулевого размера.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28