أخطاء وقت التشغيل والدعم
النطاق
قسم بعنوان «النطاق»توثّق هذه المداخل الاستثناءات التي تُطلقها طبقة دعم وقت التشغيل: سياسة التدهور، ونقل HTTP المدعوم بـcURL، وقاطع دارة المرونة، ومُصدِر إدارة معلومات الأمن والأحداث (SIEM)، وبيان العرض، وفحص PDF، والنظام الفرعي لهندسة الفوضى.
يمدّد كل استثناء في NextPDF الفئة NextPdfException، التي تطبّق ContextAwareExceptionInterface وتكشف getContext(): array للتسجيل التشخيصي المُنظَّم. ولا تملأ الفئة الفرعية تلك المصفوفة إلا حين تتجاوز getContext()؛ ويُرجع الأساس مصفوفة فارغة. تمدّد ثلاثة استثناءات في هذه الصفحة (DegradedException وCircuitBreakerOpenException وInspectException) فئة PHP المسماة RuntimeException مباشرةً وتكشف بياناتها عبر خصائص عامة readonly بدلًا من getContext(). ويذكر كل مدخل أدناه الخصائص أو مفاتيح السياق التي تحملها الفئة بالضبط، مأخوذةً من المصدر.
سياسة التدهور
قسم بعنوان «سياسة التدهور»DegradedException
قسم بعنوان «DegradedException»- يُطلَق عند. ملاقاة خط أنابيب العرض قدرةً متدهورة تنتهك سياسة التدهور النشطة. تحت
DegradationPolicy::Strict، يُطلقه أي تدهور عالي الأثر (ComplianceRiskأوSemanticLossأوBlocking)؛ وتحتDegradationPolicy::Balanced، لا يُطلقه إلا أثرBlocking. - الفئة. تمدّد
RuntimeExceptionمباشرةً (لاNextPdfException)، لذا لا تحملgetContext(). - البيانات المحمولة. خاصيتان عامتان
readonly:$capability(كائن القيمةCapabilityالذي أطلق الرفض، بما في ذلكidوstatusوreasonوfallbackTargetوimpactالخاصة به) و$policy(سياسةDegradationPolicyالنشطة وقت الرفض). وتأخذ الرسالة الهيئةFeature "<id>" is <status>: <reason> (policy: <policy>). - التعافي. افحص
$capabilityلتحديد الميزة المفقودة وسببها. وإمّا أن تثبّت المكوّن الذي تحتاجه القدرة، أو تقبل إعدادًا أقل أثرًا، أو تخفّف السياسة منStrictإلىBalancedحين يكون التدهور مقبولًا لحالة الاستعمال. استدعِ$capability->isAvailable()/isDegraded()لقيادة الرسائل الموجَّهة للمستخدم.
نقل HTTP
قسم بعنوان «نقل HTTP»تنشأ هذه الاستثناءات الثلاثة في عميل PSR-18 المدعوم بـcURL ومُزخرِفه المُدرك للأمان. يمدّد الأولان NextPdfException لكنهما لا يتجاوزان getContext()، لذا يُرجع getContext() لكليهما مصفوفة فارغة؛ ويُوصَل إلى البيانات التشخيصية عبر مُلتقِط PSR-18 getRequest() وعبر القابل للإطلاق السابق المُتسلسل.
CurlNetworkException
قسم بعنوان «CurlNetworkException»- يُطلَق عند. تعذّر إتمام طلب HTTP بسبب عطل على مستوى الشبكة: إخفاق تحليل نظام أسماء النطاقات (DNS)، أو مهلة اتصال، أو خطأ مصافحة أمان طبقة النقل (TLS). وهو أيضًا الفئة التي يُطلقها المُزخرِف المُدرك للأمان لرفض أمني (رفض تزوير الطلب من جانب الخادم، أو رفض إعادة ربط DNS، أو إعادة توجيه مرفوضة).
- الفئة. تطبّق PSR-18
Psr\Http\Client\NetworkExceptionInterface. - البيانات المحمولة. يُرجع
getRequest()الكائنRequestInterfaceالمُخفِق. وخطأ النقل المنشئ، عند وجوده، هو القابل للإطلاق السابق المُتسلسل. يُرجعgetContext()مصفوفة فارغة (الافتراضي الأساسي). - التعافي. قد يكون عطل الشبكة عابرًا — أعد المحاولة مع تراجع تدريجي إن كان الطلب مُتكرِّر النتيجة. أما الرفض الأمني فليس عابرًا ويجب أن يُخفق بأمان: لا تُعِد المحاولة؛ بل صحّح عنوان URL الهدف أو سياسة SSRF. اقرأ الرسالة والقابل للإطلاق السابق للتفريق بين الاثنين.
CurlRequestException
قسم بعنوان «CurlRequestException»- يُطلَق عند. تعذّر إرسال الطلب نفسه لأنه مُشوَّه، على سبيل المثال عنوان URL غير صالح أو طلب أخفق في التحقق من SSRF قبل أي استدعاء شبكة.
- الفئة. تطبّق PSR-18
Psr\Http\Client\RequestExceptionInterface. - البيانات المحمولة. يُرجع
getRequest()الكائنRequestInterfaceالمُخالف؛ والسبب الأساسي، عند وجوده، هو القابل للإطلاق السابق المُتسلسل. يُرجعgetContext()مصفوفة فارغة. - التعافي. هذا عيب في مُدخَل المُستدعي أو في السياسة، لا عطل عابر. لا تُعِد المحاولة من دون تغيير. أصلِح عنوان URL للطلب أو الترويسات أو الجسم، أو عدّل قائمة سماح SSRF إن كان الهدف مسموحًا به مشروعًا، ثم أعِد إصدار الطلب.
TransientHttpException
قسم بعنوان «TransientHttpException»- يُطلَق عند. داخليًا، داخل
SecurityAwareHttpClient، لوسم عطل نقل داخلي عابر فعلًا (DNS أو اتصال أو مهلة يُطلقها عميل PSR-18 الداخلي) بوصفه مؤهَّلًا لميزانية إعادة المحاولة المحدودة. وهو الفئة الوحيدة المؤهَّلة لإعادة المحاولة التي تتعرّف عليها حلقة إعادة المحاولة في المُزخرِف؛ ويُعامَل أي استثناء غير ملفوف (رفض أمني يُطلقه المُزخرِف) بوصفه قاتلًا. - الفئة. تطبّق PSR-18
Psr\Http\Client\NetworkExceptionInterface. مُعلَّمة بـ@internal— فهي تُنشَأ وتُفَكّ بالكامل داخلSecurityAwareHttpClientولا تفلت أبدًا من المُزخرِف. - البيانات المحمولة. يُرجع
getRequest()الطلب المُخفِق. ويُحفَظClientExceptionInterfaceللنقل الداخلي الأصلي بوصفه القابل للإطلاق السابق المُتسلسل (getPrevious()) ويُعاد إظهاره حرفيًا للمُستدعي بمجرد استنفاد ميزانية إعادة المحاولة، فيبقى عقد PSR-18 العام دون تغيير. يُرجعgetContext()مصفوفة فارغة. - التعافي. لا تعترض شفرة التطبيق هذا النوع مباشرةً. اعترض الاستثناء الداخلي المُعاد إظهاره الذي يُرجعه المُزخرِف بعد إنفاق ميزانية إعادة المحاولة، وعامِل الإخفاقات العابرة المتكرّرة بوصفها مشكلة توفّر في المنبع.
المرونة
قسم بعنوان «المرونة»CircuitBreakerOpenException
قسم بعنوان «CircuitBreakerOpenException»- يُطلَق عند. رفض
CircuitBreakerفي حالةCircuitBreakerState::Openاستدعاءً بإخفاق سريع، قبل أي استدعاء لاحق. وهو موجود ليتيح للمُستدعين التمييز بين “الخدمة البعيدة غير قابلة للوصول الآن” (عطل نقل عابر يستحقّ التدهور) و”كان سيُستنزَف مجمع الاتصالات بهذا الاستدعاء” (إخفاق سريع، دون محاولة شبكة) — وهو تخفيف حجب الخدمة المُجمَّع المطلوب لعملاء البنية التحتية للمفتاح العام (PKI). - الفئة. تمدّد
RuntimeExceptionمباشرةً، لذا لا تحملgetContext(). - البيانات المحمولة. خاصيتان عامتان
readonly:$breakerName(مُعرِّف القاطع المفتوح) و$secondsUntilHalfOpen(فترة التهدئة التقريبية المتبقّية قبل أن ينتقل القاطع إلى نصف مفتوح). وتأخذ الرسالة الهيئةCircuit breaker "<name>" is OPEN (cooldown ~<n>s remaining); call rejected fail-fast. - التعافي. لا تطرق القاطع — انتظر
$secondsUntilHalfOpenعلى الأقل قبل إعادة المحاولة، أو دهوِر العملية. لم تُحاوَل أي استدعاء شبكة، لذا فهذا ليس دليلًا على أن الخدمة البعيدة نفسها أخفقت؛ بل هو ضغط عكسي يحمي مجمع الاتصالات.
قابلية الملاحظة
قسم بعنوان «قابلية الملاحظة»SiemEmitterException
قسم بعنوان «SiemEmitterException»- يُطلَق عند. تعذّر على مُصدِر أحداث SIEM استمرار سجلّ أو سلسلته. وهو يُظهِر الإخفاقات على مستوى نظام الملفات (
openوlockوseekوwriteوfflushوread) وأعطال سلامة سلسلة التجزئة (chain: فهرس خارج الترتيب، أو سجلّ ذيل مُشوَّه، أو انحراف ذهابًا وإيابًا في JSON) المشتركة بين سجلّ أحداث سلسلة التجزئة ومُهايِئات مُصدِر ملف أسطر JSON. - الفئة. تمدّد
NextPdfExceptionوتتجاوزgetContext(). - مفاتيح السياق.
operation(واحدة منopenوlockوseekوwriteوfflushوreadوchain)، وpath(مسار السجلّ الهدف)، وdetail(تفصيل قابل للقراءة مثل عدد البايتات أو الفهرس المتوقَّع مقابل الفعلي). ويُوصَل إليها أيضًا عبرgetOperation()وgetPath()وgetDetail(). وتأخذ الرسالة الهيئةSIEM emitter <operation> failed for <path>: <detail>. - التعافي. هذا قابل للمعالجة من قِبَل البنية التحتية أو عمليات الأمن، لا من قِبَل منطق التطبيق. تحقّق من حامل وحدة تخزين السجلّ، وأذونات الدليل، وواصفات الملفات المتاحة، وصحة نظام الملفات. ويُشير إخفاق عملية
chainإلى إشارة عبث أو تلف في سجلّ التدقيق وينبغي التحقيق فيه، لا إعادة محاولته بصمت.
بيان العرض
قسم بعنوان «بيان العرض»RenderManifestException
قسم بعنوان «RenderManifestException»- يُطلَق عند. تعذّر إنشاء
RenderManifestأو فكّ تسلسله أو قراءته بسبب خطأ بنيوي أو خطأ نوع أو خطأ توافق مخطط. والبيان عقد عام مُؤرَّخ يُقدِّمه كل نقل (CLI، وطابور Laravel، وSymfony، وواجهة API لـSaaS)، لذا يُظهَر البيان المُشوَّه أو غير المتوافق مباشرةً بدلًا من إجباره على القيم الافتراضية. - الفئة. تمدّد
NextPdfExceptionوتتجاوزgetContext(). وتضبط المُنشئات المسماة رمزًا ثابتًا قابلًا للقراءة آليًا في فضاء الأسماءSPEC-MANIFEST-*:RenderManifestException::shape()←SPEC-MANIFEST-001— خطأ شكل أو نوع أثناءRenderManifest::fromArray().RenderManifestException::incompatibleVersion()←SPEC-MANIFEST-002— إصدار مخطط رئيسي غير متوافق (لا يمكن قراءته).RenderManifestException::missingField()←SPEC-MANIFEST-003— حقل مطلوب مفقود أثناء إنهاء البنّاء.RenderManifestException::unsupported()←SPEC-MANIFEST-004— بيان سليم الشكل يُشير إلى مُدخَل أو قالب لا يستطيع المُصيِّر الحالي حلّه (على سبيل المثال مُدخَل URI أو محرّك قوالب يعمل على المضيف فقط).
- مفاتيح السياق.
manifest_code(مُعرِّفSPEC-MANIFEST-*) وreason(وصف الإخفاق القابل للقراءة). ويُوصَل إليهما أيضًا عبرgetManifestCode()وgetReason(). وتأخذ الرسالة الهيئة[<code>] <reason>. - التعافي. تفرّع بحسب
manifest_code. بالنسبة إلىSPEC-MANIFEST-001وSPEC-MANIFEST-003، أصلِح حمولة البيان (صحّح نوع الحقل أو وفّر الحقل المفقود). وبالنسبة إلىSPEC-MANIFEST-002، أعد توليد البيان مقابل إصدار مخطط رئيسي مدعوم أو رقِّ المُصيِّر. وبالنسبة إلىSPEC-MANIFEST-004، وفّر مُدخَلًا أو محرّك قوالب يستطيع الإصدار الحالي حلّه.
الفحص
قسم بعنوان «الفحص»InspectException
قسم بعنوان «InspectException»- يُطلَق عند. إخفاق فحص PDF.
- الفئة. تمدّد
RuntimeExceptionمباشرةً (لاNextPdfException)، لذا لا تحملgetContext(). - البيانات المحمولة. خاصيتان عامتان
readonly:$inspectCode(رمز قابل للقراءة آليًا في فضاء الأسماءINSPECT-*) و$retryable(قيمة منطقية تُشير إلى ما إذا كان ينبغي للمُستدعي إعادة المحاولة — على سبيل المثال عندما تكون عربة فحص جانبية مُعطَّلة مؤقتًا). والسبب المنشئ، عند وجوده، هو القابل للإطلاق السابق المُتسلسل. - التعافي. تفرّع بحسب
$inspectCodeلأجل فئة الإخفاق المحددة. عندما تكون$retryableهيtrue، أعد المحاولة مع تراجع تدريجي لأن الإخفاق يُتوقَّع أن يكون عابرًا (مثل إعادة تشغيل عربة جانبية)؛ وعندما تكونfalse، عامِل المُدخَل أو الإعداد بوصفه العيب ولا تُعِد المحاولة من دون تغيير.
هندسة الفوضى
قسم بعنوان «هندسة الفوضى»ChaosReportWriteException
قسم بعنوان «ChaosReportWriteException»- يُطلَق عند. تعذّر على
ChaosScenarioRunner::writeReport()استمرار تقرير يوم الفوضى المُجمَّع إلى القرص. وهو بديل ذو نوع للمجال يحلّ محل خطأ وقت تشغيل عام، فيمكن للمُستدعين اعتراض إخفاق قرص التقرير المحدد دون خلطه بالأخطاء المُطلَقة داخل مُحاكيات السيناريو نفسها (يلتقط المُشغِّل تلك بوصفها حقولChaosOutcome). - الفئة. تمدّد
NextPdfExceptionوتتجاوزgetContext(). - مفاتيح السياق.
output_path(المسار المطلق الذي حاول المُشغِّل الكتابة إليه). ويُوصَل إليه أيضًا عبرgetOutputPath(). وتأخذ الرسالة الهيئةChaosScenarioRunner: failed to write report to "<path>". - التعافي. هذا إخفاق على جانب الكتابة لمصبّ التقرير، لا للسيناريوهات. تحقّق من وجود دليل الخرج وقابليته للكتابة وتوفّر مساحة على القرص، ثم أعد تشغيل كتابة التقرير. ولا تتأثر نتائج الفوضى نفسها.
RetrievalUnavailableException
قسم بعنوان «RetrievalUnavailableException»- يُطلَق عند. عدم توفّر نقطة نهاية استرجاع (على سبيل المثال خدمة التوليد المُعزَّز بالاسترجاع من Voyage) وسقوط النظام احتياطيًا إلى الوضع المعتمد على المخزن فقط أو إخفاقه بأمان.
- الفئة. تمدّد
NextPdfExceptionوتتجاوزgetContext(). - مفاتيح السياق.
mode(وضع التشغيل بعد الإخفاق —CACHED_ONLYعندما تُقدَّم النتائج من المخزن الدلالي فقط، أوFAIL_CLOSEDعندما يُرفض الطلب كليًا دون بيانات قديمة) وendpoint(نقطة النهاية التي صارت غير قابلة للوصول). ويُوصَل إليهما أيضًا عبرgetMode()وgetEndpoint(). وتأخذ الرسالة الهيئةRetrieval endpoint "<endpoint>" is unavailable; operating in <mode> mode. - التعافي. اقرأ
modeلتعرف كيف تدهور النظام. تحتCACHED_ONLY، قد تكون النتائج قديمة؛ حدّثها بمجرد تعافي نقطة النهاية. وتحتFAIL_CLOSED، رُفض الطلب عمدًا ويجب إعادة محاولته بعد أن تصير نقطة النهاية قابلة للوصول. أعد اتصال نقطة النهاية (الشبكة، والاعتمادات، وصحة الخدمة) قبل الاعتماد على استرجاع حديث.