У меня есть PHP 5.3.3, установленный на Centos 6.4 с расширением memcached.so
, а httpd – с версией 2.2.15-26. Вот мой index.php
:
$mc = new \Memcached(); $mc->addServer('127.0.0.1', 11211); $mc->set("test", "blah"); var_dump($mc->getResultCode()); var_dump($mc->getResultMessage()); var_dump($mc->get("test")); die;
Когда я запускаю его из командной строки, он работает . Я получаю следующее:
10:22:33 $ php index.php int(0) string(7) "SUCCESS" string(4) "blah"
Сервер memcache также работает из telnet. Однако, когда я запускаю index.php
из Интернета, он терпит неудачу. Я получаю следующее (от просмотра источника веб-страницы):
int(47) string(51) "SERVER HAS FAILED AND IS DISABLED UNTIL TIMED RETRY" bool(false)
Если не переустановить мою ОС и попробовать разные версии дерьма, может кто-нибудь объяснить, что может вызвать эту проблему?
Это проблема SELinux ? Cli может получить доступ к Memcached, но daemon no. Попробуй это :
getenforce
чтобы узнать, включен ли SELinux setenforce 0
чтобы отключить его reboot
Если это хорошо, вы должны настроить Apache для доступа к Memcached.
Убедитесь, что ваша служба memcache должна связывать все IP-адреса. Значение по умолчанию – 127.0.0.1. измените его на 0.0.0.0 для поддержки всех определенных Ips. В дополнение, не забудьте контролировать свои iptables или межсетевой экран.
Когда я смотрю на примеры, я вижу, что он используется без модификатора «\» для пространства имен. Попробуйте без него, может быть?
http://www.php.net/manual/en/memcache.examples-overview.php
<?php $memcache = new Memcache; $memcache->connect('localhost', 11211) or die ("Could not connect");
У меня была эта проблема в WAMP 2.4, запустив простой тестовый скрипт Memcache, который работал из командной строки, но не в браузере.
Ответ оказался потрясающе обыденным: у WAMP было два файла php.ini, и я редактировал неправильный.
Например, Apache использовал этот: c: \ wamp \ bin \ apache \ Apache2.4.4 \ bin \ php.ini У WAMP также был этот: c: \ wamp \ bin \ php \ php5.4.12 \ php.ini
Поместите расширение = php_memcache.dll в правильный .ini-файл.
Моя подсказка что-то вроде этого была проблема была в том, что загруженный файл конфигурации phpInfo () сообщал о разных значениях в двух случаях.
У меня была точно такая же проблема, как описано ОП. Оказалось, что проблема была вызвана списком серверов, расширение memcached поддерживает внутренне. Мой код был примерно таким:
$serversList = $memcached->getServerList(); if (empty($serversList)) { $memcached->addServer($host, $port); }
Мой первоначальный вызов сценария тестирования был выполнен с неправильным значением для $ port. Вызов был сделан из web (apache), а не из cli. После того, как я исправил порт и снова запустил код, он пропустил «if» и использовал список существующих серверов, который был испорчен, и поэтому он снова не удался.
Видя неудачу в сети, которую я тестировал с кли, она работала отлично. В списке серверов список серверов отличается от списка в Интернете. Фактически, список серверов был пуст при каждом запуске скрипта, даже если мой скрипт устанавливал его при каждом запуске. Тем не менее он сохранялся между вызовами в Интернете.
В любом случае, после очистки списка серверов в Интернете и установки правильного сервера, он также работал в Интернете.
У меня есть аналогичная проблема с CentOS и что я нашел. Я запускаю SELinux, которые не позволяют httpd подключаться к memcached. Вы должны установить ниже,
# setsebool -P httpd_can_network_memcache 1 # getsebool httpd_can_network_memcache httpd_can_network_memcache --> on