Adminer.php neden boş? Yeniden adlandırmak sorunsuz çalışıyor ama? Sorunun analizi ve 3 adımlı çözüm.

Dün öğleden sonra, sunucuda Adminer veritabanı yönetim aracını yapılandırıyordum. Adminer hafif ve kullanımı kolay; diğerlerine kıyasla tek bir PHP dosyası işi hallediyor...phpMyAdminBu, bir sürü bağımlılık kuracaktı. Resmi web sitesinden en son sürümü indirdim, sunucuya yükledim, izinleri ayarladım, tarayıcımı açtım ve kendim görmek için hazırlandım.

Sonra her şey karardı.

Adminer.php neden boş? Yeniden adlandırmak sorunsuz çalışıyor ama? Sorunun analizi ve 3 adımlı çözüm.

Sayfayı üç kez yeniledim, F5 tuşuna o kadar çok basmaktan parmaklarım ağrıyordu. Yine de hiçbir şey olmadı. Tarayıcının geliştirici araçlarını açtım; 200 OK hatası gösterdi, ancak yanıt gövdesi boştu. Tamamen şok oldum. Neler oluyordu?

Bir an düşündüm. Dosya izinleriyle ilgili bir sorun olabilir mi? Kontrol ettim, 755'ti. PHP sürümü uyumsuzluğu olabilir mi? Kontrol ettim, PHP 8.2, bu da sorun değil. Dosyanın kendisi hatalı olabilir mi? Yeni bir kopyasını indirdim, üzerine yazdım ve hala boş.

Nedense, ismimi değiştirmeyi denemeye ne dersiniz diye düşündüm.

adminer.php dosyasını adminer1.php olarak yeniden adlandırdım ve sayfayı yeniledim.

Erişim başarılı oldu.

Gerçekten şaşkına döndüm. Aynı dosya, aynı kod, aynı sunucu ve sadece adını değiştirerek erişilebiliyor mu? Bu nasıl bir mistik mantık?

adminer.php dosyasının boş olması sorunu

Sonradan bunun bir tür batıl inanç olmadığını, soruna neden olanın PHP önbelleklemesi olduğunu fark ettim.

OPcache, yani Opcode Cache, PHP için bir performans optimizasyon eklentisidir. Prensibi basittir: PHP yorumlayıcı bir dildir ve her istek, yürütülmeden önce PHP kodunun opcode'a derlenmesini gerektirir. OPcache, derlenmiş sonucu bellekte önbelleğe alır ve sonraki isteklerin yeniden derleme yapmadan doğrudan önbelleğe alınmış sürümü kullanmasına olanak tanıyarak önemli bir performans artışı sağlar.

Ama sorun da tam olarak burada yatıyor.

Daha önce adminer.php "Dosya bulunamadı" hatası veriyordu (yanlış dosyayı yüklemiştim) ve OPcache bu yanlış içeriğin derlenmiş sonucunu önbelleğe almıştı. Daha sonra adminer.php dosyasını doğru kodla değiştirdim, ancak OPcache bunu görmezden geldi ve eski önbelleği bellekten okumaya devam etti, bu da boş bir sayfaya veya eski hata mesajına neden oldu.

Dosya adını adminer1.php olarak değiştirdiğinizde, OPcache için tamamen yeni bir dosya yolu haline gelir ve yeniden yüklenerek doğru şekilde çözümlenir.

Sanki yeni bir kitap almışsınız ama kütüphanenin indeks kartında hala eski kitabın numarası yazıyor. Rafta aradığınızda elbette boş buluyorsunuz. Ama kitabın adını değiştirirseniz, kütüphane sizin için yeni bir indeks kartı oluşturuyor ve sonra kitabı bulabiliyorsunuz.

Sebep 1: OPcache önbelleği boşluklara neden oluyor

Nasıl başa çıkılır bununla?

PHP-FPM hizmetini yeniden başlatın ve OPcache önbelleğini temizleyin.

# 查看正在运行的PHP版本
php -v

# 重启对应的PHP-FPM(例如PHP 8.5)
sudo systemctl restart php8.5-fpm

# 或者重启所有PHP-FPM服务
sudo systemctl restart php*-fpm

Yeniden başlattıktan sonra, dosyanın adını tekrar adminer.php olarak değiştirin, web sayfasını yenileyin (tarayıcıyı zorla yenilemek için Ctrl+F5 tuşlarına basmanız önerilir) ve sorun çözülmüş olmalıdır.

Ama hikaye henüz bitmedi.

PHP-FPM'yi yeniden başlattıktan sonra adminer.php dosyasını eski haline getirdim, sayfayı yeniledim, ancak sayfa hala boştu. Tamamen şaşkına döndüm.

