ملف التكوين
الموقع
ملف تكوين webman موجود في دليل config/
، ويمكنك الحصول على التكوين المقابل في المشروع عن طريق استخدام الدالة config()
.
الحصول على التكوين
الحصول على جميع التكوينات
config();
الحصول على جميع التكوينات في config/app.php
config('app');
الحصول على تكوين debug
في config/app.php
config('app.debug');
إذا كان التكوين مصفوفة، يمكنك الحصول على قيمة العناصر الداخلية للمصفوفة باستخدام .
، على سبيل المثال
config('file.key1.key2');
القيم الافتراضية
config($key, $default);
يتم تمرير القيمة الافتراضية عبر المعامل الثاني، إذا كان التكوين غير موجود، سيتم إرجاع القيمة الافتراضية.
إذا كان التكوين غير موجود ولم يتم تعيين قيمة افتراضية، ستتم إرجاع null.
تكوين مخصص
يمكن للمطورين إضافة ملفات تكوين خاصة بهم في دليل config/
، على سبيل المثال
config/payment.php
<?php
return [
'key' => '...',
'secret' => '...'
];
استخدامها عند الحصول على التكوين
config('payment');
config('payment.key');
config('payment.key');
تغيير التكوين
لا يدعم webman تعديل التكوين ديناميكياً، يجب تعديل جميع التكوينات يدوياً في ملفات التكوين المقابلة، وإعادة تحميل (reload) أو إعادة تشغيل (restart).
ملحوظة
تكوينات الخادمconfig/server.php
وتكوينات العملياتconfig/process.php
لا تدعم إعادة التحميل (reload)، يجب إعادة التشغيل (restart) لكي تصبح سارية المفعول.
تنبيه خاص
إذا كنت تريد إنشاء ملف تكوين وقراءته في دليل فرعي تحت config، مثل: config/order/status.php
، فيجب أن يكون هناك ملف app.php
في دليل config/order
، محتوياته كما يلي
<?php
return [
'enable' => true,
];
تشير enable
إلى true
مما يعني أن الإطار سيقرأ تكوينات هذا الدليل.
ستبدو بنية دليل ملف التكوين النهائية كما يلي
├── config
│ ├── order
│ │ ├── app.php
│ │ └── status.php
بهذه الطريقة يمكنك استخدام config.order.status
لقراءة المصفوفة المرتجعة من status.php
أو بيانات المفتاح المحدد.
شرح ملف التكوين
server.php
return [
'listen' => 'http://0.0.0.0:8787', // منفذ الاستماع (تم إزالته بدءًا من الإصدار 1.6.0، تم الانتقال إلى التكوين في config/process.php)
'transport' => 'tcp', // بروتوكول طبقة النقل (تم إزالته بدءًا من الإصدار 1.6.0، تم الانتقال إلى التكوين في config/process.php)
'context' => [], // تكوينات ssl وغيرها (تم إزالته بدءًا من الإصدار 1.6.0، تم الانتقال إلى التكوين في config/process.php)
'name' => 'webman', // اسم العملية (تم إزالته بدءًا من الإصدار 1.6.0، تم الانتقال إلى التكوين في config/process.php)
'count' => cpu_count() * 4, // عدد العمليات (تم إزالته بدءًا من الإصدار 1.6.0، تم الانتقال إلى التكوين في config/process.php)
'user' => '', // المستخدم (تم إزالته بدءًا من الإصدار 1.6.0، تم الانتقال إلى التكوين في config/process.php)
'group' => '', // مجموعة المستخدم (تم إزالته بدءًا من الإصدار 1.6.0، تم الانتقال إلى التكوين في config/process.php)
'reusePort' => false, // هل يتم تفعيل إعادة استخدام المنفذ (تم إزالته بدءًا من الإصدار 1.6.0، تم الانتقال إلى التكوين في config/process.php)
'event_loop' => '', // فئة حلقة الأحداث، تختار تلقائياً بشكل افتراضي
'stop_timeout' => 2, // الحد الأقصى للوقت الذي يمكن الانتظار فيه عند تلقي إشارة stop/restart/reload، إذا تجاوز هذا الوقت ولم تغلق العملية، سيتم الإغلاق قسراً
'pid_file' => runtime_path() . '/webman.pid', // موقع تخزين ملف pid
'status_file' => runtime_path() . '/webman.status', // موقع تخزين ملف status
'stdout_file' => runtime_path() . '/logs/stdout.log', // موقع ملف الإخراج القياسي، سيتم كتابة جميع الإخراجات إلى هذا الملف بعد بدء webman
'log_file' => runtime_path() . '/logs/workerman.log', // موقع ملف سجل workerman
'max_package_size' => 10 * 1024 * 1024 // الحد الأقصى لحجم حزمة البيانات، 10 م. حجم الملفات المرفوعة يتأثر بهذا القيد
];
app.php
return [
'debug' => true, // هل يتم تفعيل وضع التصحيح، عند التفعيل سيتم إخراج معلومات تصحيح مثل كومة الاستدعاءات عند حدوث أخطاء، يجب إيقاف تشغيل وضع التصحيح في بيئات الإنتاج لزيادة الأمان
'error_reporting' => E_ALL, // مستوى تقرير الأخطاء
'default_timezone' => 'Asia/Shanghai', // المنطقة الزمنية الافتراضية
'public_path' => base_path() . DIRECTORY_SEPARATOR . 'public', // موقع دليل public
'runtime_path' => base_path(false) . DIRECTORY_SEPARATOR . 'runtime', // موقع دليل runtime
'controller_suffix' => 'Controller', // لاحقة وحدة التحكم
'controller_reuse' => false, // هل يتم إعادة استخدام وحدة التحكم
];
process.php
use support\Log;
use support\Request;
use app\process\Http;
global $argv;
return [
// تكوين عملية webman
'webman' => [
'handler' => Http::class, // فئة معالجة العملية
'listen' => 'http://0.0.0.0:8787', // عنوان الاستماع
'count' => cpu_count() * 4, // عدد العمليات، 4 أضعاف عدد وحدات المعالجة
'user' => '', // المستخدم الذي تعمل فيه العملية، يجب استخدام مستخدم بمستوى منخفض
'group' => '', // مجموعة المستخدم الذي تعمل فيها العملية، يجب استخدام مجموعة مستخدم بمستوى منخفض
'reusePort' => false, // هل يتم تفعيل إعادة استخدام المنفذ، عند التفعيل سيتم توزيع الاتصالات بشكل متساوٍ على عمليات العمل المختلفة
'eventLoop' => '', // فئة حلقة الأحداث، إذا كانت فارغة سيتم استخدام إعداد server.event_loop تلقائياً
'context' => [], // إعدادات السياق للاستماع، مثل ssl
'constructor' => [ // معلمات مُنشئ فئة معالجة العملية، في هذا المثال هي معلمات مُنشئ فئة Http
'requestClass' => Request::class, // يمكنك تخصيص فئة الطلب
'logger' => Log::channel('default'), // مثيل السجل
'appPath' => app_path(), // موقع دليل التطبيق
'publicPath' => public_path() // موقع دليل public
]
],
// عملية المراقبة، تستخدم لاكتشاف تحديثات الملفات وإعادة التحميل التلقائي وتسرب الذاكرة
'monitor' => [
'handler' => app\process\Monitor::class, // فئة المعالجة
'reloadable' => false, // العملية الحالية لا تقوم بإعادة التحميل
'constructor' => [ // معلمات مُنشئ فئة معالجة العملية
// الدليل الذي يتم مراقبته، لا تفرط في العدد، فقد يؤدي ذلك إلى تباطؤ في المراقبة
'monitorDir' => array_merge([
app_path(),
config_path(),
base_path() . '/process',
base_path() . '/support',
base_path() . '/resource',
base_path() . '/.env',
], glob(base_path() . '/plugin/*/app'), glob(base_path() . '/plugin/*/config'), glob(base_path() . '/plugin/*/api')),
// مراقبة تحديثات هذه الملفات ذات الامتدادات
'monitorExtensions' => [
'php', 'html', 'htm', 'env'
],
// خيارات أخرى
'options' => [
// هل يتم تفعيل مراقبة الملفات، فعال فقط على linux، تظل المراقبة غير مفعلة في وضع خادم العمليات
'enable_file_monitor' => !in_array('-d', $argv) && DIRECTORY_SEPARATOR === '/',
// هل يتم تفعيل مراقبة الذاكرة، يدعم التفعيل فقط على linux
'enable_memory_monitor' => DIRECTORY_SEPARATOR === '/',
]
]
]
];
container.php
// إرجاع مثيل حاوية حقن الاعتماد psr-11
return new Webman\Container;
dependence.php
// لتكوين خدمات وحالات الاعتماد في حاوية الحقن
return [];
route.php
use support\Route;
// تعريف مسار /test
Route::any('/test', function (Request $request) {
return response('test');
});
view.php
use support\view\Raw;
use support\view\Twig;
use support\view\Blade;
use support\view\ThinkPHP;
return [
'handler' => Raw::class // فئة معالجة العرض الافتراضية
];
autoload.php
// تكوين الملفات التي يتم تحميلها تلقائيًا في الإطار
return [
'files' => [
base_path() . '/app/functions.php',
base_path() . '/support/Request.php',
base_path() . '/support/Response.php',
]
];
cache.php
// تكوينات التخزين المؤقت
return [
'default' => 'file', // الملف الافتراضي
'stores' => [
'file' => [
'driver' => 'file',
'path' => runtime_path('cache') // موقع تخزين ملفات التخزين المؤقت
],
'redis' => [
'driver' => 'redis',
'connection' => 'default' // اسم الاتصال مع redis، يتوافق مع التكوين في redis.php
],
'array' => [
'driver' => 'array' // التخزين المؤقت في الذاكرة، يتبخر بعد إعادة التشغيل
]
]
];
redis.php
return [
'default' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 0,
],
];
database.php
return [
// قاعدة البيانات الافتراضية
'default' => 'mysql',
// تكوينات قواعد البيانات المختلفة
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'webman',
'username' => 'webman',
'password' => '',
'unix_socket' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
'sqlite' => [
'driver' => 'sqlite',
'database' => '',
'prefix' => '',
],
'pgsql' => [
'driver' => 'pgsql',
'host' => '127.0.0.1',
'port' => 5432,
'database' => 'webman',
'username' => 'webman',
'password' => '',
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public',
'sslmode' => 'prefer',
],
'sqlsrv' => [
'driver' => 'sqlsrv',
'host' => 'localhost',
'port' => 1433,
'database' => 'webman',
'username' => 'webman',
'password' => '',
'charset' => 'utf8',
'prefix' => '',
],
],
];
exception.php
return [
// تعيين فئة معالجة الاستثناءات
'' => support\exception\Handler::class,
];
log.php
return [
'default' => [
'handlers' => [
[
'class' => Monolog\Handler\RotatingFileHandler::class, // المعالج
'constructor' => [
runtime_path() . '/logs/webman.log', // اسم السجل
7, //$maxFiles // الاحتفاظ بالسجلات لمدة 7 أيام
Monolog\Logger::DEBUG, // مستوى السجل
],
'formatter' => [
'class' => Monolog\Formatter\LineFormatter::class, // المُنسق
'constructor' => [null, 'Y-m-d H:i:s', true], // معلمات التنسيق
],
]
],
],
];
session.php
return [
// النوع
'type' => 'file', // or redis or redis_cluster
// المعالج
'handler' => FileSessionHandler::class,
// التكوينات
'config' => [
'file' => [
'save_path' => runtime_path() . '/sessions', // دليل التخزين
],
'redis' => [
'host' => '127.0.0.1',
'port' => 6379,
'auth' => '',
'timeout' => 2,
'database' => '',
'prefix' => 'redis_session_',
],
'redis_cluster' => [
'host' => ['127.0.0.1:7000', '127.0.0.1:7001', '127.0.0.1:7001'],
'timeout' => 2,
'auth' => '',
'prefix' => 'redis_session_',
]
],
'session_name' => 'PHPSID', // اسم الجلسة
'auto_update_timestamp' => false, // هل يتم تحديث الطابع الزمني تلقائيًا، لتجنب انتهاء صلاحية الجلسة
'lifetime' => 7*24*60*60, // مدى الحياة
'cookie_lifetime' => 365*24*60*60, // مدى حياة الكوكيز
'cookie_path' => '/', // مسار الكوكيز
'domain' => '', // نطاق الكوكيز
'http_only' => true, // الوصول عبر http فقط
'secure' => false, // الوصول عبر https فقط
'same_site' => '', // خاصية SameSite
'gc_probability' => [1, 1000], // احتمال استرداد الجلسة
];
middleware.php
// تعيين middleware
return [];
static.php
return [
'enable' => true, // هل يتم تفعيل وصول webman إلى الملفات الثابتة
'middleware' => [ // middleware للملفات الثابتة، يمكن استخدامها لتعيين استراتيجيات التخزين المؤقت، والسيطرة على الوصول عبر النطاقات، إلخ.
//app\middleware\StaticFile::class,
],
];
translation.php
return [
// اللغة الافتراضية
'locale' => 'zh_CN',
// اللغة البديلة
'fallback_locale' => ['zh_CN', 'en'],
// موقع تخزين ملفات اللغة
'path' => base_path() . '/resource/translations',
];