Çalışma zamanı ve destek hataları
Kapsam
“Kapsam” başlıklı bölümBu girişler, çalışma zamanı destek katmanı tarafından fırlatılan istisnaları belgeler: düşürme ilkesi, cURL-destekli HTTP taşıması, dayanıklılık devre kesicisi, Güvenlik Bilgileri ve Olay Yönetimi (SIEM) yayıcısı, oluşturma manifesti, PDF incelemesi ve kaos-mühendisliği alt sistemi.
Her NextPDF istisnası, ContextAwareExceptionInterface arayüzünü uygulayan ve
yapılandırılmış tanılama günlüklemesi için getContext(): array yöntemini sunan
NextPdfException sınıfını genişletir. Bir alt sınıf, o diziyi yalnızca
getContext() yöntemini geçersiz kıldığında doldurur; temel sınıf boş bir dizi
döndürür. Bu sayfadaki üç istisna (DegradedException,
CircuitBreakerOpenException ve InspectException), doğrudan PHP’nin
RuntimeException sınıfını genişletir ve verilerini getContext() yerine genel
readonly özellikler üzerinden sunar. Aşağıdaki her giriş, sınıfın taşıdığı tam
özellikleri veya bağlam anahtarlarını kaynaktan alınmış olarak adlandırır.
Düşürme ilkesi
“Düşürme ilkesi” başlıklı bölümDegradedException
“DegradedException” başlıklı bölüm- Ne zaman fırlatılır. Oluşturma işlem hattı, etkin düşürme ilkesini ihlal
eden düşürülmüş bir yetenekle karşılaşır.
DegradationPolicy::Strictaltında, herhangi bir yüksek-etkili düşürme (ComplianceRisk,SemanticLossveyaBlocking) onu fırlatır;DegradationPolicy::Balancedaltında yalnızca birBlockingetkisi onu fırlatır. - Sınıf. Doğrudan
RuntimeExceptionsınıfını genişletir (NextPdfExceptiondeğil); bu nedenle birgetContext()taşımaz. - Taşınan veri. İki genel
readonlyözellik:$capability(reddetmeyi tetikleyenCapabilitydeğer nesnesi;id,status,reason,fallbackTargetveimpactdahil) ve$policy(reddetme anında etkin olanDegradationPolicy). İleti,Feature "<id>" is <status>: <reason> (policy: <policy>)biçimindedir. - Çözüm. Eksik özelliği ve nedenini tanımlamak için
$capabilitydeğerini inceleyin. Ya yeteneğin gerektirdiği bileşeni yükleyin, daha düşük-etkili bir yapılandırmayı kabul edin ya da düşürme kullanım durumu için kabul edilebilir olduğunda ilkeyiStrictkipindenBalancedkipine gevşetin. Kullanıcıya dönük iletileri yönlendirmek için$capability->isAvailable()/isDegraded()yöntemlerini çağırın.
HTTP taşıması
“HTTP taşıması” başlıklı bölümBu üç istisna, cURL-destekli PSR-18 istemcisinden ve güvenlik-bilinçli
dekoratöründen kaynaklanır. İlk ikisi NextPdfException sınıfını genişletir ancak
getContext() yöntemini geçersiz kılmaz; bu nedenle getContext() çıktıları boş
bir dizi döndürür; tanılama verisine PSR-18 getRequest() erişimcisi ve
zincirlenmiş önceki fırlatılabilir nesne üzerinden ulaşılır.
CurlNetworkException
“CurlNetworkException” başlıklı bölüm- Ne zaman fırlatılır. HTTP isteği, ağ-düzeyi bir hata nedeniyle tamamlanamaz: Etki Alanı Adı Sistemi (DNS) çözümleme hatası, bağlantı zaman aşımı ya da Taşıma Katmanı Güvenliği (TLS) el sıkışma hatası. Ayrıca, güvenlik-bilinçli dekoratörün bir güvenlik reddi (Sunucu Tarafı İstek Sahteciliği reddi, DNS-yeniden bağlama reddi ya da reddedilen bir yönlendirme) için fırlattığı sınıftır.
- Sınıf. PSR-18
Psr\Http\Client\NetworkExceptionInterfacearayüzünü uygular. - Taşınan veri.
getRequest(), başarısız olanRequestInterfacenesnesini döndürür. Kaynaklanan taşıma hatası, mevcut olduğunda, zincirlenmiş önceki fırlatılabilir nesnedir.getContext()boş bir dizi döndürür (temel varsayılan). - Çözüm. Bir ağ hatası geçici olabilir — istek bağışıksa (idempotent) geri çekilmeli olarak yeniden deneyin. Bir güvenlik reddi geçici değildir ve güvenli biçimde başarısız olmalıdır: yeniden denemeyin; bunun yerine hedef URL’yi veya SSRF ilkesini düzeltin. İkisini ayırt etmek için iletiyi ve önceki fırlatılabilir nesneyi okuyun.
CurlRequestException
“CurlRequestException” başlıklı bölüm- Ne zaman fırlatılır. Hatalı biçimlendiği için isteğin kendisi gönderilemez; örneğin geçersiz bir URL ya da herhangi bir ağ çağrısından önce SSRF doğrulamasında başarısız olan bir istek.
- Sınıf. PSR-18
Psr\Http\Client\RequestExceptionInterfacearayüzünü uygular. - Taşınan veri.
getRequest(), hatalıRequestInterfacenesnesini döndürür; temel neden, mevcut olduğunda, zincirlenmiş önceki fırlatılabilir nesnedir.getContext()boş bir dizi döndürür. - Çözüm. Bu, geçici bir hata değil, bir çağıran-girdisi veya ilke kusurudur. Değiştirmeden yeniden denemeyin. İstek URL’sini, başlıkları veya gövdeyi düzeltin ya da hedef meşru biçimde izinliyse SSRF izin-listesini ayarlayın, sonra isteği yeniden gönderin.
TransientHttpException
“TransientHttpException” başlıklı bölüm- Ne zaman fırlatılır. Dahili olarak,
SecurityAwareHttpClientiçinde, gerçekten geçici bir iç-taşıma hatasını (iç PSR-18 istemcisinin fırlattığı DNS, bağlantı ya da zaman aşımı) sınırlı yeniden-deneme bütçesine uygun olarak işaretlemek için. Dekoratörün yeniden-deneme döngüsünün tanıdığı tek yeniden-deneme-uygun sınıftır; sarılmamış bir istisna (dekoratörün fırlattığı bir güvenlik reddi) ölümcül olarak ele alınır. - Sınıf. PSR-18
Psr\Http\Client\NetworkExceptionInterfacearayüzünü uygular.@internalolarak işaretlenmiştir — tamamenSecurityAwareHttpClientiçinde oluşturulur ve sarması açılır ve asla dekoratörden kaçmaz. - Taşınan veri.
getRequest(), başarısız olan isteği döndürür. Özgün iç-taşımaClientExceptionInterface, zincirlenmiş önceki fırlatılabilir nesne (getPrevious()) olarak korunur ve yeniden-deneme bütçesi tükendiğinde çağırana aynen yeniden yüzeye çıkarılır; böylece genel PSR-18 sözleşmesi değişmez.getContext()boş bir dizi döndürür. - Çözüm. Uygulama kodu bu türü doğrudan yakalamaz. Dekoratörün, yeniden-deneme bütçesi harcandıktan sonra döndürdüğü, yeniden yüzeye çıkan iç istisnayı yakalayın ve tekrarlayan geçici hataları bir yukarı-akış kullanılabilirlik sorunu olarak ele alın.
Dayanıklılık
“Dayanıklılık” başlıklı bölümCircuitBreakerOpenException
“CircuitBreakerOpenException” başlıklı bölüm- Ne zaman fırlatılır.
CircuitBreakerState::Opendurumundaki birCircuitBreaker, herhangi bir alt akış çağrısından önce bir çağrıyı hızlı-hata ile reddeder. Çağıranların “uzak hizmete şu anda erişilemiyor” (düşürmeye değer geçici bir taşıma hatası) durumunu “bu çağrı bağlantı havuzunu tüketirdi” (hızlı-hata, ağ denenmedi) durumundan ayırabilmesi için vardır — Açık Anahtar Altyapısı (PKI) istemcileri için gereken toplu hizmet-reddi azaltması. - Sınıf. Doğrudan
RuntimeExceptionsınıfını genişletir; bu nedenle birgetContext()taşımaz. - Taşınan veri. İki genel
readonlyözellik:$breakerName(açık kesicinin tanımlayıcısı) ve$secondsUntilHalfOpen(kesici yarı-açığa geçmeden önce kalan yaklaşık soğuma süresi). İleti,Circuit breaker "<name>" is OPEN (cooldown ~<n>s remaining); call rejected fail-fast.biçimindedir. - Çözüm. Kesiciyi zorlamayın — yeniden denemeden önce en az
$secondsUntilHalfOpensüresi kadar bekleyin ya da işlemi düşürün. Hiçbir ağ çağrısı denenmedi; bu nedenle bu, uzak hizmetin kendisinin başarısız olduğunun kanıtı değildir; bağlantı havuzunu koruyan bir geri-baskıdır.
Gözlemlenebilirlik
“Gözlemlenebilirlik” başlıklı bölümSiemEmitterException
“SiemEmitterException” başlıklı bölüm- Ne zaman fırlatılır. Bir SIEM olay yayıcısı bir kaydı kalıcılaştıramadığında
ya da zincirleyemediğinde. Dosya-sistemi-düzeyi hataları (
open,lock,seek,write,fflush,read) ve karma-zinciri bütünlük hatalarını (chain: sıra-dışı dizin, hatalı kuyruk kaydı ya da JSON gidiş-dönüş kayması), karma-zinciri olay günlüğü ve JSON-lines dosya yayıcısı bağdaştırıcıları arasında paylaşılan biçimde yüzeye çıkarır. - Sınıf.
NextPdfExceptionsınıfını genişletir vegetContext()yöntemini geçersiz kılar. - Bağlam anahtarları.
operation(open,lock,seek,write,fflush,read,chaindeğerlerinden biri),path(hedef günlük yolu) vedetail(bayt sayıları ya da beklenen-karşı-gerçek dizin gibi insan tarafından okunabilir bir ayrıntı). BunlaragetOperation(),getPath()vegetDetail()üzerinden de ulaşılır. İleti,SIEM emitter <operation> failed for <path>: <detail>.biçimindedir. - Çözüm. Bu, uygulama mantığı tarafından değil, altyapı veya SecOps
tarafından eyleme dönüktür. Günlük-birimi bağlamasını, dizin izinlerini,
kullanılabilir dosya tanımlayıcılarını ve dosya sistemi sağlığını doğrulayın.
Bir
chainişlem hatası, denetim günlüğünde bir kurcalama veya bozulma sinyalini gösterir ve sessizce yeniden denenmek değil, araştırılmalıdır.
Oluşturma manifesti
“Oluşturma manifesti” başlıklı bölümRenderManifestException
“RenderManifestException” başlıklı bölüm- Ne zaman fırlatılır. Bir
RenderManifest, yapısal, tür ya da şema-uyumluluğu hatası nedeniyle oluşturulamadığında, serisi çözülemediğinde veya okunamadığında. Manifest, her taşıma (CLI, Laravel kuyruğu, Symfony, SaaS API) tarafından gönderilen sürümlenmiş bir genel sözleşmedir; bu nedenle hatalı veya uyumsuz bir manifest, varsayılanlara zorlanmak yerine doğrudan yüzeye çıkarılır. - Sınıf.
NextPdfExceptionsınıfını genişletir vegetContext()yöntemini geçersiz kılar. Adlandırılmış yapıcılar,SPEC-MANIFEST-*ad alanında kararlı, makinede okunabilir bir kod ayarlar:RenderManifestException::shape()→SPEC-MANIFEST-001—RenderManifest::fromArray()sırasında biçim veya tür hatası.RenderManifestException::incompatibleVersion()→SPEC-MANIFEST-002— uyumsuz ana şema sürümü (okunamaz).RenderManifestException::missingField()→SPEC-MANIFEST-003— oluşturucu sonlandırması sırasında zorunlu bir alan eksik.RenderManifestException::unsupported()→SPEC-MANIFEST-004— iyi-biçimli bir manifest, geçerli oluşturucunun çözemediği bir girdiye veya şablona başvurur (örneğin bir URI girdisi ya da yalnızca ana bilgisayara özgü bir şablon motoru).
- Bağlam anahtarları.
manifest_code(SPEC-MANIFEST-*tanımlayıcısı) vereason(insan tarafından okunabilir hata açıklaması). BunlaragetManifestCode()vegetReason()üzerinden de ulaşılır. İleti,[<code>] <reason>biçimindedir. - Çözüm.
manifest_codedeğerine göre dallanın.SPEC-MANIFEST-001veSPEC-MANIFEST-003için manifest yükünü düzeltin (alan türünü düzeltin ya da eksik alanı sağlayın).SPEC-MANIFEST-002için manifesti desteklenen bir ana şema sürümüne karşı yeniden üretin ya da oluşturucuyu yükseltin.SPEC-MANIFEST-004için geçerli sürümün çözebileceği bir girdi veya şablon motoru sağlayın.
İnceleme
“İnceleme” başlıklı bölümInspectException
“InspectException” başlıklı bölüm- Ne zaman fırlatılır. PDF incelemesi başarısız olduğunda.
- Sınıf. Doğrudan
RuntimeExceptionsınıfını genişletir (NextPdfExceptiondeğil); bu nedenle birgetContext()taşımaz. - Taşınan veri. İki genel
readonlyözellik:$inspectCode(INSPECT-*ad alanında makinede okunabilir bir kod) ve$retryable(çağıranın yeniden denemesi gerekip gerekmediğini gösteren bir boole — örneğin bir inceleme yardımcısı geçici olarak kapalıyken). Kaynaklanan neden, mevcut olduğunda, zincirlenmiş önceki fırlatılabilir nesnedir. - Çözüm. Belirli hata sınıfı için
$inspectCodedeğerine göre dallanın.$retryabledeğeritrueolduğunda, hata geçici olması beklendiğinden (örneğin bir yardımcı yeniden başlatması) geri çekilmeyle yeniden deneyin;falseolduğunda, girdiyi veya yapılandırmayı kusur olarak ele alın ve değiştirmeden yeniden denemeyin.
Kaos mühendisliği
“Kaos mühendisliği” başlıklı bölümChaosReportWriteException
“ChaosReportWriteException” başlıklı bölüm- Ne zaman fırlatılır.
ChaosScenarioRunner::writeReport(), toplanan kaos-günü raporunu diske kalıcılaştıramadığında. Genel bir çalışma zamanı hatasının etki alanı-türlü yerine geçenidir; böylece çağıranlar, belirli rapor-disk hatasını, senaryo benzetimcilerinin kendi içinde fırlatılan hatalarla (çalıştırıcı bunlarıChaosOutcomealanları olarak yakalar) karıştırmadan yakalayabilir. - Sınıf.
NextPdfExceptionsınıfını genişletir vegetContext()yöntemini geçersiz kılar. - Bağlam anahtarları.
output_path(çalıştırıcının yazmaya çalıştığı mutlak yol). BunagetOutputPath()üzerinden de ulaşılır. İleti,ChaosScenarioRunner: failed to write report to "<path>".biçimindedir. - Çözüm. Bu, senaryoların değil, rapor alıcısının yazma tarafı hatasıdır. Çıktı dizininin var olduğunu ve yazılabilir olduğunu ve disk alanının mevcut olduğunu doğrulayın, sonra rapor yazma işlemini yeniden çalıştırın. Kaos sonuçlarının kendisi etkilenmez.
RetrievalUnavailableException
“RetrievalUnavailableException” başlıklı bölüm- Ne zaman fırlatılır. Bir getirme uç noktası (örneğin bir Voyage Getirmeyle Artırılmış Üretim hizmeti) kullanılamadığında ve sistem ya yalnızca-önbellek kipine geri döndüğünde ya da güvenli biçimde başarısız olduğunda.
- Sınıf.
NextPdfExceptionsınıfını genişletir vegetContext()yöntemini geçersiz kılar. - Bağlam anahtarları.
mode(hatadan sonraki işletim kipi — sonuçlar yalnızca anlamsal önbellekten sunulduğundaCACHED_ONLYya da istek hiçbir bayat veri olmadan tamamen reddedildiğindeFAIL_CLOSED) veendpoint(erişilemez hâle gelen uç nokta). BunlaragetMode()vegetEndpoint()üzerinden de ulaşılır. İleti,Retrieval endpoint "<endpoint>" is unavailable; operating in <mode> mode.biçimindedir. - Çözüm. Sistemin nasıl düşürdüğünü öğrenmek için
modedeğerini okuyun.CACHED_ONLYaltında sonuçlar bayat olabilir; uç nokta kurtulduğunda yenileyin.FAIL_CLOSEDaltında istek tasarım gereği reddedildi ve uç noktaya erişildikten sonra yeniden denenmelidir. Taze getirmeye güvenmeden önce uç nokta bağlanabilirliğini (ağ, kimlik bilgileri, hizmet sağlığı) geri yükleyin.