14-06-1394، 09:49 ق.ظ
پی اچ پی (به انگلیسی: PHP) یک زبان برنامه نویسی است که برای طراحی وب توسعه یافته است، اما می توان از آن به عنوان یک زبان عمومی نیز استفاده کرد. طبق آمار، تا ژانویهٔ سال ۲۰۱۳ میلادی پی اچ پی بر روی ۲۴۴ میلیون وب سایت و ۲٫۱ میلیون سرور وب نصب شده است و این یعنی بیش از 81 درصد سایتهای دنیا و بزرگترین سایتهای جهان یعنی فیسبوک و ویکیپدیا با این زبان طراحی شده است. این زبان در سال ۱۹۹۵ میلادی توسط راسموس لِردورف (به انگلیسی: Rasmus Lerdorf) ساخته شد و در حال حاضر توسعهٔ آن بر عهدهٔ گروه پی اچ پی می باشد. در ابتدا پی اچ پی از عبارت صفحهٔ خانگی شخصی (به انگلیسی: Personal Home Page) گرفته شده بود. اما اکنون این کلمه مخففِ بازگشتی PHP: Hypertext Preprocessor به معنی پی اچ پی: پیش پردازندهٔ ابرمتن می باشد.
کدهای پی اچ پی توسط یک سرور وب که نرم افزار پی اچ پی بر روی آن نصب باشد، تفسیر می شوند. دستورهای این زبان می توانند به صورت مستقیم در درون کدهای HTML قرار بگیرند. زبان پی اچ پی از نسخهٔ ۴٫۳ به بعد قابلیت پشتیبانی از واسط خط فرمان را نیز به امکانات خود اضافه کرد. این قابلیت می تواند برای ایجاد نرم افزارهای غیر وبی و یا نرم افزارهایی با واسط گرافیکی کاربر مورد استفاده قرار بگیرد. پی اچ پی یک نرم افزار آزاد است که تحت مجوز پی اچ پی انتشار یافته است. این مجوز به دلیل قرار دادن محدودیت بر روی استفاده از عنوان پی اچ پی، با مجوز همگانی گنو (GPL) سازگار نیست. پی اچ پی را می توان بر روی اکثر سرورهای وب نصب کرد. همچنین قابلیت نصب آن به صورت یک شل جداگانه بر روی تقریباً تمامی سیستم های عامل و پلت فرم ها (یا سکوها) وجود دارد. تمامی این استفاده ها رایگان است.
در این دوره، بصورت قدم به قدم با مفاهیم پیشرفته PHP نظیر شئ گرایی، وراثت، رابطها، الگوهای طراحی نظیر MVC و Singleton و Factory و Facade و...، انجام اعمال پیشرفته برروی پایگاه داده ها، کتابخانه استاندارد PHP یا همان SPL، مدیریت نشست (Session) بصورت دستی، کار با AJAX و... آشنا خواهید شد. برای درک بهتر مفاهیم این دوره، دو پروژه عملی نیز بصورت کامل در طی دوره انجام خواهد شد تا مفاهیم از قالب آموزش تئوری خارج شده و شما را در عمل برای ورود به بازار کار یاری کنند.
سرفصل مطالب
مشاهده برنامه زمانی و ثبت نام: http://academy.ncis.ir/course/advanced-php
کدهای پی اچ پی توسط یک سرور وب که نرم افزار پی اچ پی بر روی آن نصب باشد، تفسیر می شوند. دستورهای این زبان می توانند به صورت مستقیم در درون کدهای HTML قرار بگیرند. زبان پی اچ پی از نسخهٔ ۴٫۳ به بعد قابلیت پشتیبانی از واسط خط فرمان را نیز به امکانات خود اضافه کرد. این قابلیت می تواند برای ایجاد نرم افزارهای غیر وبی و یا نرم افزارهایی با واسط گرافیکی کاربر مورد استفاده قرار بگیرد. پی اچ پی یک نرم افزار آزاد است که تحت مجوز پی اچ پی انتشار یافته است. این مجوز به دلیل قرار دادن محدودیت بر روی استفاده از عنوان پی اچ پی، با مجوز همگانی گنو (GPL) سازگار نیست. پی اچ پی را می توان بر روی اکثر سرورهای وب نصب کرد. همچنین قابلیت نصب آن به صورت یک شل جداگانه بر روی تقریباً تمامی سیستم های عامل و پلت فرم ها (یا سکوها) وجود دارد. تمامی این استفاده ها رایگان است.
در این دوره، بصورت قدم به قدم با مفاهیم پیشرفته PHP نظیر شئ گرایی، وراثت، رابطها، الگوهای طراحی نظیر MVC و Singleton و Factory و Facade و...، انجام اعمال پیشرفته برروی پایگاه داده ها، کتابخانه استاندارد PHP یا همان SPL، مدیریت نشست (Session) بصورت دستی، کار با AJAX و... آشنا خواهید شد. برای درک بهتر مفاهیم این دوره، دو پروژه عملی نیز بصورت کامل در طی دوره انجام خواهد شد تا مفاهیم از قالب آموزش تئوری خارج شده و شما را در عمل برای ورود به بازار کار یاری کنند.
سرفصل مطالب
- مفهوم برنامه نویسی شئ گرا و تفاوت آن با برنامه نویسی رویه گرا
- مشاهده یک نمونه کد شئ گرا و مقایسه با همان کد با ساختار رویه گرا
- نواقص و مشکلات روش رویه گرا و راه حل روش شئ گرا برای رفع آنها
- تشریح معماری برنامه نویسی شئ گرا (مفاهیم خصوصیت، رفتار و ارتباط) و توضیح کامل با مثال
- تشریح مفهوم کلاس و تفاوت آن با شئ با ارائه چندین مثال کاربردی مختلف جهت درک بهتر
- توضیح مقدماتی مفهوم وراثت در کلاس ها و مفهوم گسترش (توسعه) یک کلاس توسط کلاس دیگر
- نحوه ایجاد یک کلاس در PHP
- مفهوم فیلد
- مفهوم متد
- مفهوم عملگر <-
- متد سازنده (با پارامتر ورودی و بدون آن و با پارامترهای اختیاری و مقادیر پیشفرض)
- تشریح مفهوم کپسوله سازی کاربرد آن (معرفی و توضیح سطوح دسترسی private و public)
- توضیح مفهوم کلاس بعنوان دربرگیرنده فیلدها و متدها با تصویر
- معرفی ساختارهای نامگذاری PascalCase و camelCase
- معرفی استاندارد نامگذاری کلاسها و نحوه قراردادن کلاسها در فایلهای PHP
- دو مثال عملی (کلاس Point و Student)
- دسترسی متدها به متدهای دیگر
- دسترسی متدها به فیلدها
- توضیح کاربرد و نحوه کمک رسانی متدهای private به متدهای public (مفهوم Under the hood)
- متد مخرب و تفاوتهای آن با متد سازنده و اجرای یک نمونه استفاده کاربردی
- تست و اجرای کدهای نوشته شده در محیط ویندوز و لینوکس
- توضیح کاربرد برنامه نویسی رویه گرا در کنار برنامه نویسی شئ گرا
- مفهوم و کاربرد فیلدها و متدهای استاتیک در کلاس (معرفی کلمات کلیدی static و self و ساختار :: )
- یک نکته مهم درخصوص عناصر استاتیک
- تعریف ثابت در کلاس (معرفی کلمه کلیدی const)
- یک نکته مهم درخصوص سطح دسترسی و حوزه اعتبار و نوع ثابتهای کلاس
- سربارگذاری دستیاب های Get و Set با کمک توابع جادویی PHP (معرفی ثابتهای Get__ و Set__)
- سربارگذاری متدهای کلاس با کمک تابع جادویی Call__ در PHP
- بارگذاری خودکار کلاسها (معرفی مفاهیم Eager Loading و Lazy Loading و کاربرد دستور spl_autoload_register)
- وراثت در برنامه نویسی شئ گرا (تعریف کلاس والد و فرزند)
- معرفی نحوه ارث بردن کدها (معرفی سطح دسترسی protected)
- دسترسی به عناصر کلاس والد با کمک کلمه کلیدی parent
- معرفی مفهوم چندریختی (Polymorphism)
- جلوگیری از بازنویسی یک متد خاص یا مشتق شدن از یک کلاس بطور کامل (معرفی کلمه کلیدی final)
- کلاس abstract و قابلیتها و محدودیتهای آن
- رابط (interface) و تفاوتهای آن با کلاس abstract
- بررسی تطابق نوع یک شئ با یک کلاس یا مشتق شدن از یک کلاس با دستورات instanceof و is_a
- گرفتن اطلاعات درباره کلاسها (معرفی دستورات class_exists و get_declared_classes)
- گرفتن اطلاعات درباره متدهای کلاس (معرفی دستورات method_exists و get_class_methods)
- گرفتن اطلاعات درباره فیلدهای کلاس (معرفی دستورات property_exists و get_class_vars)
- بررسی نوع یک شئ یا کلاس (معرفی تفاوت دستورات instanceof و is_a)
- پیدا کردن نام کلاس یک شئ (معرفی دستور get_class و نحوه کاربرد آن در پیدا کردن نام کلاس اصلی و کلاس والد)
- نحوه مدیریت خطا در PHP5 به روش شئ گرا (معرفی کلاس Exception و توسعه آن برای تولید کلاسهای سفارشی)
- ساختار try...catch
- مدیریت خطاهای چندگانه
- تغییر سیستم مدیریت خطای PHP (ارسال خطاها به ایمیل، ذخیره در فایل و... برحسب نوع دلخواه خطاها)
- تعریف پیمایشگر (Iterator) برای پیمایش عناصر کلاس توسط حلقه foreach بصورت دلخواه (پیاده سازی رابط Iterator)
- تشریح ساختار رابط Iterator و نحوه کار foreach به دو روش اندیس عددی و رشته ای
- معرفی و توضیح متد Rewind
- معرفی و توضیح متد Valid
- معرفی و توضیح متد Current
- معرفی و توضیح متد Key
- معرفی و توضیح متد Next
- تبدیل شئ به رشته و بازگرداندن به حالت قبل جهت ذخیره در دیتابیس و... (معرفی دستورات serialize و unserialize)
- تشریح ساختار داخلی Serialization
- تکمیل ساختار try...catch و معرفی بلاک finally
- استفاده از آرایه ها بصورت شئ (تبدیل آرایه به شئ با کمک کلاس ArrayObject)
- توضیح متد append در کلاس ArrayObject
- توضیح متد getIterator در کلاس ArrayObject
- توضیح متد offsetExists در کلاس ArrayObject
- توضیح متد offsetGet در کلاس ArrayObject
- توضیح متد offsetSet در کلاس ArrayObject
- توضیح متد offsetUnset در کلاس ArrayObject
- دسترسی به عناصر آرایه بصورت فیلدهای شئ (توسعه کلاس ArrayObject با کمک وراثت)
- استفاده از اشیاء بصورت آرایه (پیاده سازی رابط ArrayAccess)
- توضیح متد offsetExists در رابط ArrayAccess
- توضیح متد offsetGet در رابط ArrayAccess
- توضیح متد offsetSet در رابط ArrayAccess
- توضیح متد offsetUnset در رابط ArrayAccess
- توضیح یک نکته مهم در کپی گرفتن از اشیاء (دسترسی ارجاعی به اشیاء)
- نحوه ایجاد یک کپی مستقل (مقداری) از اشیاء (معرفی دستور clone)
- معرفی مفهوم Model Chaining یا زنجیرسازی متدها و آموزش نحوه پیاده سازی آن
- تجزیه و تحلیل نیازهای پروژه و طراحی ساختار جداول و ارتباط بین آنها
- ایجاد دیتابیس و کاربر مربوطه و تولید جداول و افزودن قیدها و ساختار Relational
- ایجاد ساختار فایلها و پوشه ها و تنظیمات مربوط به Bootstrap و FontAwesome
- واردکردن پروژه ساخته شده بصورت دستی به درون محیط Zend Studio
- ایجاد ساختار Lazy Loading در پروژه
- تولید کلاس مدیریت کار با دیتابیس (کلاس DB)
- ایجاد کلاس Category و توسعه کلاس DB با وراثت جهت جلوگیری از درج مستقیم کوئری در خارج از کلاسهای کار با دیتابیس
- ایجاد چهار عمل اصلی CRUD (اعمال Create و Read و Update و Delete) در کلاس Category
- آموزش نحوه ساخت Query Builder
- ایجاد یک رابط (Interface) مشترک جهت هماهنگی و یکسان سازی الگوی تمام کلاسهای کار با دیتابیس
- فرستادن کد از Zend Studio به ++Notepad جهت استفاده از قابلیت Multi-Edit آن و بازگرداندن کد تغییریافته به ZS
- معرفی ساختار درج کامنت PHPDoc و مزایای آن
- نمایش دسته بندی های اصلی و فرعی
- نمایش محصولات هر دسته بندی همراه با تصویر و سایر اطلاعات مربوطه
- تولید لینک اضافه کردن به سبد خرید
- تولید صفحه سبد خرید
- بازنویسی قالبهای Bootstrap بدون تغییر در فایلهای CSS اصلی
- نمایش محصولات همراه با تعداد سفارش و لینک حذف از سبد خرید
- محاسبه و نمایش مبلغ کل سفارش
- معرفی دستور mysql_insert_id جهت استخراج آخرین ID تولیدشده خودکار و توضیح قابلیت مدیریت سشن در MySQL
- تعریف تمرین برای کاربران محترم (ثبت سفارشات و بخش مدیریت) و ارائه توضیحات لازم برای انجام آن
- معرفی مفهوم الگوی طراحی و قدمت آن در برنامه نویسی
- تشریح و پیاده سازی انواع مختلف الگوهای طراحی زیر:
- Strategy
- Factory
- Abstract Factory
- Adapter
- Singleton
- Iterator
- Observer
- Decorator
- ActiveRecord
- Facade
- معرفی اجمالی MVC و توضیح علت توضیح کامل آن در جلسات آینده
- معرفی منابع و مراجع مناسب جهت یادگیری بهتر الگوهای طراحی
- آموزش روشهای جلوگیری از ایجاد شئ از کلاس توسط کلمه کلیدی new و معرفی کاربردهای آن
- معرفی افزونه MySQLi و تفاوتهای آن با افزونه MySQL
- توضیح مختصر درباره منسوخ شدن افزونه MySQL روی PHP (و نه خود MySQL)
- نصب و فعالسازی افزونه های MySQLi و PDO در ویندوز و لینوکس
- اتصال به دیتابیس در MySQLi
- اجرای کوئری ساده در MySQLi
- استخراج فیلدها به روشهای مختلف در MySQLi
- انتساب خودکار فیلدها به متغیرهای معمولی (دستور bind_result)
- مفهوم Prepared Statement و مزایا و معایب آن
- استفاده از Prepared Statement در MySQLi
- انتساب پارامتر به Prepared Statement (دستور bind_param)
- معرفی نوع داده BLOB و نمایش کاربرد آن در ذخیره سازی تصاویر و... در دیتابیس با کمک MySQLi
- توضیح ساختار دستور send_long_data در MySQLi
- نمایش تصاویر ذخیره شده در دیتابیس در صفحه
- مفهوم Stored Procedure و مزایا و معایب آن
- ایجاد یک SP در محیط phpMyAdmin
- استفاده از SP در MySQLi
- ارسال پارامتر برای SP
- معرفی PHP Data Objects یا به اختصار PDO
- مزایا و معایب PDO
- اتصال به دیتابیس در PDO
- اجرای کوئری ساده در PDO
- استفاده از Prepared Statement در PDO
- انتساب پارامتر به Prepared Statement (دستورات bind_param و bind_value)
- استفاده از SP در PDO
- انتساب خودکار فیلدها به متغیرهای معمولی در PDO (دستور bindColumn)
- معرفی راههای مختلف تعیین روش استخراج (Fetch) اطلاعات در PDO
- مفهوم DAL یا Data Abstraction Layer
- معرفی AdoDb
- استفاده از AdoDb برای استخراج اطلاعات
- پیاده سازی الگوی طراحی ActiveRecord با کمک AdoDb
- معرفی SPL و نمایش کلاسها، رابطها و توابع داخلی تعریف شده در آن
- معرفی و توضیح کلاسها و رابطهای زیر و ساختار داخلی آنها و ارائه مثال عملی نحوه استفاده از آنها:
- ArrayObject : کلاس پایه جهت تبدیل آرایه به شئ
- ایجاد کلاس جدید ExtendedArrayObject جهت توسعه امکانات ArrayObject
- ArrayIterator : کلاس با قابلیت حذف و اضافه کردن عناصر در حین پیمایش
- DirectoryIterator : کلاس ویژه پیمایش پوشه ها
- RecursiveDirectoryIterator : کلاس برای پیمایش بازگشتی یک پوشه و تمام پوشه های فرعی
- RecursiveIteratorIterator : کلاس جهت پیمایش درون پیمایشگرهای بازگشتی
- AppendIterator : کلاس برای ادغام چند پیمایشگر و پیمایش همه آنها به ترتیب
- FilterIterator : کلاس جهت پیمایش همراه با اعمال فیلتر و رد کردن عناصری که با فیلتر تطابق ندارند
- LimitIterator : کلاس به منظور پیمایش بخشی از عناصر با مشخص کردن نقطه شروع و تعداد عنصر موردنظر
- NoRewindIterator : کلاس برای پیمایش بدون بازگشت عناصر
- SeekableIterator : رابط برای اعطای قابلیت جهش به مکان خاص در عناصر
- RecursiveIterator : رابط جهت اعطای قابلیت پیمایش بازگشتی به یک کلاس
- SplFileObject : کلاس جهت مدیریت فایلها
- SplFileInfo : کلاس جهت استخراج اطلاعات درباره فایلها
- SplObjectStorage : کلاس جهت ایجاد مخزنی از اشیاء مختلف
- معرفی اجزا (Model - View - Controller)
- مفهوم Bootstrap
- ارجاع تمام درخواستها به index.php توسط htaccess.
- تعریف بارگذار خودکار (Lazy Loading)
- مدیریت تمام خطاها با روش Exception
- مفهوم Initializer
- توضیح ساختار Include Path در PHP و نحوه تغییر آن
- ایجاد ساختار تنظیمات پیشفرض با قابلیت ویرایش و بازنویسی در هر پروژه
- ایجاد Loader با الگوی Singleton جهت جلوگیری از بارگذاری مجدد کلاسها
- مفهوم Router و نقش آن در MVC
- تشخیص کنترلر، اکشن و پارامترها از ورودی و حذف کارکتهای غیرمجاز از URL با کمک عبارات باقاعده
- تفکیک پارامترها بصورت زوجهای key/value
- مفهوم Dispatcher و تشریح ساختار داخلی آن
- دریافت کنترلر، اکشن و پارامترها از مسیریاب و فراخوانی اکشن مناسب از کنترلر و ارسال پارامترها
- مدیریت خطاهای احتمالی مبنی بر عدم وجود کنترلر یا اکشن و نمایش خطای مناسب با کمک Exception
- ایجاد یک کلاس پایه برای توابع کاربردی
- مفهوم کتابخانه ها (Libraries) در الگوی MVC
- ایجاد قابلیت رندر ویو مشابه فریمورک Yii با امکانات زیر:
- - دسترسی ویوها به عناصر کنترلر
- - دسترسی ویوها به پارامترها بصورت متغیرهای مستقیم
- - دسترسی ویوها به یکدیگر و فراخوانی یک ویو در داخل ویوی دیگر (ویوهای فرعی و جزئی)
- - پشتیبانی از Layout
- - پیاده سازی متدهای render و renderPartial و renderText
- ایجاد DAL جهت سهولت دسترسی به دیتابیسهای مختلف و قابلیت سوئیچ بین DMBSها بدون تغییر کد مدلها
- ایجاد مدلها با الگوی ActiveRecord
- Traceکردن مجدد روند کار از لحظه ورود آدرس در مرورگر جهت تفهیم بهتر روش کار MVC
- بهره گیری از htaccess. برای جلوگیری از دسترسی کاربران سایت به پوشه های داخلی هسته MVC
- تشریح ساختار مدیریت سشن در PHP
- عملکرد متد session_set_save_handle
- نقش تنظیمات مربوط به سشن (session.save_handler و session.save_path و...) و موارد امنیتی مرتبط
- مشاهده و تغییر تنظیمات php.ini در برنامه (معرفی دستورات ini_set و ini_get و ini_get_all و ini_restore)
- آموزش ساخت کلاس ذخیره سشن در دیتابیس بجای فایل
- ساخت خودکار جدول درصورت عدم وجود توسط اسکریپت
- حذف سشنهای منقضی شده
- راه اندازی خودکار سشن
- اجرای خودکار اسکریپت دلخواه در زمان پایان یافتن اسکریپت (معرفی دستور register_shutdown_function)
- روشهای مختلف استفاده از Callback (رشته و آرایه)
- مدیریت خطاهای سشن بصورت Exception
- تغییر Session ID جهت جلوگیری از حملات Session Hijacking و Session Fixation
- تغییر عملکرد باز کردن سشن (session_start) جهت استفاده از دیتابیس
- تغییر عملکرد بستن سشن (session_write_close) جهت استفاده از دیتابیس
- تغییر عملکرد تخریب سشن (session_destroy) جهت استفاده از دیتابیس
- تغییر عملکرد خواندن سشن (['echo $_SESSION['test) جهت استفاده از دیتابیس
- تغییر عملکرد نوشتن سشن (SESSION['value'] = 25_$) جهت استفاده از دیتابیس
- تغییر عملکرد زباله جمع کن سشن (session_gc) جهت استفاده از دیتابیس
- مباحث مرتبط با امنیت در زمان ذخیره کردن سشن در دیتابیس
- گسترش کلاس ذخیره سشن در دیتابیس جهت بدست آوردن تعداد و اسامی کاربران آنلاین با کمک عبارات با قاعده (RegExp)
- مفهوم Namespace در برنامه نویسی شئ گرا
- تعریف فضاهای نام تودرتو
- استفاده از فضاهای نام در برنامه (دستور use) و اعطای اسم مستعار به کلاسها
- نحوه فعال کردن نمایش خطاها در لینوکس و اعمال تغییرات در php.ini و راه اندازی مجدد Apache
- مفهوم AJAX
- نحوه استفاده از AJAX با کمک jQuery
- ارسال مقادیر برای سرور توسط AJAX
- دریافت مقادیر از سرور با کمک AJAX
- اصلاح بخشی از صفحه بدون نیاز به Refresh شدن
- نمایش ساعت متحرک در صفحه با کمک AJAX
- استفاده از AJAX در MVC (روش کاربرد AJAX با رعایت اصول معماری MVC در ارسال درخواست و دریافت پاسخ)
- عبارات با قاعده (Regular Expressions)
- آشنایی با ساختار PCRE (جداکننده ها، الگوهای تودرتو، کلاسها، اصلاحگرها، شروع، پایان، اندازه، حالت حریصانه و...)
- بررسی وجود الگوی موردنظر در متن (دستور preg_match)
- یافتن تمام موارد وجود الگوی موردنظر (دستور preg_match_all)
- جایگزین کردن موارد یافت شده با عبارت دلخواه (دستور preg_replace)
- اجرای کد نمونه (جایگزینی تمام لینکهای یک سایت با لینکهای سایت خودمان)
- آشنایی با CURL
- نصب و فعالسازی افزونه CURL برروی PHP در لینوکس و ویندوز
- نحوه دریافت صفحات سایر سایتها با CURL
- نحوه دریافت دانلود فایلهای سایر سایتها با CURL
- توضیح کاربردهای مختلف CURL ازقبیل لاگین کردن به سایتهای دیگر، ارسال و دریافت کوکی و...
- کار با GD
- نصب و فعالسازی افزونه GD برروی PHP در لینوکس و ویندوز
- آموزش تولید CAPTCHA با GD
- استفاده از فونت و رنگ آمیزی و ترسیم خطوط و کمان و دایره و چرخش حروف و... جهت پیچیده شدن CAPTCHA
- ذخیره تصاویر تولید شده توسط GD در فایل
- نمایش تصاویر تولید شده توسط GD بصورت مستقیم در صفحه HTML (بدون ذخیره سازی در فایل)
- توضیح کاربردهای مختلف GD ازقبیل ساخت نمودار، آپلود امن تصاویر و...
- آشنایی با آرایه SERVER_$ جهت استخراج اطلاعات مربوط به بازدیدهای کاربران (IP و صفحه و زمان درخواست و User Agent و...)
- ذخیره اطلاعات کاربران در فایل Log جهت استفاده های آماری و امنیتی
- فشرده سازی محتوای فایلهای Log جهت کاهش حجم با الگوریتمهای مختلف ازقبیل bzip و zlib و gzip و...
- تعیین میزان فشرده سازی
- سخن پایانی و معرفی روشهای ارتباطی جهت دریافت پشتیبانی و مطرح کردن سؤالات و مشکلات احتمالی
مشاهده برنامه زمانی و ثبت نام: http://academy.ncis.ir/course/advanced-php