Article Directory
Jučer popodne sam konfigurisao Adminer alat za upravljanje bazom podataka na serveru. Adminer je lagan i jednostavan za korištenje; jedna PHP datoteka obavlja posao, za razliku od phpMyAdmin- a koji zahtijeva gomilu zavisnosti. Preuzeo sam najnoviju verziju sa službene web stranice, postavio je na server, postavio dozvole i otvorio preglednik, spreman da ga isprobam.
Onda je sve postalo prazno.

Osvježio sam stranicu tri puta, prsti su me boljeli od toliko pritiskanja F5. I dalje ništa. Otvorio sam alate za razvojne programere u pregledniku; prikazivalo je grešku 200 OK, ali tijelo odgovora je bilo prazno. Bio sam potpuno zapanjen. Šta se dešava?
Razmislio sam o tome na trenutak. Da li bi mogao biti problem s dozvolama datoteke? Provjerio sam i bila je 755. Da li bi mogao biti problem s nekompatibilnošću PHP verzije? Provjerio sam i to je PHP 8.2, što je u redu. Da li bi sama datoteka mogla biti neispravna? Preuzeo sam novu kopiju, prebrisao je i još uvijek je prazna.
Iz nekog neobjašnjivog razloga, pomislio sam, zašto ne pokušati promijeniti ime?
Preimenovao sam adminer.php u adminer1.php i osvježio stranicu.
Pristup je bio uspješan.
Bio sam iskreno zbunjen. Ista datoteka, isti kod, isti server, a dostupna je samo promjenom imena? Kakva je ovo mistična logika?
Problem sa praznom datotekom adminer.php
Kasnije sam shvatio da to nije bilo neko praznovjerje; problem je uzrokovalo PHP keširanje.
OPcache, skraćenica od Opcode Cache, je ekstenzija za optimizaciju performansi za PHP. Njegov princip je jednostavan: PHP je interpretirani jezik i svaki zahtjev zahtijeva da se PHP kod kompajlira u opcode prije izvršenja. OPcache kešira kompajlirani rezultat u memoriju, omogućavajući narednim zahtjevima da direktno koriste keširanu verziju bez ponovnog kompajliranja, što rezultira značajnim poboljšanjem performansi.
Ali tu leži problem.
Ranije je adminer.php prikazivao "Datoteka nije pronađena" (uploadovao sam pogrešnu datoteku), a OPcache je keširao kompajlirani rezultat tog netačnog sadržaja. Kasnije sam zamijenio adminer.php ispravnim kodom, ali OPcache ga je ignorisao i nastavio čitati stari keš iz memorije, što je rezultiralo praznom stranicom ili starom porukom o grešci.
Kada ga preimenujete u adminer1.php, on postaje potpuno nova putanja datoteke za OPcache, a on će ga ponovo učitati i ispravno razriješiti.
To je kao da ste već dobili novu knjigu, ali na bibliotečkom indeksnom listiću još uvijek stoji signaturni broj stare knjige. Kada je potražiš na polici, naravno, ona je prazna. Ali ako promijeniš naslov knjige, biblioteka će ti kreirati novi indeksni listić i tada je možeš pronaći.
Razlog 1: OPcache keš uzrokuje prazne prostore
Kako se nositi s tim?
Ponovo pokrenite PHP-FPM servis i obrišite OPcache keš memoriju.
# 查看正在运行的PHP版本
php -v
# 重启对应的PHP-FPM(例如PHP 8.5)
sudo systemctl restart php8.5-fpm
# 或者重启所有PHP-FPM服务
sudo systemctl restart php*-fpmNakon ponovnog pokretanja, preimenujte datoteku nazad u adminer.php, osvježite web stranicu (preporučuje se da pritisnete Ctrl+F5 za prisilno osvježavanje preglednika) i problem bi trebao biti riješen.
Ali priča još nije završena.
Nakon ponovnog pokretanja PHP-FPM-a, promijenio sam datoteku adminer.php nazad, osvježio stranicu, ali je i dalje bila prazna. Bio sam potpuno zbunjen.
Razlog 2: Ograničenja pravila konfiguracije Nginxa
To dovodi do drugog mogućeg razloga.
Nginx konfiguracijska datoteka može imati posebna pravila koja ograničavaju adminer.php.
Prethodno sam konfigurirao Fail2Ban u HestiaCP panelu i napisao pravilo potpunog podudaranja za adminer.php kako bih spriječio napade grubom silom. Pravilo je kodiralo naziv datoteke adminer.php, tako da kada ste je preimenovali u adminer1.php, zaobišli ste ovo Nginx pravilo i mogli ste joj normalno pristupiti.
Metoda rješavanja problema je jednostavna: potražite čvrsto kodirane unose u Nginx konfiguraciji.
sudo grep -rn "adminer.php" /etc/nginx/Ako pronađete pravila poput `location = /adminer.php { … }`, to znači da Nginx posebno obrađuje ovaj specifični naziv datoteke. Samo ga izbrišite ili izmijenite.
Razlog 3: Postavke prikaza PHP grešaka
Treći razlog je suptilniji.
PHP skripta je presretnuta ili izbacuje grešku, ali stranica onemogućava prikaz greške (display_errors = Off). U produkcijskom okruženju, PHP skriva greške prema zadanim postavkama, prikazujući praznu stranicu. Ako se vaša ulazna datoteka (npr. index.php) iz nekog razloga sruši prilikom pokušaja uključivanja "./adminer.php", stranica će jednostavno postati prazna.
U ovoj situaciji, provjera dnevnika grešaka je najpouzdanija metoda:
# 查看Nginx错误日志
sudo tail -n 20 /var/log/nginx/error.log
# 或者查看HestiaCP对应域名的error日志
sudo tail -n 20 /var/log/nginx/domains/adminer.domain.com.error.logDnevnik će vam reći pravi razlog za bijeli ekran.
Iskreno, konačno sam pronašao problem provjerom error.log datoteke. Ispostavilo se da adminer.php poziva nepostojeću PHP ekstenziju, a display_errors je bio isključen, tako da je stranica bila prazna, ali je error log to jasno zabilježio.
Rješenja i koraci za rješavanje problema
Ovaj događaj je ostavio dubok utisak na mene.
Tehnički problemi često nisu tako jednostavni kao što se na prvi pogled čine. Prazna adminer.php datoteka na prvi pogled može izgledati kao problem s datotekom, ali dublje istraživanje može otkriti problem s keširanjem, kasnije bi to mogao biti problem s konfiguracijom, a još kasnije bi to mogao biti problem sa samim kodom.
Ako niste programer, možda mislite da su vam ove stvari nebitne. Ali razmislite o tome: svaka aplikacija koju koristite, svaka web stranica koju posjetite, ima sličan sistem koji radi iza kulisa. Keširanje, konfiguracija, rukovanje greškama - ovi koncepti su zapravo svuda prisutni.
Baš kao i mi ljudi. Mnogo puta, "simptomi" koje pokazujemo, poput odugovlačenja, anksioznosti i razdražljivosti, na površini mogu izgledati kao lijenost, ali ako se dublje zagledamo, mogu biti posljedica nejasnih ciljeva, daljnjeg kopanja, straha od neuspjeha, pa čak i dublje, načina razmišljanja oblikovanog iskustvima iz djetinjstva.
Samo pronalaženjem pravog uzroka možemo propisati pravi lijek.
Konačno, ako naiđete i na problem prazne datoteke adminer.php, provjerite je ovim redoslijedom:
Prvo, ponovo pokrenite PHP-FPM i obrišite keš memoriju, zatim provjerite Nginx konfiguraciju i na kraju provjerite error.log.
U većini slučajeva, prva dva koraka su dovoljna za rješavanje problema.
Naravno, ako to i dalje ne uspije, onda provjerite error.log.
Reći će vam odgovor.
Pošto ste pročitali do sada, ako vam je bilo korisno, molimo vas da lajkujete i podijelite. Ako želite prvi primati novosti, možete me i pratiti!
Hvala vam što ste pročitali moj članak. Vidimo se sljedeći put.
Nadam se da će vam članak "Adminer.php Access Blank? Preimenovanje radi normalno? Analiza razloga i 3 koraka za temeljito rješavanje problema" podijeljen na Chen Weiliangovom blogu ( https://www.chenweiliang.com/ ) biti od pomoći.
Slobodno podijelite link ovog članka: https://www.chenweiliang.com/cwl-34403.html
