Управляем объектами в Active Directory
Часть 2
Иван Коробко
Value=VarType(VarName)
Листинг 1. Шаблон использования функции VarType()
'Создание ADODB–соединения
Set objConn = CreateObject("ADODB.Connection")
Set objCom = CreateObject("ADODB.Command")
objConn.CommandTimeout = 120
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
Set objCom.ActiveConnection=objConn
'Определение имени домена
Set oRoot = GetObject("LDAP://rootDSE")
LdapDomain = "LDAP://" & oRoot.Get("DefaultNamingContext")
'составление и обработка SQL–запроса
Query = "SELECT ПЕРЕМЕННАЯ FROM '" & LdapDomain & "' WHERE objectclass='group' and name='Test'"
Set st = objConn.Execute(Query)
'Вывод результата типа данных переменной
wscript.echo VarType(st.Fields("ПЕРЕМЕННАЯ").Value)
Листинг 2а. Чтение значений типа Long с помощью функции GetObject()
Set obj = GetObject("LDAP://CN=Test,OU=Group,DC=msk,DC=ru")
Wscript.Echo obj.sAMAccountType
Листинг 2б. Чтение значения строковых параметров с помощью ADODB–соединения
'Создание ADODB–соединения
Set objConn = CreateObject("ADODB.Connection")
Set objCom = CreateObject("ADODB.Command")
objConn.CommandTimeout = 120
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
Set objCom.ActiveConnection=objConn
'Составление и обработка SQL–запроса
Query = "SELECT sAMAccountType FROM 'LDAP://CN=Test,OU=Group,DC=msk,DC=ru'"
Set st = objConn.Execute(Query)
'Вывод результата
wscript.echo st.Fields("sAMAccountType").Value
YYYYMMDDHHMMSS.MS Z
Листинг 3а. Чтение параметров в формате UTC–Time
'Создание ADODB–соединения
Set objConn = CreateObject("ADODB.Connection")
Set objCom = CreateObject("ADODB.Command")
objConn.CommandTimeout = 120
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
Set objCom.ActiveConnection=objConn
'Составление и обработка SQL–запроса
Query = "SELECT createTimeStamp FROM 'LDAP://CN=Ivan\, Petrov,CN=Users,DC=msk,DC=ru'"
Set st = objConn.Execute(Query)
'Вывод результата
wscript.echo vartype(st.Fields("createTimeStamp").Value)
wscript.echo (st.Fields("createTimeStamp").Value)
Листинг 3б. Чтение параметров в формате UTC–Time
' Только для параметров whenCreated, whenChanged
set objUser = GetObject("LDAP://CN=Ivan\,Petrov,CN=Users,DC=msk,DC=ru")
WScript.echo objUser.Get("whenCreated")
Листинг 4а. Чтение значения строковых параметров
Set obj = GetObject("LDAP://CN=Test,OU=Group,DC=msk,DC=ru")
Wscript.Echo obj.cn
Листинг 4б. Чтение значения строковых параметров с помощью ADODB–соединения
'Создание ADODB–соединения
Set objConn = CreateObject("ADODB.Connection")
Set objCom = CreateObject("ADODB.Command")
objConn.CommandTimeout = 120
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
Set objCom.ActiveConnection=objConn
'Составление и обработка SQL–запроса
Query = "SELECT cn FROM 'LDAP://CN=Test,OU=Group,DC=msk,DC=ru'"
Set st = objConn.Execute(Query)
'Вывод результата
wscript.echo st.Fields("cn").Value
Листинг 5. Получение значения типа Object
Set obj = GetObject("LDAP://CN=Ivan\,Petrov,CN=Users,DC=msk,DC=ru")
Set objUSN = obj.Get("uSNChanged")
Wscript.Echo Abs(objUSN.HighPart * 2^32 + objUSN.LowPart)
Листинг 6. Чтение параметра lastLogonTimestamp
(accountExpires, lastLogon, pwdLastSet)
Set obj = GetObject("LDAP://CN=Ivan\,Petrov,CN=Users,DC=msk,DC=ru")
Set objUSN = obj.Get("lastLogonTimestamp")
Wscript.Echo ConvertTime(objUSN)
Function ConvertTime(objDate)
Set objShell = CreateObject("Wscript.Shell")
Key="HKLM\System\CurrentControlSet\Control\TimeZoneInformation\ActiveTimeBias"
TempKey = objShell.RegRead(Key)
If (VarType(TempKey) = 3) Then
Temp = TempKey
ElseIf (VarType(TempKey)=12) Then
Temp = 0
For k = 0 To UBound(TempKey)
Temp = Temp + (TempKey(k) * 256^k)
Next
End If
lngHigh = objDate.HighPart
lngLow = objDate.LowPart
If (lngLow < 0) Then
lngHigh = lngHigh + 1
End If
If (lngHigh = 0) And (lngLow = 0 ) Then
dtmDate = #1/1/1601#
Else
dtmDate = #1/1/1601# + (((lngHigh * (2 ^ 32))+ lngLow)/6/10^8 - Temp)/1440
End If
ConvertTime=dtmDate
End Function
Листинг 7. Чтение массива строк с помощью ADODB–соединения
'Создание ADODB–соединения
Set objConn = CreateObject("ADODB.Connection")
Set objCom = CreateObject("ADODB.Command")
objConn.CommandTimeout = 120
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
Set objCom.ActiveConnection=objConn
'составление и обработка SQL–запроса
Query = "SELECT OBJECTCLASS FROM 'LDAP://CN=Test,OU=Group,DC=msk,DC=ru'"
Set st = objConn.Execute(Query)
'Вывод результата
For each el in st.Fields("OBJECTCLASS").Value
wscript.echo el
Next
Листинг 8. Рекомендуемый сценарий чтения данных из AD
'Создание ADODB–соединения
Set objConn = CreateObject("ADODB.Connection")
Set objCom = CreateObject("ADODB.Command")
objConn.CommandTimeout = 120
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
Set objCom.ActiveConnection=objConn
'Составление и обработка SQL–запроса
Query = "SELECT description, cn FROM 'LDAP://CN=Test,OU=Group,DC=msk,DC=ru'"
Set st = objConn.Execute(Query)
'Вывод результата
wscript.echo st.Fields("cn").Value
temp = ""
if VarType(st.Fields("description").Value)>8192 then
For Each description In st.Fields("description ").Value
temp = temp + description
Next
Else
temp = "Поле description пусто"
End If
Wscrit.Echo temp
-----------------------------------------------------------------------------------------------------------------
Что представляет собой система мониторинга GroundWork Monitor
Сергей Яремчук
include=C:\NRPE_NT\bin\V2_nrpe_commands.cfg
dont_blame_nrpe=1
C:\nrpe_nt\bin>nrpe_nt -i
C:\nrpe_nt\bin>net start nrpe_nt
> cscript //nologo C:\NRPE_NT\Plugins\V2\verify_wmi_status.vbs -h 127.0.0.1
> cscript //nologo check_disks_percentage_space_used.vbs -h 127.0.0.1 -inst * -w 40 -c 60
# /usr/local/groundwork/nagios/libexec/check_nrpe -H 192.168.1.5 -c show_os -a 127.0.0.1
-----------------------------------------------------------------------------------------------------------------
Настраиваем связку Apache + PHP + MySQL на базе ОС OpenBSD 4.3
Максим Гришков
# pkg_add -v mysql-server
# /usr/local/bin/mysql_install_db
# /usr/local/bin/mysqld_safe &
# /usr/local/bin/mysql_secure_installation
# mkdir -p /var/www/var/run/mysql
# ln -f /var/run/mysql/mysql.sock
/var/www/var/run/mysql/mysql.sock
mysqld=YES
if [ X"${mysqld}" == X"YES" -a -x /usr/local/bin/mysqld_safe ]; then
echo -n " mysqld"; /usr/local/bin/mysqld_safe --user=_mysql --log --open-files-limit=256 &
for i in 1 2 3 4 5 6; do
if [ -S /var/run/mysql/mysql.sock ]; then
break
else
sleep 1
echo -n "."
fi
done
#
# Создаем MySQL-сокет в chroot-окружении Apache
mkdir -p /var/www/var/run/mysql
sleep 2
ln -f /var/run/mysql/mysql.sock /var/www/var/run/mysql/mysql.sock
fi
# pkg_add -v php5-core
# ln -s /var/www/conf/modules.sample/php5.conf /var/www/conf/modules
#mkdir /var/www/tmp
#chown www:www /var/www/tmp
# pkg_add -v php5-mysql
# ln -fs /var/www/conf/php5.sample/mysql.ini /var/www/conf/php5/mysql.ini
cat extension=mysql.so > /var/www/conf/php5.sample/mysql.ini
# pkg_add -v php5-mcrypt
# ln -fs /var/www/conf/php5.sample/mcrypt.ini /var/www/conf/php5/mcrypt.ini
# pkg_add -v php5-mhash
# /usr/local/bin/mysql_install_db
httpd_flags=""
# for normal use: "" (or "-DSSL" after reading ssl(8))
-----------------------------------------------------------------------------------------------------------------
Btrfs от Oracle: наш ответ ZFS
Андрей Пешеходов
/*
* Суперблок btrfs — по сути, список всех B-деревьев пула
*/
struct btrfs_super_block {
u8 csum[BTRFS_CSUM_SIZE]; /* контрольная сумма */
u8 fsid[16]; /* UUID файловой системы */
__le64 bytenr; /* номер этого блока */
__le64 flags;
__le64 magic; /* 8 байт, "_B5RfS_M" */
__le64 generation; /* ID транзакции */
__le64 root; /* указатель на дерево корней */
__le64 chunk_root; /* указатель на дерево сегментов */
__le64 total_bytes; /* размер ФС в байтах */
__le64 bytes_used; /* использовано байт */
__le64 root_dir_objectid; /* objectid корневого каталога */
__le64 num_devices; /* количество устройств в пуле */
__le32 sectorsize; /* размер сектора */
__le32 nodesize; /* размер узла дерева */
__le32 leafsize; /* размер листа дерева */
__le32 stripesize;
__le32 sys_chunk_array_size;
u8 root_level; /* глубина основного дерева ФС */
u8 chunk_root_level; /* глубина дерева сегментов */
struct btrfs_dev_item dev_item; /* дескриптор этого устройства */
char label[BTRFS_LABEL_SIZE]; /* символьная метка ФС */
u8 sys_chunk_array[BTRFS_SYSTEM_CHUNK_ARRAY_SIZE];
};
struct btrfs_dev_item {
__le64 devid; /* ID устройства */
__le64 total_bytes; /* размер устройства */
__le64 bytes_used; /* использовано байт */
__le32 io_align; /* оптимальное выравнивание */
__le32 io_width; /* оптимальная пропускная способность */
__le32 sector_size; /* размер сектора дика */
__le64 type; /* тип устройства */
__le32 dev_group; /* информация о группе */
u8 seek_speed; /* скорость перемещения головки диска */
u8 bandwidth; /* максимальная полоса пропускания */
u8 uuid[BTRFS_UUID_SIZE]; /* UUID файловой системы, которой принадлежит диск */
};
/*
* Каждый блок дерева (листовой или внутренний) начинается с заголовка блока
*/
struct btrfs_header {
u8 csum[BTRFS_CSUM_SIZE]; /* контрольная сумма блока */
u8 fsid[BTRFS_FSID_SIZE]; /* UUID файловой системы, содержащий блок */
__le64 bytenr; /* адрес блока на диске */
__le64 flags;
u8 chunk_tree_uuid[BTRFS_UUID_SIZE]; /* UUID дерева сегментов (см. ниже) */
__le64 generation; /* ID транзакции */
__le64 owner; /* ссылка на родителя блока */
__le32 nritems; /* количество итемов в блоке */
u8 level; /* уровень блока в дереве */
};
/* Ключ */
struct btrfs_key {
u64 objectid;
u8 type;
u64 offset;
};
/* Итем */
struct btrfs_item {
struct btrfs_disk_key key; /* Ключ */
__le32 offset; /* Смещение пакета данных в листе */
__le32 size; /* Длина пакета данных */
};
struct btrfs_inode_item {
__le64 generation; /* ID транзакции создания файла */
__le64 size; /* Размер файла в байтах */
__le64 nblocks; /* Количество занимаемых блоков */
__le64 block_group; /* Предпочитаемая группа блоков */
__le32 nlink; /* Счетчик ссылок на файл */
__le32 uid; /* UID владельца */
__le32 gid; /* GID владельца */
__le32 mode; /* Маска типа и прав доступа */
__le64 rdev; /* [minor:major] для устройств */
__le16 flags; /* Флаги */
__le16 compat_flags; /* Флаги */
struct btrfs_timespec atime; /* Времена доступа, модификации, и т. д. */
struct btrfs_timespec ctime;
struct btrfs_timespec mtime;
struct btrfs_timespec otime;
};
struct btrfs_file_extent_item {
__le64 generation;
u8 type;
/*
* Дисковое пространство, используемое экстентом.
* Блоки конторольных сумм включены
*/
__le64 disk_bytenr;
__le64 disk_num_bytes;
/*
* Логиическое смещение данного экстента в файле
* (без учета блоков контрольных сумм). Это позволяет
* экстент-итему указывать в середину существующего
* экстента, разделяя его между двумя снапшотами
* (если в новом снапшоте изменились данные)
*/
__le64 offset;
/* Логическое количество блоков (без учета контрольных сумм)*/
__le64 num_bytes;
};
struct btrfs_block_group_item {
__le64 used; /* использовано блоков */
__le64 chunk_objectid; /* objectid соответствующего сегмента */
__le64 flags; /* флаги */
}
struct btrfs_extent_ref {
__le64 root; /* objectid корня субтома */
__le64 generation; /* номер поколения дерева, владеющего ссылкой */
__le64 objectid; /* objectid файла, владеющего ссылкой */
__le64 offset; /* смещение в файле */
};
struct btrfs_root_item {
struct btrfs_inode_item inode; /* inode-описатель */
__le64 root_dirid; /* obhectid основного дерева субтома */
__le64 bytenr; /* размер */
__le64 byte_limit; /* квота */
__le64 bytes_used; /* использовано байт */
__le32 flags;
__le32 refs; /* количество ссылок */
struct btrfs_disk_key drop_progress;
u8 drop_level;
u8 level;
};
make -C /lib/modules/`uname -r`/build SUBDIRS=$PWD modules
make -C /lib/modules/`uname -r`/build SUBDIRS=$PWD modules_install
make
make install
modprobe btrfs
mkfs.btrfs /dev/sda1
mount -t btrfs /dev/sda1 /mnt/test
mount -t btrfs /dev/sda1 /mnt/test -o subvol=.
btrfsctl -s new_subvol /mnt/test
btrfsctl -s new_subvol_snap /mnt/test/new_subvol
btrfsctl -r +4g /mnt/test
mkfs.btrfs /dev/sda1 /dev/sda2
mkfs.btrfs -m raid0 /dev/sda1 /dev/sda2
mkfs.btrfs -m raid1 /dev/sda1 /dev/sda2
mkfs.btrfs -m single /dev/sda1
btrfsctl -a
btrfsctl -A /dev/sda1
mount -t btrfs /dev/sda1 /mnt/test -o subvol=.
btrfs-vol -a /dev/sda3 /mnt/test
btrfs-vol -b /mnt/test
cd btrfs-progs
make convert
./btrfs-convert /dev/sda4
mount -t btrfs /dev/sda4 /mnt/test -o subvol=ext2_saved
mount -t ext3 -o loop /mnt/test/image /mnt/ext3
umount /mnt/ext3
umount /mnt/test
btrfs-convert -r /dev/sda4
-----------------------------------------------------------------------------------------------------------------
Технологический журнал «1С:Предприятие 8.1»
Андрей Луконькин
… …
-----------------------------------------------------------------------------------------------------------------
Дефекты проектирования Intel Core 2 Duo. Аналитический обзор с точки зрения безопасности
Крис Касперски
Листинг 1. Псевдокод команды BSF с «узаконенной» ошибкой
IF SRC = 0
THEN
ZF := 1;
DEST is undefined;
ELSE
ZF := 0;
temp := 0;
WHILE Bit(SRC, temp) = 0
DO
temp := temp + 1;
DEST := temp;
OD;
FI;
-----------------------------------------------------------------------------------------------------------------
Корпоративный информационный портал, который построил Джек
Антон Борисов
mysql> create database html_data charset = utf8;
mysql> grant select, insert, update, delete, create, drop on html_data.* to 'jbossuser'@'localhost';
mysql> grant select, insert, update, delete, create, drop on html_data.* to 'jbossuser'@'192.168.194.128';
mysql> grant select, insert, update, delete, create, drop on html_data.* to 'jbossuser'@'192.168.194.1' identified by 'jboss';
ab@abc:~> mysql -u jbossuser html_data
mysql> create table news (id integer not null auto_increment, `text` text, primary key (id)) charset = utf8;
PortalDSjdbc:mysql://127.0.0.1:3306/jbossportal?useServerPrepStmts=false&jdbcCompliantTruncation=falsecom.mysql.jdbc.Driverjbossdbjbossdb
[mysqld]
character_set_server=utf8
mysql> show variables like 'character%';
mysql> show variables like 'collation%';
$ $JBOSS_HOME/bin/run.sh --host 192.168.194.1
# /usr/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
/com.plumtree.portlet.portlets.GooglePortletkeyNC8jGG8c+SYzP3IuclPD+a0lFjAj87Yd
package org.jboss.portlet.hello;
import javax.portlet.GenericPortlet;
import javax.portlet.PortletException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.UnavailableException;
import java.io.IOException;
import java.io.PrintWriter;
public class HelloWorldPortlet extends GenericPortlet
{
protected void doView(RenderRequest rRequest, RenderResponse rResponse) throws PortletException,
IOException, UnavailableException
{
rResponse.setContentType("text/html");
PrintWriter writer = rResponse.getWriter();
writer.write("Hello World!");
writer.close();
}
}
1 package org.jboss.portlet.samplesql;
2 import javax.portlet.GenericPortlet;
3 import javax.portlet.PortletException;
4 import javax.portlet.RenderRequest;
5 import javax.portlet.RenderResponse;
6 import javax.portlet.UnavailableException;
7 import java.io.IOException;
8 import java.io.PrintWriter;
9 import java.sql.*;
10 import java.util.Properties;
11 public class SampleSQLPortlet extends GenericPortlet
12 {
13 Connection conn = null;
14 String url = "jdbc:mysql://localhost:3306/";
15 String userName = "jbossuser";
16 String password = "";
17 public void init()
18 {
19 }
20 protected void doView(RenderRequest rRequest, RenderResponse rResponse) throws PortletException, IOException, UnavailableException
21 {
22 rResponse.setContentType("text/html");
23 PrintWriter writer = rResponse.getWriter();
24 try
25 {
26 Class.forName ?
("com.mysql.jdbc.Driver").newInstance ( );
27 conn = DriverManager.getConnection (url, userName, password);
28 Statement s = conn.createStatement ( );
29 s.executeQuery ("SELECT * from html_data.news order by id");
30 ResultSet rs = s.getResultSet ( );
31 while (rs.next ( ))
32 {
33 int uid = rs.getInt (1);
34 String name = rs.getString(2);
35 String name3 = name.replaceAll("\n", " ");
36 writer.println("NewsID: " + uid + ", content: " + name3 + " ");
37 writer.flush();
38 }
39 rs.close ( );
40 s.close ( );
41 } catch (Exception e) { System.err.println("Cannot connect to server" + e);
42 }
43 finally
44 {
45 if (conn != null)
46 {
47 try
48 {
49 conn.close ( );
50 } catch (Exception e) { /* ignore close errors */ }
51 }
52 writer.println(" (TM) BoldText");
53 writer.close();
54 }
55 }
56 }
"SELECT * from html_data.news order by id"
ant clean; ant
#body {
background-image: url(images/portal_background.gif);
background-repeat: repeat-x;
background-color: #d5d9be;
margin: 0px;
padding: 0px;
font-family: Georgia, "Times New Roman", Times, serif;
font-size: 12px;
color: #353634;
}
-----------------------------------------------------------------------------------------------------------------
Оцениваем технологию Adobe AIR
Александр Майоров
majorsoft.ru.example.HiPeoplemainHiPeople!0.1MajoRSofTindex.htmlfalsetruetruefalsefalse600400200200400 2001280 1024icons/AIRApp_16.pngicons/AIRApp_32.pngicons/AIRApp_48.pngicons/AIRApp_128.pngMy first application
Hi, people!
adl descriptor.xml
@echo off
C:\AirSDK\bin\adl.exe descriptor.xml
pause
Empty...
4)
function readLocalFile(name)
{
name || alert('Empty file name!');
var file = new air.File("app:/" + name);
var content = '';
if (file.exists)
{
var fp = new air.FileStream();
fp.open(file, air.FileMode.READ);
if (fp.bytesAvailable > 0)
{
content = fp.readUTFBytes(fp.bytesAvailable);
}
fp.close();
return content;
}
else
{
return "File " + name + " not exists!";
}
}
var file = new air.File("app:/" + name);
var file = air.File.applicationDirectory.resolvePath(name);
var file = air.File.desktopDirectory.resolvePath(name);
function openUrlInStandartBrowser(url)
{
air.navigateToURL( new air.URLRequest(url) );
}
Open link in browser
var target = null;
function init()
{
target = document.getElementById('target');
target.addEventListener("dragover", dragOver);
target.addEventListener("drop", dropHandler);
}
Drag & Drop
function dragOver(event) { event.preventDefault(); }
function onComplete(event) { target.innerHTML = "UploadComplete!"; }
function dropHandler(event)
{
var request = new air.URLRequest("http://majorsoft.ru/air_test_upload.php");
request.method = air.URLRequestMethod.POST;
var files = event.dataTransfer.getData("application/x-vnd.adobe.air.file-list");
for (i in files)
{
files[i].addEventListener(air.Event.COMPLETE, onComplete);
files[i].upload(request, "uploadedFile");
// Вывод сообщений в консоль для контроля работы. В финальной версии эта строка не нужна
air.trace("File " + files[i].name + " is upload...");
}
}
C:\AirSDK\bin\adt -certificate -cn SelfSigned -ou Dev -o "HiPeople" -c US 2048-RSA MyCert.pfx 123
C:\AirSDK\bin\adt -package -storetype pkcs12 -keystore MyCert.pfx HiPeople.air descriptor.xml index.html js/main.js css/main.css air/AIRAliases.js LocalFile.txt icons/*.pn
-----------------------------------------------------------------------------------------------------------------
PHP-GTK – вторая попытка
Кирилл Сухов
$ cvs -d :pserver:cvsread@cvs.php.net:/repository login
$ cvs -d :pserver:cvsread@cvs.php.net:/repository co -r PHP_5_2 php-src
$ cd php-src
$ ./buildconf
$ ./configure --prefix=/opt/php5_2 —disable-cgi
$ make
$ su
$ make install
$ echo extension=php_gtk2.so >> /opt/php5_2/lib/php.ini
$ /opt/php5_2/bin/php-config --extension-dir | xargs echo 'extension_dir=' >> /opt/php5_2/lib/php.ini
$ cd ..
$ cvs -d :pserver:cvsread@cvs.php.net:/repository co php-gtk
$ cd php-gtk
$ ./buildconf --with-phpize=/opt/php5_2/bin/phpize
$ ./configure --with-php-config=/opt/php5_2/bin/php-config
$ make
$ make install
$ ln -s /opt/php5_2/bin/php /usr/bin/php-gtk
extension=php_gtk2.so
$ ln -s /opt/php5_2/bin/php /usr/bin/php-gtk
set_title('hello php-gtk2');
$wnd->set_default_size(200,300);
$pixbuf = $wnd->render_icon(
Gtk::STOCK_EXECUTE,
Gtk::ICON_SIZE_DIALOG
);
$wnd->set_icon($pixbuf);
$wnd->connect_simple('destroy', array('gtk', 'main_quit'));
$lblHello = new GtkLabel("Yes!\r\n'Hello php-gtk2!'");
$wnd->add($lblHello);
$wnd->show_all();
Gtk::main();
?>
$ php test.phpw
$wnd = new GtkWindow();
$wnd->set_title('php-gtk2'); //заголовок
$wnd->set_default_size(200,300); //размер
$pixbuf = $wnd->render_icon(
Gtk::STOCK_EXECUTE,
Gtk::ICON_SIZE_DIALOG
);
$wnd->set_icon($pixbuf);
$wnd->connect_simple('destroy', array('gtk', 'main_quit'));
$lblHello = new GtkLabel("Yes!\n'Hello php-gtk2!");
$wnd->add($lblHello);
$wnd->show_all();
Gtk::main();
$button = new GtkButton('press me');
$button->set_relief(Gtk::RELIEF_HALF);
$wnd->add($button);
$wnd->set_icon($pixbuf);
$wnd->connect_simple('destroy', array('gtk', 'main_quit'));
$box = new GtkVBox();
$box->set_spacing(4);
// Добавляем кнопку
$button = new GtkButton('press me');
$button->set_relief(Gtk::RELIEF_HALF);
// Добавляем надпись
$lbl = new GtkLabel(date('Y-m-d h:i:s'));
// Пакуем
$box->pack_start($button, false,true,10);
$box->pack_start($lbl, true, true);
// Помещаем бокс в окно
$wnd->add($box);
function foo(GtkLabel $lbl){
$lbl->set_text(date('Y-m-d h:i:s'));
}
$button->connect_simple('clicked', 'foo',$ll);
$window = new GtkWindow();
$window->set_title("GtkHBox and GtkVBox packing demonstration");
$window->set_position(Gtk::WIN_POS_CENTER);
$window->connect_simple("destroy", array("gtk", "main_quit"));
$window->set_default_size(400,400) ;
$window->show();
$window->show_all();
Gtk::main();
$vbox = new GtkVBox(false, 5);
$window->add($vbox);
$label = new GtkLabel();
$label->set_text("My daily");
$label->set_justify(Gtk::JUSTIFY_LEFT);
$vbox->pack_start($label, true, true, 5);
$hbbox = new GtkHButtonBox();
$hbbox->set_layout(Gtk::BUTTONBOX_SPREAD);
$hbbox->set_spacing(15);
$button1 = new GtkButton('Exit');
$button2 = new GtkButton('Add');
$button3 = new GtkButton('Clean');
$hbbox->add($button1)
$hbbox->add($button2);
$hbbox->add($button3);
$vbox->pack_end($hbbox);
$vpane = new GtkHPaned();
$vpane->set_border_width(5);
$vbox->pack_end($vpane);
$left = new GtkFrame();
$day=new GtkCalendar();
$left->add($day);
$left->set_shadow_type(Gtk::SHADOW_IN);
$vpane->add1($left);
$textBuffer = new GtkTextBuffer();
$textBuffer->set_text(date('Y-m-d h:i:s'));
$text = new GtkTextView();
$text->set_buffer($textBuffer);
$text->set_editable(false);
$entry= new GtkEntry();
$r_vbox = new GtkVBox(false, 5);
$r_vbox->pack_end($entry);
$r_vbox->pack_end($text);
$right = new GtkFrame();
$right->add($r_vbox);
$right->set_shadow_type(Gtk::SHADOW_IN);
$vpane->add2($right);
$day->connect_simple('day-selected', 'get_day', $day, $textBuffer);
function get_day(GtkCalendar $d,GtkTextBuffer $bf){
$f_name=get_file_name($d);
if(file_exists('text/'.$f_name)){
$content=file_get_contents('text/'.$f_name);
}
else{
$content='No notes';
}
$bf->set_text($content);
}
function get_file_name(GtkCalendar $d){
$data=$d->get_date();
return join('-',$data);
}
$button2->connect_simple('clicked', "add_note", $day,$entry, $textBuffer);
function add_note(GtkCalendar $d,GtkEntry $entry,GtkTextBuffer $bf){
$f_name=get_file_name($d);
if(!is_file('text/'.$f_name)){
file_put_contents('text/'.$f_name, $entry->get_text());
}else{
$fd=fopen('text/'.$f_name,'a+');
fwrite($fd,"\n".$entry->get_text());
fclose($fd);
}
$content=file_get_contents('text/'.$f_name);
$bf->set_text($content);
}
$button3->connect_simple('clicked', "clean_note", $day, $textBuffer);
function clean_note(GtkCalendar $d,GtkTextBuffer $bf){
$f_name=get_file_name($d);
if(is_file('text/'.$f_name)){
unlink('text/'.$f_name) ;
}
$bf->set_text('No notes');
}
$button1->connect_simple('clicked', array("gtk", "main_quit"));
get_date();
return join('-',$data);
}
// Получаем запись из файла и помещаем её на текстовое поле
function get_day(GtkCalendar $d,GtkTextBuffer $bf){
$f_name=get_file_name($d);
if(file_exists('text/'.$f_name)){
$content=file_get_contents('text/'.$f_name);
}else{
$content='No notes';
}
$bf->set_text($content);
}
// Добавляем запись
function add_note(GtkCalendar $d,GtkEntry $entry,GtkTextBuffer $bf){
$f_name=get_file_name($d);
if(!is_file('text/'.$f_name)){
file_put_contents('text/'.$f_name, $entry->get_text());
}else{
$fd=fopen('text/'.$f_name,'a+');
fwrite($fd,"\n".$entry->get_text());
fclose($fd);
}
$content=file_get_contents('text/'.$f_name);
$bf->set_text($content);
}
// Уничтожаем запись
function clean_note(GtkCalendar $d,GtkTextBuffer $bf){
$f_name=get_file_name($d);
if(is_file('text/'.$f_name)){
unlink('text/'.$f_name) ;
}
$bf->set_text('No notes');
}
$window = new GtkWindow();
$window->set_title("GtkHBox and GtkVBox packing demonstration");
$window->set_position(Gtk::WIN_POS_CENTER);
$window->connect_simple("destroy", array("gtk", "main_quit"));
$window->set_default_size(400,400) ;
$window->show();
$vbox = new GtkVBox(false, 5);
$window->add($vbox);
$label = new GtkLabel();
$label->set_text("My daily");
$label->set_justify(Gtk::JUSTIFY_LEFT);
$vbox->pack_start($label, true, true, 5);
$label->show();
$hbbox = new GtkHButtonBox();
$hbbox->set_layout(Gtk::BUTTONBOX_SPREAD);
$hbbox->set_spacing(15);
$button1 = new GtkButton('Exit');
$button2 = new GtkButton('Add');
$button3 = new GtkButton('Clean');
$hbbox->add($button1);
$hbbox->add($button2);
$hbbox->add($button3);
$vbox->pack_end($hbbox);
$vpane = new GtkHPaned();
$vpane->set_border_width(5);
$left = new GtkFrame();
$day=new GtkCalendar();
$left->add($day);
$left->set_shadow_type(Gtk::SHADOW_IN);
$vpane->add1($left);
$textBuffer = new GtkTextBuffer();
$textBuffer->set_text(date('Y-m-d h:i:s'));
$text = new GtkTextView();
$text->set_buffer($textBuffer);
$text->set_editable(true);
$entry= new GtkEntry();
$right = new GtkFrame();
$r_vbox = new GtkVBox(false, 5);
$r_vbox->pack_end($entry);
$r_vbox->pack_end($text);
$right->add($r_vbox);
//$right->add($text);
$right->set_shadow_type(Gtk::SHADOW_IN);
$vpane->add2($right);
$vbox->pack_end($vpane);
$button1->connect_simple('clicked', array("gtk", "main_quit"));
$button2->connect_simple('clicked', "add_note", $day,$entry, $textBuffer);
$button3->connect_simple('clicked', "clean_note", $day, $textBuffer);
$day->connect_simple('day-selected', 'get_day', $day, $textBuffer);
$window->show_all();
Gtk::main();
?>
set_submenu($fmenu);
$mbar->add($file);
$view = new GtkMenuItem('_View');
$vmenu = new GtkMenu();
$view->set_submenu($vmenu);
$mbar->add($view);
$edit = new GtkMenuItem('_Edit');
$emenu = new GtkMenu();
$edit->set_submenu($emenu);
$mbar->add($edit);
$mode = new GtkMenuItem('_Status');
$mmenu = new GtkMenu();
$mode->set_submenu($mmenu);
$mbar->add($mode);
// Теперь создаём пункты подменю для каждого пункта
// в особо тяжких случаях разделяем пункты сепараторами меню «File»
$fmenu->add(new GtkImageMenuItem(Gtk::STOCK_NEW));
$fmenu->add(new GtkImageMenuItem(Gtk::STOCK_OPEN));
$fmenu->add(new GtkSeparatorMenuItem());
$fmenu->add(new GtkImageMenuItem(Gtk::STOCK_SAVE));
$fmenu->add(new GtkImageMenuItem(Gtk::STOCK_SAVE_AS));
$fmenu->add(new GtkSeparatorMenuItem());
$fmenu->add(new GtkImageMenuItem(Gtk::STOCK_QUIT));
// Меню вид
$vmenu->add(new GtkImageMenuItem(Gtk::STOCK_SORT_ASCENDING));
$vmenu->add(new GtkImageMenuItem(Gtk::STOCK_ZOOM_FIT));
// Меню редактирования
$emenu->add(new GtkImageMenuItem(Gtk::STOCK_COPY));
$emenu->add(new GtkImageMenuItem(Gtk::STOCK_CUT));
$emenu->add(new GtkImageMenuItem(Gtk::STOCK_PASTE));
// Меню статуса
$mmenu->add(new GtkImageMenuItem(Gtk::STOCK_APPLY));
$mmenu->add(new GtkImageMenuItem(Gtk::STOCK_CONVERT));
$vbox = new GtkVBox();
$vbox->pack_start($mbar,false);
// Создаём окно
$wnd = new GtkWindow();
$wnd->connect_simple('destroy', array('gtk', 'main_quit'));
$wnd->set_default_size(400,200);
// Создаём древовидную структуру
$store = new GtkTreeStore(64, 32);
// Создаём «ветви» первого уровня (первый параметр-идентификатор
// родительского элемента. В данном случае равен NULL)
$support = $store->append(null, array('Support servise', 1));
$www = $store->append(null, array('Internet', 2));
$c1 = $store->append(null, array('1C', 1));
// Создаём дочерние элементы
$store->append($c1, array('Stuff', 8));
$store->append($www, array('Site', 2));
$store->append($www, array('Ithernet', 12));
$store->append($support, array('Workstantions', 4));
// Создаём отображение дерева
$tview = new GtkTreeView($store);
$tview->set_enable_tree_lines(enabled);
$cell_renderer = new GtkCellRendererText();
// Добавляем заголовки
$tview->append_column(new GtkTreeViewColumn('Department', $cell_renderer, 'text', 0));
$tview->append_column(new GtkTreeViewColumn('Problems', $cell_renderer, 'text', 1));
// Разворачиваем дерево
$tview->expand_all();
$vbox->pack_start($tview,false);
// Помещаем его в окно и делаем видимым
$wnd->add($vbox);
$wnd->show_all();
Gtk::main();
?>
TrueGladeGTK_WINDOW_TOPLEVELGTK_WIN_POS_NONEFalseTrueFalseTrueFalseFalseGDK_WINDOW_TYPE_HINT_NORMALGDK_GRAVITY_NORTH_WESTTrueFalseTrueFalse0TrueTrueTrueTrueGTK_POS_TOPFalseFalseTrueHellow Glade!FalseFalseGTK_JUSTIFY_LEFTFalseFalse0.50.500PANGO_ELLIPSIZE_NONE-1False0FalseTrueTrue
…………………………………………..
False0tab
……………………………………………….
tab0TrueTrue
get_widget('wndClose');
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
$button = $glade->get_widget('btnClose');
$button->connect_simple('clicked', 'onClickButton');
function onClickButton() {
echo "button clicked!\r\n";
Gtk::main_quit();
}Gtk::main();
?>
-----------------------------------------------------------------------------------------------------------------