Direktori Artikel
Petang semalam, saya sedang mengkonfigurasi alat pengurusan pangkalan data Adminer pada pelayan. Adminer ringan dan mudah digunakan; satu fail PHP sahaja yang melakukan tugasnya, tidak seperti phpMyAdmin yang memerlukan banyak kebergantungan. Saya memuat turun versi terkini dari laman web rasmi, memuat naiknya ke pelayan, menetapkan kebenaran dan membuka pelayar saya, bersedia untuk menyemaknya.
Kemudian, semuanya menjadi kosong.

Saya memuat semula halaman itu tiga kali, jari saya sakit kerana menekan F5 berkali-kali. Masih tiada apa-apa. Saya membuka alat pembangun pelayar; ia menunjukkan ralat 200 OK, tetapi badan respons kosong. Saya benar-benar tergamam. Apa yang sedang berlaku?
Saya terfikir sejenak. Mungkinkah ia isu kebenaran fail? Saya semak, dan ia adalah 755. Mungkinkah ia ketidakserasian versi PHP? Saya semak, dan ia adalah PHP 8.2, yang tidak mengapa. Mungkinkah fail itu sendiri rosak? Saya memuat turun salinan baharu, menulis gantinya, dan ia masih kosong.
Atas sebab yang tidak dapat dijelaskan, saya terfikir, mengapa tidak cuba menukar nama saya?
Saya telah menamakan semula adminer.php kepada adminer1.php dan memuat semula halaman tersebut.
Akses berjaya.
Saya benar-benar keliru. Fail yang sama, kod yang sama, pelayan yang sama, dan ia boleh diakses hanya dengan menukar nama? Logik mistik macam apa ini?
Isu fail admin.php kosong
Kemudian saya menyedari bahawa ini bukanlah sejenis tahyul; ia adalah cache PHP yang menyebabkan masalah itu.
OPcache, singkatan untuk Opcode Cache, ialah sambungan pengoptimuman prestasi untuk PHP. Prinsipnya mudah: PHP ialah bahasa yang ditafsirkan, dan setiap permintaan memerlukan kod PHP dikompilasi ke dalam opcode sebelum pelaksanaan. OPcache menyimpan hasil yang dikompilasi dalam memori dalam cache, membolehkan permintaan seterusnya menggunakan versi yang di-cache secara langsung tanpa penyusunan semula, menghasilkan peningkatan prestasi yang ketara.
Tetapi di situlah letaknya masalahnya.
Sebelum ini, adminer.php memaparkan "Fail tidak dijumpai" (saya telah memuat naik fail yang salah), dan OPcache telah menyimpan hasil kompilasi kandungan yang salah itu dalam cache. Kemudian, saya menggantikan adminer.php dengan kod yang betul, tetapi OPcache mengabaikannya dan terus membaca cache lama dari ingatan, mengakibatkan halaman kosong atau mesej ralat lama.
Apabila anda menamakannya semula kepada adminer1.php, ia menjadi laluan fail yang baharu sepenuhnya untuk OPcache, dan ia akan memuat semula dan menyelesaikannya dengan betul.
Ia seperti anda sudah mendapat buku baharu, tetapi kad indeks perpustakaan masih mempunyai nombor panggilan buku lama. Apabila anda mencarinya di rak, sudah tentu ia kosong. Tetapi jika anda menukar tajuk buku itu, perpustakaan akan mencipta kad indeks baharu untuk anda, dan kemudian anda boleh menemuinya.
Sebab 1: Cache OPcache menyebabkan ruang kosong
Bagaimana menanganinya?
Mulakan semula perkhidmatan PHP-FPM dan kosongkan cache OPcache.
# 查看正在运行的PHP版本
php -v
# 重启对应的PHP-FPM(例如PHP 8.5)
sudo systemctl restart php8.5-fpm
# 或者重启所有PHP-FPM服务
sudo systemctl restart php*-fpmSelepas memulakan semula, namakan semula fail tersebut kepada adminer.php, muat semula halaman web (disyorkan untuk menekan Ctrl+F5 untuk memaksa penyegaran pelayar), dan masalah tersebut sepatutnya diselesaikan.
Tapi ceritanya belum tamat lagi.
Selepas memulakan semula PHP-FPM, saya menukar fail adminer.php kembali, memuat semula halaman tersebut, tetapi ia masih kosong. Saya benar-benar keliru.
Sebab 2: Sekatan peraturan konfigurasi Nginx
Ini membawa kepada kemungkinan sebab kedua.
Fail konfigurasi Nginx mungkin mempunyai peraturan khas yang menyekat adminer.php.
Saya sebelum ini telah mengkonfigurasi Fail2Ban dalam panel HestiaCP dan menulis peraturan padanan tepat untuk adminer.php bagi mengelakkan serangan brute-force. Peraturan tersebut telah mengekod nama fail adminer.php secara tetap, jadi sebaik sahaja anda menamakannya semula kepada adminer1.php, anda telah memintas peraturan Nginx ini dan boleh mengaksesnya secara normal.
Kaedah penyelesaian masalah adalah mudah: cari entri berkod keras dalam konfigurasi Nginx.
sudo grep -rn "adminer.php" /etc/nginx/Jika anda menemui peraturan seperti `location = /adminer.php { … }`, ini bermakna Nginx mengendalikan nama fail khusus ini secara khusus. Padam atau ubah suai sahaja.
Sebab 3: Tetapan paparan ralat PHP
Sebab ketiga lebih halus.
Skrip PHP dipintas atau memaparkan ralat, tetapi halaman tersebut melumpuhkan paparan ralat (display_errors = Mati). Dalam persekitaran pengeluaran, PHP menyembunyikan ralat secara lalai, memaparkan halaman kosong. Jika fail entri anda (cth., index.php) ranap atas sebab tertentu semasa cuba memasukkan "./adminer.php", halaman tersebut hanya akan menjadi kosong.
Dalam situasi ini, menyemak log ralat adalah kaedah yang paling boleh dipercayai:
# 查看Nginx错误日志
sudo tail -n 20 /var/log/nginx/error.log
# 或者查看HestiaCP对应域名的error日志
sudo tail -n 20 /var/log/nginx/domains/adminer.domain.com.error.logLog akan memberitahu anda sebab sebenar skrin putih itu.
Sejujurnya, saya akhirnya menemui masalahnya dengan menyemak error.log. Rupa-rupanya adminer.php sedang memanggil sambungan PHP yang tidak wujud, dan display_errors dimatikan, jadi halaman itu kosong, tetapi log ralat merekodkannya dengan jelas.
Penyelesaian dan langkah penyelesaian masalah
Peristiwa ini telah meninggalkan kesan yang mendalam kepada saya.
Masalah teknikal selalunya tidak semudah yang disangka. Fail adminer.php yang kosong mungkin kelihatan seperti masalah fail pada pandangan pertama, tetapi jika digali lebih dalam, ia mungkin mendedahkan masalah caching, dan lebih jauh lagi ia mungkin masalah dengan kod itu sendiri.
Jika anda bukan seorang pengaturcara, anda mungkin menganggap perkara-perkara ini tidak relevan bagi anda. Tetapi fikirkanlah: setiap aplikasi yang anda gunakan, setiap halaman web yang anda lawati, mempunyai sistem serupa yang berjalan di sebalik tabir. Caching, konfigurasi, pengendalian ralat—konsep-konsep ini sebenarnya ada di mana-mana.
Sama seperti kita manusia. Banyak kali, "gejala" yang kita pamerkan, seperti penangguhan, kebimbangan, dan kerengsaan, mungkin kelihatan seperti kemalasan pada zahirnya, tetapi jika dikaji lebih mendalam, ia mungkin disebabkan oleh matlamat yang tidak jelas, penggalian yang lebih mendalam, ketakutan akan kegagalan, dan lebih mendalam lagi, pemikiran yang dibentuk oleh pengalaman zaman kanak-kanak.
Hanya dengan mengenal pasti punca sebenar, barulah kita boleh menetapkan ubat yang betul.
Akhir sekali, jika anda juga menghadapi masalah fail adminer.php kosong, semaknya mengikut susunan ini:
Pertama, mulakan semula PHP-FPM dan kosongkan cache, kemudian semak konfigurasi Nginx, dan akhirnya semak error.log.
Dalam kebanyakan kes, dua langkah pertama sudah cukup untuk menyelesaikan masalah.
Sudah tentu, jika itu masih tidak berfungsi, sila semak error.log tersebut.
Ia akan memberitahu anda jawapannya.
Memandangkan anda telah membaca setakat ini, jika anda mendapati ia membantu, sila suka dan kongsikannya. Jika anda ingin menerima kemas kini terlebih dahulu, anda juga boleh mengikuti saya!
Terima kasih kerana membaca artikel saya. Jumpa lagi di lain masa.
Semoga artikel "Adminer.php Access Blank? Renaming Berfungsi Seperti Biasa? Analisis Sebab dan 3 Langkah untuk Menyelesaikan Masalah Secara Tuntas" yang dikongsikan di blog Chen Weiliang ( https://www.chenweiliang.com/ ) akan membantu anda.
Jangan ragu untuk berkongsi pautan artikel ini: https://www.chenweiliang.com/cwl-34403.html
