PHP, Memcached работает из командной строки, но не из Интернета

У меня есть 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