- پنجشنبه 24 خرداد 1397 ساعت 10:21
- 3.1.9
- در حال تکمیل
- فعال
دولوپرها اغلب رفتار سیستمی متفاوتی را بسته به اینکه یک اپلیکیشن در محیط دولوپمنت (توسعه) یا پروداکشن (محصول ساخته شده) قرار دارد خواستار هستند. برای مثال، خروجی وِربُس ارور (Verbose Error) چیزی است که در فاز توسعه یک اپلیکیشن بسیار مفید است، اما بعد از دِپلوی (Deploy) اپلیکیشن و اجرا روی محیط سایت ممکن است به یک مشکل امنیتی تبدیل شود.
اصطلاحات فنی
در دیکشنریهای مختلف مانند کمبریج و آکسفورد در تعریف وِربُس آمده است: "استفاده یا شامل کلمات بیشتر از حد نیاز". همین تعریف به زیبایی مفهوم این نوع خطا را بیان میکند، یعنی این نوع خطا جزئیاتی بیش از حد نیاز (که در مرحله دپلوی نیاز به آن نیست) را در اختیار دولوپر قرار میدهند.
Verbose Error خطاهایی هستند که با اکسپشنهای هندل نشده و اِستک تریس اولین محل رخ دادن خطا را نشان میدهند، معمولا همراه با شماره خط و نام فایلی که خطا در آن رخ داده است همراه هستند. معمولا این نمایش خطاها همراه با دستورات چند خط قبل و بعد، محل رخدادن خطا هستند. ضمن اینکه معمولا تعداد این خطوط، در فریمورکهای مختلف قابل تنظیم است. این اصطلاح معادل فارسی مناسبی ندارد و بهتر است به همین شکل تلفظ شود.
اِستک تریس (Stack Trace) چند مرحله از خطا را نشان میدهند، مثلا خطا در چه خطی از چه فایلی رخ داده که در اثر فراخوانی چه متدی در چه خطی بوده و غیره.
دولوپرها میخواهند در مرحله دیباگ و تست، این خطاها را ببینند، اما تمایل دارند تا این خطاها را به صورت خطاهای کاربرپسند نمایش دهند، یا حداقل اطلاعات سطح پایینتر و کمتری را به کاربر نمایش دهند، بدون اینکه این کار، کوچکترین سرنخی از معماری اپلیکیشن را فاش کند، زیرا ممکن است اینکار راهنمایی برای افراد فضول و خرابکار باشد.
ثابت ENVIRONMENT
به صورت پیشفرض، کدایگنایتر مقدار ثابت مروبط به محیط کار اپلیکیشن (ENVIRONMENT) را با استفاده از آرایه $_SERVER['CI_ENV']
مقداردهی میکند، در صورتی که این متغییر دارای مقدار نباشد، مقدار پیشفرض development را به آن تخصیص میدهد. در بالای فایل index.php خط را خواهید دید:
define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');
این متغییر سرور را در فایل .htaccess یا کانفیگ آپاچی با استفاده از SetEnv میتوانید مقداردهی کنید. روش جایگزینی برای nginx و سایر سرورها نیز وجود دارد، یا میتوانید این لاجیک (منطق) را به صورت کامل حذف کنید و این ثابت را بر اساس آدرس IP سرور مقداردهی کنید.
علاوه بر تاثیر بر برخی از رفتارهای اصلی و پایهای فریمورک (بخش بعد را ببینید)، میتوانید این ثابت را در بخشهای مختلف اپلیکیشن خود استفاده کنید تا بین محیطهای که اپلیکیشن در آنها در حال اجرا است، تفاوتهایی را به وجود آورید. منظور از این جمله این است که در حالت عادی، کدایگنایتر رفتارهای متفاوتی در هر سیستم از خود نشان میدهد، علاوه بر این، شما نیز میتواند رفتارهایی را برای اپلیکیشن خود تعریف کنید تا بسته به محیط رخ دهند.
تاثیر بر رفتار پیشفرض فریمورک
مکانهای مختلفی در سیستم کدایگنایتر وجود دارد که از ثابت ENVIRONMENT استفاده میشود. این بخش نحوه تاثیر پذیرفتن رفتار پیشفرض فریمورک را توضیح میدهد.
گزارش خط
اگر مقدار development به ثابت ENVIRONMENT نسبت داده شود، باعث میشود تمامی خطاهای PHP وقتی اتفاق میافتند برای رندر به مرورگر ارسال شوند. در مقابل، مقداردهی production به این ثابت، خروجی تمام نوعهای خطاها را غیرفعال میکند. غیرفعالسازی گزارش خطاها (error reporting) در فاز پروداکشن، یک راهکار امنیتی (best practice) خوب است.
اصطلاحات فنی
Best Practice یک یا چند تکنیک است که بهترین روش یافت شده توسط متخصصها و درباره یک موضوع تاکنون است، مثلا در مثال بالا، غیرفعالسازی گزارشگیری خطاها و هندل کردن خطاها با اکسپشنها بهترین راهکار و به اصطلاح best practice این زمینه است که هم موجب افزایش امنیت میشود و هم کاربرپسندتر است. این اصطلاح معادل فارسی مناسبی ندارد و بهتر است به همین شکل بست پرَکتیس تلفظ شود.فایلهای کانفیگ
در صورت تمایل، کدایگنایتر میتواند فایلهای کانفیگ مشخصی را بسته به محیط توسعه لود کند. احتمالا این کار برای مدیریت چیزهایی مانند کلیدهای API متفاوت در محیطهای مختلف کاربرد دارد. جزئیات بیشتر در بخش محیط توسعه در پست کلاس Config از مجموعه پستهای داکیومنت کدایگنایتر توضیح داده شده است.
سایر پستهای داکیومنت
- به کدایگنایتر خوش آمدید
- نصب
- بررسی اجمالی
- شروع به استفاده از کدایگنایتر
- کدایگنایتر در یک نگاه
- فیچرهای کدایگنایتر
- فلوچارت اپلیکیشن
- مدل ویو کنترلر
- اهداف طراحی و معماری
- خودآموز
- مشارکت در کدایگنایتر
- نوشتن مستندات کدایگنایتر در صف ترجمه
- گواهی مبدأ توسعه دهنده 1.1 در صف ترجمه
- مباحث کلی
- URLها در کدایگنایتر
- کنترلرها
- نامهای رزرو شده
- ویوها
- مدلها
- هلپرفانکشنها
- استفاده از لایبرریهای کدایگنایتر
- ساخت لایبرری
- استفاده از درایورهای کدایگنایتر
- ساخت درایور
- ساخت کلاسهای هسته سیستم
- ساخت کلاسهای کمکی
- هوکها - توسعه هسته فریمورک
- بارگذاری خودکار ریسورسها
- فانکشنهای عمومی
- فانکشنهای سازگاری
- مسیریابی URI
- هندل کردن خطاها
- کش کردن صفحات وب
- ارزیابی و تجزیه و تحلیل عملکرد اپلیکیشن
- اجرای کدایگنایتر به وسیله خط فرمان
- مدیریت چندین اپلیکیشن
- هندل کردن محیطهای چندگانه
- سینتکس جایگزین PHP برای فایلهای ویو
- Security در صف ترجمه
- راهنمای کدنویسی در PHP
- لایبرریها در صف ترجمه
- کلاس بنچمارک
- درایور کش در صف ترجمه
- Calendaring Class در صف ترجمه
- Shopping Cart Class در صف ترجمه
- Config Class در صف ترجمه
- Email Class در صف ترجمه
- Encrypt Class در صف ترجمه
- Encryption Library در صف ترجمه
- File Uploading Class در صف ترجمه
- Form Validation در صف ترجمه
- FTP Class در صف ترجمه
- Image Manipulation Class در صف ترجمه
- Image Manipulation Class در صف ترجمه
- Javascript Class در صف ترجمه
- کلاس زبان
- Loader Class در صف ترجمه
- کلاس مایگریشن
- Output Class در صف ترجمه
- Pagination Class در صف ترجمه
- Template Parser Class در صف ترجمه
- Security Class در صف ترجمه
- Session Library در صف ترجمه
- HTML Table Class در صف ترجمه
- Trackback Class در صف ترجمه
- کلاس تایپوگرافی در صف ترجمه
- Unit Testing Class در صف ترجمه
- URI Class در صف ترجمه
- User Agent Class در صف ترجمه
- XML-RPC and XML-RPC Server Classes در صف ترجمه
- کلاس انکود کردن آرشیو Zip در صف ترجمه
- رفرنس دیتابیس در صف ترجمه
- شروع سریع دیتابیس: کد نمونه
- پیکربندی دیتابیس در صف ترجمه
- Connecting to your Database در صف ترجمه
- Queries در صف ترجمه
- Generating Query Results در صف ترجمه
- Query Helper Methods در صف ترجمه
- Query Builder Class در صف ترجمه
- Transactions در صف ترجمه
- Database Metadata در صف ترجمه
- فراخوانی سفارشی فانکشن
- Database Caching Class در صف ترجمه
- Database Forge Class در صف ترجمه
- Database Utility Class در صف ترجمه
- DB Driver Reference در صف ترجمه
- هلپرفانکشنها
- هلپرفانکشن Array
- هلپرفانکشن CAPTCHA در صف ترجمه
- هلپرفانکشن Cookie
- Date Helper در صف ترجمه
- هلپرفانکشن Directory
- Download Helper در صف ترجمه
- Email Helper در صف ترجمه
- File Helper در صف ترجمه
- هلپرفانکشن Form در صف ترجمه
- HTML Helper در صف ترجمه
- Inflector Helper در صف ترجمه
- هلپرفانکشن Language
- هلپرفانکشن Number
- Path Helper در صف ترجمه
- Security Helper در صف ترجمه
- Smiley Helper در صف ترجمه
- هلپرفانکشن String
- Text Helper در صف ترجمه
- Typography Helper در صف ترجمه
- URL Helper در صف ترجمه
- XML Helper در صف ترجمه