Forum Webscript.Ru
Программирование => Perl => Тема начата: xmolex от 21 Ноября 2006, 18:23:29
-
Приветсвую. Возможно ли как-то обойти ограничение? LWP::Simple скрипт нормально подгружает, а вот LWP/Simple.pm сам пытается подгрузить IO/Socket.pm и не может. Почему, ведь в @INC прописаны пути D:/usr/lib и D:/usr/site/lib? Может я что-то не понятно спросил? Вы тогда переспросите. Уж очень интересно. Может в @INC нужно полный путь до модуля прописать?
Вот лог сервера:
[Tue Nov 21 18:04:57 2006] [error] [client 127.0.0.1] Can\'t locate IO/Socket.pm in @INC (@INC contains: D:/usr/lib/LWP/Simple.pm D:/usr/site/lib/LWP/Simple.pm) at D:/usr/site/lib/LWP/Simple.pm line 160, line 8.
-
А при чем тут "Параметр T"?
Нужен полный путь к папке с модулями, и глядя на ошибку, я вижу что у вас что-то не то лежит в @INС
-
Параметр Т - это #!/usr/bin/perl -wT
Я читал что он не включает домашнюю директорию в окружение. И вот попробовал воспользоваться LWP::Simple, вернее get и получил такое.
-
perldoc perlsec
While in this mode, Perl takes special precautions called
taint checks to prevent both obvious and subtle traps.
Some of these checks are reasonably simple, such as veriґ
fying that path directories aren\'t writable by others;
careful programmers have always used checks like these.
Other checks, however, are best supported by the language
itself, and it is these checks especially that contribute
to making a set-id Perl program more secure than the corґ
responding C program.
Что такое "домашняя директория"? Без ключа -Т работает нормально?
-
Спасибо NeoNox. Все самой решилось. Это сервер приглючило после моих опытов. Перезагрузил apache и все встало на свое место.
Хотелось бы еще спросить. Делаю проверку на наличие этого модуля. Сделал нижеприведенным образом. Криво или можно как-то проще? Просто, если человек не имеет этого модуля хочется чтобы программа нормально дальше работала, а не выводила 500 ошибку. Только хочется, чтобы без модулей, не входящих в стандартную поставку перла, было.
sub http_get
{
my ($text,$road) = @_; #text - наш текст, который мы проверяем на link, road - путь к корневой директории сайта
my ($temp, $temp_inc, $flag);
my $bee_split = chr(128);
if ($text =~ /(<\\!--\\*\\s*http\\s*-->.+?<\\!--\\*\\s*\\/http\\s*-->)/i)
{
foreach $temp (@INC)
{
$temp_inc = $temp;
if ($temp_inc !~ /\\/$/) {$temp_inc .= "/";}
$temp_inc .= "LWP/Simple.pm";
if (-f $temp_inc) {$flag = 1;}
}
if ($flag != 1)
{
my $lng_file = ${\\LNG_FILE}; # LNG_FILE - название файла с русским текстом
if ($lng_file =~ /^\\//) {$lng_file =~ s!^/!!;}
my $road_lng = $road; $road_lng .= $lng_file;
open (LNG, "$road_lng") || warn "don\'t open lng file: $!";
foreach () {chomp(); $temp .= $_;}
close(LNG);
@lng = split(/$bee_split/, $temp);
&log($lng[3], $road);
$text =~ s/(<\\!--\\*\\s*http\\s*-->)(.+?)(<\\!--\\*\\s*\\/http\\s*-->)//i;
}
else
{
use LWP::Simple qw(get);
while ($text =~ /(<\\!--\\*\\s*http\\s*-->)(.+?)(<\\!--\\*\\s*\\/http\\s*-->)/ig)
{
$flag = get("$2");
$text =~ s/<\\!--\\*\\s*http\\s*-->.+?<\\!--\\*\\s*\\/http\\s*-->/$flag/i;
}
$text =~ s/\\n/$bee_split/g;
}
}
return($text);
}
-
Можно,
http://forums.webscript.ru/showthread.php?s=&threadid=23168&highlight=evaluse
-
Премного благодарен.