Автор Тема: Загрузка файла...  (Прочитано 6627 раз)

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

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Загрузка файла...
« : 14 Октября 2004, 11:10:50 »
Что-то я не очень понимаю... код такой:
------------------------------------------------------------
#!/usr/bin/perl -w
use strict;
use CGI qw(:param);
my $file=param(\'FL\');
print "Content-type: text/html\\n\\n";
print "File: $file

";
while (<$file>)
{
print;
}
print "
File is load good!";
------------------------------------------------------------
ниодин из загруженных файлов не отображаеться... в логах следующее:
file.cgi: readline() on unopened filehandle at file.cgi line 8.

Кто-нить поясните что за бред!?
And no religion too...

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
Загрузка файла...
« Ответ #1 : 14 Октября 2004, 11:53:23 »
А ты что хочешь сделать? Вывести на экран файл по имени, которое даёт функция param(\'FL\')?

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Загрузка файла...
« Ответ #2 : 14 Октября 2004, 11:54:43 »
Действительно бред.
Что у тебя здесь: <$file>. Имя файла? А что должно быть? Хендл открытого файла.
The documentations is your friend

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Загрузка файла...
« Ответ #3 : 14 Октября 2004, 12:01:55 »
Forza
хочу вывести имя файла и его содержание...
NeoNox
Цитирую:
-----------------------------------
"Переменная, полученная с вызывающей веб-страницы, если расматривать ее как строку, будет строкой, содержащей имя файла, и, в зависимости от броузера, путь к нему. Но если рассматривать ее как дескриптор файла, она будет вести себя как дискриптор файла, и можно будет перебирать данные в ней, как в обычном файле. Спасибо, Линкольну Штайну"!
                        Кевин Мельтцер.
-----------------------------------
так что это не совсем бред...
And no religion too...

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Загрузка файла...
« Ответ #4 : 14 Октября 2004, 12:14:15 »
Мда. На заборе тоже кое-что написано. Ну и что?
perldoc perldiag в руки.
Кстати, откуда цитата?
The documentations is your friend

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
Загрузка файла...
« Ответ #5 : 14 Октября 2004, 13:03:33 »
commander, а тебе чисто принципиально надо выводить файл вот таким методом? ;) Стандартное не подойдёт?
my $fileName = param (\'FL\');
open (SOURCE, "$fileName")
or die "Couldn\'t open $fileName for reading: $!\\n";
print "Content-type: text/html\\n\\n";
print "File: $fileName

";
while ()
{ print $_.br();}
close (SOURCE);

[OFF]Набирал "по памяти" - надеюсь, без опечаток.[/OFF]

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Загрузка файла...
« Ответ #6 : 14 Октября 2004, 13:19:30 »
commander

Хм... может трабла в форме??? Вот этот код у меня заработал:

#!/usr/bin/perl
use strict;
use 
CGI qw(param);
print 
"Content-type: text/html; charset=windows-1251\\n\\n";
my $file param(\'FL\');
if (!$file) {
    print "
    <FORM action=\'\' method=post enctype=multipart/form-data>
    <input type=file name=FL>
    <input type=submit value=UP>
    </FORM>
    ";
}
else {
    print "File : $file<BR>";
    print while (<$file>)
}

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Загрузка файла...
« Ответ #7 : 14 Октября 2004, 13:19:44 »
And no religion too...

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Загрузка файла...
« Ответ #8 : 14 Октября 2004, 13:21:59 »
Phoinix
твоя правда! :) заработало... спасиб!
And no religion too...

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Загрузка файла...
« Ответ #9 : 14 Октября 2004, 13:30:09 »
commander
ты сам себе тщательно расставляешь грабли а потом других просишь их за тебя убрать.
твой стиль написания кода называется "оптимистическим программированием". чуть что где сломается - дебажить будешь очень долго.
The documentations is your friend

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Загрузка файла...
« Ответ #10 : 14 Октября 2004, 13:39:11 »
NeoNox
Цитировать
твой стиль написания кода называется "оптимистическим программированием". чуть что где сломается - дебажить будешь очень долго.

какие ваши предложения по улучшению моего стиля программирования? Для примера вот типичный мой код (сорри если очень большой):
#!/usr/bin/perl -w
use strict;
use 
CGI qw(:standard);
use 
CGI \':cgi-lib\';
use SQLayer;
use HTML::Template;
use lib \'../../\';
use Dms;
my $D = SQLayer -> new(database =>\'DBI:Pg:dbname=comma;host=localhost;port=5432\',user=>\'user\', password=>\'secret\');
$D -> proc("SET CLIENT_ENCODING TO \'WIN\'");
my $action=param(\'action\');
if ($action eq "")
{
  my $security_otdel_id=param(\'security_otdel_id\');
  my $Data=$D->row_hash("SELECT list_post_id, name FROM list_post WHERE security_otdel_id=\'$security_otdel_id\'");
  my $T = HTML::Template -> new(global_vars => 1, filename => "view_prov.tmpl");
  print "Content-type: text/html\\n\\n";
  $T -> param(abc=>$Data, security_otdel_id=>$security_otdel_id);
  print $T -> output();
}
elsif ($action eq "add")
{
  my %params = Vars;
  delete ($params{\'action\'});
  my $table="list_post";
  Dms->insert(params=>\\%params, table=>\\$table, D=>$D);
  print redirect(-uri=>"prov.cgi?security_otdel_id=".$params{\'security_otdel_id\'}."");
}
elsif ($action eq "update")
{
  my $security_otdel_id=param(\'security_otdel_id\');
  my @list_id=$D->column("SELECT list_post_id FROM list_post WHERE security_otdel_id=\'$security_otdel_id\'");
  my $table="list_post";
  for my $el(@list_id)
  {
  my %params;
  $params{\'name\'}=param("name_$el");
  my $where="list_post_id=$el";
  Dms->update(params=>\\%params, table=>\\$table, D=>$D, where=>\\$where);
  }
print redirect(-uri=>"prov.cgi?security_otdel_id=$security_otdel_id");
}
elsif ($action eq "delete")
{
 my $security_otdel_id=param(\'security_otdel_id\');
 my $list_post_id=param(\'list_post_id\');
 $D->row("DELETE FROM list_post WHERE list_post_id=\'$list_post_id\'");
 print redirect(-uri=>"prov.cgi?security_otdel_id=$security_otdel_id");
}
And no religion too...

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Загрузка файла...
« Ответ #11 : 14 Октября 2004, 13:42:28 »
NeoNox

Вот кстати... о "оптимистическом программировании"... если имеется в виду upload файлов...

В чем принципиальное отличие между:

...
my $upload param(\'FL\');
my $file = \'some_file\';
open (FILE, ">$file");
flock (FILE, 2);
binmode FILE;
print FILE while (<FILE>);
close FILE;
...


и

...
my $upload param(\'FL\');
my $file = \'some_file\';
open (FILE, ">$file");
flock (FILE, 2);
binmode FILE;
while (read($upload, my $block, 1024)) {
 print FILE $block;
};
close FILE;
...


???

Может где ошибся в коде... не проверял... тут вопрос о принципе... а то что-то никто не может объяснить разницу... точнее нет, в чем разница понятно, но что из этого можно назвать "оптимистичным кодом"???
« Последнее редактирование: 14 Октября 2004, 13:51:57 от Phoinix »

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Загрузка файла...
« Ответ #12 : 14 Октября 2004, 13:47:29 »
commander

О у меня -w в голове сразу начал "дебажжить"... даже не проверяю...

if ($action eq "")

Будет предупреждение... надо if (!$action)

вообще по уму я получаю переданные данные так:

my $action=param(\'action\') ? param(\'action\') : \'none\';

отпадает проблема инициализации...

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Загрузка файла...
« Ответ #13 : 14 Октября 2004, 13:50:44 »
commander я сделал вывод только исходя из того что ты не орабатываешь исключительные операции.  получая данные из вебформы(а там может быть все что угодно) ты оптимистично веришь что там то что тебе нужно. вот по этому такой стиль и называется "оптимистическим программированием". используя open и отработав ошибку открытия файла тебе бы не пришлось создавать эту тему.
Цитировать
commander:
Для примера вот типичный мой код (сорри если очень большой):

большой. и тоже пример оптимистичного взгляда на получение параметра \'action\'. я заметил кучу elsif но без else. Как твоя программа поведет если я вызову скрипт /yourcode.cgi?action=whatthefuck ?
The documentations is your friend

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Загрузка файла...
« Ответ #14 : 14 Октября 2004, 13:51:53 »
Phoinix
тут безоговорочно согласен... только if ($action eq "") это у меня скорее дурная привычка.. сложившаяся уже года 2 назад... :)
And no religion too...

 

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