كيفية استخدام ملف .user.ini في ServBay: دليل تكوين PHP محليًا
تُعد ServBay بيئة تطوير ويب محلية متكاملة قوية مصممة خصيصًا للمطورين، حيث تدعم عدداً من اللغات والتقنيات، مع إمكانية إدارة مرنة لإصدارات PHP وخيارات ضبط سهلة. في واقع التطوير، قد تتطلب مشاريع مختلفة إعدادات PHP مخصصة، مثل حدود حجم رفع الملفات، حدود الذاكرة أو مستوى تقارير الأخطاء. تعديل ملف php.ini العام سيؤثر على جميع المشاريع، مما قد يصعب إدارة عدة مشاريع معًا.
ولحسن الحظ، توفر PHP آلية ملف .user.ini التي تتيح للمطورين تعريف إعدادات PHP مخصصة على مستوى دليل معين وما تحته، دون الحاجة لتعديل ملف php.ini العام. تدعم ServBay هذه الميزة بشكل كامل، مما يجعل ضبط إعدادات PHP بحسب كل مشروع أو مجلد أمرًا سهلاً وفعالاً.
في هذا المقال، سنستعرض آلية عمل ملف .user.ini، وكيفية استخدامه ضمن ServBay، مع أمثلة عملية لضبط إعدادات PHP مخصصة لمشروع معين.
مقدمة حول ملف .user.ini
تم تقديم ملف .user.ini في إصدار PHP 5.3.0 كميزة تهدف لتوفير طريقة أكثر مرونة وأماناً من ضبط معايير PHP عبر php_value وphp_flag في إعدادات خوادم الويب (مثل ملف .htaccess في Apache). يسمح للمطورين بوضع ملف .user.ini في دليل متاح عبر الويب، بحيث تطبق التعليمات الواردة فيه فقط على هذا المجلد وكافة المجلدات الفرعية.
أبرز الميزات
- نطاق محدود: تعليمات الضبط داخل ملف
.user.iniتؤثر فقط على الدليل الذي يوجد فيه والفرعية منه، دون المساس بإعداداتphp.iniالعام أو مشاريع أخرى في ServBay. - مرونة عالية: يمكن للمطورين تخصيص إعدادات PHP لكل مشروع حسب الحاجة.
- سهولة الإدارة: لا حاجة لتعديل إعدادات الخادم أو PHP العامة، ما يقلل من مخاطر حدوث تعارضات جعل ضبط الإعدادات أكثر استقلالية وقابلية للنقل.
- لا حاجة لإعادة التشغيل: بخلاف التعديلات على
php.iniالتي تستلزم غالبًا إعادة تشغيل PHP-FPM أو خادم الويب، فعادةً ما تصبح تعديلات.user.iniسارية تلقائياً بعد فترة زمنية يحددها خيارuser_ini.cache_ttl(افتراضيًا عادةً 300 ثانية - أي 5 دقائق).
التعليمات التي يمكن ضبطها
ليس بإمكانك ضبط كل معايير PHP من خلال ملف .user.ini. إمكانية الضبط تعتمد على "وضع التغيير" (Changeable Modes) لكل إعداد. فقط الإعدادات التي تحمل الوضع PHP_INI_USER أو PHP_INI_PERDIR أو PHP_INI_ALL يمكن ضبطها عبر .user.ini.
من التعليمات الشائعة التي يمكن ضبطها في .user.ini:
upload_max_filesizepost_max_sizememory_limitdisplay_errorslog_errorsmax_execution_timesession.save_pathdate.timezone
أما الإعدادات ذات الوضع PHP_INI_SYSTEM (مثل extension_dir, zend_extension, disable_functions وغيرها) لا يمكن ضبطها عبر .user.ini ويجب أن تُعدّل فقط من خلال ملف php.ini الأساسي أو إعدادات خادم الويب.
للاطلاع على وضع التغيير لأي إعداد، يرجى مراجعة دليل PHP الرسمي لتعليمات php.ini.
استخدام .user.ini داخل ServBay
عملية استخدام ملف .user.ini في ServBay مباشرة وسهلة. وفيما يلي الخطوات، وسنستخدم ضبط upload_max_filesize وmemory_limit كمثال.
لنفترض أن جذر موقعك موجود في المسار الافتراضي لـ ServBay /Applications/ServBay/www/، وتريد تخصيص إعدادات PHP لمشروع اسمه myproject يوجد جذر الويب الخاص به ضمن /Applications/ServBay/www/myproject/public.
الخطوة 1: تحديد الدليل المستهدف
أولاً، حدد المجلد الذي ترغب بتطبيق إعدادات PHP المخصصة عليه. غالباً سيكون هذا هو جذر الويب الخاص بمشروعك (مثلاً مجلد public في مشاريع Laravel أو Symfony) أو مجلد فرعي محدد يتطلب إعدادات خاصة.
مثال: /Applications/ServBay/www/myproject/public
الخطوة 2: إنشاء أو تعديل ملف .user.ini
في هذا الدليل، أنشئ ملفًا جديدًا باسم .user.ini (إذا كان الملف موجودًا سلفًا يمكنك تعديله). لاحظ أن الملفات التي تبدأ بنقطة - مثل .user.ini - غالبًا ما تكون مخفية في معظم أنظمة الملفات، وقد تحتاج لضبط برنامج إدارة الملفات لعرض الملفات المخفية.
لإنشاء الملف عبر الطرفية:
bash
cd /Applications/ServBay/www/myproject/public
touch .user.ini1
2
2
ثم افتح ملف .user.ini في محرر نصوص وأضف إعدادات PHP التي تحتاجها، كل إعداد في سطر منفصل، مثل:
ini
; ضبط الحد الأقصى لحجم رفع الملفات إلى 20 ميجابايت
upload_max_filesize = 20M
; ضبط الحد الأقصى للذاكرة إلى 256 ميجابايت
memory_limit = 256M
; تفعيل عرض الأخطاء (يوصي به فقط أثناء التطوير)
display_errors = On1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
بعد ذلك احفظ وأغلق الملف.
الخطوة 3: انتظار سريان الإعدادات أو فرض التحديث
تغييرات ملف .user.ini لا تطبق فورياً، حيث تقوم PHP بتخزينها مؤقتاً لأغراض الأداء. وبشكل افتراضي، يتحكم خيار user_ini.cache_ttl في مدة هذا التخزين المؤقت (عادةً 300 ثانية أو 5 دقائق). بعد انتهاء فترة التخزين المؤقت، تعاد قراءة التعديلات تلقائيًا.
إذا أردت رؤية نتائج التعديلات مباشرة، يمكنك تجربة ما يلي (تبعاً لإصدار ServBay وإعداداته):
- إعادة تشغيل عملية PHP-FPM المعنية: عبر واجهة ServBay، يمكنك تحديد إصدار PHP قيد الاستخدام للموقع، ثم إيقاف وإعادة تشغيل خدمة PHP-FPM لذلك الإصدار.
- إعادة تشغيل ServBay: هذا الخيار الأكثر شمولاً، لكنه سيؤدي لإيقاف جميع الخدمات المحلية الأخرى بشكل مؤقت.
- انتظار انتهاء فترة الكاش: وهو الخيار الموصى به غالباً، خاصة إذا لم يكن الأمر عاجلاً.
الخطوة 4: التحقق من سريان إعدادات .user.ini
للتحقق من أن إعداداتك في .user.ini أصبحت فعالة، أنشئ ملف PHP بسيط لعرض معلومات إعدادات PHP.
في نفس مجلد .user.ini (مثلاً /Applications/ServBay/www/myproject/public)، أنشئ ملفاً باسم info.php يحتوي على:
php
<?php
phpinfo();
?>1
2
3
2
3
احفظ ملف info.php.
ثم، افتح مستعرض الويب لديك، وتوجه إلى العنوان المناسب على موقعك في ServBay حيث يوجد ملف info.php. إذا كان مشروعك مهيأ عبر ServBay باسم نطاق myproject.servbay.demo وملف info.php بداخل مجلد public، ستكون الرابط غالبًا بالشكل:https://myproject.servbay.demo/info.php
في صفحة phpinfo()، ابحث عن الإعدادات التي أدخلتها في .user.ini (مثلاً upload_max_filesize, memory_limit, display_errors). ستلاحظ عمودين:
- Master Value: يعرض القيمة المحددة في ملف
php.iniالعام. - Local Value: يعرض القيمة الفعالة للسكربت الحالي، والتي قد تأتي من
.user.iniأو إعدادات الخادم.
إذا ظهر في "Local Value" القيم التي أدخلتها في .user.ini (مثل 20M, 256M, On) فهذا يعني أن ملفك قيد التنفيذ بنجاح.
تنبيه هام: بعد التأكد، يجب حذف ملف info.php أو تقييد الوصول إليه لأسباب أمنية، لأنه يكشف تفاصيل إعدادات السيرفر لديك.
ملاحظات وتنبيهات إضافية
- اسم ومكان الملف: يجب أن يكون اسم الملف بدقة
.user.iniويوضع في الدليل الذي ترغب بتطبيق الإعدادات عليه؛ وسيؤثر على هذا الدليل وجميع الأدلة الفرعية. - وضع التغيير للتعليمات: كما ذُكر مسبقاً، فقط التعليمات ذات وضع
PHP_INI_USERأوPHP_INI_PERDIRأوPHP_INI_ALLيمكن تعديلها عبر.user.ini. تعديل تعليمات ذات وضعPHP_INI_SYSTEMلن يكون فعالاً ولن يظهر غالبًا أي خطأ. للاطلاع راجع دليل PHP. - التخزين المؤقت: انتبه لقيمة
user_ini.cache_ttl. إذا كنت تعدل.user.iniكثيرًا وتحتاج النتائج مباشرة، يمكنك مؤقتًا ضبط هذا الخيار في ملفphp.iniالعام إلى قيمة أقل (مثلuser_ini.cache_ttl = 5) ثم إعادته لحالته الافتراضية في بيئة الإنتاج للحفاظ على الأداء. أي تعديل علىphp.iniيتطلب إعادة تشغيل PHP-FPM. - أولوية الإعدادات: عادةً، تسلسل أولوية إعدادات PHP كالتالي: القيمة الافتراضية للنواة <
php.ini(أو ملفات ini المضافة) < إعدادات الخادم (مثلphp_value/php_flagفي Apache/nginx) <.user.ini< دوال الإعداد داخل الكودini_set(). إعدادات.user.iniتتجاوز إعداداتphp.ini، لكن يمكن تجاوزها من خلال الشيفرة البرمجية باستخدامini_set(). - الأمان: لا تقم بتخزين معلومات سرية في
.user.ini؛ رغم أن تأثيره محلي فقط، إلا أنه قد يقع ضمن مجلدات يمكن الوصول لها عبر الويب (مع أنه غالباً محمي من الوصول المباشر).
الأسئلة الشائعة (FAQ)
س: أنشأت ملف .user.ini وأضفت إعداداتي، لكنها لم تعمل، ما السبب؟
ج: الأسباب الشائعة تشمل:
- خطأ في اسم أو موضع
.user.ini: تأكد من صحة اسم الملف وموقعه الصحيح. - تعليمات غير مدعومة: ربما حاولت ضبط تعليمات لا يمكن ضبطها في
.user.ini(وضعها ليسPHP_INI_USERأوPHP_INI_PERDIR). راجع دليل PHP. - كاش لم ينته بعد: انتظر مدة
user_ini.cache_ttl(افتراضي 5 دقائق) أو أعد تشغيل PHP-FPM. - أخطاء في الصياغة: تحقق من ملف
.user.iniبحثًا عن الأخطاء. - تجاوز عبر أولويات أعلى: تحقق إن كان السكربت يقوم بتعديل الإعدادات عبر دالة
ini_set().
س: ما الفرق بين ملف .user.ini وملف php.ini العام؟
ج: يؤثر ملف php.ini العام على كامل بيئة PHP (أو كل التطبيقات الناتجة عن إصدار PHP معين)، وتطبق إعداداته على جميع سكربتات PHP إلا إذا تم تجاوزها بإعدادات أولوية أعلى. أما .user.ini ففعال فقط في الدليل الموجود فيه وما تحته، ويقبل فقط بعض التعليمات المعينة. الميزة الأساسية لـ .user.ini هي التحكم المحلي من دون المساس بالإعدادات العامة.
الخلاصة
استخدام ملف .user.ini في ServBay هو الأسلوب الأمثل لإدارة إعدادات PHP الخاصة بكل مشروع. يمنحك مرونة كبيرة ويمكنك من ضبط بيئة تطوير PHP بما يناسب احتياجات مشروعك دون التأثير على مشروعات أخرى أو الإعدادات العامة في ServBay. بناءً على هذا الدليل والأمثلة، ستتمكن من استخدام .user.ini بكل احترافية في مشاريعك ضمن ServBay، ما سيعزز من كفاءة التطوير وسهولة إدارة البيئة المحلية لديك. تم تصميم ServBay لمنح المطورين أدوات قوية ومرنة للتطوير المحلي، ودعمها المتقدم لملف .user.ini هو خير دليل على هذا النهج.
