تبليغاتX
برنامه نویس کوچولو

برنامه نویس کوچولو

یادداشتهای یه برنامه نویس خیلی ^ 100 کوچولو

About Agavi

Agavi at a glance

Agavi is a general purpose PHP application framework built around the Model-View-Controller architecture originally based on the Mojavi 3 Web application framework written by Sean Kerr. It provides a rich toolset that solves most of the routine problems in Web application development.

Agavi is designed for serious development. It is not a complete website construction kit but rather a skeleton over which you build your application. The architecture of Agavi allows developers to retain very fine control over their code. Agavi itself is written to be extensible, and powerful. Whereas this documentation serves as an important resource, many developers are comfortable learning from Agavi's source code.

Agavi strives to leave most implementational choices to the developers. Agavi's components are inherently extensible, and the framework itself is designed around a XML-based configuration system that provides a very flexible environment. For you — as a developer — this architectural style means that you are required to perform less hacking (or, in most cases, none at all!) at the framework level and therefore have more time to get your application written.

The framework works for almost all kinds of applications but excels most in large codebases, long-term projects, extreme cases of integration and other special situations.

+ نوشته شده در  دوشنبه هجدهم خرداد 1388ساعت 15:53  توسط علیرضا مسکین ملک  | 

extension نویسی برای php

با سلام به همگی

اگه تو منوال پی اچ پی دیده باشید واسه نوشتن یه ماژول خیلی ساده بایستی کلی کدهای اضافی هم بنویسیم امروز می خوام یه ابزاری رو معرفی کنم بنام swig که توسط آقای David Beazley طراحی شده و می توانید از آدرس http://www.swig.org/ دانلود کنید به ما این امکان رو میده که فقط قسمت اصلی تابع مورد نظر را بنویسید و شما رو از نوشتن کدهای اضافی دیگر راحت می کنه.
البته من این مطلب رو چند وقت پیش تو سایت Iranphp.net توضیح داده بودم ولی چون تو وبلاگ نبود گفتم شاید بدرد کسی بخوره بهر حال اگه دوستان قبلاً دیدن نگن آقا مطلب مطلب تکراریه.

این ابزار کار خود را از طریق خواندن یک فایل رابط که شامل تعاریف متد ها و توابع می باشد انجام می دهد ، سپس بصورت خودکار تبدیل نوع داده ها ، چک کردن ایرادات کد ، ایجاد فایل C ، کامپایل فایل و ایجاد فایل ماژول را انجام می دهد .
این ابزار بسیار مفید و کاری بوده چون از طریق آن می توان کد های مختلف نوشته شده را به راحتی به ماژولهایی نه تنها برای PHP بلکه برای زبانهایی مثل C# , Java , modula3 , perl , php , pike , python , ruby , tcl و ... تبدیل کرد .

خب برای شروع ابتدا فایلی بنام hellomodule.c را ایجاد و برنامه زیر را در اون می نویسیم

#include
void say_hello(const char* name) {
printf("Hello %s!\n", name);
}

یه نکته مهم این که این برنامه ها چون تبدیل به یک library میشن نیاز به تابع main ندارند سپس یک فایل دیگه به اسم hello.I ایجاد کرده و کد زیر را توی اون می نویسیم :

%module hello
extern void say_hello(const char* name);
اکنون دستور زیر را در ترمینال وارد کنید :

swig -php hello.I
ین دستور دو فایل بنامهای hello.php و hello_warp.c به ما میده که حالا نوبت کامپایل این ماژوله ابتدا باید php-devel رو نصب کرده باشید تا بتونیم اونو کامپایل کنیم البته اگه اگه از روی سورس کامپایل کرده باشید نیازی به نصب این بسته نیست
شما باید مسیر قرار گرفتن فایلهای include مرتبط با phpرو بدونید که میتونید از دستور زیر برای بدست آوردن این اطلاعات استفاده کنید

php-config --includes
خروجی این دستور را که مشابه کد زیر است به جای $PHPINCLUDE در دستور کامپایل که در زیر آمده جایگذاری کنید

-I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib

دستور کامپایل :

gcc -fpic -c hellomodule.c hello_wrap.c $PHPINCLUDES

