Pada bulan November tahun lalu datang PHP 8. Ia mengumumkan beberapa perbaikan dalam performa, kecepatan dan keamanan.
Seperti halnya pengotak-atik yang baik, saya berlari untuk meng-upgrade dari 7.4, khususnya dari 7.4.16, versi yang sekarang berjalan di server.
Plof! kesalahan 500 yang bagus menyapa saya dan merusak seluruh situs. Tidak ada URL yang terselesaikan.
Saya membuat tes tipikal untuk menonaktifkan semua plugin dan menggunakan templat default. Kesalahan 500 tidak akan hilang.
Ini sangat aneh, tetapi saya meneruskan masalah ini dengan yakin bahwa masih terlalu dini untuk meng-upgrade dan, seperti yang mereka sarankan, hal terbaik yang harus dilakukan adalah menunggu semua penulis plugin dan template untuk memperbarui kode mereka agar kompatibel dengan PHP 8.
Hampir tujuh bulan kemudian saya mencoba lagi dan kesalahan 500 masih ada.
Petunjuk pertama bahwa asal muasal kesalahan hanya di blog ini adalah bahwa di dua instalasi WordPress lainnya yang saya miliki di server yang sama semuanya berfungsi dengan benar.
Como un error 500 puede aparecer por un montón de historias. El siguiente paso lógico es tirar de los logs de error para intentar saber a qué hay meterle mano. Aparece una ristra de avisos como este :
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
Peringatan PHP: Penggunaan konstanta minor yang tidak terdefinisi - diasumsikan 'minor' (hal ini akan menimbulkan kesalahan dalam versi PHP yang akan datang).
Artinya, konstanta seharusnya memiliki koma terbalik. Saya buka wp-config.php dan memang, minor muncul tanpa tanda kutip di baris itu.
define (‘WP_AUTO_UPDATE_CORE’, minor);
Mencari di forum WordPress, saya menemukan bahwa banyak orang mengalami masalah yang sama saat meng-upgrade ke versi PHP yang lebih lama karena konflik plugin atau template.
Juga tidak dapat dikesampingkan bahwa masalahnya terkait dengan instalasi WordPress yang memiliki sesuatu yang rusak, seperti yang saya diberitahu dalam tiket yang saya kirim ke LucusHost.
Dalam beberapa jawaban yang mereka terima, mereka mengatakan bahwa untuk menyelesaikan masalah, cukup tambahkan koma terbalik ke 'minor', jadi tidak ada salahnya untuk mencoba dan itulah yang saya lakukan.
define (‘WP_AUTO_UPDATE_CORE’, ‘minor’);
WP_AUTO_UPDATE_CORE memungkinkan Anda untuk mengontrol pembaruan inti WordPress untuk versi minor, mayor, dan pengembangan. Konstanta ini bisa didefinisikan dalam beberapa cara. Menghapus garis ini bukanlah ide yang bagus.
#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’ );
Kabar baik dan kabar buruk.
Kabar baiknya adalah bahwa sekarang, dengan menjalankan PHP 8, kesalahan 500 sudah hilang.
Sekilas semuanya tampak berfungsi dengan baik, baik plugin maupun postingan.
Hal buruknya adalah bahwa indeks rusak dan terlihat seperti ini.
Saya memutuskan untuk menyerang templat masukan, dibuat dengan Elementor Pro, seandainya pembangun telah meninggalkan beberapa sampah tersembunyi, tetapi setelah meninjaunya dan mengulanginya kembali sepenuhnya, saya telah mengesampingkan bahwa kesalahan berasal dari sana.
Sekarang saya terus menguraikan templatnya (GeneratePress Premium) dalam lingkungan pengujian dan setidaknya saya tahu di mana itu rusak, tetapi kebanyakan saya melihat WordPress, yang menurut saya inti masalahnya adalah, beberapa kode basi merangkak, beberapa filter tersumbat minyak atau apa pun.
Saya meninggalkan catatan ini di sini jika ada seseorang yang memiliki masalah serupa dan itu membantu mereka atau apa yang tertulis di sini atau mereka tahu banyak tentang WP dan dapat berkontribusi dengan beberapa petunjuk lebih lanjut untuk menyelesaikannya.
Segera setelah saya menemukan perbaikan akhir dan kemungkinan penjelasannya, saya akan memperbarui postingan ini.
Pembaruan
Log kesalahan, setelah mengaktifkan DEBUG, memberikan petunjuk bahwa GeneratePress mengalami crash di suatu tempat, mungkin karena beberapa hook atau filter yang saya masukkan ke dalam modul Elements (atau apa pun).
Karena saya memiliki templat anak GeneratePress, saya sudah tersesat dan saya tidak tahu ke mana harus pergi dari sini, tetapi karena saya memiliki beberapa kecurigaan, saya belum menganggap misi saya gagal.
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
Tetap! Yah, hampir
Untungnya baris pertama adalah kuncinya, dari sana semua kesalahan dalam daftar panjang itu terpicu:
Fatal error: Uncaught TypeError: Unsupported operand types: string + int in /home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php:169
Misteri kesalahan terletak pada beberapa operasi terkutuk yang tidak didukung get_the_time.
Mengikat segala sesuatunya, kecurigaan pun terkonfirmasi. Bug disebabkan oleh potongan fungsi ini yang digunakan untuk menampilkan tanggal dan waktu pembaruan sebagai perpanjangan dari meta tanggal.
Untuk melengkapi semua itu, saya tidak tahu bagaimana caranya, tetapi tetap tinggal setelah menonaktifkan Code Snippets dan hapus cache.
Moral dari cerita ini, jangan gunakan fungsi yang bekerja dengan baik untuk orang lain karena setiap situs memiliki sejarahnya sendiri dan sangat mungkin mereka akan mengacaukan sesuatu jika Anda melupakannya, memperbarui WP, PHP, templat, atau plugin dan mereka tidak lagi kompatibel.
Ketika cuplikan ini dihapus, semuanya berfungsi dengan baik dan beranda muncul kembali dengan aman dan sehat.
Tidak ada dua tanpa tiga, kesalahan lain. Sekarang Feedzy
Tetapi jangan pergi dulu, karena sekarang plugin Feedzy (Saya kira) atau sesuatu yang terkait memecah halaman berita.
Saya harus membuka tiket dukungan, karena ini adalah versi berbayar, untuk memberi tahu pengembang plugin jika 100% kompatibel dengan PHP 8 (dan jika rusak karena tidak) atau untuk mendapatkan petunjuk dari mereka.
02/07/2021 - Feedly telah mereplikasi kesalahan fatal menggunakan PHP 8 dan telah meneruskan masalah tersebut kepada pengembangnya, sekarang kita harus menunggu mereka merilis versi baru plugin untuk memperbaiki masalah tersebut.
05/07/2021- Deskripsi bug sudah ada di Github.
06/07/2021 - Meskipun mereka belum menjawab atau merilis versi baru dengan perbaikan, dalam komit ini mereka sudah baris-baris kode yang menyelesaikannya. Saya telah mengujinya dan, dengan tidak adanya pengujian yang baik dan menyeluruh, tampaknya PHP 8 tidak merusak apa pun lagi.
Untuk merekapitulasi
Lumayan. Dari memiliki 500 error yang merusak seluruh blog hingga hanya ada di halaman beranda dan akhirnya pada satu halaman "sekunder" hingga akhirnya menemukan perbaikan sudah cukup bagi saya untuk merasa puas dengan waktu yang diinvestasikan dalam perbaikan.
Kunci dari semuanya adalah dalam penelitian, habiskan seluruh waktu Anda untuk mencari sumber dan apa yang menyebabkannya di bagian lain dari blog Anda. Jangan langsung mencoba perbaikan cepat tanpa petunjuk yang cukup, karena Anda akan membuang-buang waktu atau, dengan cara yang buruk, merusak sesuatu yang lain.
Volveré a actualizar cuando consiga vencer al nuevo error con Feedzy o lo que carajo sea esta vez.