Przejdź do głównej zawartości
getnextpdf.com

Błędy zgodności

Te wpisy obejmują dwa wyjątki w przestrzeni nazw NextPDF\Compliance\Exception. Oba są zgłaszane przez podsystem zgodności: kanoniczny potok skrótu klauzuli oraz cykl życia zgodności (pamięć podręczna Document Compliance Evidence, promotor z audited do terminal oraz obserwator schłodzenia).

Obie klasy są final i rozszerzają NextPdfException, który sam rozszerza \RuntimeException i implementuje ContextAwareExceptionInterface. Żadna z podklas nie nadpisuje getContext(), więc obie dziedziczą implementację bazową, która zwraca pustą tablicę. Szczegóły diagnostyczne są niesione w komunikacie wyjątku, a nie w getContext(). Przechwyć dowolny z tych typów jako NextPdfException albo jako \RuntimeException, jeśli masz istniejące programy obsługi.

  • Kiedy jest zgłaszany. Z ClauseHash::compute(), gdy hostujące środowisko wykonawcze PHP nie spełnia twardego wymagania kanonicznego potoku skrótu klauzuli. Obecnie jedynym takim wymaganiem jest ext-intl, używane do normalizacji Unicode Normalization Form KC (NFKC). Jedyne miejsce zgłoszenia generuje komunikat ClauseHash requires ext-intl for NFKC normalisation.
  • Dlaczego działa w trybie fail-closed. composer.json nakazuje ext-intl, więc to zadziała tylko w błędnie skonfigurowanym środowisku downstream, które pakuje NextPDF bez intl. Potok odmawia obliczenia skrótu bez normalizacji NFKC, zamiast po cichu wyemitować skrót niezgodny z każdym innym konsumentem skrótu klauzuli.
  • Kontekst. getContext() zwraca pustą tablicę. Przyczyna jest podana w komunikacie.
  • Naprawa. Działanie operatora: zainstaluj i włącz rozszerzenie PHP intl na hoście, a następnie ponów. Nie istnieje obejście w kodzie; znormalizowanego skrótu nie da się wytworzyć bez niego.
  • Kiedy jest zgłaszany. Z podsystemu cyklu życia zgodności, gdy w czasie wykonania zostanie naruszony niezmiennik strukturalny claims.json lub jego potoku utrwalania. Miejsca zgłoszenia obejmują promotor z audited do terminal, obserwator schłodzenia oraz przyrostową pamięć podręczną Document Compliance Evidence. Konkretne wyzwalacze to:
    • Źle sformowany dokument głównyclaims.json nie dekoduje się do obiektu albo claims.standards nie jest obiektem JSON (na przykład claims.json must decode to an object, claims.standards must be a JSON object, claims.json invalid JSON: <detail>).
    • Awarie odczytuclaims.json jest brakujący lub nieczytelny (na przykład claims.json not found at: <path>, claims.json unreadable at <path>).
    • Awarie wejścia/wyjścia zapisu atomowego w potoku utrwalania — otwarcie pliku temp, flock, krótki zapis, fflush, atomowy rename oraz zapis sidecara (na przykład tmp open failed at <path>, tmp flock failed at <path>, tmp write short for <path>, tmp fflush failed at <path>, atomic rename failed for <path>, sha256 sidecar write failed at <path>).
    • Awarie po stronie koderajson_encode() odrzuca wychodzący ładunek (na przykład claims.json encode failed: <detail>).
    • Awarie bootstrapu pamięci podręcznej dowodów — przyrostowa pamięć podręczna nie może utworzyć ani zapisać swojego katalogu głównego (na przykład IncrementalEvidenceCache: cannot create rootDir <path>, IncrementalEvidenceCache: write failed for <path>, IncrementalEvidenceCache: rename failed for <path>).
    • Naruszenia niezmienników wewnętrznych — na przykład gmdate produced empty timestamp lub fqClauseId: empty clauseKey.
  • Dlaczego istnieje. To zastępnik typu domenowego dla wcześniejszego użycia \RuntimeException w kodzie cyklu życia i pamięci podręcznej. Nie zmienia kontraktu środowiska wykonawczego, ponieważ NextPdfException już rozszerza \RuntimeException; istniejące klauzule catch (\RuntimeException $e) nadal działają.
  • Kontekst. getContext() zwraca pustą tablicę. Problematyczna ścieżka oraz konkretna awaria są podane w komunikacie; awarie dekodowania i kodowania JSON również wiążą bazowy \JsonException jako poprzedni wyjątek, więc odczytaj getPrevious() dla tych przypadków.
  • Naprawa.
    • W przypadku błędów kształtu i odczytu jest to działanie operatora: sprawdź claims.json pod ścieżką podaną w komunikacie, potwierdź, że jest to poprawnie sformowany JSON, którego korzeń i element standards są obiektami, oraz potwierdź, że jest obecny i czytelny.
    • W przypadku błędów zapisu atomowego i bootstrapu pamięci podręcznej sprawdź istnienie katalogu docelowego, uprawnienia i wolne miejsce, a następnie ponów.
    • W przypadku awarii po stronie kodera jest to działanie programisty: ładunek przekazany do json_encode() nie jest kodowalny. Przechwyć powiązany poprzedni wyjątek oraz komunikat do raportu o usterce.