gcc -shared hellomodule.o hello_wrap.o -o php_hello.so

حالا ماژول بدست اومده رو می بایست تو مسیر extension_dir کپی کنید و بعد از restart کردن PHP کد زیر را درون یک فایل PHP قرار داده و اجرا کنید :

	if(!extension_loaded('hellomodule'))
dl("hellomodule.so");
say_hello("Alireza meskin malek");
?>

حال باید این فایل رو اجرا کرد من که از طریق کنسول اجرا می کنم :

php -f hello.php

خروجی به صورت زیر خواهد بود که نشان دهنده اینست که ماژول به درستی نصب شده و کار می کند

Alireza meskin malek

این مثالی کوچک از ابزاری بزرگ بنام swig است . البته در منوال خود ابزار مثالهایی یرای نوشتن کلاس وجود داره.
امیدوارم که مفید بوده باشه.
+ نوشته شده در  سه شنبه هفتم اسفند 1386ساعت 18:19  توسط علیرضا مسکین ملک  | 

جهانی سازی برنامه ها توسط GNU Gettextدر PHP

اکثر برنامه ها در زبان انگلیسی نوشته شده و مستند سازی می شود و انگلیسی در زمان اجرا از انها استفاده میشود در صورتی که اکثر مردم با زبان مادری خود راحتتند و ترجیح می دهند که از زبان مادری خود استفاده کنند.
این ابزار امکان استفاده از برنامه های چند زبانه را به برنامه نویسان خواهد داد , بدون اینکه برنامه نویس در گیر کار ترجمه یک پروژه شود
هنگام بحث در مورد پشتیبانی زبان اختصاصی در برنامه ها دو واژه بیشترین کاربرد رو دارن که عبارتند ار جهانی نمودن (internationalization ) و محلی سازی (localization .) که اغلب بجای این لغات از کلمات i18n و l10n اولی برای جهانی سازی و دومی برای محلی سازی استفاده می شود (حدث بزنید این کلمات چه ربطی به کلمات اصلی خود دارند!)
به طور خلاصه جهانی سازی عبارتند از اینکه یه بسته نرم افزاری فابلیت پشتیبانی زبانهای مختلف را داشته باشد و محلی سازی پیاده سازی یکی از زبانها در یک برنامه جهانی شده است .
محلی سازی علاوه بر ترجمه متون برنامه شامل فرمت نمایش تاریخ , اعداد , واحد پول و ... نیز هست
حالا ما تو این مقاله قصد معرفی یکی از این ابزارها به نام gnu gettext را داریم امیدوارم که مفید واقع بشه . البته تمام این مراحل در سیستم عامل لینوکس تست شده ولی می توانید با با مراجعه به آدرس http://www.gnu.org/software/gettext نسخه ویندوزی آنرا دانلود و از آن استفاده کنید.

فایلهای ترجمه
متنهایی که در برنامه می بایست ترجمه شود بایستی در فایلهایی با پسوند .po ذخیره شوند (po = portable object ) این فایلها قابل ویرایش هستند و هر متن قابل ترجمه را به ترجمه آن مرتبط میکند.
اگر برنامه شما از زبانهای زیادی پشتیبانی کند هر زبان دارای حداقل یک فایل po اختصاصی خود زبان هست . این فایلها را می توان بصورت دستی ایجاد کرد ویا از ابزارهایی برای اینکار استفاده کرد که در ادامه توضیح خواهم داد.
فایلهای با پسوند .mo که فایلهای non-portable هستند توسط برنامه خوانده می شوند . چند سیستم نیز قبلا ابزارهایی برای ایجاد فایل mo ایجاد کردند ولی gnu gettext از ابزار اختصاصی خود استفاده می کند و این فایلها با پسوند .mo ذخیره می شوند . توجه کنید این فایلها یعنی فایلهای mo توسط برنامه استفاده شده و فایلهای po را که شما و یا ابزار مورد استفاده شما ایجاد کرده باید توسط ابزاری به فایل mo تبدیل شود تا توسط برنامه قابل استفاده باشد.

فرمت فایلهای

PO
white-space
#  translator-comments
#. extracted-comments
#: reference...
#, flag...
#| msgid previous-untranslated-string
msgid "untranslated-string"
msgstr "translated-string"

