Dlaczego plik Adminer.php jest pusty? Zmiana nazwy działa poprawnie? Analiza przyczyny i rozwiązanie w 3 krokach.

Wczoraj po południu konfigurowałem narzędzie do zarządzania bazą danych Adminer na serwerze. Adminer jest lekki i łatwy w użyciu; wystarczy jeden plik PHP, w przeciwieństwie do...phpMyAdminTo zainstalowałoby mnóstwo zależności. Pobrałem najnowszą wersję z oficjalnej strony, wrzuciłem ją na serwer, ustawiłem uprawnienia, otworzyłem przeglądarkę i przygotowałem się, żeby zobaczyć ją na własne oczy.

A potem wszystko zniknęło.

Dlaczego plik Adminer.php jest pusty? Zmiana nazwy działa poprawnie? Analiza przyczyny i rozwiązanie w 3 krokach.

Odświeżyłem stronę trzy razy, palce bolały mnie od ciągłego naciskania F5. Nadal nic. Otworzyłem narzędzia programistyczne przeglądarki; pokazał się błąd 200 OK, ale treść odpowiedzi była pusta. Byłem kompletnie oszołomiony. Co się dzieje?

Zastanowiłem się przez chwilę. Czy to może być problem z uprawnieniami do pliku? Sprawdziłem i było 755. Czy to może być niezgodność wersji PHP? Sprawdziłem i jest PHP 8.2, czyli w porządku. Czy sam plik może być uszkodzony? Pobrałem nową kopię, nadpisałem ją i nadal jest pusta.

Z jakiegoś niewytłumaczalnego powodu pomyślałem: czemu nie spróbować zmienić swojego imienia?

Zmieniłem nazwę pliku adminer.php na adminer1.php i odświeżyłem stronę.

Dostęp został uzyskany pomyślnie.

Byłem autentycznie zdumiony. Ten sam plik, ten sam kod, ten sam serwer, a dostęp do niego można uzyskać po prostu zmieniając nazwę? Co to za mistyczna logika?

Plik adminer.php jest pusty.

Później dowiedziałem się, że nie był to żaden przesąd; przyczyną problemu było buforowanie PHP.

OPcache, skrót od Opcode Cache, to rozszerzenie PHP służące do optymalizacji wydajności. Jego zasada jest prosta: PHP jest językiem interpretowanym, a każde żądanie wymaga skompilowania kodu PHP do kodu operacji przed wykonaniem. OPcache buforuje skompilowany wynik w pamięci, umożliwiając kolejnym żądaniom bezpośrednie korzystanie z wersji z pamięci podręcznej bez konieczności ponownej kompilacji, co przekłada się na znaczną poprawę wydajności.

Ale tu właśnie tkwi problem.

Wcześniej plik adminer.php wyświetlał komunikat „Nie znaleziono pliku” (przesłałem niewłaściwy plik), a OPcache zapisał w pamięci podręcznej skompilowany wynik o tej nieprawidłowej zawartości. Później zastąpiłem adminer.php poprawnym kodem, ale OPcache zignorował go i kontynuował odczytywanie starego pliku z pamięci podręcznej, co skutkowało pustą stroną lub starym komunikatem o błędzie.

Gdy zmienisz nazwę na adminer1.php, stanie się ona zupełnie nową ścieżką do pliku dla OPcache, a ona sama zostanie przeładowana i poprawnie rozwiązana.

To tak, jakbyś już dostał nową książkę, ale na karcie katalogowej biblioteki nadal widnieje numer sygnatury starej książki. Kiedy szukasz jej na półce, oczywiście jest pusta. Ale jeśli zmienisz tytuł książki, biblioteka utworzy dla ciebie nową kartę katalogową i wtedy będziesz mógł ją znaleźć.

Powód 1: Pamięć podręczna OPcache powoduje powstawanie pustych przestrzeni

Jak sobie z tym poradzić?

Uruchom ponownie usługę PHP-FPM i wyczyść pamięć podręczną OPcache.

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

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

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

Po ponownym uruchomieniu zmień nazwę pliku z powrotem na adminer.php, odśwież stronę (zaleca się naciśnięcie kombinacji klawiszy Ctrl+F5, aby wymusić odświeżenie przeglądarki) i problem powinien zostać rozwiązany.

Ale historia jeszcze się nie skończyła.

Po ponownym uruchomieniu PHP-FPM, zmieniłem plik adminer.php z powrotem, odświeżyłem stronę, ale nadal była pusta. Byłem kompletnie zdezorientowany.

Powód 2: Ograniczenia reguł konfiguracji Nginx

To prowadzi nas do drugiego możliwego powodu.

Plik konfiguracyjny Nginx może zawierać specjalne reguły ograniczające adminer.php.

Byłem tu wcześniejHestiaCPF został skonfigurowany w panelu.ail2Ban zaimplementował precyzyjną regułę dopasowania dla pliku adminer.php, aby zapobiec atakom siłowym. Reguła na stałe koduje nazwę pliku adminer.php, więc jeśli zmienisz nazwę na adminer1.php, ominiesz tę regułę Nginx i uzyskasz normalny dostęp do strony.

Metoda rozwiązywania problemów jest prosta: należy wyszukać zakodowane na stałe wpisy w konfiguracji Nginx.

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

Jeśli znajdziesz reguły takie jak `location = /adminer.php { … }`, oznacza to, że Nginx obsługuje tę konkretną nazwę pliku w sposób specjalny. Po prostu ją usuń lub zmodyfikuj.

Powód 3: Ustawienia wyświetlania błędów PHP

Trzeci powód jest bardziej subtelny.

Skrypt PHP zostaje przechwycony lub zgłasza błąd, ale strona wyłącza wyświetlanie błędów (display_errors = Off). W środowisku produkcyjnym PHP domyślnie ukrywa błędy, wyświetlając pustą stronę. Jeśli plik wejściowy (np. index.php) z jakiegoś powodu ulegnie awarii podczas próby dołączenia pliku „./adminer.php”, strona po prostu stanie się pusta.

W takiej sytuacji najpewniejszą metodą jest sprawdzenie dziennika błędów:

# 查看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

W dzienniku znajdziesz prawdziwą przyczynę białego ekranu.

Szczerze mówiąc, w końcu znalazłem problem, sprawdzając error.log. Okazało się, że adminer.php odwoływał się do nieistniejącego rozszerzenia PHP, a display_errors był wyłączony, więc strona była pusta, ale log błędów wyraźnie to odnotował.

Rozwiązania i kroki rozwiązywania problemów

To zdarzenie wywarło na mnie głębokie wrażenie.

Problemy techniczne często nie są tak proste, jak się wydaje na pierwszy rzut oka. Pusty plik adminer.php może na pierwszy rzut oka wydawać się problemem z plikami, ale głębsze zbadanie może ujawnić problem z buforowaniem, późniejszy problem z konfiguracją, a jeszcze później problem z samym kodem.

Jeśli nie jesteś programistą, możesz myśleć, że te rzeczy są dla Ciebie nieistotne. Ale pomyśl: każda aplikacja, z której korzystasz, każda strona internetowa, którą odwiedzasz, ma podobny system działający w tle. Buforowanie, konfiguracja, obsługa błędów – te koncepcje są właściwie wszędzie.

Podobnie jak my, ludzie. Często „objawy”, które przejawiamy, takie jak prokrastynacja, lęk i drażliwość, mogą na pierwszy rzut oka wydawać się lenistwem, ale gdy przyjrzymy się im głębiej, mogą wynikać z niejasnych celów, dalszego dociekania, lęku przed porażką, a nawet głębiej, z nastawienia ukształtowanego przez doświadczenia z dzieciństwa.

Tylko znając prawdziwą przyczynę problemu, możemy przepisać właściwe lekarstwo.

Na koniec, jeśli napotkasz również problem pustego pliku adminer.php, sprawdź go w następującej kolejności:

Najpierw uruchom ponownie PHP-FPM i wyczyść pamięć podręczną, następnie sprawdź konfigurację Nginx i na koniec sprawdź error.log.

W większości przypadków pierwsze dwa kroki wystarczą, aby rozwiązać problem.

Oczywiście, jeśli to nie pomoże, sprawdź plik error.log.

Pokaże ci odpowiedź.

Skoro dotarłeś aż tutaj, jeśli uznałeś to za pomocne, polub i udostępnij. Jeśli chcesz otrzymywać aktualizacje jako pierwszy, możesz mnie też obserwować!

Dziękuję za przeczytanie mojego artykułu. Do zobaczenia następnym razem.

Nadzieja Chen Weiliang Blog ( https://www.chenweiliang.com/ Artykuł „Adminer.php – dostęp do pustego pliku? Zmiana nazwy działa prawidłowo? Analiza przyczyn i kompleksowe rozwiązanie w 3 krokach” udostępniony tutaj może okazać się pomocny.

Zapraszamy do udostępnienia linku do tego artykułu:https://www.chenweiliang.com/cwl-34403.html

Aby odblokować więcej ukrytych sztuczek🔑, zapraszamy do dołączenia do naszego kanału Telegram!

Udostępnij i polub jeśli Ci się podoba! Twoje udostępnienia i polubienia są naszą ciągłą motywacją!

 

发表 评论

Twój adres e-mail nie zostanie opublikowany. 必填 项 已 用 * 标注

Katalog artykułów
Przewiń do góry