Forum Webscript.Ru

Программирование => Perl => Тема начата: Axelman от 21 Июля 2003, 20:41:57

Название: Срочно, help, не работает скрипт!!!
Отправлено: Axelman от 21 Июля 2003, 20:41:57
Здравствуйте!

Вот написал скрипт на Perl, который записывает отправленные данные в файл с именем пользователя, посылающие эти данные через форму.

Скрипт datasend.cgi, вот его часть:

Форма для отправки данных:
sub send_html {
    print <<"[EOF]";

From: $query{\'name\'}
To: $query{\'toname\'}











[EOF]
}

Процедура записи полученных данных в файл:
sub send {
&findpassword;
&date;
$id = "$date$time$query{\'toname\'}";
            if ($query{\'data\'}) {
            open (datafile, ">>$data_dir/$query{\'toname\'}");
       flock(datafile,2) if ($flocking == 1);
            print datafile "$id|$query{\'name\'}|$date $time|$query{\'data\'}n";
       close datafile;
   } else {
        &send_html;
        exit;
        }
#
}
########################################
$data_dir - предварительно заданная переменная

Проблема: файл не создается и полученные данные не записываются в него.
Получается только, если вместо $query{\'toname\'} в имени файла написать уже определенное значение, например
open (datafile, ">>$data_dir/data.txt"); Но мне нужно, чтобы файл назывался именем пользователя, кому отправлены данные.

Подскажите, пожалуйста, срочно, что делать, чтобы все работало!
Название: Срочно, help, не работает скрипт!!!
Отправлено: Wyclef от 21 Июля 2003, 21:25:26
open (datafile, ">$data_dir/$query{\'toname\'}");
Название: Срочно, help, не работает скрипт!!!
Отправлено: Axelman от 22 Июля 2003, 03:15:37
Wyclef, и что!? ">>" - открывает файл для записи, а данные записываются в конец, а  ">" - открывает файл для записи,но файл полностью очищается. Кто-нибудь может реально помочь? Очень нужно! Всё написано вроде правильно, не могу просто понять в чем дело, всё из-за $query{\'toname\'}. Может можно сделать по-другому или что-то ещё?
Название: Срочно, help, не работает скрипт!!!
Отправлено: Wyclef от 22 Июля 2003, 06:48:55
Цитировать
Axelman:
">>" - открывает файл для записи, а данные записываются в конец, а ">" - открывает файл для записи,но файл полностью очищается.


">>" - открывается файл для дозаписи (файл ДОЛЖЕН заранее существовать), а при ">" - создается файл если его нет (а если есть перепишет).

[off]Проверь у тебя $query{toname} имеет значение во время записи...[/off]
Название: Срочно, help, не работает скрипт!!!
Отправлено: Alone от 22 Июля 2003, 10:51:36
Wyclef
">>" - открывается файл для дозаписи (файл ДОЛЖЕН заранее существовать),

помоему вы ошибаетесь файл создается если его нет...

Axelman
проверь содержимое $query{\'toname\'}
если там все ок то пиши так
open (datafile, ">>$data_dir/$query{\'toname\'}") or print "$!";
выдаст ошибку (если она есть конечно)
Название: Срочно, help, не работает скрипт!!!
Отправлено: Wyclef от 22 Июля 2003, 11:35:21
Цитировать
Wyclef:
файл ДОЛЖЕН заранее существовать

Сорри!!! :) Беру свои слова обратно...
Название: Срочно, help, не работает скрипт!!!
Отправлено: ThE0ReTiC от 22 Июля 2003, 11:36:48
Wyclef
http://www.perldoc.com/perl5.8.0/pod/func/open.html

If MODE is \'>\', the file is truncated and opened for output, being created if necessary. If MODE is \'>>\', the file is opened for appending, again being created if necessary.
Название: Срочно, help, не работает скрипт!!!
Отправлено: n0name от 22 Июля 2003, 11:38:55
Могу посоветовать:
1) проверить permissions;
 2) if ($query{\'data\'}) { print $query{\'data\'} ...
 3) $file_name=$query{\'data\'};open(datafile, ">>$data_dir/$file_name");
Название: Срочно, help, не работает скрипт!!!
Отправлено: Phoinix от 22 Июля 2003, 12:11:30
А я обычно ставлю жесткое разрешение на всякий случай...

open (datafile, ">>$data_dir/$query{\'toname\'}\\.txt");

и если трабла с именем, то появляется файл ".txt", а вообще глянь лог ошибок, там обычно все написано...
Название: Срочно, help, не работает скрипт!!!
Отправлено: Wyclef от 22 Июля 2003, 12:28:51
[off]
Цитировать
ThE0ReTiC:
If MODE is \'>\', the file is truncated and opened for output, being created if necessary. If MODE is \'>>\', the file is opened for appending, again being created if necessary.

Зарапортовался - с кем не бывает ;)[/off]
Название: Срочно, help, не работает скрипт!!!
Отправлено: Axelman от 23 Июля 2003, 02:00:57
Alone
Содержимое $query{\'toname\'}  проверял, всё нормально.
open (datafile, ">>$data_dir/$query{\'toname\'}") or print "$!";
ничего не дает, то же самое, белый экран и скрипт после этой строчки не выполняется, как раньше.

n0name
1) permissions в порядке, это видно даже потому, что если я назову файл определенно, то всё будет работать, а так не идет дальше;
2) и 3) не помогает, уже раньше пробовал.

Phoinix
open (datafile, ">>$data_dir/$query{\'toname\'}\\.txt");
результат прежний

Короче, получается только, если вместо $query{\'toname\'} в имени файла написать уже определенное значение, например
open (datafile, ">>$data_dir/data.txt"); и больше никак!
Может как-нибудь переделать? Видимо хостинг такой, потому что у меня всё работает!
Название: Срочно, help, не работает скрипт!!!
Отправлено: Xander от 23 Июля 2003, 02:18:39
а если сделать
print ">>$data_dir/$query{\'toname\'}";
что выдает?
Название: Срочно, help, не работает скрипт!!!
Отправлено: WildWizard от 23 Июля 2003, 11:33:53
Обычно в качестве отладки берется работающий вариант, потом постепенно дописывается все остальное...Пока не прекратит работать, когда это произошло, смотришь на каком шаге...потом читаешь докуменитацию...
В твоем случает.

Проверь такой код:

$file_name = ">>$data_dir/$query{\'toname\'}";
printf ("File name is $file_name
");
open (DATAFILE, $file_name);
print DATAFILE, "Hello World\\n";
close DATAFILE;

Если не работает, то ставишь  
$file_name="./test.txt";
и пробуешь снова, если опять не работаешь создаешь файл ручками, и смотришь открылся он или нет...

Если нет, разводишь ручками и идешь читать доки по хостингу...

Хотя врядли они что-то с этим могли сделать....

Вот...Я надеюсь это были не слишком элементарные вещи.. (смутился) :)
Название: Срочно, help, не работает скрипт!!!
Отправлено: WildWizard от 23 Июля 2003, 11:37:58
Эй-зй! кстати я забыл совсем, проверяй что вернула функция open (), потому как если файл открыт (создат), то она (функция) вернет тебе 0, если нет то undef...Поэтому посмотри....А то вдруг не открывается он просто....

Кстати еще бывает полезно указать полный физический путь...вот.
Название: Срочно, help, не работает скрипт!!!
Отправлено: Alone от 23 Июля 2003, 17:01:10
Axelman
приведи пример как ты делаеш.
print "Content-type: text/html \\n\\n"; вначале написал ?

что означает фраза "... то же самое, белый экран и скрипт после этой строчки не выполняется, как раньше..."
не вывыполняется как раньше?
или как и раньше не выполняется ?
Название: Срочно, help, не работает скрипт!!!
Отправлено: Phoinix от 23 Июля 2003, 17:16:40
Axelman
На всякий случай попробуй сделать так:

$filename = $data_dir."/".$query{\'toname\'};
open (datafile, ">>$filename");

я когда-то сталкивался с подобным... и помнится решил я это только так...