Малко познатите страни на PHP

Категория: Интернет
понеделник, 10 Февруари 2003 0:00ч

Почти всеки е чувал за PHP или е посещавал сайт, писан на този език. Едва ли обаче сте си задавали въпроса докъде стигат границите на езика и на неговото приложение. Целта на настоящата статия е да ви покажем някои по-малко познати страни на PHP.
Ще разгледаме и направим скрипт, който се преобразува до изпълним файл (*.exe) и се инсталира (забележете, че не казвам разархивира) на компютъра, като няма нужда на този компютър да има инсталирани PHP, Apache или каквото и да е друго, за да работи този скрипт, както сме го направили - едно идеално решение за крайния клиент. Нека започнем от самото начало.
Kaк се инсталират необходимите компоненти
Преди да започнем да пишем скрипта, трябва да свалим версия на GTK за PHP. Последната версия е 1.0.0 и можете да си я свалите от http://gtk.php.net/do_download.php?download_file=php-gtk-1.0.0-win32.zip. GTK е допълнение към PHP, което предоставя обектноориентиран начин за работа с GTK+, който ви позволява да пишете скриптове с графичен интерфейс. Те, разбира се, работят на много операционни системи без допълнителна намеса. Сваленият сорс разархивирайте в директория C: PHP4 и вече сме готови за напишем първия си файл. Отворете любимия си редактор и въведете:
if (!class_exists(gtk)) {
if (strtoupper(substr(PHP_OS, 0, 3)) == WIN)
dl(php_gtk.dll);
else
dl(php_gtk.so);
}
С тези редове зареждате модула php_gtk в зависимост от това каква операционна система ползвате. Той е основен за скриптовете от този вид, защото съдържа всички класове, които ще използваме по-нататък, а ако вие искате да продължите да ползвате тази технология, ще ползвате сами.
След това започваме с изграждането на така нареченото приложение:
$window= &new GtkWindow(); -създава нов прозорец, това е главният контейнер, в който ние ще наредим другите компоненти
$window->set_title(My First GTK APP); - слагаме заглавие на този прозорец
$window->set_default_size(450, 200); - размер, който ни е нужен
Сега нека да видим какво сме направили дотук. Можем да изпълним този скрипт и да визуализираме компонентите по следния начин:
1.Записваме файла в директория prog в директорията на PHP-GTK, в случая C:php4prog, да речем по името firstapp.php.
2.Пусkame command прозорец и пишем:
C:> cd PHP4
C:> php progfirstapp.php
Трябва са се покаже прозорец с размери, които сме задали, и със заглавие My First GTK APP. След това започваме да градим и останалите части на скрипта, като от време на време правим това, което направихме по-горе, за да видим как изглежда всичко.
$hb_from= &new GTKHBox(); - хоризонтален контейнер, който ще носи в себе си другите два елемента и ще е отговорен за тяхното визуализиране
$label_from= new GTKLabel(From:); - етикет - поле в което се пише текст.
$label_from->set_alignment(0, -1); - ляво ориентиране на елемента