در قسمت untranslated-string متن اصلی که اغلب به صورت انگلیسی هست نوشته شده و در قسمت translated-string ترجمه متن را نوشته و این کار را برای باقی جملات نیز تکرار می کنیم و این فایل را با پسوند .po ذخیره نمایید . شاید به نظراتان این کار سخت به نظر آید ولی یک راه ساده تر نیز وجود دارد واون استفاده از ابزار xgettext به صورت زیر است که تمامی رشته ها را در یک فایل ایجاد کند.

xgettext [option] [inputfile] ...
xgettext -L PHP -o fa_IR.po test.php

test.php نام فایل برنامه ما است که شامل متون قابل ترجمه است و فایل fa_IR.po فایلی است که این برنامه ایجاد می کند.
حالا شاید بپرسید که این ابزار از کجا بفهمد که چه رشته هایی باید ترجمه شده و چه رشته هایی نبایست. شما در برنامه خودتون هر کجا خواستید خروجی را چاپ کنید که اگر زبانی غیر از انگلیسی هم بو بتوان ان را ترجمه کرد از تابع gettext() و یا _() استفاده کنید ابزار تمامی رشته های داخل این دو تابع را گرفته و در داخل فایل . جمع می کند که شماید بایستی با باز کردن این فایلها توسط ویرایشگرهای ساده متن ویا ابزارهایی که برای اینکار موجود است ترجمه رشته ها را بنویسید.
به طور مثال این متن فایل test.php است که در بالا اشاره شد.

##test.php##

echo _(“ firstname”); // or gettext(“firstname”);
echo _(“Last name”);
printf(_(“My name is %s”),”Alireza meskin malek”);
?>

حال اگر دستور بالا را اجرا کنید برنامه فایلی به نام fa_IR.po ایجاد کرده که حاوی متن زیر است

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR , YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-08-04 14:44-0600\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#: test.php:2
msgid " firstname"
msgstr ""

#: test.php:3
msgid "Last name"
msgstr ""
#: test.php:4
#, php-format
msgid "My name is %s"
msgstr ""


حال شما باید متنهای ترجمه را در این فایل نوشته و ذخیره کنید متن این فایل بعد از تغییر

"Project-Id-Version: fa_IR\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-08-04 14:44-0600\n"
"PO-Revision-Date: 2007-08-04 14:47-0600\n"
"Last-Translator: root\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: test.php:2
msgid " firstname"
msgstr "نام "
#: test.php:3
msgid "Last name"
msgstr "نام خاونوادگی "

#: test.php:4
#, php-format
msgid "My name is %s"
msgstr "نام من   %s   است "


البته می توانید برای راحتی کار از ابزاری مثل Kbabel استفاده کنید.
حال برای تبدیل این فایل به فایلی با ‌پسوند .mo که قابل فهم توسط برنامه باشد از دستور زیر استفاده کنید:

msgfmt -f fa_IR.po -o test_msg.mo


