تحليل ملف dotenv إلى أزواج مفاتيح وقيم
تبدو ملفات dotenv بسيطة حتى تشتمل القيم على مسافات أو علامات تعليق أو تعيينات فارغة أو نصوص مهروبة.
شغّل الأداة مجانًا
يحوّل هذا المحلل المحتوى الكامل لملف .env إلى كائن منظم من أزواج المفاتيح والقيم وفق قواعد صياغة واضحة ومتوقعة. يتجاهل الأسطر الفارغة والتعليقات، ويحافظ على المحتوى بين علامات الاقتباس، ويتعرف إلى التعليقات التي تتبع القيم غير المقتبسة، ويحدد رقم السطر بدقة عند وجود تعيين غير صالح. تفيد النتيجة في معاينة الإعدادات وترحيلها والتحقق منها وبناء أدوات تطوير تحتاج إلى بيانات منظمة من دون تحميل المتغيرات في بيئة العملية.
أرسلوا نص dotenv كاملاً
الصقوا محتوى ملف .env أو أرسلوه في الحقل text. يجب أن يشتمل كل سطر ذي معنى على مفتاح وعلامة مساواة وقيمة. يبدأ المفتاح بحرف ASCII أو شرطة سفلية، ويمكن أن تليه حروف أو أرقام أو شرطات سفلية. تُقبل الأسطر الفارغة، ويُعامل كل سطر تكون أول محارفه غير الفارغة علامة المربع بوصفه تعليقاً. التعيينات الفارغة مثل CACHE_PREFIX= صالحة وتنتج سلسلة فارغة. يعيد المحلل كائن values الذي يحتوي على الأزواج المعالجة، إلى جانب عدد المفاتيح الفريدة. إذا تكرر المفتاح، يحل التعيين اللاحق محل السابق، وهو أسلوب التجاوز العملي الشائع عند جمع أجزاء الإعدادات. لا تكتب الأداة في بيئة الجهاز، ولا توسع المتغيرات، ولا تقرأ الملفات، ولا تتصل بأي خدمة. فهي تعالج النص المرسل وحده، ولذلك يمكن معاينة سلوكها بأمان وإعادة إنتاجه بسهولة في نصوص البناء وامتدادات المحررات وأدوات فحص الإعدادات ومسارات الترحيل.
افهموا الاقتباسات والتهريب والتعليقات
تُحذف المسافات الخارجية من القيم غير المقتبسة. لا تبدأ علامة المربع تعليقاً ضمن السطر إلا إذا سبقتها مسافة مباشرة، ولذلك تبقى أجزاء عناوين URL والرموز مثل color=#fff كما هي. تحافظ علامات الاقتباس المفردة على النص الداخلي حرفياً، بما فيه علامات المربع والمسافات. وتحافظ علامات الاقتباس المزدوجة عليه أيضاً، لكنها تفسر عمليات التهريب المعتادة بالشرطة المائلة العكسية للسطر الجديد والعودة إلى أول السطر وعلامة الجدولة والاقتباس المزدوج والشرطة المائلة العكسية. بعد علامة الإغلاق لا يُسمح إلا بالمسافات أو بتعليق. تزيل هذه القواعد الغموض من دون تقييم أوامر shell. لا يوسع المحلل مراجع مثل ${HOST}، ولا ينفذ استبدال الأوامر، ولا يحول السلاسل مثل true و8080 إلى قيم منطقية أو أعداد. تبقى كل قيمة سلسلة نصية، لأن بيانات dotenv نصية وعلى التطبيق أن يحدد التحويل المناسب له. وبذلك لا تضيع الأصفار البادئة أو حالة الأحرف أو القيم الفارغة المقصودة.
تعاملوا مع الإدخال غير الصالح بوضوح
استخدم أداة الويب للفحوص الفردية، واستخدم الواجهة البرمجية عند دمج الإمكانية نفسها في سير عمل آلي.
حالات الاستخدام
التحقق من الإعدادات قبل النشر
ارفضوا محتوى dotenv غير الصحيح مبكراً وحددوا للمسؤول السطر الدقيق الذي يحتاج إلى تصحيح.
معاينة ترحيل الإعدادات
حوّلوا نص .env القديم إلى كائن منظم قبل ربط مفاتيحه بنظام إعدادات آخر.
إنشاء أداة للمطورين
استخدموا مخرجات متوقعة في امتدادات المحررات أو مساعدات الإعداد أو أدوات البناء أو مسارات المقارنة.
الأسئلة الشائعة
ما كلفة الطلب الواحد؟
تبلغ كلفة طلب API مقدار $0.002. ويمكن لمشغل المتصفح تحليل المحتوى نفسه محلياً.
هل تتحول القيم إلى أعداد أو قيم منطقية؟
لا. تبقى جميعها سلاسل نصية، بما فيها 8080 وtrue وfalse والتعيينات الفارغة.
كيف تُعامل المفاتيح المكررة؟
يسود التعيين الأخير، وتعرض count عدد المفاتيح الفريدة في النتيجة النهائية.
هل يمكن أن تحتوي القيمة المقتبسة على علامة مربع؟
نعم. تكون علامة المربع داخل الاقتباس المفرد أو المزدوج جزءاً من القيمة ولا تبدأ تعليقاً.
هل يوسع المحلل مراجع المتغيرات؟
لا. يعيد المراجع مثل ${HOST} حرفياً، ولا يقيّم تعبيرات shell أو البيئة.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/dev2/env-file-parse \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"APP_NAME=\"Example service\"\nDEBUG=true\nPORT=8080\n# Optional local override\nEMPTY="}'const res = await fetch("https://api.kit.forhosting.com/dev2/env-file-parse", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "APP_NAME=\"Example service\"\nDEBUG=true\nPORT=8080\n# Optional local override\nEMPTY="
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/env-file-parse",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "APP_NAME=\"Example service\"\nDEBUG=true\nPORT=8080\n# Optional local override\nEMPTY="
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/env-file-parse", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"APP_NAME=\\"Example service\\"\\nDEBUG=true\\nPORT=8080\\n# Optional local override\\nEMPTY="}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"APP_NAME=\"Example service\"\nDEBUG=true\nPORT=8080\n# Optional local override\nEMPTY="}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/env-file-parse", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"text": "APP_NAME=\"Example service\"\nDEBUG=true\nPORT=8080\n# Optional local override\nEMPTY="
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.env_file_parse",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |