Zatrzymaj buforowanie PHP 5.5.3 w MAMP


123

Zainstalowałem MAMP na nowym Macbooku z PHP 5.5.3.

Załaduj ponownie i odśwież nic. Wciąż nic. Szukaj w Google przez kilka minut, próbując dowiedzieć się, co jest nie tak, wróć i odśwież. To działa. Co za cholera?

Wszedłem do php.ini i wyłączyłem wszystkie nowe OPcache i ustawiłem domyślny czas pamięci podręcznej na 0. Dodano nagłówki do dokumentu, aby wymusić brak buforowania. Wciąż ten sam problem. Co tu się dzieje?

Karta sieci pokazuje żądanie HTTP 200, więc każdy nowy kod HTML w index.phppliku renderuje się dobrze, ale nowe PHP, które musi zostać wyrenderowane przez serwer, jest opóźnione i nie jest renderowane, dopóki nie minie pewien z góry określony zestaw czasu, którego nie wiem jak zmienić. Co się dzieje?

Sprawdziłem to również w Safari, więc jest to zdecydowanie serwer, który powstrzymuje renderowanie pliku.

Ciekawostka jest jednak to, że jeśli wejdę do MAMP i zmienię wersję PHP na starszą (PHP 5.2 lub coś podobnego), będzie renderować się normalnie, bez "problemów z buforowaniem". Przełącz się na PHP 5.5 i zawiesza się. W preferencjach MAMP opcje buforowania dla 5.5 nawet nie istnieją i są automatycznie wyłączane.


4
Wiem, że to nie jest rozwiązanie twojego problemu, ale osobiście nie jestem wielkim fanem MAMP, ponieważ zwłaszcza nie, gdy instalacja niestandardowego stosu jest tak łatwa - Oto dość szybki przewodnik po instalacji stosu za pomocą homebrew: github .com / josegonzalez / homebrew-php
mewm

@mewm Nie zdawałem sobie sprawy, że to może być takie proste. Twoje zdrowie! Użyj tego, aby zacząć korzystać z nginx za pomocą kilku naciśnięć klawiszy. learnaholic.me/2012/10/10/…
willdanceforfun

Odpowiedzi:


207

Wyłącz OPCache

MAMP teraz domyślnie włącza OPCache, możesz go wyłączyć edytując plik php.ini. Upewnij się, że edytujesz poprawny plik php.ini.

Sam miałem ten sam problem. MAMP z PHP w wersji 5.5.3 domyślnie uruchamia OPcache, ale nie można go wyłączyć w GUI, tak jak w przypadku starszej wersji PHP 5.2.17. Musisz ręcznie zakomentować wszystkie wiersze OPcache na końcu pliku php.ini (MAMP / bin / php / [wersja] /conf/php.ini) i upewnić się, że zatrzymałeś i uruchomiono serwery, aby zmiany zostały wprowadzone efekt.

Zaktualizowałem URI, zmiany mogą być odzwierciedlone przez zmianę / conf / w folderze php, ale wygląda na to, że MAMP zignoruje je po ponownym uruchomieniu .


4
Miałem ten sam problem i naprawiłem go, komentując wiersze opcache. To trochę zastanawiające, że musisz wejść do pliku php.ini, aby to zmienić. W rzeczywistości jest to dość mylące, ponieważ wydaje się, że masz wszystkie opcje buforowania podane w menu rozwijanym MAMP-> Preferencje.
JaredH

17
Zastanawiam się, której części ciała używali twórcy MAMP do myślenia, dodając tę ​​„fajną funkcję”.
Sergii

Myślałem, że coś jest nie tak z moją instalacją ModX, ale nie, twoja odpowiedź chyba to naprawiła. Dzięki. Co więcej, wróciłem również do starszej wersji. Teraz działa znacznie lepiej.
vr_driver

67
Zauważ, że php.iniplik, który chcesz edytować, znajduje się w / bin, a nie w / conf. Moja pełna ścieżka była /Applications/MAMP/bin/php/php5.5.3/conf/php.ini.
Husky


38

Dodałem opcache_reset (); w moim głównym PHP, aby zatrzymać buforowanie.

Usunięcie go z niego php5.5.3/conf/php.ininic nie dało.

Edytować

Okazuje się, że istnieje również plik /Applications/MAMP/bin/php/php5.5.3/conf/php.ini. Działa, jeśli to skomentuję.


1
Komentowanie OPcache w katalogu / bin działało dla mnie! Dziękuję za to!
daveaspinall

Komentowanie OPcache w php.ini w /Applications/MAMP/bin/php/php5.5.3/conf/php.ininic nie robi, ale dodawanie opcache_reset();do index.phpdziałało.
Даниил Пронин

26

1) w /Applications/MAMP/bin/php/php5.5.3/conf/php.ini
2) ustaw opcache.revalidate_freq = 0
3) zrestartuj MAMP


2
To wydaje się działać. Wdrażanie tego rozwiązania sprawiało mi większą przyjemność niż komentowanie tego wszystkiego. Ale czy jest różnica?
Ketri,

10

Tak długo zajęło mi zrozumienie, że był to problem z MAMP! Dlaczego OPcache miałoby być domyślnie włączone - i wymagałoby wyłączenia php.ini majsterkowania - w aplikacji, która ma być używana do testowania stron internetowych? W każdym razie przeczytałem cały ten wątek i wypróbowałem różne rozwiązania.

Oto moje notatki na temat działania każdego rozwiązania i rozważania dotyczące wyboru rozwiązania.

Każde rozwiązanie działa samodzielnie; nie ma potrzeby redundancji.


Rozwiązanie kodu strony internetowej

opcache_reset ();

<?php opcache_reset(); ?>
  • Należy dodać w kodzie strony internetowej.
  • Wymusza ponowne załadowanie wszystkich skryptów.
  • Działa bez restartowania serwera MAMP.

Rozwiązania w zakresie konfiguracji serwerów

Ważne: użyj php.inipliku w, /Applications/MAMP/bin/php/php5.5.3/conf/php.inia nie w /Applications/MAMP/conf/php5.5.3/php.ini. Dostosuj odpowiednio, jeśli używasz innej wersji PHP.

enable = 0

[OPcache]
zend_extension="/Applications/MAMP/bin/php/php5.5.3/lib/php/extensions/no-debug-non-zts-20121212/opcache.so"
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
enable=0
  • Należy dodać [OPcache]w php.ini.
  • Wyłącza OPcache.
  • Wymaga restartu serwera MAMP.

opcache.revalidate_freq = 0

[OPcache]
zend_extension="/Applications/MAMP/bin/php/php5.5.3/lib/php/extensions/no-debug-non-zts-20121212/opcache.so"
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=0
opcache.fast_shutdown=1
opcache.enable_cli=1
  • Modyfikować opcache.revalidate_freqpod [OPcache]w php.ini.
  • Sprawia, że ​​OPcache sprawdza dostępność aktualizacji co 0 sekund zamiast co 60 sekund.
  • Wymaga restartu serwera MAMP.

Komentowanie [OPcache]

;[OPcache]
;zend_extension="/Applications/MAMP/bin/php/php5.5.3/lib/php/extensions/no-debug-non-zts-20121212/opcache.so"
;opcache.memory_consumption=128
;opcache.interned_strings_buffer=8
;opcache.max_accelerated_files=4000
;opcache.revalidate_freq=60
;opcache.fast_shutdown=1
;opcache.enable_cli=1
  • Skomentuj całą [OPcache]sekcję w php.ini.
  • Usuwa OPcache z serwera PHP.
  • Wymaga restartu serwera MAMP.

Rozważania

Wybierz rozwiązanie kodu strony internetowej, jeśli:

  • Wystarczy wymusić odświeżenie skryptu dla konkretnego projektu
  • Nie chcesz ponownie uruchamiać serwera MAMP
  • Nie chcesz edytować php.ini

Wybierz rozwiązanie konfiguracji serwera, jeśli:

  • Chcesz domyślnie wyłączyć buforowanie zamiast robić to w każdym projekcie
  • Nie przeszkadza ci edycja php.ini

Osobiście wolę, enable=0ponieważ jest to dla mnie najprostsze rozwiązanie i domyślnie potrzebuję wyłączonego buforowania.


Bibliografia


4

MAMP 3.0.7.2 dla OS X

Wygląda na to, że w końcu jest to opcja GUI. MAMP 3.0.7.2 for Mac OS X.


To najwyraźniej nie wyłącza OPCache. Mój był nadal aktywny nawet przy wyłączonym ustawieniu.
auco

2

Bolesne było spędzanie około godziny na próbach ustalenia, co to może być.

Właśnie dodałem to na końcu kodu i zrestartowałem MAMP.

  opcache.revalidate_freq=0
  opcache_reset();

2

Edytuj „/Applications/MAMP/conf/php5.5.3/php.ini”, wyszukaj [OPcache] i dodaj ten kod bezpośrednio pod nim:

opcache.enable=0

Spowoduje to wyłączenie opcache w przypadku używania PHP na serwerze MAMP.


Pracował na moim serwerze ubuntu. Dzięki.
Sinan Eldem

2

O rany, cieszę się, że znalazłem ten wątek! Wyrywałem sobie włosy! Właśnie wczoraj zaktualizowałem MAMP i nie zauważyłem tego problemu z buforowaniem do dzisiaj podczas pracy nad projektem. Myślałem, że tracę rozum. Właśnie zmieniłem „/Applications/MAMP/conf/php5.5.3/php.ini” na samym dole pliku opcache.enable = 0


1

Jest to również aktualne w wersji MAMP dla systemu Windows.

C: \ MAMP \ conf \ php5.6.3 \ php.ini

Jest wymieniony na samym dole pliku.

Inny problem, który znalazłem, dotyczył QNAP NAS TS-431. To buforowanie jest również włączone, a jeśli pracujesz z dynamicznie zmieniającymi się plikami lub próbujesz na nich rozwijać, będziesz wyrywać sobie włosy. Zgodnie z innymi komentarzami, po prostu to skomentuj. Ustawienie znajduje się w:

Panel sterowania / Aplikacje / Serwer WWW / Konserwacja PHP.ini.

Ponownie znajdziesz ustawienia na dole pliku.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.