2. Sebep: Nginx yapılandırma kuralı kısıtlamaları

Bu da ikinci olası nedene götürüyor.

Nginx yapılandırma dosyasında adminer.php'yi kısıtlayan özel kurallar olabilir.

Daha önce buradaydım.HestiaCPF, panelde yapılandırılmıştır.ail2Ban, kaba kuvvet saldırılarını önlemek için adminer.php için hassas bir eşleştirme kuralı uygulamıştır. Kural, dosya adını adminer.php olarak sabit kodlar; bu nedenle, dosya adını adminer1.php olarak değiştirirseniz, bu Nginx kuralını atlatabilir ve siteye normal şekilde erişebilirsiniz.

Sorun giderme yöntemi basittir: Nginx yapılandırmasında sabit kodlanmış girdileri arayın.

sudo grep -rn "adminer.php" /etc/nginx/

`location = /adminer.php { … }` gibi kurallar görürseniz, bu Nginx'in bu belirli dosya adını özel olarak işlediği anlamına gelir. Sadece silin veya değiştirin.

3. Sebep: PHP hata görüntüleme ayarları

Üçüncü sebep daha incelikli.

PHP betiği yakalanır veya bir hata verir, ancak sayfa hata gösterimini devre dışı bırakır (display_errors = Off). Üretim ortamında, PHP varsayılan olarak hataları gizler ve boş bir sayfa görüntüler. Giriş dosyanız (örneğin, index.php) "./adminer.php" dosyasını dahil etmeye çalışırken herhangi bir nedenle çökerse, sayfa basitçe boş kalacaktır.

Bu durumda, hata günlüğünü kontrol etmek en güvenilir yöntemdir:

# 查看Nginx错误日志
sudo tail -n 20 /var/log/nginx/error.log

# 或者查看HestiaCP对应域名的error日志
sudo tail -n 20 /var/log/nginx/domains/adminer.domain.com.error.log

Kayıt dosyası size beyaz ekranın gerçek nedenini gösterecektir.

Dürüst olmak gerekirse, sorunu sonunda error.log dosyasını kontrol ederek buldum. adminer.php'nin var olmayan bir PHP eklentisini çağırdığı ve display_errors'ın kapalı olduğu ortaya çıktı, bu yüzden sayfa boştu, ancak hata günlüğü bunu açıkça kaydetmişti.

Çözümler ve sorun giderme adımları

Bu olay bende derin bir iz bıraktı.

Teknik sorunlar genellikle ilk bakışta göründükleri kadar basit değildir. Boş bir adminer.php dosyası ilk bakışta dosya sorunu gibi görünebilir, ancak daha derine inildiğinde önbellekleme sorunu, daha da ileride yapılandırma sorunu ve en ileride de kodun kendisiyle ilgili bir sorun ortaya çıkabilir.

Eğer programcı değilseniz, bu şeylerin sizin için önemsiz olduğunu düşünebilirsiniz. Ama bir düşünün: kullandığınız her uygulama, ziyaret ettiğiniz her web sayfası, arka planda benzer bir sistem çalıştırıyor. Önbellekleme, yapılandırma, hata yönetimi—bu kavramlar aslında her yerde mevcut.

Tıpkı biz insanlar gibi. Birçok kez, erteleme, kaygı ve sinirlilik gibi sergilediğimiz "belirtiler" yüzeysel olarak tembellik gibi görünse de, daha derine inildiğinde, belirsiz hedeflerden, daha fazla araştırmadan, başarısızlık korkusundan ve hatta daha da derinde, çocukluk deneyimleriyle şekillenmiş bir zihniyetten kaynaklanıyor olabilir.

Ancak asıl kök nedeni bularak doğru ilacı reçete edebiliriz.

Son olarak, eğer adminer.php dosyasının boş olması sorunuyla da karşılaşırsanız, şu sırayla kontrol edin:

Öncelikle PHP-FPM'yi yeniden başlatın ve önbelleği temizleyin, ardından Nginx yapılandırmasını kontrol edin ve son olarak error.log dosyasını inceleyin.

Çoğu durumda, sorunu çözmek için ilk iki adım yeterlidir.

Tabii ki, eğer bu da işe yaramazsa, error.log dosyasını kontrol edin.

Size cevabı söyleyecektir.

Buraya kadar okuduğunuza göre, eğer faydalı bulduysanız lütfen beğenin ve paylaşın. Güncellemeleri ilk öğrenmek istiyorsanız beni takip edebilirsiniz!

Makalemi okuduğunuz için teşekkür ederim. Bir sonraki yazıda görüşmek üzere.

发表 评论

E-posta adresiniz yayımlanmayacaktır. 必填 项 已 用 * 标注

Makale Rehberi
En gidin