İçeriğe geç

Artisan sorunlarını giderme

Her köprü hatası, türlendirilmiş bir istisna olarak görünür. İstisnayı ve iletiyi aşağıdaki tabloyla eşleştirin. Her satır, hatayı fırlatan kaynak denetimini gösterir; böylece belirtiyi değil nedeni düzeltebilirsiniz.

chrome-php/chrome is not installed. Install it via: composer require chrome-php/chrome:^1.15

Chrome DevTools Protocol (CDP) istemci kitaplığı otomatik yükleyicide bulunmuyor. BrowserPool::getBrowser() bu istisnayı Chrome başlatılmadan önce fırlatır. Kurulum komutunu çalıştırın. Bu durum, eksik bir ikili dosya sorunundan farklıdır: kitaplık denetimi ve ikili dosya denetimi ayrı aşamalarda çalışır.

ChromeRenderException — başlatma veya zaman aşımı

“ChromeRenderException — başlatma veya zaman aşımı” başlıklı bölüm

Chrome renderer failed: <cause>

Chrome başlatılamadı, zaman aşımına uğradı veya çöktü. Önceki istisna, asıl nedeni içerir. Şu yaygın nedenleri denetleyin:

  • İkili dosya bulunamadı / çalıştırılabilir değil. Bunu chromium --headless --dump-dom about:blank ile doğrulayın. chrome_binary değerini mutlak yola ayarlayın.
  • Korumalı alan başlatılamıyor (kapsayıcılar). Nedende korumalı alan veya ad alanı geçer. Mümkünse korumalı alan destekli bir kapsayıcı kullanın veya /integrations/artisan/security-and-operations/. sayfasını okuduktan sonra no_sandbox: true olarak ayarlayın.
  • Zaman aşımı. Ağır bir belge render_timeout değerini aştı. Bu iş yükü için zaman aşımını yükseltin veya belgeyi küçültün. Kullanıcıya açık bir yolda, hizmet engelleme açısından ödünleşimi değerlendirin.
  • Eksik paylaşılan kitaplıklar. Chrome hemen sonlanır. Dağıtımınız için Chrome bağımlılık kümesini kurun.

Chrome printToPDF returned empty data

Chrome başladı, ancak printToPDF sıfır bayt döndürdü. Yaygın neden, boş bir gövde ya da display:none olarak ayarlanmış içerik gibi işlenmiş bir kutu oluşturmayan bir giriş veya yazdırma sırasında Chrome’un çökmesidir. Hypertext Markup Language (HTML) girişinin görünür bir kutuya işlendiğini doğrulayın. Ana makinedeki bellek baskısını denetleyin.

RuntimeException — Chrome öncesinde giriş reddedildi

“RuntimeException — Chrome öncesinde giriş reddedildi” başlıklı bölüm
İletide geçenNedenÇözüm
exceeds maximum allowed sizeHTML, şu değeri aşıyor: maxHtmlSizeGirişi küçültün veya max_html_size değerini yükseltin (kaynak tüketimi yüzeyini genişletir)
oversized base64 data URISatır içi base64 data Uniform Resource Identifier (URI) değeri ≥ 13 MBGömülü varlığı küçültün; daha küçük bir görsele başvurun
forbidden meta refresh redirect<meta http-equiv="refresh"> mevcutEtiketi kaldırın; bir sunucu tarafı istek sahteciliği (SSRF) gezinme vektörüdür ve her zaman reddedilir

Bu hatalar ChromeSecurityPolicy::validate() çağrısından kaynaklanır ve Chrome ile iletişim kurulmadan önce tetiklenir; bu nedenle testlerde kapsanmaları hızlı ve düşük maliyetlidir.

Page <n> has no content stream

Chrome, ayrıştırıcının sayfa çıkaramadığı bir Portable Document Format (PDF) dosyası üretti. Bu durum nadirdir ve genellikle bozuk Chrome çıktısına ya da beklenmedik yapıya sahip bir Chrome sürümüne işaret eder. Chrome sürümünü ve girişi kayda alın. İkili dosyanın desteklenen bir Chrome/Chromium derlemesi olduğunu doğrulayın.

Bu bir hata değildir. Köprü, her alt kaynak getirme işlemini Content Security Policy (CSP) default-src 'none' ve CDP tarafındaki setBlockedURLs('*') engellemesiyle engeller. Uzak <img> öğeleri, stil sayfaları, yazı tipleri, betikler ve iframe’ler yüklenmez. Varlıkları data: URI’leri olarak, Cascading Style Sheets (CSS) öğelerini de defaultCss veya <style> aracılığıyla satır içine alın. Ağ modeli için /integrations/artisan/security-and-operations/. sayfasına bakın.

Belge ikinci bir Chrome sayfasına taştı ve köprü yalnızca sayfa 0’ı içe aktardı. Otomatik sığdırma arabelleği, olağandışı uzun bir yeniden akış için fazla küçüktü ya da açık yükseklik fazla düşüktü. İçeriğe göre boyutlandırılmış açık bir yükseklik ayarlayın ya da güvenlik arabelleğiyle otomatik sığdırmayı kullanmak için açık yüksekliği kaldırın. Yükseklik işleme için /integrations/artisan/production-usage/. sayfasına bakın.

Bu beklenen bir davranıştır. BrowserPool, belleği sınırlamak için Chrome’u her 100 işlemede yeniden başlatır. notice düzeyinde bir günlük satırı, yeniden başlatmayı ve işlem sayısını kaydeder. Bunu hizmet düzeyi hedefleri (SLO’lar) açısından bir olay olarak değil, bilinen periyodik bir maliyet olarak değerlendirin. Her 100 işlemeden daha sık bir yeniden başlatma oranı, belgelerin beklenenden daha ağır olduğu anlamına gelir.

BrowserPool, 100 işlemde bir yeniden başlatmayla büyümeyi sınırlar; ancak çok uzun süre çalışan bir işçi yine de bellek biriktirebilir. Chrome’u erkenden geri dönüştürmek için büyük toplu işler arasında close() çağırın ve işçiyi bir ana makine bellek sınırı altında çalıştırın.

  1. Giriş sorunlarını ortam sorunlarından ayırmak için sorunu küçük ve güvenilir bir HTML parçasıyla yeniden oluşturun.
  2. Ana makinede işçi kullanıcısıyla chromium --headless --dump-dom about:blank komutunu çalıştırın.
  3. Bir PHP Standards Recommendation 3 (PSR-3) günlükleyici ekleyin ve ikili dosya yolu ile yeniden başlatma sayısı dahil olmak üzere info/notice satırlarını okuyun.
  4. Şunun kurulu olduğunu doğrulayın: chrome-php/chrome paketi kullanılabilir olduğunda BrowserPool::getBrowser() şunu fırlatmaz: ChromeNotAvailableException.
  5. Temeldeki Chrome nedenini görmek için istisnanın önceki istisnasını denetleyin.
  • /integrations/artisan/install/
  • /integrations/artisan/configuration/
  • /integrations/artisan/security-and-operations/
  • /integrations/artisan/chrome-renderer-setup/
  • /integrations/artisan/production-usage/