حال روش استفاده از این فابل در برنامه
معمولا در نوشتن برنامه ها پوشه ای به نام locale ایجاد کرده و درون این پوشه برای هر یک از زبانهای که پشتیبانی می شود پوشه ای با کد دو رقمی زبان و کشور مثل (fa_IR ( ایجاد می کنیم و درون این هر یک از این پوشه ها پوشه ای به نام LC_MESSAGES ایجاد کرده و فایلهای .mo را درون این پوشه قرار می دهیم توجه کنید برای اجرا نیازی به فایلهای .po نیست .
پس ما هم برای تست یه پوشه ای به نام locale ایجاد و درون آن پوشه ای بنام fa_IR ایجاد کرده , درون این پوشه نیز پوشه ای به نام LC_MESSAGES ایجاد کرده که فایلهای ترجمه در این پوشه قرار می گیرند و فایل test_msg.mo را درون آن کپی می کنیم.
برای بهتر منوجه شدن مسیر این پوشه به صورت زیر است

project_folder/locale/fa_IR/LC_MESSAGES/test_msg.mo

حال به مهمترین نقطه کار یعنی قابلیت جهانی سازی برنامه میرسیم . در ابتدا شما باید php_gettext رو فعال کنید البته اگر فعال نباشد. برای اینکار در فایل php.ini ; (سمی کولن) را از جلوی extension=php_gettext.so برداشته و سرور را دوباره راه اندازی کنید.
در ابتدا تابع setlocale
این تابع برای مشخص کردن زبان مورد استفاده برنامه شما است . می توانید این مقدار را در فایلهای config خود ذخیره و از آن استفاده کنید در کد زیر با انتخاب زبان fa_IR برنامه متون را به زبان فارسی نمایش می دهد البته اگر فایلهای این زبان موجود باشد.

setlocale(LC_ALL, 'fa_IR');


تابع بعدی bindtextdomain که با این تابع مسیر و نام فایل رو مشخص می کنید به صورت زیر

bindtextdomain("test_msg", "./locale");


حال با این کار برنامه در مسیر ./locale/fa_IR/ LC_MESSAGES به دنبال فایلی به نام test_msg.mo می گردد.
در این تابع با مشخص کردن پارامتر دوم که مسیر جستجو برای فایلها ترجمه است برنامه از این پس هرکجا به ترجمه نیاز پیدا کند در پوشه locale به دنبال ان می گردد و پارامتر اول نام فایل ترجمه است که در مرحله قبل ایجاد کردیم .البته شما می توانید فایلهای مختلفی را ایجاد کنید و با این تابع مسیر هر کدام را معرفی کنید و با تابع textdomain فایل پیش فرض را انتخاب کنید که در این مثال همان test_msg است .
توجه کنید این کدها را می بایست در ابتدای فایل test.php قرار دهید که ما برای قابل فهم تر شدن مرحله قبل آنرا اکنون اضافه می کنیم محتویات این فایل بعد از تغیر به صورت زیر خواهد شد.

##test.php##

setlocale(LC_ALL, 'fa_IR');//defaule language

// Specify location of translation tables
bindtextdomain("test_msg", "./locale");

// Choose domain
textdomain("test_msg");

echo _(" firstname"); // or gettext("firstname");
echo _("Last name");

printf(_("My name is %s"),"Alireza meskin malek");
?>


حال اگر این فایل را اجرا کنید متنها را به صورت فارسی نمایش خواهد داد.
حال موردی را در نظر بگیرید که فایلهای زبان مورد نظر ایجاد نشده باشد در این صورت متنها به همان صورت انگلیسی که در متن برنامه نوشته شده نمایش داده خواهد شد . برای تست در کد بالا بجای fa_IR کلمه ar_AR را قرار دهید مشاهده می کنید که خروجی به صورت انگلیسی خواهد بود . البته می توانید مراحل بالا را برای متنهای عربی نیز تکرار کنید تا برنامه شما قابلیت نمایش جملات عربی را نیز داشته باشد.
البته شما بغیر از متن می توانید تاریخ واحد پولی را نیز تغییر دهید. که با جستجو در منوال می توانید به اطلاعات بیشتری دست بیابید.

+ نوشته شده در  پنجشنبه دوازدهم مهر 1386ساعت 16:12  توسط علیرضا مسکین ملک  | 

PHP EXE Compiler/Embedder

با این برنامه می تونید فایل اجرایی از برنامه php خودتون بسازید البته بیشتر برای PHP Gtk  استفاده میشه
یه نگاهی بیاندازید بد نیست.

Bambalam PHP EXE Compiler/Embedder
http://www.bambalam.se/bamcompile/
+ نوشته شده در  پنجشنبه دوازدهم مهر 1386ساعت 15:44  توسط علیرضا مسکین ملک  | 

ساخت Pdf فارسی توسط PHP

چند وقت پیش یه بحثی تو سایت مورد علاقه من   IranPHP.net شروع شده بود با این lموضوع .
که تونستم یه جوراییی این مشکل رو حل کنم لینک بحث و لینک برنامه رو قرار دادم شاید به دردتون بخوره

این از لینک بحث :
فارسی نویسی در UFPDF و تولید PDF فارسی با PHP

اینم از لینک فایل برنامه
http://xdownload.persiangig.com/API/Aplication/faPDF.zip

+ نوشته شده در  پنجشنبه دوازدهم مهر 1386ساعت 15:41  توسط علیرضا مسکین ملک  |