Directory articoli
Ieri pomeriggio stavo configurando lo strumento di gestione del database Adminer sul server. Adminer è leggero e facile da usare; un singolo file PHP è sufficiente, a differenza di phpMyAdmin che richiede una serie di dipendenze. Ho scaricato l'ultima versione dal sito ufficiale, l'ho caricata sul server, ho impostato i permessi e ho aperto il browser, pronto a provarla.
Poi, tutto è diventato buio.

Ho aggiornato la pagina tre volte, con le dita doloranti per aver premuto F5 così tante volte. Ancora niente. Ho aperto gli strumenti per sviluppatori del browser; mostravano un errore 200 OK, ma il corpo della risposta era vuoto. Ero completamente sbalordito. Cosa stava succedendo?
Ci ho pensato un attimo. Potrebbe essere un problema di permessi del file? Ho controllato, ed era 755. Potrebbe essere un'incompatibilità con la versione di PHP? Ho controllato, ed è PHP 8.2, il che va bene. Potrebbe essere il file stesso ad essere difettoso? Ne ho scaricato una nuova copia, l'ho sovrascritta, ma è ancora vuota.
Per qualche ragione inspiegabile, ho pensato: perché non provare a cambiare nome?
Ho rinominato adminer.php in adminer1.php e ho aggiornato la pagina.
L'accesso è avvenuto con successo.
Ero davvero sconcertato. Lo stesso file, lo stesso codice, lo stesso server, ed è accessibile semplicemente cambiando il nome? Che razza di logica mistica è questa?
Il problema del file adminer.php vuoto
In seguito mi resi conto che non si trattava di una superstizione, ma di un problema causato dalla cache di PHP.
OPcache, abbreviazione di Opcode Cache, è un'estensione per PHP che ottimizza le prestazioni. Il suo principio è semplice: PHP è un linguaggio interpretato e ogni richiesta richiede che il codice PHP venga compilato in opcode prima dell'esecuzione. OPcache memorizza nella cache il risultato della compilazione, consentendo alle richieste successive di utilizzare direttamente la versione memorizzata nella cache senza ricompilazione, con conseguente significativo miglioramento delle prestazioni.
Ma è proprio qui che sta il problema.
In precedenza, adminer.php visualizzava il messaggio "File non trovato" (avevo caricato il file sbagliato) e OPcache aveva memorizzato nella cache il risultato della compilazione di quel contenuto errato. Successivamente, ho sostituito adminer.php con il codice corretto, ma OPcache lo ha ignorato e ha continuato a leggere la vecchia cache dalla memoria, con conseguente visualizzazione di una pagina vuota o del vecchio messaggio di errore.
Quando lo rinomini in adminer1.php, diventa un percorso di file completamente nuovo per OPcache, che lo ricaricherà e lo risolverà correttamente.
È come se avessi già preso in prestito un nuovo libro, ma la scheda del catalogo della biblioteca riportasse ancora il vecchio numero di collocazione. Quando vai a cercarlo sullo scaffale, ovviamente, lo trovi vuoto. Ma se cambi il titolo del libro, la biblioteca creerà una nuova scheda e potrai finalmente trovarlo.
Motivo 1: la cache OPcache causa spazi vuoti
Come affrontarlo?
Riavvia il servizio PHP-FPM e svuota la cache OPcache.
# 查看正在运行的PHP版本
php -v
# 重启对应的PHP-FPM(例如PHP 8.5)
sudo systemctl restart php8.5-fpm
# 或者重启所有PHP-FPM服务
sudo systemctl restart php*-fpmDopo il riavvio, rinomina il file in adminer.php, aggiorna la pagina web (si consiglia di premere Ctrl+F5 per forzare l'aggiornamento del browser) e il problema dovrebbe essere risolto.
Ma la storia non è ancora finita.
Dopo aver riavviato PHP-FPM, ho ripristinato il file adminer.php, ho aggiornato la pagina, ma era ancora vuota. Ero completamente sconcertato.
Motivo 2: restrizioni delle regole di configurazione di Nginx
Questo ci porta alla seconda possibile ragione.
Il file di configurazione di Nginx potrebbe contenere regole specifiche che limitano l'esecuzione di adminer.php.
In precedenza avevo configurato Fail2Ban nel pannello HestiaCP e scritto una regola di corrispondenza esatta per adminer.php per prevenire attacchi di forza bruta. La regola conteneva il nome del file adminer.php in modo fisso, quindi una volta rinominato in adminer1.php, si aggirava questa regola di Nginx ed era possibile accedervi normalmente.
Il metodo di risoluzione dei problemi è semplice: cerca le voci hardcoded nella configurazione di Nginx.
sudo grep -rn "adminer.php" /etc/nginx/Se trovi regole come `location = /adminer.php { … }`, significa che Nginx sta gestendo in modo speciale questo nome di file specifico. Eliminalo o modificalo.
Motivo 3: Impostazioni di visualizzazione degli errori PHP
La terza ragione è più sottile.
Lo script PHP viene intercettato o genera un errore, ma la pagina disabilita la visualizzazione degli errori (display_errors = Off). In un ambiente di produzione, PHP nasconde gli errori per impostazione predefinita, visualizzando una pagina vuota. Se il file di ingresso (ad esempio, index.php) si blocca per qualche motivo mentre tenta di includere "./adminer.php", la pagina diventerà semplicemente vuota.
In questa situazione, il metodo più affidabile è consultare il registro degli errori:
# 查看Nginx错误日志
sudo tail -n 20 /var/log/nginx/error.log
# 或者查看HestiaCP对应域名的error日志
sudo tail -n 20 /var/log/nginx/domains/adminer.domain.com.error.logIl registro ti rivelerà la vera ragione della schermata bianca.
A dire il vero, ho finalmente trovato il problema controllando il file error.log. Si è scoperto che adminer.php stava richiamando un'estensione PHP inesistente e che display_errors era disattivato, quindi la pagina risultava vuota, ma il file di log degli errori lo registrava chiaramente.
Soluzioni e procedure di risoluzione dei problemi
Questo episodio mi ha profondamente colpito.
I problemi tecnici spesso non sono così semplici come sembrano a prima vista. Un file adminer.php vuoto potrebbe sembrare un problema di file a un primo sguardo, ma scavando più a fondo si potrebbe scoprire un problema di cache, poi un problema di configurazione e infine un problema con il codice stesso.
Se non sei un programmatore, potresti pensare che queste cose siano irrilevanti per te. Ma riflettici: ogni app che usi, ogni pagina web che visiti, ha un sistema simile che funziona dietro le quinte. Cache, configurazione, gestione degli errori: questi concetti sono in realtà ovunque.
Proprio come noi esseri umani. Molte volte, i "sintomi" che manifestiamo, come la procrastinazione, l'ansia e l'irritabilità, possono sembrare pigrizia in superficie, ma scavando più a fondo, potrebbero essere dovuti a obiettivi poco chiari, a una paura del fallimento e, ancora più in profondità, a una mentalità plasmata dalle esperienze infantili.
Solo individuando la vera causa principale possiamo prescrivere la medicina giusta.
Infine, se riscontri anche il problema di un file adminer.php vuoto, controllalo in quest'ordine:
Innanzitutto, riavvia PHP-FPM e svuota la cache, poi controlla la configurazione di Nginx e infine verifica il file error.log.
Nella maggior parte dei casi, i primi due passaggi sono sufficienti per risolvere il problema.
Naturalmente, se il problema persiste, controlla il file error.log.
Ti darà la risposta.
Visto che sei arrivato a leggere fin qui, se hai trovato utile questo articolo, metti mi piace e condividilo. Se vuoi ricevere gli aggiornamenti in anteprima, puoi anche seguirmi!
Grazie per aver letto il mio articolo. Alla prossima.
Speriamo che l'articolo "Adminer.php Accesso vuoto? Rinominare funziona normalmente? Analisi delle cause e 3 passaggi per risolvere il problema in modo completo" condiviso sul blog di Chen Weiliang ( https://www.chenweiliang.com/ ) possa esserti d'aiuto.
Sentitevi liberi di condividere il link di questo articolo: https://www.chenweiliang.com/cwl-34403.html
