Автор Тема: Параметр T и LWP::Simple  (Прочитано 3401 раз)

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

Оффлайн xmolex

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 75
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Параметр T и LWP::Simple
« : 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.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Параметр T и LWP::Simple
« Ответ #1 : 21 Ноября 2006, 18:44:27 »
А при чем тут "Параметр T"?
Нужен полный путь к папке с модулями, и глядя на ошибку, я вижу что у вас что-то не то лежит в @INС
The documentations is your friend

Оффлайн xmolex

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 75
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Параметр T и LWP::Simple
« Ответ #2 : 21 Ноября 2006, 19:00:38 »
Параметр Т - это #!/usr/bin/perl -wT
Я читал что он не включает домашнюю директорию в окружение. И вот попробовал воспользоваться LWP::Simple, вернее get и получил такое.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Параметр T и LWP::Simple
« Ответ #3 : 21 Ноября 2006, 19:11:27 »
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.

Что такое "домашняя директория"? Без ключа -Т работает нормально?
The documentations is your friend

Оффлайн xmolex

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 75
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Параметр T и LWP::Simple
« Ответ #4 : 22 Ноября 2006, 12:37:50 »
Спасибо 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);
}

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
The documentations is your friend

Оффлайн xmolex

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 75
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Параметр T и LWP::Simple
« Ответ #6 : 23 Ноября 2006, 10:33:28 »
Премного благодарен.

 

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