همه چیز در مورد فایل پیکربندی PHP – به زبان ساده


در این راهنما قصد داریم به بررسی فایل پیکربندی PHP که php.ini نام دارد بپردازیم. در این راهنمای مقدماتی هدف از این فایل پیکربندی، محل قرارگیری آن و برخی تنظیمات مهم پیکربندی آن را مورد بررسی قرار میدهیم.
php.ini چیست؟
شما چه یک فرد تازهکار در زمینه PHP باشید و چه یک توسعهدهنده پارهوقت باشید، قطعاً تاکنون نام فایل php.ini را شنیدهاید. این فایل مهمترین فایل پیکربندی PHP محسوب میشود.
زمانی که PHP اجرا میشود، به دنبال فایل php.ini در برخی مکانهای خاص میگردد تا آن را بارگذاری کند. این فایل امکان پیکربندی چند تنظیم مهم را فراهم میسازد. شما باید از این موارد آگاهی داشته باشید، چون در اغلب موارد باید این تنظیمات را در این فایل دستکاری کنید.
از سوی دیگر این امکان هم محتمل است که تاکنون هرگز نیاز به ویرایش فایل php.ini برایتان پیش نیامده باشد. PHP میتواند با تنظیمات پیش فرضی که در فایل php.ini ارائه شده است بدون هیچ مشکلی اجرا شود، چون در ابتدا تنظیمات پیشفرض توصیه شده در این فایل ذخیره شدهاند. در واقع هیچ پارامتر پیکربندی ضروری در فایل php.ini وجود ندارد که لازم باشد تعیین کنیم تا PHP اجرا شود.
با این حال فایل php.ini چند تنظیم مهم دارد که باید با آنها آشنا باشید. در واقع یادگیری این موارد برای یک توسعهدهنده PHP امری ناگزیر محسوب میشود و دیر یا زود با آنها سروکار خواهید یافت.
php.ini کجاست؟
در این بخش به بررسی شیوه یافتن فایل php.ini میپردازیم که در زمان اجرای اسکریپتهای PHP بارگذاری میشود. این کار کمی پیچیده است، زیرا مکان فایل php.ini بسته به محیطی که PHP در آن اجرا میشود ممکن است تفاوت زیادی داشته باشد. اگر روی ویندوز کار میکنید، فایل php.ini احتمالاً درون دایرکتوری نصب PHP در درایو سیستم قرار دارد. از سوی دیگر اگر از سیستم عامل دیگری استفاده میکنید در این صورت حدس زدن محل دقیق php.ini دشوار است و اختمالات مختلفی وجود دارد.
به همین جهت تابع ()phpinfo به کمک ما میآید. این تابع محل قرارگیری فایل php.ini را مشخص میسازد. همچنین اطلاعات مهم پیکربندی PHP را در خروجی ارائه میکند.
امکان اجرای تابع ()phpinfo از طریق ساخت یک فایل php. و فراخوانی تابع در آن وجود دارد. در ادامه یک فایل به نام phpinfo.php میسازیم و محتوای زیر را در آن وارد میکنیم و آن را در ریشه سند قرار میدهیم:
این فایل را در مرورگر بارگذاری کنید تا خروجی ()phpinfo را ببینید. به بخش زیر نگاه کنید:
چنان که میبینید، دو بخش وجود دارد. بخش نخست مسیر فایل php.ini است:
Configuration File (php.ini) Path
و بخش دوم نیز فایل پیکربندی که در واقع php.ini از آنجا بارگذاری میشود:
Loaded Configuration File
بنابراین میتوانید فایل php.ini را که در بخش فوق مورد اشاره قرار گرفته است ویرایش کنید و در اغلب موارد این وضعیت کافی است. البته اگر PHP را به صورت یک ماژول آپاچی اجرا میکنید، باید سرور آپاچی را ری استارت کنید تا مطمئن شوید که تغییرات ایجاد شد در فایل php.ini بازتاب یافتهاند. از سوی دیگر اگر از نرمافزاری مانند WAMP یا XAMPP برای توسعه وب بهره میگیرید، ویرایش فایل php.ini آسانتر خواهد بود. در بخش بعدی به بررسی چند تنظیمات مهم در فایل php.ini میپردازیم.
تنظیمات مهم فایل php.ini
فایل php.ini دایرکتیوهای پیکربندی بسیار زیادی دارد که امکان تغییر دادن رفتارهای مختلف PHP را فراهم میسازند. در واقع زمانی که فایل php.ini را باز میکنیم، ممکن است از دیدن تعداد زیاد دایرکتیوهای داخلش بهتزده شویم. در این بخش تلاش میکنیم این موارد را بر اساس رفتارشان گروهبندی کنیم و امیدواریم درک آنها برای شما آسان باشد. البته قصد نداریم تکتم دایرکتیوها را بررسی کنیم، اما برخی از مهمترین آنها را توضیح خواهیم داد. در ادامه به بررسی انواع دایرکتیوهایی که قصد داریم توضیح دهیم میپردازیم:
- دایرکتیوهای مدیریت خطا
- دایرکتیوهای آپلود فایل
- دایرکتیوهای مرتبط با امنیت
- دایرکتیوهای نشست (Session)
- دایرکتیوهای متفرقه
دایرکتیوهای مدیریت خطا
در این بخش به بررسی دایرکتیوهایی میپردازیم که به منظور مدیریت خطا استفاده میشوند و برای دیباگ کردن در زمان توسعه مفید هستند.
display_errors
دایرکتیو display_errors امکان کنترل این که خطاها در زمان اجرا روی صفحه ظاهر میشوند یا نه را فراهم میسازد. میتوان مقدار آن را روی on تنظیم کرد تا خطاها روی صفحه ظاهر شوند. با تعیین مقدار off نیز غیرفعال میشود. لازم به تذکر است که این گزینه در یک سایت عملیاتی هرگز نباید فعال شود. چون موجب کندتر شدن سایت میشود و سرنخهای مهمی در مورد آسیبپذیریهای سایت در اختیار هکرها قرار میدهد.
error_reporting
این دایرکتیو امکان تعیین سطح گزارشدهی خطا را فراهم میسازد. این دایرکتیو به طور عمده همراه با دایرکتیو قبلی یعنی display_errors کار میکند. این دایرکتیو میتواند ثابتهای E_ALL، E_NOTICE ،E_STRICT و E_DEPRECATED را بپذیرد.
اگر بخواهیم همه انواع خطا مانند خطاهای حساس، هشدارها، تابعهای منسوخشده و غیره نمایش یابند، باید از E_ALL استفاده کنیم. همچنین میتوانیم مقادیر مختلف را با هم ترکیب کنیم تا خطاهای خاص فیلتر شوند. برای نمونه اگر بخواهیم همه خطاها به جز notice-ها نمایش یابند، باید از E_ALL & ~E_NOTICE استفاده کنیم.
error_log
در یک وبسایت عملیاتی باید مطمئن شویم که PHP هیچ خطایی را در مرورگر کلاینت نمایش نمیدهد. به جای آن میتوانیم خطاها را در جایی لاگ کنیم تا بعداً در صورتی که مشکلی در سایت پیش آمد به آنها رجوع کنیم. دایرکتیو error_log امکان تعیین نام فایلی که خطاها در آن ثبت میشوند را فراهم میسازد. باید مطمئن شویم که فایل از سوی کاربر وبسرور قابل نوشتن است.
دایرکتیوهای آپلود فایل
در این بخش برخی از دایرکتیوهای مهمی که امکان استفاده از قابلیت آپلود فایل را در فرمهای PHP فراهم میسازند مورد بررسی قرار میدهیم.
file_uploads
این یک مقدار بولی است که امکان فعالسازی آپلود فایل از طریق HTTP را فراهم میسازد. میتوان مقدار آن را on تعیین کرد تا از فیلد فایل در فرمها استفاده شود و کاربران بتوانند فایلها را از روی رایانه خود به روی سرور آپلود کنند. از سوی دیگر با تعیین این دایرکتیو روی مقدار off این امکان کلاً غیرفعال میشود.
upload_max_filesize
اگر دایرکتیو قبلی یعنی آپلود فایل در وبسایت فعال شده باشد و با مشکلاتی در مورد آپلود کردن فایل مواجه باشید، ابتدا باید این دایرکتیو را بررسی کنید. این دایرکتیو امکان تعیین بیشینه اندازه فایلی که قرار است آپلود شود را فراهم میسازد.
به صورت پیشفرض مقدار بیشینه اندازه فایل روی 2 مگابایت است و از این رو کاربران نمیتوانند فایلی بزرگتر از این مقدار را آپلود کنند. امکان تنظیم دقیق این مقدار بسته به نیاز وجود دارد. در اغلب موارد لازم است این مقدار افزایش یابد تا فایلهای بزرگتری را بتوان روی سرور آپلود کرد.
post_max_size
این دایرکتیو امکان تعیین اندازه بیشینه دادههای POST را در فرمها فراهم میسازد. زمانی که کاربر یک فرم را با متد POST ارسال میکند، اندازه کلی دادههای POST نباید از مقداری که در این دایرکتیو تعیین شده تجاوز کند.
این مقدار باید بزرگتر از مقداری باشد که در دایرکتیو upload_max_filesize تنظیم شده است، چون فایلهای آپلود شده به وسیله درخواستهای POST مدیریت میشوند.
دایرکتیوهای امنیتی
در این بخش چند دایرکتیو مهم که با موضوع امنیت مرتبط هستند را بررسی میکنیم.
allow_url_fopen
دایرکتیو allow_url_fopen به صورت پیشفرض غیرفعال است. اما زمانی که آن را فعال کنیم، امکان گنجاندن فایلهای ریموت در تابعهای فایل PHP فراهم میآید. این بدان معنی است که فایلهای PHP میتوانند کدهای مربوط به سرورهای دیگر را نیز اجرا کنند. در مورد فعالسازی این امکان باید با احتیاط رفتار کرد زیرا اگر کد در معرض جمله تزریق باشد، این دایرکتیو موجب میشود که کاربر خرابکار به آسانی کنترل سرور شما را به دست بگیرد.
allow_url_include
دایرکتیو allow_url_include مشابه دایرکتیو allow_url_fopen است، اما امکان گنجاندن فایل ریموت را تنها در تابعهای include فراهم میسازد. بدین ترتیب میتوان فایلهای ریموت را در تابعهای include ،include_once ،require و require_once مورد استفاده قرار داد.
اگر بخواهید این دایرکتیو را فعال کنید، باید مطمئن شوید که دایرکتیوهای allow_url_fopen نیز فعال شدهاند.
دایرکتیوهای نشست
مدیریت نشست (Session) یکی از مهمترین جنبههایی است که هر کس در زمان کار با PHP باید انجام دهد. در این بخش به توضیح برخی از مهمترین دایرکتیوهای نشست میپردازیم.
session.name
دایرکتیو session.name امکان تعیین نام کوکی نشست را فراهم میسازد. به صورت پیشفرض مقدار آن روی PHPSESSID تنظیم شده است، اما میتوان این مقدار را به هر چیزی دیگری تغییر داد.
session.auto_start
اگر مقدار دایرکتیو session.auto_start را روی عدد 1 تنظیم کنید، ماژول نشست در PHP به صورت خودکار برای هر درخواست یک نشست باز میکند و از این رو نیازی به استفاده از تابع session_start در اسکریپتها وجود نخواهد داشت.
session.cookie_lifetime
دایرکتیو session.cookie_lifetime امکان تعیین عمر یک کوکی نشست را فراهم میسازد. به صورت پیشفرض مقدار آن روی 0 ثانیه تنظیم شده است و معنی آن این است که کوکی نشست زمانی که مرورگر بسته شد پاک خواهد شد. این وضعیت در مواردی که میخواهید یک نوع کارکرد «مرا به خاطر داشته باش» راهاندازی کنید مفید خواهد بود و به کاربران امکان میدهد که کار خود را روی سایت شما از جایی که در بازدید قبل مانده بود ادامه دهند.
دایرکتیوهای متفرقه
در آخرین بخش این مقاله به بررسی مواردی از دایرکتیوهای دیگر میپردازیم که در چارچوب اجرای اسکریپت PHP حائز اهمیت هستند.
memory_limit
دایرکتیو memory_limit امکان تعیین محدودیت بیشینه حجم حافظه مورد استفاده از سوی یک اسکریپت را فراهم میسازد. این دایرکتیو باید بسته به نیازهای شما تنظیم شود و نباید آن را روی مقدار بالایی تنظیم کنید، چون موجب از کار افتادن سرور میشود. در این موارد اسکریپتهای بد و ضعیف میتوانند همه حافظه سرور را مصرف میکنند.
max_execution_time
دایرکتیو بیشینه زمانی که یک اسکریپت میتواند اجرا شود را تعیین میکند. مقدار پیشفرض روی 30 ثانیه است و میتوان آن را تا هر حد معقولی بسته به نیاز افزایش داد. همانند دایرکتیو قبلی این عدد نباید زیاد بزرگ باشد زیرا موجب بروز مشکلاتی برای سرور میشود.
max_input_time
دایرکتیو max_input_time امکان تعیین بیشینه مقدار زمانی که یک اسکریپت مجاز به تحلیل دادههای فرم ورودی از یک متد GET یا POST باشد را تعیین میکند. اگر فرمهای روی وبسایت نیازمند ارسال حجم بالایی از دادهها هستند، باید مقدار این دایرکتیو را افزایش دهید.
سخن پایانی
امکان توضیح همه دایرکتیوهای فایل php.ini در یک مقاله وجود ندارد، اما ما در این راهنما تلاش کردیم مهمترین موارد را بررسی کنیم. برای شما به عنوان یک توسعهدهنده PHP بسیار حائز اهمیت است که بتوانید پیکربندی PHP را بسته به الزامات خود تنظیم کنید.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی PHP
- مجموعه آموزشهای برنامهنویسی
- گنجینه برنامهنویسی PHP
- افزودن Google reCAPTCHA نسخه ۳ به فرم PHP — به زبان ساده
- ایجاد فرم ورود (Login) با PHP — از صفر تا صد
- آموزش کامل MVC در PHP — از صفر تا صد و به زبان ساده
==