Неустранимая ошибка: класс «Memcache» не найден (установлен с помощью pecl)

Я установил memcache через ssh с помощью:

$ pecl install memcache

И вот что получилось: https://pastee.org/w63sy

И добавил эту строку в etc/php.ini:

extension=memcache.so

И при попытке инициализации:

/* MEMCACHE */
$memcache = new Memcache();
$memcache->pconnect('localhost',11211);

Я получил:

Fatal error: Class 'Memcache' not found in /home/piscolab/public_html/website.com/includes/sql.php on line 25

Что я делаю неправильно?

Я нашел этот вопрос, но проблема была в его общем сервере. Я под VPS.

Выполняется: php -i | grep php.ini:

[root@vps ~]# php -i | grep php.ini                                                                                                                                            
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/memcache.so' - /usr/lib/php/modules/memcache.so: cannot open shared object file: No such file o
r directory in Unknown on line 0                                                                                                                                               
Configuration File (php.ini) Path => /etc                                                                                                                                      
Loaded Configuration File => /etc/php.ini                                                                                                                                      
[root@vps ~]#    

Поиск memcache.so (без вывода)

[root@vps ~]# find / -type f -name memcache*.so'                                                                                                                              
[root@vps ~]# find / -type f -name memcache*.so                                                                                                                                
[root@vps ~]#

person Toni Michel Caubet    schedule 27.05.2012    source источник
comment
Вы перезапустили Apache после добавления этой строки в конфигурацию?   -  person DCoder    schedule 27.05.2012
comment
отрицательный! Я попробую прямо сейчас. Спасибо!   -  person Toni Michel Caubet    schedule 27.05.2012
comment
Я перезапустил виртуальную машину, и ничего не изменилось.   -  person Toni Michel Caubet    schedule 27.05.2012
comment
Эта ошибка означает, что ваш memcache.so не находится в /usr/lib/php/ — вы можете попробовать find /usr/ -name memcache.so, чтобы увидеть, где он находится.   -  person DCoder    schedule 27.05.2012
comment
@DCoder, ну как? 'найти /myusername/ -name memcache.so' ??   -  person Toni Michel Caubet    schedule 27.05.2012
comment
Я снова установил: pastee.org/w63sy, это журнал. у меня ошибка в конце   -  person Toni Michel Caubet    schedule 27.05.2012
comment
@ToniMichelCaubet Какая у вас ОС?   -  person drew010    schedule 27.05.2012
comment
@ToniMichelCaubet Попробуйте запустить yum install zlib-devel, а затем повторно запустить команду установки pecl. Кстати, вы можете подумать об установке Memcached, поскольку она новее, чем библиотека memcache, и поддерживает больше функций, но если то, что вы используете, требует memcache, просто используйте ее.   -  person drew010    schedule 27.05.2012
comment
В качестве проверки работоспособности вы можете попробовать zlib, а затем memcache и убедиться, что он сначала прошел ту часть zlib, где вы получили ошибку, а затем попробовать memcached. Это тот же самый продукт, pecl install memcached.   -  person drew010    schedule 27.05.2012
comment
Вот оно! @ drew010 опубликуйте это как ответ;)   -  person Toni Michel Caubet    schedule 27.05.2012
comment
@ToniMichelCaubet Готово, спасибо! рад, что это было.   -  person drew010    schedule 27.05.2012


Ответы (2)


Учитывая вывод сообщения об ошибке, похоже, что вам не хватает zlib библиотек разработки, или, по крайней мере, их нет в обычном месте, где они могут быть автоматически найдены с помощью configure.

Поскольку вы используете CentOS, попробуйте установить библиотеки с помощью этой команды:

yum install zlib-devel

Это устанавливает библиотеку zlib, которая требуется для memcache. Попробуйте повторно запустить программу установки pecl после установки библиотек zlib.

person drew010    schedule 27.05.2012

это, вероятно, поможет, если вы предоставите дополнительную информацию через phpinfo() или php_config, в частности, видит ли ваша установка библиотеки memcache и правильные ли ваши пути к библиотекам.

php-config

расскажет вам больше, интересно, здесь используются пути php ini и пути lib. Путь php ini будет отображаться при использовании --configure-options, suboption --with-config-file-path (/etc/php5/apache2 в мой конкретный случай) и пути к библиотекам будут отображаться с --extension-dir

e.g.

php-config --extension-dir

php-config --configure-options | grep -o 'with-config-file-path[^ ,.]*' | grep -o '[^=.]*$'

Итак, чтобы использовать мой пример, мои пути к библиотеке установлены на

/usr/lib/php5/20090626+lfs и

ls /usr/lib/php5/20090626+lfs/mem*  

команда для моей системы показывает:

/usr/lib/php5/20090626+lfs/memcached.so

и мой файл php.ini находится в /etc/php5/apache2/php.ini

php-функция phpinfo() (просто поместите в файл и просмотрите его) также показывает memcache как поддерживаемый и загруженный «поддержка memcached включена» (я специально использовал расширение memcached, а не memcache)

Имейте в виду, что ваш веб-сервер может быть настроен на использование другого пути php.ini (и, следовательно, файла), отличного от вашей командной строки, поэтому проверьте оба. Также убедитесь, что вы разместили extension=memcache.so в правильном месте, так как многие дистрибутивы помещают его в /etc/php5/conf.d/memcache.ini, может быть, там какое-то несоответствие?

person Harald Brinkhof    schedule 27.05.2012
comment
Ух ты! приятель, спасибо за твой ответ, но я как-то заблудился... я запущу ssh-команды, которые ты опубликовал, и дам тебе знать. но вы в основном говорите, что мой php.ini не тот, который использует apache? - person Toni Michel Caubet; 27.05.2012
comment
это может быть возможным ответом на вашу проблему, да - person Harald Brinkhof; 27.05.2012
comment
Пожалуйста, проверьте мое редактирование. кажется, что это правильный путь к php.ini, но отображаются некоторые ошибки, вы их понимаете? - person Toni Michel Caubet; 27.05.2012
comment
как Dcoder сказал в комментарии выше: ваш файл библиотеки memcache.so не может быть найден и, следовательно, не загружен, проверьте его существование (как root или перед командой с помощью sudo) с помощью find / -type f -name 'memcache*.so' Если эта команда не может его найти, вы не файл библиотеки не установлен должным образом, и вам потребуется (пере)установить php-модуль memcache. Имейте в виду, что это ищет весь ваш диск, поэтому потребуется некоторое время, чтобы вернуться к вам с ответом, это метод грубой силы, чтобы быть уверенным, извините. :) - person Harald Brinkhof; 27.05.2012
comment
если вы действительно можете найти memcache.so таким образом, то, несомненно, это каталог, который ваш php не видит, и вам нужно будет добавить этот путь к пути для расширений PHP. - person Harald Brinkhof; 27.05.2012
comment
если find просто возвращает вас к подсказке без результата, с поиском, начинающимся с /, то это означает, что правильный модуль не установлен, переустановите модуль memcache, возможно, что-то пошло не так при первой установке. - person Harald Brinkhof; 27.05.2012
comment
я вставляю: find / -type f -name 'memcache*.so' (и нет ответа/вывода/ошибки :?) пожалуйста, проверьте мою phpinfo здесь keepyourlinks.com/includes/index1.php - person Toni Michel Caubet; 27.05.2012
comment
обратите внимание на эту ссылку а) memcache не установлен, 2) ваш сервер использует /home/httpd/keepyourlinks.com/php.ini в качестве своего ini-файла - person Harald Brinkhof; 27.05.2012
comment
Я установил снова, у меня в конце ошибка: pastee.org/w63sy не могли бы вы взглянуть и дайте мне знать, что не так? Я пытался сказать «нет», когда запрашивал обработку сеанса, и ошибка была такой же :( - person Toni Michel Caubet; 27.05.2012
comment
вам нужно установить код разработки zlib, в моей системе ubuntu это пакет под названием zlib1g-dev — библиотека сжатия — разработка, просто найдите zlib с помощью диспетчера пакетов и установите версию с -dev позади него. Возможно, вам не хватает других пакетов -dev, и всякий раз, когда он на что-то жалуется, найдите его и установите версию -dev. Удачи. - person Harald Brinkhof; 28.05.2012