$text_from=&new GTKEntry(); - текстово поле
$text_from->set_usize(100,20); - определяне на размера на текстовото поле
$text_from->set_uposition(192,0); - определяне на позицията на текстовото поле (позиция по X, позиция по Y)
$hb_from->add($label_from); - добавяне на първия елемент към контейнера
$hb_from->add($text_from); - добавяне на втория елемент към контейнера
Важно е да се отбележи, че дори и да създадем елементите, трябва да ги “вържем” към друг елемент, който се “връзва” към главния контейнер и се визуализира. В случая, ако създадем, да речем, едно текстово поле и не го добавим към контейнера, той няма да се визуализира.
Нека да направим същото и за другите елементи, които са сходни с горния:
$hb_to= &new GTKHBox();
$label_to= new GTKLabel(To:);
$label_to->set_alignment(0, -1);
$text_to=&new GTKEntry();
$text_to->set_usize(100,20);
$text_to->set_uposition(192,30);
$hb_to->add($label_to);
$hb_to->add($text_to);
Елементите са същите, само текстът е различен. Може би вече сте се досетили, че правим форма за изпращане на email, но със средствата, които ни предоставя PHP-GTK. Eто и съдържанието на полето за Subject:
$hb_subject= &new GTKHBox();
$label_subject= new GTKLabel(Subject:);
$label_subject->set_alignment(0, -1);
$text_subject=&new GTKEntry();
$text_subject->set_usize(100,20);
$text_subject->set_uposition(192,70);
$hb_subject->add($label_subject);
$hb_subject->add($text_subject);
Дотук нещата изглеждат идентични, но полето за съобщението е малко по-различно:
$hb_message= &new GTKHBox();
$label_m= new GTKLabel(Message:);
$label_m->set_alignment(0, -1);
$text_m=&new GTKText(); текстово поле, което може да е по-голямо от един ред
$text_m->set_editable(true); - текстовото поле да може да се редактира
$text_m->set_usize(100,200); - размери на полето
$text_m->set_uposition(192,110); -позиция на полето
$hb_message->add($label_m);
$hb_message->add($text_m);
Свършиха всички полета за нормалната форма за изпращане на електронно съобщение. Сега идва ред на бутона и едно допълнително поле, в което ще се въвежда SMTP сървърът. Това се налага понеже не се знае дали клиентът има инсталирано PHP и дали то е настроено, както е необходимо. Затова email-ът ще се изпрати през SMTP сървър, който всеки може да си избере.
$btn_box=&new GTKHBox();
$send= &new GTKbutton(Send Email); -създаване на бутон, който при натискане изпраща съобщението, той е с надпис Send Email
$send->connect(clicked,checkdata);
- определяне редакцията на всяко деиствие, в случая при кликване clicked, изпълнява функцията checkdata, която ще напишем след малко
$prop= &new GTKText();
$prop ->set_usize(50,5);
$prop->set_editable(true);
$prop->insert(NULL, NULL, NULL,SMTP SERVER);
- вкарване на текст в текстовото поле, ако желаете можете да му зададете цвят и вид на шрифта, но в случая сме задали да взема основните настройки на системата
$btn_box->add($send);
$btn_box->add($prop);
Вече всички хоризонтални блокове са готови, но ако сега изпълним скрипта, ще се види това, което се видя и в началото - само прозорец със заглавие.
Затова е нужно да се направи следното:
$vb= &new GTKVBox(false,15); - създаваме един вертикален контейнер, който ще съдържа в себе си всички хоризонтални такива, за да може да ги видим.
$vb->pack_start($hb_from, true, true, 0); - добавяне на контейнера, съдържащ полето From, към вертикалния контейнер
$vb->pack_start($hb_to, true, true, 0); -- добавяне на контейнера, съдържащ полето To, към вертикалния контейнер
$vb->pack_start($hb_subject, true, true, 0); - добавяне на контейнера съдържащ полето Subject, към вертикалния контейнер
$vb->pack_start($hb_message, true, true, 0); - добавяне на контейнера, съдържащ полето Message, към вертикалния контейнер
$vb->pack_start($btn_box, true, true, 0); - добавяне на контейнера, съдържащ полето с бутона, към вертикалния контейнер.
Добавяме вертикалния контейнер, който съдържа в себе си хоризонталните, към главния, който се явява прозорец, и го показваме:
$window->add($vb);
$window->show_all();
Gtk::main();
Нека отново да направим теста за изпълнението на скрипта и да видим резултата:
C:> cd PHP4
C:> php progfirstapp.php
Сега вече резултатът е много по-различен от първоначалния, което беше и целта ни. Ако си спомняте, към бутона Send Email прикачихме една функция, която трябва да се изпълни при натискането му. Нека да напишем и нея:
function checkdata()- определяне на името на функцията, което трябва да е със същото име както тази свързана с бутона
{
global $text_from,$text_to,
$text_subject,$text_m,$prop;- дефиниране на глобалните променливи, в случая обекти, които са ни нужни, за да можем да изпратим email, тоест полетата на формата
$text_f=$text_from->get_chars(0,-1); - вземане на съдържанието на полето From
$text_t=$text_to->get_chars(0,-1); - вземане на съдържанието на полето To
$text_s=$text_subject->get_chars(0,-1); - вземане на съдържанието на полето Subject
$text_ms=$text_m->get_chars(0,-1); - вземане на съдържанието на полето Message
$isready=$prop->get_chars(0,-1); - вземане на съдържанието на полето SMTP Server, kоето се намира до бутона.
if(!$text_f OR !$text_t OR !$text_s OR !$text_ms) - проверяваме дали някое от тях не е празно
{
error( Please fill All fields); - показване на грешката (след малко ще дефинираме)
}
elseif(!$isready OR $isready==SMTP SERVER) - проверяваме дали има SMTP сървър, посочен от потребителя
{
error( Please, SET SMTP SERVER!); - показване на грешката
}
else
{
// изпращане чрез SMTP - изпращане на съобщението, тук можете да ползвате функция за изпращане на email чрез SMTP.
}
}
Нека да дефинираме и функцията за показване на грешката. Проява на добър стил е при всеки код да имате така функция, на която да се подава грешката като параметър за по-добра визуализация.
function error($whaterror)
{
$error=new GtkWindow(); - нов прозорец в който да се показва грешката.
$error->set_title(Warning); - заглавие
$error->set_usize(250,80);
$err_label=&new GtkLabel(Error:.$whaterror); - визуализиране на грешката
$error->add($err_label);
$error->show_all(); - показване на прозореца
}
PHP-GTK предлага голям набор от обекти, с които можете да работите. Тези, който показваме сега, са избрани от мен. Вие, разбира се, можете да работите с други.
Сега нека да изпълним отново скрипта и да видим разликите, когато не е попълнено поле, необходими за нормалното изпращане на съобщението се появява първата грешка, а когато липсва SMTP сървърът, се появява втората. Има още какво да се направи относно сигурността на самия скрипт, както и да напишете функция за изпращане на email, но целта на настоящата статия е да ви въведе в тази интересна материя. След като написахме това PHP-GTK приложение, време е да го направим на *.Exe файл. Сигурно познавате много програми, които правят това, но аз ви препоръчвам PriadoBlender - тя не компилира вашата програма, защото процесът на компилация е съвсем различен от това, което прави тази програма, но на нас ни е напълно достатъчен.

Коментари

Добави коментар

Име:

Коментар:


 

PCMagazine Брой 2008-04-17Зелените машини :: С надигащата се вълна от притеснение относно замърсяването на околната среда започват да се произвеждат екологично чисти компютри, както и нови технологии, имащи за цел да намалят опасните химикали и употребата на енергия.