PHP memcached Błąd krytyczny: Nie znaleziono klasy „Memcache”

81

Wkleiłem przykład z php.net do używania memcached w php i otrzymuję:

Fatal error: Class 'Memcache' not found

Mam to w moim php.ini:

[memcache]
memcache.hash_strategy = "spójne"
memcache.max_failover_attemps = 100
memcache.allow_failover = 1

Oto informacje z odpowiednio php -i i php -m:

php -i | grep -i memcache
memcached
memcached wsparcie => włączona
wersja libmemcached => 0.37
Zarejestrowane programy obsługi zapisu => pliki użytkownik sqlite memcached

php -m | grep -i memcache
memcached

Wygląda więc na to, że php załadował memcached jako moduł, a informacje php mówią, że jest załadowany i używa wersji .37. Nie próbowałem jeszcze przez Apache, teraz używam tego tylko przez CLI. jakieś pomysły?

jpfuentes2
źródło
1
możliwy duplikat ... stackoverflow.com/questions/1171313/…
Właśnie rzuciłem okiem na to i mam już rozszerzenie wymienione w moim php.ini i już upewniłem się, że mój katalog extension_dir jest wskazany we właściwym miejscu.
jpfuentes2
Zobacz moją odpowiedź poniżej na proste polecenie instalacji „MEMCACHE”.
Phill Healey
1
sudo apt-get install php-memcacheto działa dla mnie. packages.ubuntu.com/… wyświetla dostępne pakiety.
Ryan,

Odpowiedzi:

131

Istnieją dwa rozszerzenia memcached w PHP: „ memcache ” i „ memcached ”.

Wygląda na to, że próbujesz użyć jednego („memcache”), ale drugi jest zainstalowany („memcached”).

Charles
źródło
4
To trochę głupie, ale niestety jest to częsty wzorzec w PHP. Zamiast aktualizować starsze rozszerzenie, aby działało z nowszymi rzeczami w lepszy sposób, ale przerywając wsteczną kompilację, po prostu utworzyli nowe rozszerzenie. Zobacz także mysql i mysqli.
Charles
Wydaje się, że to właściwy problem. Ale wszystkie instrukcje, które znajduję, wydają się mówić, aby zainstalować memcached, ale zobacz memcache. To jest trochę zagmatwane.
Patrick,
7
Ok, znalazłem prostą poprawkę (ponieważ wszystko inne wydawało się nie działać). Po prostu uruchom to polecenie: sudo aptitude install memcached php5-memcached
Patrick
Zwróć uwagę, że te nazwy pakietów będą działać tylko na określonych pochodnych Debiana. Nazwy pakietów będą się różnić w innych środowiskach.
Charles
1
Załadowanie obu nie powinno mieć rzeczywistego wpływu na wydajność, nie.
Charles
22

Pomimo tego, co zaakceptowana odpowiedź mówi w komentarzach, prawidłowy sposób instalacji 'Memcache' to:

sudo apt-get install php5-memcache

UWAGA Memcache i Memcached to dwa różne, choć powiązane ze sobą elementy oprogramowania, które często są mylone.

EDYCJA Ponieważ jest to teraz stary post, pomyślałem, że warto wspomnieć, że powinieneś zastąpić php5 numerem swojej wersji php.

Phill Healey
źródło
Myślę, że kilka lat później ta odpowiedź jest nieaktualna. sudo apt-get install php-memcacheto działa dla mnie. packages.ubuntu.com/… wyświetla dostępne pakiety.
Ryan,
1
@Ryan Z pewnością dotyczy to tylko sytuacji, gdy nie używasz PHP5. Wiele serwerów nadal używa PHP5, więc jest tak samo ważne, jak było w tamtym czasie. Dodatkowo pytanie jest oznaczone tagiem ubuntu-9.10, więc to dodatkowo potwierdza moją odpowiedź, ponieważ odnosi się bezpośrednio do tej wersji.
Phill Healey,
"Memcached i Memcached" ??
Brian Leishman
Czy jest rozwiązanie dla okien?
IrfanAnwar
1

Rozwiązanie znalazłem w tym poście: /programming/11883378/class-memcache-not-found-php# =

Znalazłem działające pliki dll dla PHP 5.4.4

Nie wiem, na ile są stabilne, ale na pewno działają. Kredyty trafiają do tego linku.

http://x32.elijst.nl/php_memcache-5.4-nts-vc9-x86.zip

http://x32.elijst.nl/php_memcache-5.4-vc9-x86.zip

Jest to wersja 2.2.5.0, którą zauważyłem po kompilacji (dla PHP 5.4.4).

Należy pamiętać, że nie jest to 2.2.6, ale działa. Powtórzyłem je również w moim własnym FTP. Linki lustrzane:

http://mustafabugra.com/resim/php_memcache-5.4-vc9-x86.zip http://mustafabugra.com/resim/php_memcache-5.4-nts-vc9-x86.zip

Xman Classical
źródło
0

Prawa strona to php_memcache.dll . W moim przypadku korzystałem z biblioteki skompilowanej za pomocą vc9 zamiast kompilatora vc6. W dziennikach błędów apatche mam coś takiego:

Uruchomienie PHP: sqlanywhere: Nie można zainicjować modułu Moduł skompilowany z identyfikatorem kompilacji = API20090626, TS, VC9 PHP skompilowany z identyfikatorem kompilacji = API20090626, TS, VC6 Te opcje muszą być zgodne

Sprawdź, czy masz ten sam dziennik i spróbuj pobrać inną bibliotekę dll, która jest skompilowana za pomocą innego kompilatora.

Dalius Šidlauskas
źródło
0

Dla użytkowników OSX:

Uruchom następujące polecenie, aby zainstalować Memcached:

brew install memcached
Maihan Nijat
źródło
-8

Wszedłem do wp-config / i usunąłem obiekt-cache.php i advanced-cache.php i działało dobrze.

ewakened
źródło
2
Wszystko, co zrobiło, uniemożliwiło twojej instalacji WordPressa wykonanie jakiegokolwiek buforowania obiektów. Właściwie to nie naprawia niczego, nie mówiąc już o pytaniu zadanym przez PO.
Phill Healey,