Настройка: Apache; PHP 5.2.9; libevent (для memcached требуется) версия 1.3; сервер memcached версии 1.2.2 (пробовал 1.4.5, 1.4.0, теперь понижен до 1.2.2, нет разницы); Модуль memcached php pecl версии 2.2.6.
Проблема:
Подобно нерешенным проблемам не удается сохранить значения в memcache и супер странную ошибку PHP
Ни один из этих потоков не разрешил проблему, и ни один из авторов вопросов не выполнил приведенные рекомендации. Я последовал за ними, и это все еще не работает.
Код Memcache
не показывает никаких ошибок, если я подключаюсь через PHP, но как только я пытаюсь выполнить любую команду (например, getVersion
), я получаю ответ:
Notice: memcache_get_version() [function.memcache-get-version]: Server 127.0.0.1 (tcp 11211) failed with: Failed reading line from stream (0) in /var/www/html/memcache.php on line 11
Решения:
Подключение к memcache через командную строку не работает. После ввода какого-либо командного соединения закрывается.
[/usr/local/src]$ telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. stats Connection closed by foreign host.
Я пробовал $ memcached -S
чтобы убедиться, что memcached был скомпилирован с отключенной поддержкой SASL. Ответ: «Этот сервер не построен с поддержкой SASL».
Кроме того, один из комментариев был
Возможно, вы используете memcached без поддержки протокола ASCII, например, если вы запустили:
$ memcached -B binary
Если это так, полностью удалите аргумент
-B
, и PHP и telnet должны работать.
Стартовая строка memcache:
memcached -d -m 1024 -u root -l 127.0.0.1 -p 11211
Нет аргумента B в нем.
Есть идеи?
Кому это может быть интересно.
Проблема решена.
Здесь проблема была (возможно, это помогло бы авторам из 2 связанных между собой протекторов).
Иногда на общем хостинге вы не должны использовать 127.0.0.1. Вместо этого используйте IP-адрес сайта.
Поэтому изменение
memcached -d -m 1024 -u root -l 127.0.0.1 -p 11211
в
memcached -d -m 1024 -u root -l 123.456.789.123 -p 11211
и PHP-код из
$memcache->pconnect("127.0.0.1",11211);
в
$memcache->pconnect("123.456.789.123",11211);
исправлена проблема.
Всем спасибо!
Я хотел бы поговорить с вашим sys sadmin. Я думаю, что, возможно, задействован брандмауэр.