لغة PHP أصبحت من أهم اللغات في عالم الويب والإنترنت لقوتها كلغة Server-Side لكنها وإن كانت كذلك فهي تبقى لغة مفسرة يمكن استخدامها لكتابة برامج صغيرة محلية أو حتى واجهات رسومية سأقوم بكتابة برنامج بواجهة رسومية بواسطة لغة PHP والمكتبة الرسومية GTK+.
التنصيب والإعداد:
صفحة المشروع الأساسية.
لابد أولاً أن ننصب إن لم تكن PHP منصبة قبلاً فلا بأس.
أفضل طريقة للتنصيب هي استعمال Gnope والذي سوف ينصب PHP مع إضافات GTK+ من خلال واجهة تنصيب في ويندوز.
* لاحظ أن Gnope سوف ينصب PHP4 أي الإصدار الأقدم كما أن هناك العديد من مشاكل التنصيب والإعداد بسبب توقف المشروع لمدة من الزمن ثم عودته ووعد المطورون بأداء أفضل.
من أجل التنصيب اليدوي يتوجب عليك تنصيب الإضافات extensions ثم تعديل ملف php.ini
إن كان لديك PHP سابقاً فعدل ملف php.ini وأضف السطر:
<?php ثم شغل البرنامج من المجلد الذي في إضافات GTK+.كود PHP:
extension = php-gtk2.dll
وذلك بالذهاب إليه في سطر الأوامر ثم كتابة اسم البرنامج “php” ثم فراغ ثم اسم الملف الذي كتبته.
لا تنسَ تحميل دليل المبرمج المفصل للرجوع إليه عند كتابة البرامج.
البدء بالبرمجة:
سأقوم أولاً بكتابة برنامج صغير يظهر واجهة.
شرح البرنامج:كود PHP:
if(!class_exists('gtk'))
die("Cannot load GTK+ module.");
$window = new GtkWindow();
$window->set_title('Hello, World');
$window->connect_simple('destroy', array('gtk', 'main_quit'));
$lblHello = new GtkLabel('Hello, World');
$window->add($lblHello);
$window->show_all();
Gtk::main();
نقوم هنا بتفحص وجود ملفات GTK+ في PHP إن لم توجد سيخرج البرنامج مع طباعة رسالة خطأ.كود PHP:
if(!class_exists(’gtk’))
die("Cannot load GTK+ module.");
نقوم هنا بتعريف متغير والذي هو class من نوع GtkWindows أي نافذة GTK.كود PHP:
$window = new GtkWindow();
السطر السابق يؤدي إلى تغيير عنوان النافذة إلى Hello, World.كود PHP:
$window->set_title(’Hello, World’);
يستدعي هذا السطر methode والتي هي connect_simple والتي تقوم بدورها هنا بالخروج من البرنامج عن طريق تنفيذ Gtk::main_quit عند حدوث الإشارة signal والتي هي distroy أي عندما يضغط المستخدم زر إغلاق النافذة سننهي البرنامج ليس فقط النافذةكود PHP:
$window->connect_simple(’destroy’, array(’gtk’, ‘main_quit’));
يعرف السطر السابق عنوان Label نصي مكتوب فيه Hello, World.كود PHP:
$lblHello = new GtkLabel(’Hello, World’);[/
كود PHP:
[color=#000000]$window->add($lblHello);[/color]
[color=#000000][/color]
يضيف السطر السابق العنوان النصي إلى النافدة
السطرين السابقين يظهران النافذةكود PHP:
$window->show_all();
Gtk::main();
والثاني ينقل التحكم إلى main في GTK والذي يقوم بدوره بكافة الأمور.
لأنه ببساطة إذا لم نقم بهذا سيظهر البرنامج النافذة ثم يتابع تنفيذ أوامر البرنامج أي أنه سيغلقها وعندها سيكون إظهار النافذة عبارة عن وميض.
عند تشغيل البرنامج يجب أن تظهر النافذة هكذا:
الآن وقد قمنا بتشغيل البرنامج يمكننا كتابة برامج مفيدة:
كتبت هذا البرنامج بسرعة وهو وإن كان يحتوي على ضعف في الرسم والتنسيق إلا أنه يظهر كيفية كتابة برامج رسومية مفيدة تعمل بلغة PHP
كود PHP:
<?php
require 'include.php ';
if (!class_exists( 'gtk ')) {
die("Cannot find GTK module\n");
}
$wnd = new GtkWindow();
$wnd->set_title( 'hashsum ');
$wnd->set_icon($wnd->render_icon(Gtk::STOCK_DIALOG_AUTHENTICATION, Gtk::ICON_SIZE_MENU));
$wnd->set_resizable(false);
$wnd->connect_simple( 'destroy ', array( 'gtk ', 'main_quit '));
$menubar = new GtkMenuBar();
$file = new GtkMenuItem( '_File ');
$menubar->append($file);
$quit = new GtkMenuItem( '_Quit ');
$mnuFile = new GtkMenu();
$mnuFile->append($quit);
$file->set_submenu($mnuFile);
$quit->connect_simple( 'activate ', array( 'gtk ', 'main_quit '));
$lblAscii = new GtkLabel( '_ASCII Text ', true);
$lblmd5 = new GtkLabel( '_MD5', true);
$lblsha1 = new GtkLabel( '_SH1', true);
$lblhex = new GtkLabel( '_HEX ', true);
$txtAscii = new GtkEntry();
$txtAscii->set_max_length(24);
$txtmd5 = new GtkEntry();
$txtsha1 = new GtkEntry();
$txthex = new GtkEntry();
$txtmd5->set_property( 'editable ', false);
$txtsha1->set_property( 'editable ', false);
$txthex->set_property( 'editable ', false);
$btn = new GtkButton( 'Calculate ');
$btn->set_flags(Gtk::CAN_DEFAULT);
$btnAbout = new GtkButton( 'About ');
$lblAscii->set_mnemonic_widget($txtAscii);
$lblmd5->set_mnemonic_widget($txtmd5);
$lblsha1->set_mnemonic_widget($txtsha1);
$lblhex->set_mnemonic_widget($txthex);
$btn->connect_simple( 'clicked ', 'calc ', $txtAscii, $txtmd5, $txtsha1, $txthex);
$btnAbout->connect_simple( 'clicked ', ‘about ');
$txtAscii->connect_simple( 'activate ', array($wnd, 'activate_default '));
$tbl = new GtkTable(3, 2);
$tbl->attach($lblAscii, 0, 1, 0, 1);
$tbl->attach($txtAscii, 1, 2, 0,1);
$tbl->attach($btn, 1, 2, 1, 2);
$tbl->attach($lblmd5, 0, 1, 2, 3);
$tbl->attach($txtmd5, 1, 2, 2, 3);
$tbl->attach($lblsha1, 0, 1, 3, 4);
$tbl->attach($txtsha1, 1, 2, 3, 4);
$tbl->attach($lblhex, 0, 1, 4, 5);
$tbl->attach($txthex, 1, 2, 4, 5);
$tbl->attach($btnAbout, 0, 2, 5, 6);
$box = new GtkVBox();
$box->pack_start($menubar);
$box->pack_start($tbl);
$wnd->set_default($btn);
$wnd->add($box);
$wnd->show_all();
Gtk::main();
?>
يقوم البرنامج السابق بإدارج الملف include.php والذي هو
كود PHP:
<?php
function calc (GtkEntry $ascii, GtkEntry $md5, GtkEntry $sha1, $hex){
$text = $ascii->get_text();
$c = '';
if (!$text)return;
$md5->set_text(md5($text));
$sha1->set_text(sha1($text));
for ($i=0; $i<strlen($text); $i++){
$c .= '0x' . dechex(ord($text[$i])) . ' ';
$hex->set_text($c);
}
}
function about (){
$about = new GtkAboutDialog();
$about->set_name('Hashsums');
$about->set_version('1.0');
$about->set_comments("Hashsums is programmed by GTK+ and PHP.\n Programmed By ChArLoK_16.\nwebsite: http://wordpress.charlok16.com");
$about->set_copyright('Copyright (C) 1982-2009 ChArLoK_16');
$about->set_license(implode(", file('license.txt')));
$about->set_logo($about->render_icon(Gtk::STOCK_DIALOG_AUTHENTICATION, Gtk::ICON_SIZE_DIALOG));
$about->set_icon($about->render_icon( Gtk::STOCK_ABOUT, Gtk::ICON_SIZE_MENU));
$about->set_website('http://charlok16.wordpress.com');
$about->run();
}
?>
سأشرح بعض الأشياء شرحاً سريعاً ويمكنك مراجعة دليل المبرمج لمراجعة أية functions أو methodes مستعملة.
أولاً ملف include.php يحوي دالتين الأولى تحسب الـmd5 و sha1 و hex للنصوص التي تمرر إليها عن طريق مربع نص أدخل فيه المستخدم شيئاً
والدالة الثانية تقوم بإظهار مربع حوار “حول البرنامج” وتستخرج معلومات الرخصة من ملف license.txt والتي هي في هذه الحالة GPL 3.
الملف الثاني مكون من جدول يتضمن عناصر التصميم، يمكن تعداد حاويات العناصر لرؤية أفضل لكنني لم أفعل ذلك راجع دليل المبرمج
في هذا الجدول يوجد مربع نص ليكتب المستخدم بداخله ما شاء تحته زر ليشغل الدالة calc ويعيد بعد ذلك إظهار النتائج وأخيراً زر لإظهار نافذة “حول البرنامج” وطبعاً قائمة للخروج من البرنامج.
منقول من هنا :-
برمجة برامج بواجهات رسومية باستخدام PHP
شكراً للكاتب , وبالتوفيق جميعاً إن شاء الله :nice: