16 июня 2009 г.

Программа управления веб-сервером Apache. Часть 2

Я решил немного доработать программу для управления веб-сервером Apache, разработанную нами в первой части.



Что именно было сделано:

  • В зависимости от статуса активности веб-сервера меняются иконки в трее (красный квадрат, если сервер остановлен и зелёная галочка, если запущен);

  • В контекстное меню добавлены иконки для всех пунктов;

  • Также от статуса сервера становятся неактивными некоторые пункты меню. Если сервер запущен, то неактивен пункт "Запустить Apache', а если остановлен, то, наоборот, только он является активным;

  • Добавлены пункты "Выход" и "О программе".



Хочу обратить ваше внимание, что для проверки запущенности сервера программа проверяет наличие файла /var/run/apache2.pid. В вашей ОС или дистрибьютиве этот файл может находиться в другом месте.

Используемые иконки я загрузил на


Полный код программы:
<?php
 
$tray = new GtkStatusIcon;
$tray->connect('popup-menu', 'on_popup_menu');
if (file_exists('/var/run/apache2.pid'))
{
$tray->set_tooltip('Веб-сервер запущен');
$tray->set_from_file('./start.png');
}
else
{
$tray->set_tooltip('Веб-сервер остановлен');
$tray->set_from_file('./stop.png');
}
Gtk::main();
 
function on_popup_menu()
{
global $item, $tray;
 
$menu = new GtkMenu;
 
$item['start'] = new GtkImageMenuItem('Запустить Apache');
$item['start']->set_image(GtkImage::new_from_file('./start_small.png'));
$item['start']->connect_simple('activate', 'apache', 'start');
$item['restart'] = new GtkImageMenuItem('Перезапустить Apache');
$item['restart']->set_image(GtkImage::new_from_file('./restart_small.png'));
$item['restart']->connect_simple('activate', 'apache', 'restart');
$item['stop'] = new GtkImageMenuItem('Остановить Apache');
$item['stop']->set_image(GtkImage::new_from_file('./stop_small.png'));
$item['stop']->connect_simple('activate', 'apache', 'stop');
$item['separator_one'] = new GtkSeparatorMenuItem;
$item['about'] = new GtkImageMenuItem(Gtk::STOCK_ABOUT);
$item['about']->connect_simple('activate', 'about');
$item['separator_two'] = new GtkSeparatorMenuItem;
$item['close'] = new GtkMenuItem('Выйти');
$item['close']->connect_simple('activate', array('Gtk', 'main_quit'));
 
foreach ($item as $value)
$menu->append($value);
 
if (file_exists('/var/run/apache2.pid'))
{
$item['start']->set_sensitive(FALSE);
}
else
{
$item['restart']->set_sensitive(FALSE);
$item['stop']->set_sensitive(FALSE);
}
 
$menu->show_all();
$menu->popup();
}
 
function apache($comand)
{
global $item, $tray;
 
if ($comand == 'start')
{
$tray->set_tooltip('Веб-сервер запущен');
$tray->set_from_file('./start.png');
$item['start']->set_sensitive(FALSE);
$item['restart']->set_sensitive(TRUE);
$item['stop']->set_sensitive(TRUE);
}
elseif ($comand == 'stop')
{
$tray->set_tooltip('Веб-сервер остановлен');
$tray->set_from_file('./stop.png');
$item['start']->set_sensitive(TRUE);
$item['restart']->set_sensitive(FALSE);
$item['stop']->set_sensitive(FALSE);
}
 
system('gksu /etc/init.d/apache2 '.$comand);
}
 
function about()
{
$about = new GtkAboutDialog;
$about->set_program_name('Управление веб-сервером Apache');
$about->set_copyright('Copyright (C) 2009');
$about->set_authors(array('Вавилов Егор <shecspi@gmail.com>'));
$about->set_website('http://shecspi.blogspot.com');
$about->run();
$about->destroy();
}
 
?>

2 комментария:

mihdan комментирует...

Ссылки на иконки у вас битые

Shecspi комментирует...

Да, их уже удалили. Но это не принципиально. Можно использовать любые. Я взял из набора gnome-look.