Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Запись в файл


Автор: DigitSphinx 24.6.2010, 02:03
Начал на этой неделе по техоньку изучать Perl, поэтому сильно не бейте )) лучше пинать в нужном направлении ))
написал простой код который генерирует страницу HTML и залил этот CGI скрипт на IIS, открываю в браузере 127.0.0.1 отображается именно то что я хотел видеть ! но в конце скрипта я записываю в файл какую-то инфу и проблема в том что запуская этот скрипт из командной строки, файл создается и пишется нормально, но запуская скрипт с браузера файл не пишется ! 

Код

....
print "Your IP address is : ";
print $ENV{REMOTE_ADDR} ;
....
open (MYFILE, '>>SITELOG.txt') or die "ERROR OPENING FILE SITELOG.txt" ;
print MYFILE "$ENV{REMOTE_ADDR}\n";
close (MYFILE);

Автор: krypt3r 24.6.2010, 06:43
Ошибку гляньте. Скорее всего, проблемы с правами доступа
Код

open (MYFILE, '>>SITELOG.txt') or die "ERROR: $!" ;

Автор: DigitSphinx 24.6.2010, 08:02
Цитата(krypt3r @  24.6.2010,  06:43 Найти цитируемый пост)
Ошибку гляньте. Скорее всего, проблемы с правами доступа

я предположил что проблема с правами, но die и warn не выводят сообщения Оо
Код

open (MYFILE, '>>SITELOG.txt') or print "ERROR: $!" ;
print MYFILE "$Hou:$Min\t$ENV{REMOTE_ADDR}\n";
close (MYFILE);close (MYFILE);

в результате дал 
Код

ERROR: Permission denied


по ходу из cmd у меня есть права а у пользователя с сайта их нет, но как это поправить/обойти ? как добиться того чтобы у меня оставался лог посетителей в формате "когда кто"?

Автор: dva300 24.6.2010, 08:29
Код

ERROR: Permission denied

Цитата

по ходу из cmd у меня есть права а у пользователя с сайта их нет, но как это поправить/обойти ? как добиться того чтобы у меня оставался лог посетителей в формате "когда кто"?


1) use CGI::Carp qw(fatalsToBrowser);
2) зачем обходить ? это нормальная ситуация. это не у пользователя с сайта нет прав писать в папку а у пользователя под которым запускается apache нет прав писать в папку.
только не надо ставить запуск apache от root. для начала пишите в tmp. потом создайте папку с соответствующими провами.
 
Цитата

open (MYFILE, '>>SITELOG.txt') or print "ERROR: $!" ;


вот так делать не надо. лучше уж warn 

Автор: DigitSphinx 24.6.2010, 08:42
Цитата(dva300 @  24.6.2010,  08:29 Найти цитируемый пост)
1) use CGI::Carp qw(fatalsToBrowser);

спасибо, теперь 
Код

die "ERROR: $!"
 выводит сообщение в браузер

Цитата(dva300 @  24.6.2010,  08:29 Найти цитируемый пост)
2) зачем обходить ? это нормальная ситуация. это не у пользователя с сайта нет прав писать в папку а у пользователя под которым запускается apache нет прав писать в папку.только не надо ставить запуск apache от root. для начала пишите в tmp. потом создайте папку с соответствующими провами.

для меня это немного кЭтайский язык )) тем более что я пользуюсь IIS7 встроенный в винду !

Цитата(dva300 @  24.6.2010,  08:29 Найти цитируемый пост)
вот так делать не надо. лучше уж warn 

print выводит хотябы это сообщение
die вырубает прогу и выводит сообщение
warn вообще ничего не вывел

Код

#!C:\Perl\bin\perl
use CGI::Carp qw(fatalsToBrowser);
print "HTTP/1.0 200 OK\n\n";
(undef, $Min, $Hou, @ther) = localtime(time);
$ti = sprintf "<h2><b><center>Current time is  %2d:%2d</center></b></h2>", $Hou,$Min;
open (MYFILE, '>>SITELOG.txt') or die "ERROR: $!" ;
print MYFILE "$Hou:$Min\t$ENV{REMOTE_ADDR}\n";
close (MYFILE);


Код

Status: 500 Content-type: text/html 
Software error:
ERROR: Permission denied at C:\inetpub\wwwroot\T.cgi line 6.

For help, please send mail to this site's webmaster, giving this error message and the time and date of the error.


все еще вопрос актуален, как мне записать (к себе на сервер)  в файл какую-то инфу ?

Автор: dva300 24.6.2010, 09:00
Цитата

warn вообще ничего не вывел


warn выводит сообщение в STDERR
так как ошибка есть влияющая на работу программы т.е. без файла там делать нечего то естественно лучше die 

Цитата

Код

Status: 500 Content-type: text/html 
Software error:
ERROR: Permission denied at C:\inetpub\wwwroot\T.cgi line 6.

For help, please send mail to this site's webmaster, giving this error message and the time and date of the error.


все еще вопрос актуален, как мне записать (к себе на сервер)  в файл какую-то инфу ?


ну IIS он же тоже на сервере запускается так что там тоже есть права доступа.
создай новую папку, посмотри права на нее. для начала поставь доступ для всех. потом смотри под каким пользователем пускается IIS и добавь его на запись в эту папку

Автор: DigitSphinx 24.6.2010, 09:14
создал вложенную папку C:\inetpub\wwwroot\LOGS доступ открыл на всех и все заработало! спасибо ))
теперь одна проблема, читаю перл от нечего делать на работе, теперь палево ... в сетке висит моя папка LOGS если начальство спалит мне влетит ))

dva300, еще раз спасибо !

Автор: dva300 24.6.2010, 09:20
Цитата(DigitSphinx @ 24.6.2010,  09:14)
создал вложенную папку C:\inetpub\wwwroot\LOGS доступ открыл на всех и все заработало! спасибо ))
теперь одна проблема, читаю перл от нечего делать на работе, теперь палево ... в сетке висит моя папка LOGS если начальство спалит мне влетит ))

dva300, еще раз спасибо !

хм.... так надо было открыть ee для группы локальных пользователей IIS а не расшарить ее на весь домен  smile 
или wwwroot расшарен ? тогда в другом месте создай.

ну или скажи что не ты  smile  smile  smile 

Автор: DigitSphinx 24.6.2010, 10:51
Цитата(dva300 @  24.6.2010,  09:20 Найти цитируемый пост)
так надо было открыть ee для группы локальных пользователей IIS

фиг знает как это сделать ))
просто правой кнопкой по LOGS свойства->доступ->общий доступ -> Everyone = соавтор.

Цитата(dva300 @  24.6.2010,  09:20 Найти цитируемый пост)
или wwwroot расшарен

нет только его вложенная папка LOGS

Цитата(dva300 @  24.6.2010,  09:20 Найти цитируемый пост)
ну или скажи что не ты       

лучший вариант  smile  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)