Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Apache::Admin::Config, не работает 
:(
    Опции темы
gcc
Дата 8.9.2008, 05:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



нашел мод для работы с файлами конфигов просмотра, редактирование и добавление директив

http://search.cpan.org/~rsoliv/Apache-Admi...ig.pm#set_value

но вот это ткод не выполняеться:

Код

#!/usr/bin/perl
  use Apache::Admin::Config;
   # Parse an apache configuration file
  my $conf = new Apache::Admin::Config "/usr/local/etc/apache22.conf";
  my $vhost;
  foreach my $vh (@{$conf->section('VirtualHost')})
  {
      if($vh->directive('ServerName')->value eq 'xxx.com')
      {
          $vhost = $vh;
          last;
      }
  }
    print $vhost;


Код

Not an ARRAY reference at ./ac.pl line 6.


как исправить?


вот это работает:

     
Код


     use Apache::Admin::Config;

    # Parse an apache configuration file

  my $conf = new Apache::Admin::Config "/usr/local/etc/apache22.conf";


  # adding a new virtual-host:
  my $vhost = $conf->add_section(VirtualHost=>'127.0.0.1');
  $vhost->add_directive(ServerAdmin=>'[email protected]');
  $vhost->add_directive(DocumentRoot=>'/usr/share/www');
  $vhost->add_directive(ServerName=>'www.localhost.localdomain');
  $vhost->add_directive(ErrorLog=>'/var/log/apache/www-error.log');
  my $location = $vhost->add_section(Location=>'/admin');
  $location->add_directive(AuthType=>'basic');
  $location->add_directive(Require=>'group admin');
  $conf->save;




Это сообщение отредактировал(а) gcc - 8.9.2008, 05:57
PM WWW ICQ Skype GTalk Jabber   Вверх
sir_nuf_nuf
Дата 8.9.2008, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



Цитата(gcc @  8.9.2008,  05:31 Найти цитируемый пост)


Not an ARRAY reference at ./ac.pl line 6.

как исправить?


вот так:

Код

foreach my $vh ($conf->section('VirtualHost')) {
   ....
}


У вас метод section возвращает уже готовый список, а не ARRAYREF.




--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
gcc
Дата 9.9.2008, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Код

У вас метод section возвращает уже готовый список


не хочет он возвращать никакой список

Код

:80

работает, но он не возвращает список директив:

Код

    # print the directive list

    foreach($conf->directive())
    {
        print $_->name, "\n";
    }


если я хочу значение одной директивы заменить, в этом модуле не реализуемо это?


в примере написано, что он должен возваратить список, так как я писал в первом посте, но не работает, почему-то (зачем тогда так было написано в документации модуля?)

тоесть мне нужно возвратить директивы, но это не работает...

модуль не правильно сделан, или я не так делаю...  smile исходними модуля наверное надо проанализировать... то что автор модуля имел ввиду (но не работает)

 или самому парсер нормальный сделать...  smile 


Это сообщение отредактировал(а) gcc - 9.9.2008, 01:04
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 9.9.2008, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



наверное я плохо знаю мощность языка программирования  perl

можите подсказать как заменить некоторые значение директив и как список всех директив возвратить?


(если бы сделать на php, то там наверное надо просто было перезаписать весь файл с новой директивой...)

Это сообщение отредактировал(а) gcc - 9.9.2008, 03:37
PM WWW ICQ Skype GTalk Jabber   Вверх
sir_nuf_nuf
Дата 9.9.2008, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



gcc, при чем тут perl ? 
вам нужно очень внимательно изучить документацию по модулю, а не только синопсис просмотреть. 
если документация прочитана, что то сделано по документации и все равно не работает - совет:
посмотрите и исходники и ТЕСТЫ к модулю, документация могла устареть.

P.S. set_value позволяет менять значение директивы


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
gcc
Дата 9.9.2008, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



вот есть set_write_directive

Код

  $conf->set_write_directive($code);


а что такое $code это ссылка на анонимную подпрограмму или на метод?

не могу понять как передать значения сюда:

Код

  $conf->set_write_directive(sub
  {
      my($self, $name, $value) = @_;
      return $self->indent . "$name $value\n";
  }


никогда такого не видел, в книжке нету... smile 


Это сообщение отредактировал(а) gcc - 9.9.2008, 15:34
PM WWW ICQ Skype GTalk Jabber   Вверх
sir_nuf_nuf
Дата 9.9.2008, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



почитали доку на CPAN  ?
set_write_directive позволяет вам подменить функцию вывода директив. 
Ну если вам не нравится как работает стандартная.

set_value попробуйте. Она позволяет изменить занчение существующей директивы

Это сообщение отредактировал(а) sir_nuf_nuf - 9.9.2008, 15:51


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
gcc
Дата 9.9.2008, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Цитата(sir_nuf_nuf @ 9.9.2008,  15:50)
почитали доку на CPAN  ?

конечно прочитал, там идет сложная стратура методов и объектов

а как выбрать параметр, тоесть директиву, чтобы изменить ее значение

Код

    $obj->set_value($newvalue)


значение чего мы будет менять?
не понял, сори  smile 

Это сообщение отредактировал(а) gcc - 9.9.2008, 15:59
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 9.9.2008, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Сори, сделал!!

я не посомтрел на то как модуль пострен из самого начала...




Это сообщение отредактировал(а) gcc - 11.9.2008, 07:13
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 11.9.2008, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Код
ErrorDocument 403 http://
ErrorDocument 404 http://

как сделать если есть такое?
Код
             print $vh->directive('ErrorDocument 403');

так не работает, это из-за регулярного выражение? не могу найти его... с помощю вот этого
  
Код
$conf->set_write_directive(sub{});

можно как-то переопределить?


Это сообщение отредактировал(а) gcc - 11.9.2008, 21:35
PM WWW ICQ Skype GTalk Jabber   Вверх
sir_nuf_nuf
Дата 12.9.2008, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



gcc, перепишите вопрос.. ну мы же не экстрасенсы =) ничего не ясно.
скажите словами(без цитат) что вы хотите ?


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
gcc
Дата 12.9.2008, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



вывести это значние от этого параметра "ErrorDocument 403" (с пробелом)

щас попробу еще раз пересмотреть модуль, но там проверка идеи только на value... другую я не нашел...



Это сообщение отредактировал(а) gcc - 12.9.2008, 00:21
PM WWW ICQ Skype GTalk Jabber   Вверх
sir_nuf_nuf
Дата 12.9.2008, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



куда вывести ? просто напечатать ?
давайте по шагам.
$vh; # какой-то объект (узел конфигурации надо полагать)
@drtvs = $vh->directive('aaa'); # возвращает МАССИВ объектов представляющих собой директивы
my $drtv = pop @drtvs #  одна из директив. Объект
$drtv->value() #значение директивы. его вам надо вывести




--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
gcc
Дата 12.9.2008, 03:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Цитата(sir_nuf_nuf @ 12.9.2008,  00:26)
@drtvs = $vh->directive('aaa'); # возвращает 

да работает, все...

но не возвращает вот это
Код

             print $vh->directive('ErrorDocument 403');


тоесть с пробелом параметр не возвращает, не удаляет и не изменяет
пишет ошибку:
Код

Can't call method "delete" on an undefined value at ./a.pl line 41.


это где регулярное выражение запрещает пробел ставить?

если так по возвращает и работает!
Код

             print $vh->directive('ErrorDocument');


Это сообщение отредактировал(а) gcc - 12.9.2008, 03:51
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 13.9.2008, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Цитата(sir_nuf_nuf @ 12.9.2008,  00:26)
my $drtv = pop @drtvs #  одна из директив. Объект
$drtv->value() #значение директивы. его вам надо вывести

это понятно, оно выведит что-то все равно по любому (массив)

я имелл виду как использовать это с пробелом, а как теперь перезаписать нормально значение парамтера ErrorDocument 403 ?

я нашел вариант удалить все ErrorDocument и записать их заново, но а есть смысл этого модуля вообще, не легче файл (кажого виртуального хоста)  удалить и перезаписать его с новой директивой?  

или есть смысл использовать этот модуль?  smile 

Код

print $drtv->value();

Код

Can't call method "value" on an undefined 


Код

 print  @drtvs[0]; # работает


Это сообщение отредактировал(а) gcc - 13.9.2008, 10:13
PM WWW ICQ Skype GTalk Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1018 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.