Geçen yıl Kasım ayında PHP 8 geldi. Performans, hız ve güvenlik konularında bazı iyileştirmeler yapıldığını duyurdu.
Her iyi tamirci gibi ben de 7.4'ten, özellikle de şu anda sunucuda çalışan sürüm olan 7.4.16'dan yükseltme yapmak için koştum.
Plof! Güzel bir 500 hatası beni karşılıyor ve tüm siteyi bozuyor. Hiçbir URL çözümlenmiyor.
Ben yaptım tipik test tüm eklentileri devre dışı bırakmak ve varsayılan şablonu kullanmak için. Hata 500 gitmiyor.
Şok oldum, ancak yükseltme için henüz çok erken olduğuna ve tavsiye ettikleri gibi yapılacak en iyi şeyin tüm eklenti ve şablon yazarlarının kodlarını PHP 8 ile uyumlu hale getirmek için güncellemelerini beklemek olduğuna ikna olarak konuyu geçiştirdim.
Neredeyse yedi ay sonra tekrar denedim ve 500 hatası hala oradaydı.
Hatanın kaynağının sadece bu blogda olduğuna dair ilk ipucu, aynı sunucuda sahip olduğum diğer iki WordPress kurulumunda her şeyin düzgün çalışmasıdır.
500 hatası birçok nedenden dolayı ortaya çıkabilir. Bir sonraki mantıklı adım, neyle uğraşmanız gerektiğini bulmaya çalışmak için hata günlüklerini almaktır. Bunun gibi bir dizi uyarı görünür:
PHP Warning: Use of undefined constant minor – assumed ‘minor’ (this will throw an Error in a future version of PHP) in /home/xxxxxx/public_html/blog/wp-config.php on line 11
PHP uyarısı: Tanımsız minor sabitinin kullanımı - 'minor' olarak varsayıldı (bu PHP'nin gelecekteki bir sürümünde hata verecektir).
Yani, sabitin ters virgüllü olması gerekir. Wp-config.php'ye gidiyorum ve gerçekten de o satırda tırnak işaretleri olmadan minor görünüyor.
define (‘WP_AUTO_UPDATE_CORE’, minor);
WordPress forumunda arama yaptığımda, birçok kişinin eklenti veya şablon çakışmaları nedeniyle PHP'nin eski sürümlerine yükseltme yaparken aynı sorunu yaşadığını gördüm.
Ayrıca, gönderdiğim bir bilette bana söylendiği gibi, sorunun WordPress'in kurulumuyla ilgili olduğu ve bir şeylerin bozuk olduğu da göz ardı edilemez LucusHost.
Aldıkları yanıtlardan bazıları 'minör'e ters virgül eklemenin sorunu çözeceğini söylüyor, bu yüzden denemekten zarar gelmez ve ben de bunu yapıyorum.
define ('WP_AUTO_UPDATE_CORE', 'minor');
WP_AUTO_UPDATE_CORE küçük, büyük ve geliştirme sürümleri için WordPress çekirdek güncellemelerini kontrol etmenizi sağlar. Bu sabit birkaç şekilde tanımlanabilir. Bu çizgiyi kaldırmak iyi bir fikir değildir.
#Disables all core updates:
define( ‘WP_AUTO_UPDATE_CORE’, false );
# Enable all updates, including minor and major updates:
define( ‘WP_AUTO_UPDATE_CORE’, true );
# Enables minor updates:
define( 'WP_AUTO_UPDATE_CORE', 'minor' );
İyi ve kötü haberlerim var.
İyi haber şu ki, artık PHP 8 çalıştırıldığında 500 hatası ortadan kalkıyor.
İlk bakışta her şey iyi çalışıyor gibi görünüyor, hem eklentiler hem de gönderiler.
Kötü olan şey, dizinin kırılması ve bu şekilde görünmesidir.
Saldırmaya karar verdim giriş şablonu, ile yapılmıştır Elementor Pro, İnşaatçının gizli bir çöp bırakmış olma ihtimaline karşı, ancak gözden geçirdikten ve tamamen yeniden yaptıktan sonra hatanın oradan kaynaklandığına karar verdim.
Şimdi şablonu genişletmeye devam ediyorum (GeneratePress Premium) Bir test ortamında ve en azından nerede kırıldığını biliyorum, ancak çoğunlukla WordPress'e bakıyorum, sorunun özünün nerede olduğunu düşünüyorum, bazı eski kod taraması, bazı yağ tıkanmış filtre veya her neyse.
Bu notu buraya bırakıyorum, belki birileri benzer bir sorun yaşamıştır ve burada yazılanlar ona yardımcı olur ya da WP hakkında çok şey biliyordur ve sorunu çözmek için daha fazla ipucu verebilir.
Nihai düzeltmeyi ve olası açıklamayı bulur bulmaz bu gönderiyi güncelleyeceğim.
Güncelleme
DEBUG'ı etkinleştirdikten sonra hata günlüğü, GeneratePress'in bir yerde çöktüğüne dair ipuçları veriyor, belki de Elements modülüne (veya her neyse) koyduğum bir kanca veya filtre nedeniyle.
GeneratePress alt şablonum olduğu için zaten kayboldum ve buradan nereye gideceğimi bilmiyorum, ancak birkaç şüphem olduğu için görevimin henüz başarısız olduğunu düşünmüyorum.
Fatal error: Uncaught TypeError: Unsupported operand types: string + int in /home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php:169 Stack trace: #0
/home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php(419): generate_do_post_meta_item() #1
/home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php(538): generate_posted_on() #2
/home/ public_html/blog/wp-includes/class-wp-hook.php(292): generate_post_meta() #3
/home/ public_html/blog/wp-includes/class-wp-hook.php(316): WP_Hook->apply_filters() #4
/blog/wp-includes/plugin.php(484): WP_Hook->do_action() #5
/blog/wp-content/themes/generatepress/content.php(48): do_action() #6
/blog/wp-includes/template.php(732): require('/home/ ...') #7
/blog/wp-includes/template.php(676): load_template() #8
/blog/wp-includes/general-template.php(204): locate_template() #9
/blog/wp-content/themes/generatepress/inc/theme-functions.php(587): get_template_part() #10
/blog/wp-content/themes/generatepress/index.php(37): generate_do_template_part() #11
/blog/wp-includes/template-loader.php(106): include('/home/ ...') #12
/blog/wp-blog-header.php(19): require_once('/home/ ...') #13
/blog/index.php(17): require('/home/ ...') #14
{main} thrown in /blog/wp-content/themes/generatepress/inc/structure/post-meta.php on line 169
Düzeltildi! Şey, neredeyse
Neyse ki ilk satır anahtardı, oradan itibaren o uzun listedeki tüm hatalar tetiklendi:
Fatal error: Uncaught TypeError: Unsupported operand types: string + int in /home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php:169
Hatanın gizemi, lanetlinin desteklenmeyen bazı işlemlerinde yatıyordu get_the_time.
Her şey birbirine bağlanıyor, şüpheler doğrulanıyor. Hata, güncelleme tarih ve saatini tarih metasının bir uzantısı olarak görüntüleyen bu işlev parçacığından kaynaklanıyordu.
Üstüne üstlük, nasıl olduğunu bilmiyorum ama devre dışı bıraktıktan sonra da yerleşik olarak kaldı Code Snippets ve önbelleği temizleyin.
Kıssadan hisse, başkaları için iyi çalışan işlevleri kullanmayın çünkü her sitenin kendine özgü bir geçmişi vardır ve onları unutursanız, WP'yi, PHP'yi, bir şablonu veya eklentiyi güncellerseniz ve artık uyumlu olmazlarsa bir şeyleri karıştırmaları çok muhtemeldir.
Bu parçacık kaldırıldığında, her şey yolunda gider ve ana sayfa güvenli ve sağlam bir şekilde yeniden görünür.
Üç olmadan iki olmaz, başka bir hata. Şimdi Feedzy
Ama henüz gitmeyin, çünkü şimdi eklenti Feedzy (sanırım) ya da ilgili bir şey haber sayfasını bozar.
Ücretli bir sürüm olduğu için, eklenti geliştiricilerine PHP 8 ile %100 uyumlu olup olmadığını (ve olmadığı için bozulup bozulmadığını) bildirmek veya onlardan bir ipucu almak için bir destek bileti açmam gerekiyor.
02/07/2021 - Feedly, PHP 8 kullanarak ölümcül hatayı tekrarladı ve sorunu geliştiricilerine iletti, şimdi sorunu çözmek için eklentinin yeni bir sürümünü yayınlamalarını beklememiz gerekiyor.
05/07/2021- Hatanın açıklaması artık mevcuttur. en su Github.
06/07/2021 - Henüz cevap vermemiş veya düzeltmeyi içeren yeni bir sürüm yayınlamamış olsalar da, bu taahhütte zaten bunu çözen kod satırları. Bunu test ettim ve iyi ve kapsamlı bir testin yokluğunda, PHP 8'in artık hiçbir şeyi bozmadığı görülüyor.
Özetlemek gerekirse
Fena değil. Tüm blogu bozan 500 hatasından, sadece ana sayfada ve son olarak tek bir "ikincil" sayfada hataya sahip olmak ve sonunda bir çözüm bulmak, onarım için harcanan saatlerden memnun olmam için yeterli.
Her şeyin anahtarı araştırmada, tüm zamanınızı kaynağı ve blogunuzun diğer bölümlerinde nelere neden olduğunu aramak için harcayın. Yeterli ipucu olmadan hızlı çözümleri denemeye atlamayın çünkü ya zaman kaybedersiniz ya da kötü bir şekilde başka bir şeyi kırarsınız.
Volveré a actualizar cuando consiga vencer al nuevo error con Feedzy o lo que carajo sea esta vez.